Question Comment renommer un tag Git?


Aujourd'hui, je regardais à travers les journaux pour un projet et j'ai réalisé que j'avais copié un nom de tag il y a quelque temps. Est-il possible de renommer le tag? Google n'a rien trouvé d'utile.

Je me rends compte que je pourrais vérifier la version étiquetée et faire un nouveau tag, j'ai même essayé. Mais cela semble créer un objet tag qui n'est pas tout à fait correct. Pour un,

git tag -l

le liste en désordre par rapport à tous les autres tags. Je n'ai aucune idée si cela est significatif, mais cela me porte à croire que le nouvel objet d'étiquette n'est pas tout à fait ce que je veux. Je peux vivre avec ça, parce que je m'intéresse vraiment au fait que le nom de la balise corresponde à la documentation, mais je préfère la faire «bien», en supposant qu'il existe une bonne façon de procéder.


966
2018-06-22 18:09


origine


Réponses:


Voici comment je renommer un tag old à new:

git tag new old
git tag -d old
git push origin :refs/tags/old
git push --tags

Le signe deux-points de la commande push supprime la balise du référentiel distant. Si vous ne le faites pas, Git créera l'ancienne étiquette sur votre machine lorsque vous tirerez.

Enfin, assurez-vous que les autres utilisateurs suppriment la balise supprimée. Veuillez leur dire (collègues) d'exécuter la commande suivante:

git pull --prune --tags

1640
2018-04-19 16:51



La question initiale était de savoir comment renommer un tag, ce qui est facile: d'abord créer NEW en tant qu'alias de OLD: git tag NEW OLD puis supprimez OLD: git tag -d OLD.

La citation concernant «la voie Git» et (in) sanity est hors base, car il s'agit de préserver un nom de tag, mais en le faisant référence à un autre état du référentiel.


270
2017-12-09 13:34



En plus des autres réponses:

D'abord, vous devez construire un alias du vieux nom du tag, pointant vers le commit d'origine:

git tag new old^{}

Ensuite, vous devez supprimer l'ancien localement:

git tag -d old

Ensuite, supprimez le tag sur votre (vos) emplacement (s) distant (s):

# Check your remote sources:
git remote -v
# The argument (3rd) is your remote location,
# the one you can see with `git remote`. In this example: `origin`
git push origin :refs/tags/old

Enfin, vous devez ajouter votre nouvelle balise à l'emplacement distant. Jusqu'à ce que vous l'ayez fait, le (s) nouveau (x) tag (s) ne sera pas être ajouté:

git push origin --tags

Itérer ceci pour chaque endroit éloigné.

Soyez conscient, de la implications qu'un changement de Tag Git a aux consommateurs d'un paquet!


100
2018-04-27 11:42



Si c'est publié, vous ne pouvez pas le supprimer (sans risquer d'être goudronné et plissé, c'est-à-dire). La "voie Git" est de faire:

La chose saine. Juste admettre que vous avez foiré, et utilisez un nom différent. D'autres ont déjà vu un nom de tag, et si vous gardez le même nom, vous pouvez être dans la situation où deux personnes ont la "version X", mais en réalité ils ont des "X" différents. Appelez-le simplement "X.1" et faites-le avec.

Alternativement,

La chose folle. Vous voulez vraiment appeler la nouvelle version "X", même si d'autres ont déjà vu l'ancienne version. Il suffit donc d'utiliser à nouveau git-tag -f, comme si vous n'aviez pas déjà publié l'ancien.

C'est tellement fou parce que:

Git ne change pas (et ne devrait pas) changer les étiquettes derrière les utilisateurs. Donc, si quelqu'un a déjà eu l'ancienne balise, faire un coup de git sur votre arbre ne devrait pas seulement les faire écraser l'ancien.

Si quelqu'un a reçu une étiquette de validation de votre part, vous ne pouvez pas simplement changer la balise en mettant à jour la vôtre. C'est un gros problème de sécurité, dans la mesure où les gens DOIVENT pouvoir faire confiance à leurs noms de tags. Si vous voulez vraiment faire la chose insensée, vous devez juste faire une fessée, et dire aux gens que vous avez foiré.

Toute la courtoisie de pages de manuel.


25
2018-06-22 18:10



Cette page wiki a cette doublure intéressante, qui nous rappelle que nous pouvons pousser plusieurs refs:

git push origin <refs/tags/old-tag>:<refs/tags/new-tag> :<refs/tags/old-tag> && git tag -d <old-tag>

et demander à d'autres cloneurs de faire git pull --prune --tags

Donc l'idée est de pousser:

  • <new-tag> pour tous les commits référencés par <old-tag>: <refs/tags/old-tag>:<refs/tags/new-tag>,
  • la suppression de <old-tag>: :<refs/tags/old-tag>

Voir comme un exemple "Changer la convention de dénomination des balises dans un dépôt git?".


22
2018-06-16 14:20



En plus des autres réponses, j'ai ajouté un alias pour tout faire en une seule étape, avec une sensation de commande de déplacement plus familière. L'argument 1 est l'ancien nom de l'étiquette, l'argument 2 est le nouveau nom de l'étiquette.

[alias]
    renameTag = "!sh -c 'set -e;git tag $2 $1; git tag -d $1;git push origin :refs/tags/$1;git push --tags' -"

Usage:

git renametag old new

19
2017-11-17 15:00



Pour les aventuriers, cela peut être fait en une seule commande:

mv .git/refs/tags/OLD .git/refs/tags/NEW

6
2017-07-13 09:24



La partie la plus facile consiste à renommer les tags locaux. La partie la plus difficile est celle qui est éloignée. L'idée derrière cette astuce est de dupliquer l'ancien tag / branche à un nouveau et supprimer l'ancien, sans checkout.

Renommer la balise distante / Branche distante → conversion de balise: (Remarquer: :refs/tags/)

git push <remote_name> <old_branch_or_tag>:refs/tags/<new_tag> :<old_branch_or_tag>

Renommer une branche distante / Balise distante → conversion de branche: (Remarquer: :refs/heads/)

git push <remote_name> <old_branch_or_tag>:refs/heads/<new_branch> :<old_branch_or_tag>

Sortie renommant un tag distant:

D:\git.repo>git push gitlab App%2012.1%20v12.1.0.23:refs/tags/App_12.1_v12.1.0.23 :App%2012.1%20v12.1.0.23

Total 0 (delta 0), reused 0 (delta 0)
To https://gitlab.server/project/repository.git
 - [deleted]               App%2012.1%20v12.1.0.23
 * [new tag]               App%2012.1%20v12.1.0.23 -> App_12.1_v12.1.0.23

1
2018-02-17 13:41