Como você envia uma tag para um repositório remoto usando o Git?


2218

Eu clonei um repositório Git remoto no meu laptop e, em seguida, quis adicionar uma tag para executar

git tag mytag master

Quando eu corro git tagno meu laptop, a etiqueta mytagé mostrada. Desejo então enviar isso para o repositório remoto, para que eu tenha essa tag em todos os meus clientes, para que eu corragit push mas recebi a mensagem:

Tudo atualizado

E se eu for para a minha área de trabalho e executar git pull e git tagnenhuma tag for exibida.

Também tentei fazer uma pequena alteração em um arquivo no projeto e enviá-lo ao servidor. Depois disso, eu poderia extrair a alteração do servidor para o meu computador desktop, mas ainda não há nenhuma tag ao executar git tagno meu computador desktop.

Como posso enviar minha tag para o repositório remoto para que todos os computadores clientes possam vê-la?

Respostas:


1092

git push --follow-tags

Esta é uma opção sensata apresentada no Git 1.8.3:

git push --follow-tags

Ele envia as confirmações e apenas as tags que são ambas:

  • anotado
  • acessível (um ancestral) a partir dos commit enviados

Isso é sensato porque:

É por essas razões que --tags devem ser evitados.

O Git 2.4 adicionou a push.followTagsopção de ativar esse sinalizador por padrão, com o qual você pode definir:

git config --global push.followTags true

16
Obrigado por isso, faz sentido enviar tudo de uma só vez, em vez de precisar enviar conteúdo e enviar tags separadamente.
Shane

1
Não ficou claro imediatamente para mim que era uma relação e entre "anotado" e "acessível a partir de confirmações enviadas". Eu esperava que isso enviasse todas as tags acessíveis, independentemente de anotadas ou não. Talvez edite para garantir que não seja uma sala de cirurgia?
Gauthier

Então, ao fazer isso, volto ao bitbucket. Devo ver uma lista de tags em algum lugar além de poder vê-la na linha de comando?
PositiveGuy

10
Isso não funciona para mim no git 2.5.0, mas git push origin --tagsfunciona.
usar o seguinte comando

3
Obrigado pela dica push.followTags. Não acredito que esse não seja o padrão pronto para uso. Sem ele, nem se preocupe em marcar, você esquecerá e sairá das tags de sincronização.
Moodboom 2/16

3610

Para empurrar um único tag:

git push origin <tag_name>

E o seguinte comando deve enviar todas as tags ( não recomendado ):

git push --tags

427
Eu recomendo não usar ou treinar outras pessoas para usar git push --tags, pois pode ser muito difícil se livrar de tags ruins quando seus colegas de trabalho são treinados para enviar todas as tags, pois as pessoas continuam enviando as tags ruins antigas que eles têm localmente toda vez que quiserem empurrar uma nova tag. Por esse motivo, aconselharei apenas alguém a usar git push origin <tag_name>agora.
Scott Jungwirth

43
Para empurrar uma tag movida : git push origin <tag_name> --force
Bob Stein

38
Bem, @ScottJungwirth, acho que, como desenvolvedor, devemos ter cuidado. Caso contrário, é aconselhável não ensinar os comandos disponíveis.
Willa

18
Se sua tag for igual à ramificação remota e git pushfalhar error: src refspec <tag_name> matches more than one., você pode git push origin tag <tag_name>
enviá-

5
Bem, @Willa, a pergunta era "enviar uma tag para um repositório remoto". Portanto, git push origin <tag_name>é uma resposta muito melhor para essa pergunta. ;)
Caractere curinga

265

Para enviar por push específico, uma tag segue git push origin tag_name


99

Para expandir a resposta de Trevor , você pode enviar uma única tag ou todas as suas tags de uma só vez.

Enviar uma única etiqueta

git push <remote> <tag>

Este é um resumo da documentação relevante que explica isso (algumas opções de comando foram omitidas por questões de brevidade):

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

<refspec>...

O formato de um <refspec>parâmetro é… a referência de origem <src>, seguida por dois pontos :, seguida pela referência de destino <dst>

O <dst>informa qual ref no lado remoto é atualizado com este push… Se :<dst>for omitido, o mesmo ref <src>será atualizado…

tag <tag>significa o mesmo que refs/tags/<tag>:refs/tags/<tag>.

Envie todas as suas tags de uma só vez

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

Aqui está um resumo da documentação relevante (algumas opções de comando são omitidas por questões de brevidade):

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

--tags

Todas as referências abaixo refs/tagssão enviadas por push, além das referências especificadas explicitamente na linha de comando.


O exemplo está deixando de fora a palavra-chave tag. por exemplo git push origin tag funny-tag-1.
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Você não precisa disso. Você empurra uma única tag de origem assim: git push origin my-tag(Eu apenas tentei isso!)
Andres F.

Eu estava usando a versão 1.9.1 , e você @AndresF. ?
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Versão 2.10.2. Talvez seja isso?
Andres F.

54

Tags não são enviadas para o repositório remoto pelo comando git push. Precisamos enviar explicitamente essas tags para o servidor remoto usando o seguinte comando:

git push origin <tagname>

Podemos enviar todas as tags de uma só vez usando o comando abaixo:

git push origin --tags

Aqui estão alguns recursos para obter detalhes completos sobre a marcação git:

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

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


51

Você pode enviar todas as tags locais por simplesmente 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

Estou usando git push <remote-name> tag <tag-name>para garantir que estou pressionando uma tag. Eu usá-lo como: git push origin tag v1.0.1. Esse padrão é baseado na documentação ( man git-push):

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

1
excelente, deveria estar no topo - pois garante que uma tag e não um ramo sejam pressionados por erro.
samshers 19/09/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.