Question Télécharger un tag spécifique avec Git


J'essaie de comprendre comment je peux télécharger un tag particulier d'un dépôt Git - c'est une version derrière la version actuelle.

J'ai vu qu'il y avait une étiquette pour la version précédente sur la page Web de git, avec le nom d'objet de quelque chose long nombre hexadécimal.

Mais le nom de la version est "Tagged release 1.1.5"Selon le site.

J'ai essayé une commande comme celle-ci (avec les noms changés):

git clone http://git.abc.net/git/abc.git my_abc

Et j'ai eu quelque chose - un répertoire, un tas de sous-répertoires, etc.

Si c'est le référentiel entier, comment puis-je obtenir la version que je recherche? Si non, comment puis-je télécharger cette version particulière?


1657
2018-04-27 01:15


origine


Réponses:


$ git clone

vous donnera le référentiel entier.

Après le clone, vous pouvez lister les tags avec $ git tag -l puis passez en revue une étiquette spécifique:

$ git checkout tags/<tag_name>

Encore mieux, vérifiez et créez une branche (sinon vous serez sur une branche portant le nom du numéro de révision de la balise):

$ git checkout tags/<tag_name> -b <branch_name>

2555
2018-04-27 01:53



git clone --branch my_abc http://git.abc.net/git/abc.git

Cloner le repo et vous laisser sur le tag qui vous intéresse.

Documentation pour 1.8.0 de git clone États.

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


267
2018-06-14 09:33



Je ne suis pas un expert en git, mais je pense que ça devrait marcher:

git clone http://git.abc.net/git/abc.git
cd abc
git checkout my_abc 

OU

git clone http://git.abc.net/git/abc.git
cd abc
git checkout -b new_branch my_abc

La deuxième variante établit une nouvelle branche basée sur l'étiquette, ce qui vous permet d'éviter une «tête détachée». (manuel git-checkout)

Chaque repo git contient l'historique complet des révisions, donc le clonage du repo vous donne accès à la dernière validation, plus tout ce qui précède, y compris le tag que vous recherchez.


94
2018-04-27 01:54



Pour vérifier seulement une étiquette donnée pour le déploiement, j'utilise par exemple:

git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git

Cela semble être le moyen le plus rapide d'extraire le code d'un dépôt distant si l'on n'a qu'un intérêt dans le code le plus récent plutôt que dans un référentiel complet. De cette façon, il ressemble à la commande 'svn co'.


85
2017-07-28 02:35



Vous pouvez utiliser archive git pour télécharger une boule tar pour un tag donné ou un identifiant de commit:

git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar

Vous pouvez également exporter une archive zip d'une étiquette.

  1. Lister les tags:

    git tag
    
    0.0.1
    0.1.0
    
  2. Exporter un tag:

    git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
    
  3. Remarques:

    • Vous n'avez pas besoin de spécifier le format. Il sera repris par le nom du fichier de sortie.
    • Spécifier le préfixe fera exporter votre code dans un répertoire (si vous incluez une barre oblique).

71
2017-12-09 21:46



Utilisez le --single-branch commutateur  (disponible à partir de Git 1.7.10). La syntaxe est:

git clone -b <tag_name> --single-branch <repo_url> [<dest_dir>] 

Par exemple:

git clone -b 'v1.9.5' --single-branch https://github.com/git/git.git git-1.9.5

L'avantage: Git recevra des objets et (doit) résoudre les deltas pour la branche / étiquette spécifiée seulement - tout en vérifiant exactement le même nombre de fichiers! En fonction du référentiel source, cela vous permettra d'économiser beaucoup d'espace disque. (De plus, ce sera beaucoup plus rapide.)


40
2018-06-25 06:28



d'abord chercher toutes les balises dans cette télécommande spécifique

git fetch <remote> 'refs/tags/*:refs/tags/*'

ou il suffit de taper simplement

git fetch <remote>

Ensuite, vérifiez les tags disponibles

git tag -l

puis passez à cette étiquette spécifique en utilisant la commande ci-dessous

git checkout tags/<tag_name>

J'espère que cela vous aidera!


21
2017-09-10 18:57



J'ai vérifié le git checkout documentation, il a révélé une chose intéressante:

git checkout -b <nouveau_nom_branch> <point de départ>   , où <start_point> est le nom d'un commit   à partir de laquelle commencer la nouvelle branche;   Par défaut à HEAD

