Como enviar uma marca para um repositório remoto usando o Git?
git tag mytag master
quando corro git tag
no meu portátil, aparece a etiqueta mytag
. Eu então quero empurrar isso para o repositório remoto para que eu tenha esta etiqueta em todos os meus clientes, então eu corro git push
mas eu recebi a mensagem:
tudo actualizado
e se eu for para o meu ecrã e executar git pull
e depois git tag
não aparecem marcas.
git tag
no meu computador desktop.
Como posso levar a minha etiqueta para o repositório remoto para que todos os computadores possam vê-la?
10 answers
Para empurrar uma marca única :
git push origin <tag_name>
E o seguinte comando deve empurrar todas as marcas (não recomendado):
git push --tags
git push --follow-tags
Esta é uma opção sà introduzida no Git 1.8.3:
git push --follow-tags
Pressiona tanto os commits como apenas as etiquetas que são ambas:
- anotado
- alcançável (um ancestral) dos commits empurrados
Isto é são porque:
- só deve empurrar as marcas anotadas para o remoto e manter as marcas leves para o desenvolvimento local, para evitar conflitos de marcas. Ver também: Qual é a diferença entre uma anotação e etiqueta não anotada?
- não irá colocar etiquetas anotadas em ramos não relacionados
É por essas razões que --tags
deve ser evitado.
O Git 2. 4 adicionou a opção push.followTags
para activar essa opção por omissão, a qual poderá definir com:
git config --global push.followTags true
Para empurrar especificamente, uma marca faça o seguinte
git push origin tag_name
Para expandir a resposta de Trevor , Você pode empurrar uma única etiqueta ou toda a sua etiquetas de imediato.
Empurre uma única marca
git push <remote> <tag>
Este é um resumo da documentação relevante que explica isto (alguns opções de comandos omitidas para a brevidade):
git push [[<repository> [<refspec>…]] <refspec>...
O formato de um parâmetro
<refspec>
é ... o ref-fonte<src>
, seguido de dois pontos:
, seguido do ref de destino<dst>
...O
<dst>
Diz qual ref No remoto o lado é actualizado com este empurrar ... se:<dst>
for omitido, o mesmo ref que<src>
será actualizado ...Tag
<tag>
significa o mesmo querefs/tags/<tag>:refs/tags/<tag>
.
Pressione todas as suas etiquetas de uma vez
git push --tags <remote>
# Or
git push <remote> --tags
Aqui está um resumo da documentação relevante (algumas opções de comandos omitido por brevidade):
git push [--all | --mirror | --tags] [<repository> [<refspec>…]] --tags
Todos os árbitros abaixo de
refs/tags
são empurrados, para além de especificações explicitamente está na linha de comando.
git push --tags
As marcas não são enviadas para o repositório remoto pelo comando git push. Precisamos enviar explicitamente estas etiquetas para o servidor remoto usando o seguinte comando:
git push origin <tagname>
Podemos carregar todas as etiquetas de uma vez usando o comando abaixo:
git push origin --tags
Aqui estão alguns recursos para detalhes completos sobre a marcação git:
Pode carregar nas suas marcas locais apenas com o comando git push --tags
.
$ git tag # see tag lists
$ git push origin <tag-name> # push a single tag
$ git push --tags # push all local tags
Estou a usar {[[1]} para garantir que estou a empurrar uma etiqueta. Eu uso-o como: git push origin tag v1.0.1
Este padrão baseia-se na documentação (man git-push
):
OPTIONS
...
<refspec>...
...
tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.
Por favor, não use, se você está apenas procurando um comando, porque a principal intenção desta solução é apresentar-lhe uma forma de soluções !
Para facilitar a vida-eu escrevi um script git-cheat-sheet , que contém alguns comandos úteis, incluindo o seguinte:
./git_commands.sh -push_tag TAG_NAME
Se está a trabalhar num ramo:
git push --tags origin branch_name