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
17
A
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.
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)\""
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
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