Nous pouvons donc mentionner le nom du tag (car le tag n'est rien d'autre qu'un nom de commit), disons:

>> git checkout -b 1.0.2_branch 1.0.2
plus tard, modifiez quelques fichiers 
  >> git push --tags

P.S: Dans Git, vous ne pouvez pas mettre à jour une étiquette directement (puisque la balise n'est qu'une étiquette pour une validation), vous devez extraire la même balise qu'une branche, puis la valider, puis créer une balise distincte.


14
2018-04-26 14:39



Si vos tags sont triables en utilisant le linux sort commande, utilisez ceci:

git tag | sort -n | tail -1

par exemple. si git tag résultats:

v1.0.1
v1.0.2
v1.0.5
v1.0.4

git tag | sort -n | tail -1 va sortir:

v1.0.5

git tag | sort -n | tail -2 | head -1 va sortir:

v1.0.4

(parce que vous avez demandé la deuxième étiquette la plus récente)

Pour vérifier l'étiquette, classez d'abord le repo, puis tapez:

git checkout v1.0.4

..ou n'importe quelle étiquette dont vous avez besoin.


14
2018-05-12 12:23



git fetch <gitserver> <remotetag>:<localtag>

=============================

Je viens de faire ça. D'abord je me suis assuré que je connaissais l'orthographe du nom de l'étiquette.

git ls-remote --tags gitserver; : or origin, whatever your remote is called

Cela m'a donné une liste de tags sur mon serveur git à choisir. L'affiche originale connaissait déjà le nom de son tag donc cette étape n'est pas nécessaire pour tout le monde. La sortie ressemblait à ceci, bien que la vraie liste fût plus longue.

8acb6864d10caa9baf25cc1e4857371efb01f7cd    refs/tags/v5.2.2.2
f4ba9d79e3d760f1990c2117187b5010e92e1ea2    refs/tags/v5.2.3.1
8dd05466201b51fcaf4ca85897347d82fcb29518    refs/tags/Fix_109
9b5087090d9077c10ba22d99d5ce90d8a45c50a3    refs/tags/Fix_110

J'ai choisi le tag que je voulais et je l'ai cherché et rien de plus comme suit.

git fetch gitserver Fix_110

J'ai ensuite tagué ceci sur ma machine locale, donnant à mon tag le même nom.

git tag Fix_110 FETCH_HEAD

Je ne voulais pas cloner le dépôt distant comme d'autres personnes l'ont suggéré, car le projet sur lequel je travaille est grand et je veux développer dans un environnement propre et agréable. Je pense que cela est plus proche des questions initiales "J'essaie de comprendre comment télécharger un TAG PARTICULIER" que la solution qui suggère de cloner l'ensemble du dépôt. Je ne vois pas pourquoi n'importe qui devrait avoir une copie du code source de Windows NT et Windows 8.1 s'ils veulent regarder le code source de DOS 0.1 (par exemple).

Je ne voulais pas non plus utiliser CHECKOUT comme d'autres l'ont suggéré. J'ai fait vérifier une succursale et je ne voulais pas l'affecter. Mon intention était d'aller chercher le logiciel que je voulais pour que je puisse choisir quelque chose et l'ajouter à mon développement.

Il existe probablement un moyen de récupérer le tag lui-même plutôt qu'une simple copie du commit marqué. J'ai dû marquer le commit récupéré moi-même. EDIT: Ah oui, je l'ai trouvé maintenant.

git fetch gitserver Fix_110:Fix_110

Où vous voyez le deux-points, c'est remote-name: nom-local et ici, ce sont les noms des tags. Cela fonctionne sans perturber l'arbre de travail, etc. Il semble juste copier des choses de la télécommande vers la machine locale afin que vous ayez votre propre copie.

git fetch gitserver --dry-run Fix_110:Fix_110

Avec l'option --dry-run ajoutée, vous pourrez voir ce que la commande ferait, si vous voulez vérifier ce que vous voulez. Donc je suppose qu'un simple

git fetch gitserver remotetag:localtag

est la vraie réponse.

=

Une note séparée sur les tags ... Quand je commence quelque chose de nouveau, je marque généralement le dépôt vide après git init, car

git rebase -i XXXXX 

nécessite une validation, et la question se pose "comment vous rebassez les changements qui incluent votre premier changement de logiciel?" Donc, quand je commence à travailler, je fais

git init
touch .gitignore
[then add it and commit it, and finally]
git tag EMPTY

c'est-à-dire créer un commit avant mon premier vrai changement et ensuite l'utiliser plus tard

git rebase -i EMPTY 

si je veux rebaser tout mon travail, y compris le premier changement.


13
2017-12-11 17:28



Travaillant à partir de la réponse de Peter Johnson, je me suis créé un joli petit alias:

alias gcolt="git checkout \`git tag | sort -V | tail -1\`"

aka 'git checkout dernier tag'.

Cela dépend de la version GNU de sorte, qui gère de façon appropriée des situations comme celle que lOranger a signalé:

v1.0.1
...
v1.0.9
v1.0.10

Si vous êtes sur un mac, brew install coreutils puis appelez gsort à la place.


7
2018-03-15 16:41