2010-09-19 12 views
238

Jestem świadomy tego, że git push --tags jest oddzielną operacją dla zwykłego starego git push. Przesuwanie tagów powinno być świadomym wyborem, ponieważ nie chcesz przypadkowo popchnąć jednego. W porządku. Ale czy istnieje sposób, aby popchnąć oba razem? (Oprócz git push && git push --tags).Jednoczesne przyciśnięcie git & tagi

+1

Jaki jest Twój problem z 'git wypychania && git pchania --tags'? – fuz

+13

Nic szczególnego, jest wolniejsze, ponieważ połączenie musi zostać nawiązane dwukrotnie. –

+11

Zobacz moją zaktualizowaną odpowiedź poniżej: istnieje nowa opcja '--follow-tags' od git 1.8.3 – VonC

Odpowiedz

349

Aktualizacja maja 2015

Od git 2.4.1 można zrobić

git config --global push.followTags true 

Jeśli ustawione na true włączyć opcję --follow tagów domyślnie. Możesz zmienić tę konfigurację w czasie push, podając -no-follow-tags.

Aktualizacja Kwiecień 2013

Od git 1.8.3 (April 22d, 2013), nie trzeba już robić 2 polecenia naciskać gałęzie, a następnie wcisnąć tagów:

Nowa opcja "--follow-tags" mówi " git push "do przesuń odpowiednie znaczniki z adnotacjami podczas przesuwania gałęzi na.

Teraz można spróbować podczas pchania nowe rewizje:

git push --follow-tags 

To nie będzie domagał wszystko lokalnych tagów choć tylko jedną odwołuje zatwierdzeń, które są wypychane z git push.

Git 2.4.1+ (Q2 2015) wprowadzi opcję push.followTags: patrz "How to make “git push” include tags within a branch?".

odpowiedź oryginalny, wrzesień 2010

Opcja nuklearna byłaby git push --mirror, który pchnie wszystkie pozycje literatury pod refs/.

Można również nacisnąć tylko jeden znacznik z aktualnej gałęzi popełnić:

git push origin : v1.0.0 

Można łączyć opcję --tags z refspec jak:

git push origin --tags : 

(od --tags oznacza: Wszystkie pozycje literatury pod refs/tags są popychane, oprócz refspecs jawnie wymienionych w linii poleceń)


Trzeba również wpis "Pushing branches and tags with a single "git push" invocation"

Poręczny wskazówka została właśnie wysłana do Git mailing list Zoltán Füzesi:

używam .git/config aby rozwiązać ten:

[remote "origin"] 
    url = ... 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    push = +refs/heads/* 
    push = +refs/tags/* 

Po dodaniu tych linii git push origin prześle wszystkie twoje gałęzie i znaczniki. Jeśli chcesz przesłać tylko niektóre z nich, możesz je wyliczyć.

Jeszcze tego nie wypróbowałem, ale wygląda na to, że może się przydać, dopóki nie zostanie dodany inny sposób popychania gałęzi i tagów jednocześnie do git push.
Z drugiej strony, nie mam nic przeciwko wpisując:

$ git push && git push --tags 

Beware, jak commented przez Aseem Kishore

push = +refs/heads/* będzie siły pcha wszystkich gałęziach.

To trochę mnie teraz, więc FYI.


René Scheibe dodaje this interesting comment:

Parametr --follow-tags jest mylące, ponieważ tylko znaczniki pod .git/refs/tags są uznawane.
Po uruchomieniu git gc znaczniki są przenoszone z .git/refs/tags na .git/packed-refs. Następnie git push --follow-tags ... nie działa już tak, jak należy.

+0

Dzięki za szczegółową odpowiedź. Obawiam się, że 'git push --tags:' nie działa dla mnie, ale 'git push origin --tags:' ** did **. Nie jestem pewien, czy to jest konfiguracja na moim końcu, czy literówka na twojej. –

+0

@Will: więcej literówka po mojej stronie. Naprawiłem to w mojej odpowiedzi. – VonC

+2

Jeden komentarz na temat postu, do którego odnośnik trafnie wskazuje, że 'push = + refs/heads/*' line * force * -bodyhes * all * your branches. Trochę mnie teraz, więc FYI. –

-5

Działa to dla mnie:

git push --tags origin master