Comment git cloner une balise spécifique

192

Depuis la page de manuel de git-clone (1)

--branch peut également prendre des balises et détacher le HEAD à ce commit dans le référentiel résultant.

j'ai essayé

git clone --branch <tag_name> <repo_url>

Mais ça ne marche pas. Il renvoie:

warning: Remote branch 2.13.0 not found in upstream origin, using HEAD instead

Comment utiliser ce paramètre?

Jiang Jun
la source
duplication possible de Télécharger un tag spécifique avec Git
Victor Sergienko
2
Vous avez raison, mais peu de différence. Quand je pose cette question, dans ma situation, je devais le faire en une seule ligne cloneet je devais l'utiliser , et j'étais coincé à «pourquoi --branch ne fonctionne pas». La meilleure réponse de cette URL utilisée clone-> checkout, qui ne peut pas résoudre ma question. :)
Jiang juin

Réponses:

327
git clone --depth 1 --branch <tag_name> <repo_url>

--depth 1 est facultatif mais si vous n'avez besoin que de l'état de cette révision, vous voudrez probablement sauter le téléchargement de tout l'historique jusqu'à cette révision.

Erik Saunier
la source
92
Pour info: spécifiez également --depth 1pour éviter de télécharger des commits non actuels.
Acumenus
1
Fonctionne bien dans git 1.8.4.1
taco
Cela ne marche pas. Après le clonage si vous le faites git tag, aucune balise n'est affichée
L'utilisateur sans chapeau
Notez que si la référence est ambiguë et que vous avez une branche et une balise portant le même nom, cela préférera la branche.
Keith Smiley
1
Qu'est-ce qu'un commit non courant?
d512 le
74

Utilisez l' --single-branchoption pour cloner uniquement l'historique menant à la pointe de la balise . Cela évite que beaucoup de code inutile ne soit cloné.

git clone <repo_url> --branch <tag_name> --single-branch
Sahil Kalra
la source
3
Est --single-branchéquivalent à--depth 1 ?
igracia le
14
Non, ce n'est pas équivalent. --single-branch clone l'historique d'une branche entière. Avec --depth 1, aucun historique n'est cloné.
Martin Krung
2
Est également --single-branchimplicite quand --depthest utilisé. À partir du manuelWhen creating a shallow clone with the --depth option, this is the default
koda
33
git clone -b 13.1rc1-Gotham  --depth 1  https://github.com/xbmc/xbmc.git
Cloning into 'xbmc'...
remote: Counting objects: 17977, done.
remote: Compressing objects: 100% (13473/13473), done.
Receiving objects:  36% (6554/17977), 19.21 MiB | 469 KiB/s    

Sera plus rapide que:

git clone https://github.com/xbmc/xbmc.git
Cloning into 'xbmc'...
remote: Reusing existing pack: 281705, done.
remote: Counting objects: 533, done.
remote: Compressing objects: 100% (177/177), done.
Receiving objects:  14% (40643/282238), 55.46 MiB | 578 KiB/s

Ou

git clone -b 13.1rc1-Gotham  https://github.com/xbmc/xbmc.git
Cloning into 'xbmc'...
remote: Reusing existing pack: 281705, done.
remote: Counting objects: 533, done.
remote: Compressing objects: 100% (177/177), done.
Receiving objects:  12% (34441/282238), 20.25 MiB | 461 KiB/s
RzR
la source
6
--depth 1est un joyau, tellement de gens téléchargent toute l'histoire de git juste pour utiliser le HEAD.
MGP
2
--depth 1devrait être fait par défaut; si quelqu'un essaie de récupérer un commit précédent, il devrait être invité à télécharger le reste.
Jikku Jose
3

Utilisez la commande

git clone --help

pour voir si votre git prend en charge la commande

git clone --branch tag_name

Sinon, procédez comme suit:

git clone repo_url 
cd repo
git checkout tag_name
maths jeunes
la source
1

Le clonage d'une balise spécifique peut renvoyer l'état «HEAD détaché» .

Pour contourner le problème, essayez d'abord de cloner le dépôt, puis d'extraire une balise spécifique. Par exemple:

repo_url=https://github.com/owner/project.git
repo_dir=$(basename $repo_url .git)
repo_tag=0.5

git clone --single-branch $repo_url # using --depth 1 can show no tags
git --work-tree=$repo_dir --git-dir=$repo_dir/.git checkout tags/$repo_tag

Remarque: depuis Git 1.8.5 , vous pouvez utiliser -C <path>, au lieu de --work-treeet --git-dir.

Noam Manos
la source