Je veux que tous les balises créées par l'utilisateur soient vérifiées (et renommées si nécessaire) pour satisfaire à nos règles.
Par exemple, si l'utilisateur a créé le tag "v1.2.3"
, il doit être automatiquement renommé "v1.02.03"
.Comment renommer automatiquement des tags en utilisant des crochets git?
Malheureusement, il n'existe aucun hook git qui est appelé par la commande git tag
.
C'est pourquoi j'ai implémenté le hook pre-push
, qui supprime l'ancien tag et en crée un nouveau (avec un nom modifié) sur le même commit.
Le problème est que git push --tags
envoie OLD TAGS à repo distant au lieu de NEW TAGS (malgré le fait que les anciennes étiquettes n'existent plus après que le hook pré-push les ait supprimées). Comment renommer automatiquement les étiquettes sur un dépôt local avant de les repasser à distance?
EDIT:
Je résolu mon problème en dupliquant tag-renommage-logique post-receive
crochet sur le côté serveur. Comme pour l'instant, le tag "v1.2.3" est renommé "v1.02.03" du côté client par le hook pre-push
, mais l'ancien nom de tag ("v1.2.3") est poussé vers le repo distant, et sur le repo distant " v1.2.3 "est à nouveau renommé en" v1.02.03 "par post-receive
hook. Maintenant, le client et le serveur ont le tag renommé.
Dois-je dire que je ne suis pas satisfait de ma solution?
La solution côté client pur est toujours la bienvenue.
Cela me semble un cas où les étiquettes n'ont pas été correctement supprimées. Pourriez-vous partager le code du crochet de pré-poussée ici? –
@mu - tags ont été correctement supprimés, je vois le message sur l'opération réussie imprimé par le crochet. Mon code contient la ligne suivante: 'os.execute ('git tag -d"' ..tagname .. '"&& git tag"' ..new_tag_name .. '"' ..commit .. '&& echo TAG RENOMMÉE | echo A ÉCHOUÉ POUR RENOMMER TAG ') '. Et je les vois réellement supprimés après que 'git push --tags' soit terminé. –