Zdaję sobie sprawę z powodu, że git push --tags
jest to osobna operacja niż zwykła stara git push
. Pchanie tagów powinno być świadomym wyborem, ponieważ nie chcesz przypadkowego popchnięcia. W porządku. Ale czy istnieje sposób, by połączyć oba te elementy? (Oprócz git push && git push --tags
.)
387
git push && git push --tags
?--follow-tags
opcja od git 1.8.3--tags
nie rozróżnia także źródłaOdpowiedzi:
Aktualizacja maja 2015 r
Od wersji 2.4.1 możesz to zrobić
Jak zauważono w tym wątku przez Matta Rogersa, który odpowiedział Wesowi Hurdowi :
--follow-tags
wypycha tylko tagi z adnotacjami .Zostałoby to popchnięte (w przeciwieństwie do
git tag <tagname>
lekkiego tagu, który nie zostałby popchnięty, jak wspomniałem tutaj )Aktualizacja kwietnia 2013 r
Od git 1.8.3 (kwiecień 22d, 2013) , nie będzie już trzeba zrobić 2 polecenia naciskać gałęzie, a następnie wcisnąć tagi :
Możesz teraz spróbować, wypychając nowe zatwierdzenia:
Nie wypchnie to jednak wszystkich lokalnych znaczników, tylko tych, do których odwołują się commits, które są wypychane za pomocą
git push
.Git 2.4.1+ (II kwartał 2015 r.) Wprowadzi opcję
push.followTags
: zobacz „ Jak zrobić”, abygit push
zawierał tagi w oddziale? ”.Oryginalna odpowiedź, wrzesień 2010 r
Opcja nuklearna byłaby
git push --mirror
, która zepchnie wszystkie referencje podrefs/
.Możesz również wcisnąć tylko jeden tag z bieżącym zatwierdzeniem gałęzi:
Możesz połączyć
--tags
opcję z refspec, takim jak:(ponieważ
--tags
oznaczarefs/tags
to, że wszystkie referencje poniżej są wypychane, oprócz referencji wyraźnie wymienionych w wierszu poleceń )Masz również ten wpis „ Pchanie gałęzi i tagów za pomocą pojedynczego wywołania „ git push ”
Strzeż się , jak skomentował przez Aseem Kishore
push = +refs/heads/*
będzie na siłę wpycha wszystkie swoje oddziały .René Scheibe dodaje ten interesujący komentarz :
źródło
push = +refs/heads/*
linia siła -pushes wszystkie swoje oddziały. To mnie teraz ugryzło, więc FYI.--follow-tags
flaga dodana w git 1.8.3, czy mogę skonfigurować moją instalację git, aby była domyślna?push.default
( git-scm.com/docs/git-config ) można określić domyślne akcje na push (nothing
,matching
,upstream
,simple
jak w stackoverflow.com/a/10002469/6309 ). Musisz dodać--follow-tag
wyraźnie.git push --follow-tags -f
nie działało dla mnie.--follow-tags
parametr wprowadza w błąd, ponieważ.git/refs/tags
brane są pod uwagę tylko tagi poniżej . Jeśligit gc
zostanie uruchomiony, tagi zostaną przeniesione z.git/refs/tags
do.git/packed-refs
. Późniejgit push --follow-tags ...
nie działa już zgodnie z oczekiwaniami.Może to pomaga komuś:
źródło
@since Git 2.4
git push --atomic origin <branch name> <tag>
źródło
Git GUI ma przycisk PUSH - wybacz kalambur, a okno dialogowe, które otwiera, zawiera pole wyboru dla tagów.
Wypchnąłem gałąź z wiersza poleceń, bez tagów, a następnie spróbowałem ponownie wypchnąć gałąź za pomocą
--follow-tags
opcji opisanej powyżej. Opcja jest opisana jako następujące tagi z adnotacjami. Moje tagi były prostymi tagami.Naprawiłem coś, oznaczyłem zatwierdzenie poprawką w (aby koledzy mogli wybrać poprawkę), a następnie zmieniłem numer wersji oprogramowania i oznaczyłem utworzone przeze mnie wydanie (aby koledzy mogli sklonować tę wersję).
Git wrócił, mówiąc, że wszystko jest aktualne. Nie wysłał tagów! Być może dlatego, że tagi nie zostały opatrzone adnotacjami. Być może dlatego, że w oddziale nie było nic nowego.
Kiedy zrobiłem podobny push z Git GUI, tagi zostały wysłane.
Na razie zamierzam wprowadzać zmiany w moich pilotach za pomocą Git GUI, a nie za pomocą wiersza poleceń i
--follow-tags
.źródło