Come si spinge un tag in un repository remoto usando Git?


2218

Ho clonato un repository Git remoto sul mio laptop, quindi ho voluto aggiungere un tag così ho corso

git tag mytag master

Quando corro git tagsul mio laptop mytagviene mostrato il tag . Voglio quindi inviarlo al repository remoto in modo da avere questo tag su tutti i miei client, quindi corro git pushma ho ricevuto il messaggio:

tutto aggiornato

E se vado sul mio desktop ed eseguo git pulle quindi git tagnon vengono visualizzati tag.

Ho anche provato a fare una piccola modifica su un file nel progetto, quindi inviarlo al server. Dopodiché ho potuto trasferire la modifica dal server al mio computer desktop, ma non c'è ancora alcun tag durante l'esecuzione git tagsul mio computer desktop.

Come posso inviare il mio tag al repository remoto in modo che tutti i computer client possano vederlo?

Risposte:


1092

git push --follow-tags

Questa è un'opzione sana introdotta in Git 1.8.3:

git push --follow-tags

Spinge entrambi i commit e solo i tag che sono entrambi:

  • annotato
  • raggiungibile (un antenato) dai commit spinti

Questo è sano perché:

È per quei motivi che --tagsdovrebbero essere evitati.

Git 2.4 ha aggiunto l' push.followTagsopzione per attivare quel flag di default che puoi impostare con:

git config --global push.followTags true

16
Grazie a questo, ha senso spingere tutto in una volta, anziché dover spingere il contenuto e poi spingere i tag separatamente.
Shane

1
Per me non fu chiaro subito che si trattava di una relazione tra "annotato" e "raggiungibile dai commit spinti". Speravo che avrebbe spinto tutti i tag raggiungibili, qualunque sia annotato o meno. Forse modifica per assicurarti che non sia un OR?
Gauthier,

così, mentre lo facevo, torno a bitbucket, dovrei vedere un elenco di tag da qualche parte oltre a poterlo vedere dalla riga di comando?
Positivo

10
Questo non funziona per me in git 2.5.0, ma git push origin --tagsfunziona.
nnyby,

3
Grazie per il suggerimento push.followTags. Non riesco a credere che questo non sia il valore predefinito. Senza di essa, non preoccuparti nemmeno di taggare, dimenticherai e uscirai dai tag di sincronizzazione.
moodboom

3610

Per inviare un singolo tag:

git push origin <tag_name>

E il seguente comando dovrebbe inviare tutti i tag ( non consigliato ):

git push --tags

427
Consiglio di non usare o addestrare gli altri a usarlo, git push --tagspoiché può essere molto difficile sbarazzarsi di tag errati quando i tuoi colleghi sono addestrati a spingere tutti i tag, poiché le persone continuano a spingere i vecchi tag nocivi che hanno localmente ogni volta che vogliono per inviare un nuovo tag. Per questo motivo, consiglierò solo a qualcuno di utilizzare git push origin <tag_name>ora.
Scott Jungwirth,

43
Per spingere un tag spostato : git push origin <tag_name> --force
Bob Stein,

38
Bene @ScottJungwirth Penso che come sviluppatore si dovrebbe fare attenzione. Altrimenti potresti anche consigliare di non insegnare affatto i comandi disponibili.
Willa,

18
Se il tuo tag è lo stesso del ramo remoto e git pushfallisce error: src refspec <tag_name> matches more than one., puoi spingerlo comegit push origin tag <tag_name>
Volodymyr Sapsai il

5
Bene @Willa la domanda era "spingere un tag in un repository remoto". Quindi git push origin <tag_name>è una risposta molto migliore per questa domanda. ;)
Wildcard il

265

Per eseguire il push specifico, un tag procede come segue git push origin tag_name


99

Per espandere la risposta di Trevor , puoi inviare un singolo tag o tutti i tag contemporaneamente.

Premi un singolo tag

git push <remote> <tag>

Questo è un riepilogo della documentazione pertinente che lo spiega (alcune opzioni di comando omesse per brevità):

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

<refspec>...

Il formato di un <refspec>parametro è ... il riferimento sorgente <src>, seguito da due punti :, seguito dal riferimento destinazione <dst>...

Il <dst>dice che ref sul lato remoto viene aggiornato con questa spinta ... Se :<dst>viene omesso, lo stesso ref come <src>verrà aggiornata ...

tag <tag>significa lo stesso di refs/tags/<tag>:refs/tags/<tag>.

Invia tutti i tuoi tag contemporaneamente

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

Ecco un riepilogo della documentazione pertinente (alcune opzioni di comando omesse per brevità):

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

--tags

refs/tagsVengono spinti tutti i ref sottostanti , oltre ai refspec esplicitamente elencati nella riga di comando.


L'esempio sta tralasciando la parola chiave tag. es git push origin tag funny-tag-1.
JamesThomasMoon1979,

1
@ JamesThomasMoon1979 Non ne hai bisogno. Spingi un singolo tag in origine in questo modo: git push origin my-tag(L'ho appena provato!)
Andres F.

Stavo usando la versione 1.9.1 , e tu @AndresF. ?
JamesThomasMoon1979,

1
@ JamesThomasMoon1979 Version 2.10.2. Forse è tutto?
Andres F.


51

Puoi inviare tutti i tag locali semplicemente premendo il git push --tagscomando.

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


15

Sto usando git push <remote-name> tag <tag-name>per garantire che sto spingendo un tag. Io lo uso come: git push origin tag v1.0.1. Questo modello si basa sulla documentazione ( man git-push):

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

1
eccellente, avrebbe dovuto essere in cima - in quanto garantisce che un tag non un ramo sia spinto da err.
samshers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.