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?

Jonas
fonte

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
Ciro Santilli adicionou uma nova foto
fonte
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
Trevor
fonte
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

solgar
fonte
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.

Comunidade
fonte
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.
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 
Sajib Khan
fonte
49

Você pode enviar as tags assim git push --tags

Fernando Diaz Garrido
fonte
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>.
Carl G
fonte
1
excelente, deveria estar no topo - pois garante que uma tag e não um ramo sejam pressionados por erro.
samshers 19/09/19