Récupérer une branche spécifique à l'aide de git

19

Je veux télécharger le code source de la branche master-next en utilisant git comme décrit dans le wiki Xilinx .

J'ai essayé ceci:

#git clone git://github.com/Xilinx/u-boot-xlnx/tree/master-next.git

Initialized empty Git repository in /home/Hannan/master-next/.git/
fatal: remote error:
Xilinx/u-boot-xlnx/tree/master-next is not a valid repository name
Email [email protected] for help

Même cela a échoué:

# git clone git://github.com/Xilinx/tree/master-next/u-boot-xlnx.git
Initialized empty Git repository in /home/Hannan/u-boot-xlnx/.git/
fatal: remote error:
Xilinx/tree/master-next/u-boot-xlnx is not a valid repository name
Email [email protected] for help

La commande qui fonctionne est:

 git clone git://github.com/Xilinx/u-boot-xlnx.git

Mais comment puis-je savoir que cela va effectivement récupérer la branche master-next et non la branche master ? Comment récupérer correctement une branche spécifique en utilisant git?

J'utilise RHEL 6, accessible via PuTTY.

user2799508
la source

Réponses:

16

Comme le message d'erreur vous l'indique, git cloneattend un référentiel git. Vous ne pouvez pas "ajouter" le nom d'une branche dans le chemin comme ça. Voir les branches dans git .

Vous pouvez cloner une seule branche (et c'est de l'histoire): git clone <url> --branch <branch> --single-branch

Tu vois git help clone.

Mais la commande clone que vous avez exécutée vous a donné une copie de l'ensemble du référentiel, vous pouvez voir les branches existantes avec git branchet plus de détails à leur sujet git show-branch.

Passez à la branche avec laquelle vous voulez git checkout branch-name.

Les premiers chapitres du livre Pro Git (disponibles en ligne) donnent plus de détails sur les commandes de base.

Leiaz
la source
"La commande clone que vous avez exécutée vous a donné une copie de tout le référentiel". Whole repository signifie que les deux branches ont fusionné?
user2799508
Non, ils ne sont pas fusionnés. Une branche dans git n'est pas une copie de tout le répertoire, comme expliqué ici .
Leiaz
Ce que j'ai fait est le suivant: "git clone -b master-next github.com/Xilinx/u-boot-xlnx.git " n'est-ce pas correct?
user2799508
Vous n'aviez plus besoin de clone. La commande que vous avez montrée dans votre question vous a donné le référentiel avec toutes les branches. Mais c'est correct aussi. C'est équivalent à faire git checkout master-nextaprès le clonage.
Leiaz
13

Cette commande devrait fonctionner:

$ git fetch origin [branch]

La commande ci-dessus ne récupère que les métadonnées du référentiel distant, elle ne fusionne pas les sources.

Si vous souhaitez récupérer et fusionner les sources, la commande serait:

$ git pull origin [branch]

Soyez prudent avec la branche où vous exécutez la commande de fusion. Ce sera là que les sources seront fusionnées.

raulsaeztapia
la source
Votre réponse est techniquement correcte, mais je pense qu'elle pourrait bénéficier d'une vérification / réécriture grammaticale.
Sami Laine
cela fonctionne bien thx
nwgat
4

les référentiels git contiennent toutes les branches (mais compressées et seulement les différences donc rarement un problème de taille).

Par conséquent, vous pouvez cloner l'intégralité du projet comme vous l'avez fait avec succès. Il s'agit d'un moyen standard d'obtenir un référentiel, même si vous n'êtes intéressé que par une seule branche.

La structure .git inclura alors toutes les branches effectuées sur ce référentiel.

Pour utiliser une branche spécifique, git checkout [branch_name] si la branche existe, les fichiers seront rendus disponibles localement (comme cela, les fichiers actuels dans les répertoires du projet).

git status montrera alors quelle branche est la branche courante, par exemple:

Selon Leiaz, on peut cloner une branche spécifique. En pratique, je n'ai jamais fait cela ni vu d'autres s'en servir. Sur des recherches plus poussées, je vois qu'il est relativement nouveau, ajouté dans git 1.7.10 (avril 2012): option 'git clone learn --single-branch' pour limiter le clonage à une seule branche (surprise!); les balises qui ne pointent pas dans l'historique de la branche ne sont pas récupérées. Par exemple:

git clone -b master-next --single-branch git://github.com/Xilinx/

entrez la description de l'image ici Ici, pour mon application "linker" je vérifie la branche v3.0.10

Michael Durrant
la source
1
Je ne l'ai jamais fait non plus, je me souviens avoir vu l'option. Je suppose que c'est rarement utilisé car les branches supplémentaires sont de taille "bon marché".
Leiaz