2012-07-03 3 views
17

Ich möchte sehen, welche Tags ich lokal habe, die auf einer bestimmten Fernbedienung nicht verfügbar sind. Wie kann ich das machen? Ich weiß, ich kann git push --tags tun, um alle von ihnen zu schieben. Wenn es jedoch einige Tags gibt, die ich nicht gepusht haben möchte, wie stelle ich sicher, dass ich einige nicht verpasst habe?So listen Sie nicht gedrückte Git-Tags auf

Antwort

22

können Sie folgende verwenden die Tags, um zu sehen, die lokal vorhanden sind, aber nicht in den angegebenen Remote:

git show-ref --tags | grep -v -F "$(git ls-remote --tags <remote name> | grep -v '\^{}' | cut -f 2)" 

Beachten Sie, dass git ls-remote zeigt sowohl die kommentierten Tag und das Commit verweist er auf mit ^{}, also brauchen wir um die Duplikate zu entfernen.

Eine Alternative ist die --dry-run/-n Flags git push zu verwenden:

git push --tags --dry-run 

Dies wird zeigen, was geschoben hätte verändert worden, aber nicht wirklich diese Änderungen vornehmen.

+1

Da Sie die Ausgabe von 'git ls-remote' verwenden aus der' show-ref' heraus zu filtern, gibt es nicht viel Schaden in verlassen der '^ {}' Zeilen. das lässt uns mit einem leicht einfacher: 'git show-ref --tags | grep -v -F "$ (git ls-remote -tags -ursprung | cut -f 2)" ' – phinze

+1

Dies ist derselbe Befehl, außer dass' 'durch' origin' ersetzt wurde. Verwenden Sie dies zum Kopieren/Einfügen: 'git show-ref --tags | grep -v -F "$ (git ls-remote -tags Ursprung | grep -v '\^{}' | cut -f 2)" ' – funroll

2

Für das Protokoll, ich bin mit einer Variante dieses mit dem ‚comm‘ Befehl:

comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2) 

ich es als git alias in .gitconfig verwenden, mit dem richtigen bash wie folgt zitiert:

[alias] 
    unpushed-tags = "!bash -c \"comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2)\"" 
Verwandte Themen