Jak wypchnąć tag do zdalnego repozytorium za pomocą Git?


2217

Sklonowałem zdalne repozytorium Git na swoim laptopie, a następnie chciałem dodać tag, więc uruchomiłem

git tag mytag master

Gdy uruchamiam git tagna laptopie, tag mytagjest wyświetlany. Następnie chcę przekazać to do zdalnego repozytorium, więc mam ten tag na wszystkich moich klientach, więc uruchamiam, git pushale dostałem komunikat:

Wszystko na bieżąco

A jeśli pójdę na pulpit i uruchomię, git pulla następnie git tagnie zostaną wyświetlone żadne tagi.

Próbowałem także wprowadzić niewielką zmianę do pliku w projekcie, a następnie wypchnąć go na serwer. Potem mogłem pobrać zmianę z serwera na komputer stacjonarny, ale nadal nie ma znacznika podczas uruchamiania git tagna komputerze stacjonarnym.

Jak mogę przepchnąć mój tag do zdalnego repozytorium, aby wszystkie komputery klienckie mogły go zobaczyć?

Odpowiedzi:


1086

git push --follow-tags

Jest to rozsądna opcja wprowadzona w Git 1.8.3:

git push --follow-tags

Wypycha zarówno zatwierdzenia, jak i tylko tagi, które są jednocześnie:

  • opatrzone adnotacjami
  • osiągalny (przodek) z wypychanych zatwierdzeń

Jest to rozsądne, ponieważ:

Z tych powodów --tagsnależy unikać.

Git 2,4 dodała z push.followTagsopcji, aby włączyć tę flagę domyślnie które można ustawić za pomocą:

git config --global push.followTags true

16
Dzięki za to, sensowne jest pchanie wszystkiego za jednym razem, zamiast konieczności pchania zawartości, a następnie pchania tagów osobno.
Shane

1
Od razu nie było dla mnie jasne, że jest to relacja między „adnotacjami” a „osiągalnymi z wypchniętych zobowiązań”. Miałem nadzieję, że popchnie wszystkie osiągalne tagi, bez względu na to, czy zostaną opatrzone adnotacjami czy nie. Może edytuj, aby upewnić się, że nie jest to OR?
Gauthier

tak więc, gdy to zrobiłem, wracam do bitbucket, czy powinienem zobaczyć gdzieś listę tagów oprócz możliwości zobaczenia jej z wiersza poleceń?
PositiveGuy,

10
To nie działa dla mnie w git 2.5.0, ale git push origin --tagsdziała.
nnyby

3
Dzięki za wskazówkę push.followTags. Nie mogę uwierzyć, że to nie jest domyślna opcja. Bez tego nawet nie zawracaj sobie głowy tagowaniem, zapomnisz i zejdziesz z synchronizacji tagów.
moodboom

3604

Aby wcisnąć pojedynczy tag:

git push origin <tag_name>

I następujące polecenie powinno wypchnąć wszystkie tagi ( niezalecane ):

git push --tags

426
Zalecam, aby nie używać ani nie szkolić innych do używania, git push --tagsponieważ bardzo trudno jest pozbyć się złych tagów, gdy twoi współpracownicy są przeszkoleni do wypychania wszystkich tagów, ponieważ ludzie nadal wypychają stare złe etykiety, które mają lokalnie za każdym razem, gdy chcą wcisnąć nowy tag. Z tego powodu tylko teraz doradzę komuś, aby z niego korzystał git push origin <tag_name>.
Scott Jungwirth,

43
Aby przesunąć przeniesiony tag: git push origin <tag_name> --force
Bob Stein

38
Cóż @ScottJungwirth Myślę, że jako programista należy zachować ostrożność. W przeciwnym razie równie dobrze możesz nie uczyć dostępnych poleceń.
Willa,

18
Jeśli Twój tag jest taki sam jak gałąź zdalna i git pushnie działa error: src refspec <tag_name> matches more than one., możesz go git push origin tag <tag_name>
przesłać

5
Dobrze @Willa pytanie było „push to znacznik do zdalnego repo”. git push origin <tag_name>Jest więc znacznie lepsza odpowiedź na to pytanie. ;)
Wildcard

265

Aby wypchnąć konkretny, wykonaj jeden tag git push origin tag_name


99

Aby rozwinąć odpowiedź Trevora , możesz wcisnąć pojedynczy tag lub wszystkie tagi jednocześnie.

Wciśnij pojedynczy tag

git push <remote> <tag>

To jest podsumowanie odpowiedniej dokumentacji, która to wyjaśnia (niektóre opcje polecenia zostały pominięte ze względu na zwięzłość):

git push [[<repository> [<refspec>…]]

<refspec>...

Format <refspec>parametru to… źródło ref <src>, następnie dwukropek :, a następnie docelowy ref <dst>

<dst>Opowiada który ref na zdalnej jest na bieżąco z tym naciśnięciem ... Jeżeli :<dst>zostanie pominięty, to samo ref jak <src>będzie aktualizowana ...

tag <tag>oznacza to samo co refs/tags/<tag>:refs/tags/<tag>.

Wciśnij wszystkie swoje tagi jednocześnie

git push --tags <remote>
# Or
git push <remote> --tags

Oto podsumowanie odpowiedniej dokumentacji (niektóre opcje polecenia zostały pominięte ze względu na zwięzłość):

git push [--all | --mirror | --tags] [<repository> [<refspec>…]]

--tags

Wszystkie refs/tagsreferencje poniżej są wypychane, oprócz referencji wyraźnie wymienionych w wierszu poleceń.


Przykładem jest pominięcie słowa kluczowego tag. np git push origin tag funny-tag-1.
JamesThomasMoon1979,

1
@ JamesThomasMoon1979 Nie potrzebujesz tego. Przesuwasz pojedynczy tag do źródła w ten sposób: git push origin my-tag(Właśnie go wypróbowałem!)
Andres F.,

Korzystałem z wersji 1.9.1 , a Ty @AndresF. ?
JamesThomasMoon1979,

1
@ JamesThomasMoon1979 Wersja 2.10.2. Może to jest to?
Andres F.,

54

Tagi nie są wysyłane do zdalnego repozytorium za pomocą polecenia git push. Musimy jawnie wysłać te tagi do zdalnego serwera za pomocą następującego polecenia:

git push origin <tagname>

Możemy wypchnąć wszystkie tagi na raz za pomocą poniższego polecenia:

git push origin --tags

Oto niektóre zasoby, aby uzyskać szczegółowe informacje na temat tagowania git:

http://www.cubearticle.com/articles/more/git/git-tag

http://wptheming.com/2011/04/add-remove-github-tags


50

Możesz przesuwać wszystkie lokalne tagi za pomocą git push --tagspolecenia.

$ git tag                         # see tag lists
$ git push origin <tag-name>      # push a single tag
$ git push --tags                 # push all local tags 


15

Używam, git push <remote-name> tag <tag-name>aby upewnić się, że pcham tag. Używam go tak: git push origin tag v1.0.1. Ten wzorzec opiera się na dokumentacji ( man git-push):

OPTIONS
   ...
   <refspec>...
       ...
       tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.

1
doskonała, powinna być na wierzchu - ponieważ zapewnia to, że znacznik nie przesuwa gałęzi przez err.
samshers,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.