Comment envoyer une balise à un référentiel distant à l'aide de Git?


2218

J'ai cloné un référentiel Git distant sur mon ordinateur portable, puis je voulais ajouter une balise alors j'ai couru

git tag mytag master

Lorsque je cours git tagsur mon ordinateur portable, la balise mytags'affiche. Je veux ensuite pousser cela vers le référentiel distant, donc j'ai cette balise sur tous mes clients, alors je lance git pushmais j'ai reçu le message:

tout est à jour

Et si je vais sur mon bureau et que je cours git pull, git tagaucune balise ne s'affiche.

J'ai également essayé de faire une modification mineure sur un fichier du projet, puis de le pousser sur le serveur. Après cela, je pouvais tirer la modification du serveur vers mon ordinateur de bureau, mais il n'y a toujours pas de balise lors de l'exécution git tagsur mon ordinateur de bureau.

Comment puis-je pousser ma balise vers le référentiel distant pour que tous les ordinateurs clients puissent la voir?

Réponses:


1092

git push --follow-tags

C'est une option sensée introduite dans Git 1.8.3:

git push --follow-tags

Il pousse à la fois les validations et uniquement les balises qui sont à la fois:

  • annoté
  • accessible (un ancêtre) à partir des commits poussés

C'est sain parce que:

C’est pour ces raisons que --tags faut éviter.

Git 2.4 a ajouté l' push.followTagsoption d'activer ce drapeau par défaut que vous pouvez définir avec:

git config --global push.followTags true

16
Merci pour cela, il est logique de tout pousser en une seule fois, plutôt que d'avoir à pousser le contenu puis à pousser les balises séparément.
Shane

1
Il n'était pas clair pour moi immédiatement qu'il s'agissait d'une relation entre «annoté» et «accessible à partir des commits poussés». J'espérais qu'il pousserait toutes les balises accessibles, qu'elles soient annotées ou non. Peut-être modifier pour vous assurer que ce n'est pas un OU?
Gauthier

alors, comme je l'ai fait, je reviens à bitbucket, dois-je voir une liste de balises quelque part en plus de pouvoir la voir depuis la ligne de commande?
PositiveGuy

10
Cela ne fonctionne pas pour moi dans git 2.5.0, mais git push origin --tagsça marche .
nnyby

3
Merci pour l'astuce push.followTags. Je ne peux pas croire que ce ne soit pas le défaut par défaut. Sans cela, ne vous embêtez même pas à taguer, vous oublierez et sortirez des tags de synchronisation.
moodboom

3612

Pour envoyer une seule balise:

git push origin <tag_name>

Et la commande suivante devrait pousser toutes les balises ( non recommandé ):

git push --tags

427
Je recommande de ne pas utiliser ou de former les autres à l'utilisation git push --tagscar il peut être très très difficile de se débarrasser des mauvaises balises lorsque vos collègues sont formés pour pousser toutes les balises, car les gens continuent de pousser les vieilles mauvaises balises qu'ils ont localement chaque fois qu'ils le souhaitent pour pousser une nouvelle balise. Pour cette raison, je ne conseillerai qu'à tout le monde d'utiliser quelqu'un git push origin <tag_name>maintenant.
Scott Jungwirth du

43
Pour pousser un tag déplacé : git push origin <tag_name> --force
Bob Stein

38
Eh bien @ScottJungwirth, je pense qu'en tant que développeur, il faut être prudent. Sinon, vous pourriez aussi bien conseiller de ne pas enseigner du tout les commandes disponibles.
Willa

18
Si votre balise est identique à une branche distante et git pushéchoue avec error: src refspec <tag_name> matches more than one., vous pouvez la pousser commegit push origin tag <tag_name>
Volodymyr Sapsai

5
Eh bien, @Willa, la question était de "pousser une balise vers un dépôt distant". C'est donc git push origin <tag_name>une bien meilleure réponse à cette question. ;)
Wildcard

265

Pour pousser spécifique, une balise suit git push origin tag_name


99

Pour développer la réponse de Trevor , vous pouvez pousser une seule balise ou toutes vos balises à la fois.

Poussez une seule balise

git push <remote> <tag>

Ceci est un résumé de la documentation pertinente qui explique cela (certaines options de commande omises par souci de concision):

git push [[<repository> [<refspec>…]]

<refspec>...

Le format d'un <refspec>paramètre est… la référence source <src>, suivie de deux points :, suivie de la référence destination<dst>

Le <dst>tell qui ref sur le côté distant est mis à jour avec cette poussée ... Si :<dst>est omis, le même ref que<src> sera mis à jour ...

tag <tag>signifie la même chose que refs/tags/<tag>:refs/tags/<tag>.

Poussez tous vos tags à la fois

git push --tags <remote>
# Or
git push <remote> --tags

Voici un résumé de la documentation pertinente (certaines options de commande omises par souci de concision):

git push [--all | --mirror | --tags] [<repository> [<refspec>…]]

--tags

Toutes les références sous refs/tagssont poussées, en plus des références spécifiées explicitement sur la ligne de commande.


L'exemple laisse de côté le mot-clé tag. par exemple git push origin tag funny-tag-1.
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Vous n'en avez pas besoin. Vous poussez une seule balise à l'origine comme ceci: git push origin my-tag(je viens de l'essayer!)
Andres F.

J'utilisais la version 1.9.1 , et vous @AndresF. ?
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Version 2.10.2. C'est peut-être ça?
Andres F.

54

Les balises ne sont pas envoyées au référentiel distant par la commande git push. Nous devons envoyer explicitement ces balises au serveur distant en utilisant la commande suivante:

git push origin <tagname>

Nous pouvons pousser toutes les balises à la fois en utilisant la commande ci-dessous:

git push origin --tags

Voici quelques ressources pour des détails complets sur le balisage git:

http://www.cubearticle.com/articles/more/git/git-tag

http://wptheming.com/2011/04/add-remove-github-tags


51

Vous pouvez pousser toutes les balises locales par simple git push --tagscommande.

$ git tag                         # see tag lists
$ git push origin <tag-name>      # push a single tag
$ git push --tags                 # push all local tags 


15

J'utilise git push <remote-name> tag <tag-name>pour m'assurer que je pousse une balise. Je l' utilise comme: git push origin tag v1.0.1. Ce modèle est basé sur la documentation ( man git-push):

OPTIONS
   ...
   <refspec>...
       ...
       tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.

1
excellent, aurait dû être au sommet - car il garantit qu'une balise et non une branche est poussée par erreur.
samshers
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.