J'essaie de comprendre comment je peux télécharger une balise particulière d'un référentiel Git - c'est une version derrière la version actuelle.
J'ai vu qu'il y avait une balise pour la version précédente sur la page Web de git, avec un nom d'objet quelque chose de long 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 des noms modifiés):
git clone http://git.abc.net/git/abc.git my_abc
Et j'ai obtenu quelque chose - un répertoire, un tas de sous-répertoires, etc.
Si c'est l'ensemble du référentiel, comment puis-je obtenir la version que je recherche? Sinon, comment télécharger cette version particulière?
clone -b "Tagged release 1.1.5" http://git.abc.net/git/abs.git my_abc
. Cela ne fonctionnera que si vous n'avez pas de succursale avec le même nom bien sûr (selon votre méthodologie, cela peut ne jamais arriver).git checkout -b new-branch tag-name
. Maintenant, clonez votre nouvelle branche. Quand nous le voulons, nous pouvons supprimer la nouvelle branche.Réponses:
vous donnera l'ensemble du référentiel.
Après le clone, vous pouvez répertorier les balises avec
$ git tag -l
puis extraire une balise spécifique:Encore mieux, passez à la caisse et créez une branche (sinon vous serez sur une branche nommée d'après le numéro de révision de la balise):
la source
-b
drapeau indiquant à git de créer une nouvelle branche et spécifiez un nom de branche:git checkout <tag_name> -b <branch_name>
1.8.3.5
et plus récente, le--branch <tag ref>
devrait vous permettre de télécharger le référentiel à partir de votre en<tag ref>
tant que repo HEAD; combiné avec--depth 1
fera une vérification d'étiquette peu profonde. Voir stackoverflow.com/a/21699307/1695680Clonera le dépôt et vous laissera sur le tag qui vous intéresse.
Documentation pour 1.8.0 des états du clone git .
la source
--depth 1
pour éviter de télécharger les validations non actuelles.git clone --branch my_abc http://git.abc.net/git/abc.git -b quality
qualité est le nom de la branche que nous voulons btw.Pour vérifier uniquement une balise donnée pour le déploiement, j'utilise par exemple:
Cela semble être le moyen le plus rapide d'extraire le code d'un référentiel distant si l'on ne s'intéresse qu'au code le plus récent au lieu d'un référentiel complet. De cette façon, il ressemble à la commande «svn co».
Remarque: Selon le manuel de Git , le passage du
--depth
drapeau implique--single-branch
par défaut.la source
--depth n
implique--single-branch
. Vous n'avez pas besoin des deux.Je ne suis pas un expert git, mais je pense que cela devrait fonctionner:
OU
La deuxième variante établit une nouvelle branche basée sur la balise, ce qui vous permet d'éviter une «tête détachée». (manuel git-checkout)
Chaque dépôt git contient l'historique complet des révisions, donc le clonage du dépôt vous donne accès à la dernière validation, ainsi qu'à tout ce qui précède, y compris la balise que vous recherchez.
la source
git checkout -b b1.5.0 v1.5.0
lors de la vérification d'une version dans une branche «gh-pages» pour réussir à pousser vers Github Pages. Ce Gist que j'ai rédigé pourrait aider les autres re: branch / tag / submodulescd
entrerabc/
avant de pouvoir commander une succursalecd
.Vous pouvez utiliser git archive pour télécharger une boule tar pour une balise donnée ou un id de commit:
Vous pouvez également exporter une archive zip d'une balise.
Étiquettes de liste:
Exporter une balise:
Remarques:
la source
git archive
me demande un mot de passe quand tout ce que je veux faire est de télécharger à partir d'un dépôt public. Comment puis-je lui faire utiliser http au lieu de ssh?fatal: Operation not supported by protocol.
etUnexpected end of command stream
. Alternativement, il peut également renvoyer l'fatal: The remote end hung up unexpectedly
erreur.Utilisez le
--single-branch
commutateur (disponible à partir de Git 1.7.10) . La syntaxe est:Par exemple:
L'avantage: Git recevra des objets et (devra) résoudre les deltas pour la branche / balise spécifiée uniquement - tout en vérifiant exactement la même quantité de fichiers! Selon le référentiel source, cela vous fera économiser beaucoup d'espace disque. (De plus, ce sera beaucoup plus rapide.)
la source
récupérer d'abord toutes les balises de cette télécommande spécifique
ou tapez simplement
Vérifiez ensuite les balises disponibles
puis passez à cette balise spécifique en utilisant la commande ci-dessous
J'espère que cela vous aidera!
la source
git tag
ajoutera une balise alors qu'ellegit tag -l
répertorie les balises disponiblesSi vos balises sont triables à l'aide de la
sort
commande linux , utilisez ceci:par exemple. si
git tag
retourne:git tag | sort -n | tail -1
affichera:git tag | sort -n | tail -2 | head -1
affichera:(parce que vous avez demandé la deuxième balise la plus récente)
pour retirer la balise, clonez d'abord le dépôt, puis tapez:
..ou quelle que soit la balise dont vous avez besoin.
la source
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags
git checkout `git tag | sort -n | tail -1`
sort -V
place desort -n
. Le premier gère correctement les versions, qui ne sont pas nécessairement numériques, par exemple "1.2.3". Il comprend également que "0.4.10" va après "0.4.1" et non après "0.4.2" qui-n
vous donnera.J'ai vérifié la documentation de git checkout , cela a révélé une chose intéressante:
Nous pouvons donc mentionner le nom de la balise (car la balise n'est rien d'autre qu'un nom de commit) comme, par exemple:
PS: Dans Git, vous ne pouvez pas mettre à jour une balise directement (car la balise n'est qu'une étiquette pour une validation), vous devez extraire la même balise qu'une branche, puis vous y engager, puis créer une balise séparée.
la source
===================================
Je viens de faire ça. Je me suis d'abord assuré que je connaissais l'orthographe du nom de la balise.
Cela m'a donné une liste de balises 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 soit plus longue.
J'ai choisi la balise que je voulais et je l'ai récupérée et rien de plus comme suit.
J'ai ensuite marqué cela sur ma machine locale, donnant à ma balise le même nom.
Je ne voulais pas cloner le référentiel 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 originales "J'essaie de comprendre comment télécharger UN ÉTIQUETTE PARTICULIÈRE" que la solution qui suggère de cloner l'ensemble du référentiel. Je ne vois pas pourquoi quelqu'un devrait avoir une copie du code source de Windows NT et Windows 8.1 s'ils veulent regarder le code source 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 affecter cela. Mon intention était de récupérer le logiciel que je voulais pour pouvoir choisir quelque chose et l'ajouter à mon développement.
Il existe probablement un moyen de récupérer la balise elle-même plutôt qu'une simple copie de la validation qui a été balisée. J'ai dû marquer moi-même le commit récupéré. EDIT: Ah oui, je l'ai trouvé maintenant.
Où vous voyez les deux points, c'est nom-distant: nom-local et ici ce sont les noms des balises. Cela fonctionne sans perturber l'arborescence de travail, etc. Il semble simplement copier des éléments de la télécommande vers la machine locale afin que vous ayez votre propre copie.
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
est la vraie réponse.
=
Une note séparée sur les balises ... Quand je commence quelque chose de nouveau, je marque généralement le référentiel vide après git init, car
nécessite un commit, et la question se pose "comment pouvez-vous rebaser les changements qui incluent votre premier changement de logiciel?" Donc, quand je commence à travailler, je le fais
c'est-à-dire créer un commit avant mon premier vrai changement et ensuite l'utiliser plus tard
si je veux rebaser tout mon travail, y compris le premier changement .
la source
À partir de la réponse de Peter Johnson, je me suis créé un joli petit alias:
alias «dernière balise git checkout».
Cela s'appuie sur la version GNU, qui gère de manière appropriée des situations comme celle que lOranger a souligné:
Si vous êtes sur un Mac,
brew install coreutils
puis appelez gsort à la place.la source
essayer:
la source
Extraire les balises
Si vous souhaitez afficher les versions des fichiers vers lesquels pointe une balise, vous pouvez effectuer une extraction git, bien que cela place votre référentiel dans l'état "HEAD détaché", ce qui a des effets secondaires néfastes:
Dans l'état "HEAD détaché", si vous apportez des modifications puis créez une validation, la balise restera la même, mais votre nouvelle validation n'appartiendra à aucune branche et sera inaccessible, sauf par le hachage de validation exact. Ainsi, si vous devez apporter des modifications (par exemple, si vous corrigez un bogue sur une ancienne version), vous souhaiterez généralement créer une branche:
Si vous faites cela et faites un commit, votre branche version2 sera légèrement différente de votre balise v2.0.0 car elle avancera avec vos nouvelles modifications, alors soyez prudent.
la source
Je le fais via l'API github:
la source