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?



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.


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

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

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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.