Empuje confirmaciones y etiquetas de git simultáneamente

Resuelto Will Robertson asked hace 14 años • 6 respuestas

git push --tagsEs una operación separada, ya git pushque presionar etiquetas debe ser una elección consciente para evitar presionar accidentalmente la incorrecta. Está bien. Pero, ¿cómo los empujo a ambos simultáneamente/atómicamente? ( git push && git push --tagsno es perfectamente atómico).

Will Robertson avatar Sep 19 '10 16:09 Will Robertson
Aceptado

Actualización agosto 2020

Como se mencionó originalmente en esta respuesta de SoBeRich , y en mi propia respuesta , a partir de git 2.4.x

git push --atomic origin <branch name> <tag>

(Nota: esto en realidad funciona con HTTPS solo con Git 2.24 )

Actualización mayo 2015

A partir de git 2.4.1 , puedes hacer

git config --global push.followTags true

Si se establece en verdadero, habilite la opción --follow-tags de forma predeterminada.
Puede anular esta configuración en el momento del envío especificando --no-follow-tags.

Como lo señaló en este hilo Matt Rogers respondiendo a Wes Hurd :

--follow-tags solo empuja etiquetas anotadas .

git tag -a -m "I'm an annotation" <tagname>

Eso sería empujado (a diferencia de git tag <tagname>una etiqueta liviana, que no sería empujada, como mencioné aquí )

Actualización abril 2013

Desde git 1.8.3 (22 de abril de 2013) , ya no tienes que ejecutar 2 comandos para enviar ramas y luego enviar etiquetas :

La nueva " --follow-tags" opción le dice " git push" que inserte etiquetas anotadas relevantes cuando expulse ramas .

Ahora puedes intentar, al enviar nuevas confirmaciones:

git push --follow-tags

Sin embargo , eso no enviará todas las etiquetas locales, solo aquella a la que hacen referencia las confirmaciones que se envían con el archivo git push.

Git 2.4.1+ (segundo trimestre de 2015) introducirá la opción push.followTags: consulte "¿ Cómo hacer que " git push" incluya etiquetas dentro de una rama? ".

Respuesta original, septiembre de 2010.

La opción nuclear sería git push --mirror, lo que empujaría a todos los árbitros hacia abajo refs/.

También puedes insertar solo una etiqueta con tu confirmación de rama actual:

git push origin : v1.0.0 

Puede combinar la --tagsopción con una especificación de referencia como:

git push origin --tags :

(ya que --tagssignifica: todas las referencias siguientes refs/tagsse envían, además de las especificaciones de referencia enumeradas explícitamente en la línea de comando )


También tienes esta entrada " Empujar ramas y etiquetas con una única invocación "git push" "

Zoltán Füzesi acaba de publicar un consejo útil en la lista de correo de Git :

Yo uso .git/configpara resolver esto:

[remote "origin"]
    url = ...
    fetch = +refs/heads/*:refs/remotes/origin/*
    push = +refs/heads/*
    push = +refs/tags/*

Con estas líneas agregadas git push originse cargarán todas tus ramas y etiquetas. Si deseas subir sólo algunos de ellos, puedes enumerarlos.

No lo he probado todavía, pero parece que podría ser útil hasta que se agregue alguna otra forma de enviar ramas y etiquetas al mismo tiempo a git push.
Por otro lado, no me importa escribir:

$ git push && git push --tags

Cuidado , como comenta Aseem Kishore

push = +refs/heads/*Empujará con fuerza todas tus ramas .

Esto me mordió hace un momento, así que para tu información.


René Scheibe añade este interesante comentario :

El --follow-tagsparámetro es engañoso ya que solo .git/refs/tagsse consideran las etiquetas siguientes.
Si git gcse ejecuta, las etiquetas se mueven de .git/refs/tagsa .git/packed-refs. Luego ya git push --follow-tags ...no funciona como se esperaba.

VonC avatar Sep 19 '2010 10:09 VonC

Desde Git 2.4:

git push --atomic origin <branch name> <tag>
SoBeRich avatar Sep 08 '2019 14:09 SoBeRich