631 votes

Supprimez ceux qui ne sont plus d'actualité !

Nous utilisons des balises dans git dans le cadre de notre processus de déploiement. De temps à autre, nous voulons nettoyer ces balises en les supprimant à partir de notre dépôt distant.

C'est assez simple. Un utilisateur supprime le tag local et de la distance de la balise dans un ensemble de commandes. Nous avons un petit script shell qui combine à la fois des mesures.

Le 2ème (3ème, 4ème,...), l'utilisateur a des balises qui ne sont plus réfléchi sur la télécommande.

Je suis à la recherche d'une commande semblable à git remote prune origin qui nettoie localement le suivi des branches pour lesquelles la distance de la branche a été supprimé.

Sinon, une simple commande de liste à distance tags peuvent être utilisés pour comparer les locaux étiquettes de retour via git tag -l.

1314voto

Richard W Points 1799

C'est la grande question, j'avais été demandais la même chose.

Je n'ai pas envie d'écrire un script donc cherché une autre solution. La clé est de découvrir que vous pouvez supprimer un tag en local, puis de l'utilisation de git fetch pour "récupérer" à partir du serveur distant. Si la balise n'existe pas sur la télécommande, puis il demeurera supprimé.

Ainsi, vous devez taper deux lignes dans l'ordre:

git tag -l | xargs git tag -d
git fetch

Ces:

  1. Supprimer toutes les balises du local des pensions. FWIW, xargs lieux chaque balise de sortie par "tag -l" sur la ligne de commande pour "tag -d". Sans cela, git ne sera pas effacer quoi que ce soit car il ne veut pas lire stdin (idiot git).

  2. Chercher tous les tags actifs à partir de la télécommande repo.

Ceci fonctionne même un régal sur Windows.

309voto

loganfsmyth Points 25483

Avec les versions récentes de git, vous pouvez utiliser ceci :

83voto

Mike West Points 3124

Bonne question. :) Je n'ai pas de réponse complète...

Cela dit, vous pouvez obtenir une liste de télécommande via les balises git ls-remote. À la liste de balises dans le référentiel référencé par origin, vous feriez exécuter:

git ls-remote --tags origin

Renvoie une liste de hachages et convivial noms de balise, comme:

94bf6de8315d9a7b22385e86e1f5add9183bcb3c        refs/tags/v0.1.3
cc047da6604bdd9a0e5ecbba3375ba6f09eed09d        refs/tags/v0.1.4
...
2f2e45bedf67dedb8d1dc0d02612345ee5c893f2        refs/tags/v0.5.4

Vous pourriez certainement mettre ensemble un script bash pour comparer les tags générés par cette liste avec les tags que vous avez localement. Jetez un oeil à l' git show-ref --tags, ce qui génère les noms de balise dans la même forme qu' git ls-remote).


En aparté, git show-ref a une option qui fait le contraire de ce que vous souhaitez. La commande suivante liste de toutes les balises sur la distance que vous n'avez pas ont localement:

git ls-remote --tags origin | git show-ref --tags --exclude-existing

3voto

Vient d’ajouter une commande sync-local-tags de git à fourche Gem pivotal_git_scripts sur GitHub :

https://github.com/kigster/git_scripts

Installer la gem, puis exécutez « git sync-local-tags » dans votre référentiel pour supprimer les balises locales qui n’existent pas sur la télécommande.

Alternativement, vous pouvez simplement installer ce script ci-dessous et appelez-le « git-sync-local-tags » :


-1voto

Edson Medina Points 2555
Vous recherchez

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X