¿Cómo empujas una etiqueta a un repositorio remoto usando Git?


2218

He clonado un repositorio remoto de Git en mi computadora portátil, luego quería agregar una etiqueta, así que ejecuté

git tag mytag master

Cuando ejecuto git tagen mi computadora portátil mytagse muestra la etiqueta . Luego quiero enviar esto al repositorio remoto, así que tengo esta etiqueta en todos mis clientes, así que ejecuto git pushpero recibí el mensaje:

Todo actualizado

Y si voy a mi escritorio y ejecuto git pully luego git tagno se muestran etiquetas.

También intenté hacer un cambio menor en un archivo en el proyecto, luego lo envié al servidor. Después de eso, pude hacer el cambio del servidor a mi computadora de escritorio, pero todavía no hay ninguna etiqueta cuando se ejecuta git tagen mi computadora de escritorio.

¿Cómo puedo enviar mi etiqueta al repositorio remoto para que todas las computadoras cliente puedan verla?

Respuestas:


1092

git push --follow-tags

Esta es una opción sensata introducida en Git 1.8.3:

git push --follow-tags

Empuja ambas confirmaciones y solo etiquetas que son ambas:

  • anotado
  • accesible (un antepasado) desde los commits empujados

Esto es sano porque:

Es por esas razones que --tagsdeben evitarse.

Git 2.4 ha agregado la push.followTagsopción para activar esa bandera de forma predeterminada que puede configurar con:

git config --global push.followTags true

16
Gracias por esto, tiene sentido empujar todo de una vez, en lugar de tener que empujar el contenido y luego empujar las etiquetas por separado.
Shane

1
No estaba claro de inmediato para mí que se tratara de una relación entre "anotado" y "accesible desde los compromisos empujados". Esperaba que empujara todas las etiquetas alcanzables, lo que sea anotado o no. ¿Tal vez editar para asegurarse de que no sea un OR?
Gauthier

Entonces, cuando hice esto, vuelvo a Bitbucket, ¿debería ver una lista de etiquetas en algún lugar además de poder verla desde la línea de comandos?
PositiveGuy

10
Esto no funciona para mí en git 2.5.0, pero git push origin --tagssí.
nnyby

3
Gracias por el consejo push.followTags. No puedo creer que este no sea el valor predeterminado predeterminado. Sin él, ni siquiera se moleste en etiquetar, olvidará y saldrá de las etiquetas de sincronización.
moodboom

3610

Para empujar una sola etiqueta:

git push origin <tag_name>

Y el siguiente comando debe empujar todas las etiquetas ( no recomendado ):

git push --tags

427
Recomiendo no usar o entrenar a otros para que lo usen, git push --tagsya que puede ser muy difícil deshacerse de las etiquetas malas cuando sus compañeros de trabajo están capacitados para presionar todas las etiquetas, ya que las personas continúan presionando las viejas etiquetas malas que tienen localmente cada vez que quieren para empujar una nueva etiqueta. Debido a esto, solo aconsejaré a alguien que use git push origin <tag_name>ahora.
Scott Jungwirth

43
Para empujar una etiqueta movida : git push origin <tag_name> --force
Bob Stein

38
Bueno, @ScottJungwirth, creo que como desarrollador uno debe tener cuidado. De lo contrario, podría aconsejar no enseñar los comandos disponibles.
Willa

18
Si su etiqueta es la misma que la rama remota y git pushfalla error: src refspec <tag_name> matches more than one., puede presionarla comogit push origin tag <tag_name>
Volodymyr Sapsai

55
Bueno, @Willa la pregunta era "empujar una etiqueta a un repositorio remoto". Entonces, git push origin <tag_name>es una respuesta mucho mejor para esa pregunta. ;)
Comodín el

265

Para empujar específico, una etiqueta hace lo siguiente git push origin tag_name


99

Para ampliar la respuesta de Trevor , puede insertar una sola etiqueta o todas sus etiquetas a la vez.

Empuje una sola etiqueta

git push <remote> <tag>

Este es un resumen de la documentación relevante que explica esto (algunas opciones de comando se omiten por brevedad):

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

<refspec>...

El formato de un <refspec>parámetro es ... la referencia de origen <src>, seguida de dos puntos :, seguida de la referencia de destino <dst>...

El <dst>dice qué ref por el lado opuesto se actualiza con este empuje ... Si :<dst>se omite, la misma referencia que <src>será actualizado ...

etiqueta <tag>significa lo mismo que refs/tags/<tag>:refs/tags/<tag>.

Empuje todas sus etiquetas a la vez

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

Aquí hay un resumen de la documentación relevante (algunas opciones de comando se omiten por brevedad):

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

--tags

Todas las referencias bajo refs/tagsson empujadas, además de las especificaciones especificadas explícitamente en la línea de comando.


El ejemplo es omitir la palabra clave tag. por ej git push origin tag funny-tag-1.
JamesThomasMoon1979

1
@ JamesThomasMoon1979 No lo necesitas. Empujas una sola etiqueta al origen de esta manera: git push origin my-tag(¡Lo acabo de probar!)
Andres F.

Estaba usando la versión 1.9.1 , ¿qué hay de ti @AndresF? ?
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Versión 2.10.2. Tal vez eso es todo?
Andres F.

54

Las etiquetas no se envían al repositorio remoto mediante el comando git push. Necesitamos enviar explícitamente estas etiquetas al servidor remoto mediante el siguiente comando:

git push origin <tagname>

Podemos empujar todas las etiquetas a la vez utilizando el siguiente comando:

git push origin --tags

Aquí hay algunos recursos para obtener detalles completos sobre el etiquetado de git:

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

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


51

Puede insertar todas las etiquetas locales simplemente con un 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

estoy usando git push <remote-name> tag <tag-name> para asegurarme de que estoy presionando una etiqueta. Lo utilizo como: git push origin tag v1.0.1. Este patrón se basa en la documentación ( man git-push):

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

1
excelente, debería haber estado en la parte superior, ya que garantiza que err empuje una etiqueta, no una rama.
Samshers
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.