2012-07-03 11 views
17

Chciałbym zobaczyć, które tagi mam lokalnie, które nie są dostępne na konkretnym pilocie. Jak mogę to zrobić? Wiem, że mogę zrobić git push --tags, aby przeforsować wszystkie. Jeśli jednak są jakieś tagi, których nie chcę popchnąć, jak mogę się upewnić, że niektórych nie przegapiłem?Jak wyświetlić nieumeblowane tagi Git

Odpowiedz

22

można użyć następujących zobaczyć znaczniki, które istnieją lokalnie, ale nie w określonych pilota:

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

pamiętać, że git ls-remote wystawach zarówno uwagami znacznik i popełnić to wskazuje ze ^{}, więc musimy aby usunąć duplikaty.

Alternatywą jest użycie --dry-run/-n flagi git push:

git push --tags --dry-run 

To pokaże jakie zmiany zostałyby popychany, ale nie będzie faktycznie wprowadzić te zmiany.

+1

Ponieważ używasz wyjścia 'git ls-remote' do odfiltrowania z' show-ref', nie ma wielkiej szkody w pozostawieniu linii '^ {}'. Pozostawia nam to nieco prostsze: 'git show-ref --tags | grep -v -F "$ (git ls-remote --tags origin | cut -f 2)" ' – phinze

+1

To jest dokładnie to samo polecenie, z wyjątkiem' 'zamienionym na' origin'. Użyj tego do skopiowania/wklejenia: 'git show-ref --tags | grep -v -F "$ (git ls-remote --tags origin | grep -v '\^{}' | cut -f 2)" ' – funroll

2

Dla przypomnienia, używam wariant to za pomocą polecenia „comm”:

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

używam go jako aliasu git w .gitconfig z właściwego bash cytowanie tak:

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