2012-03-12 23 views

Respuesta

3

git fetch --tags lo hará.

Desde el docs (descripción del parámetro --tags):

La mayoría de las etiquetas se recuperan automáticamente como directores de las sucursales se descargan, pero las etiquetas que no señalen objetos accesible desde los directores de las sucursales que están siendo rastreado no será recuperado por este mecanismo. Este indicador permite descargar todas las etiquetas y sus objetos asociados. El comportamiento predeterminado para un control remoto se puede especificar con la configuración remote..tagopt.

+0

Pero yo estoy preguntando cómo sobrescribir etiquetas locales existentes, porque fueron creados erróneamente – linquize

+1

'git fetch --tags' será en la actualización de las etiquetas hecho de locales existentes, por ejemplo, si la etiqueta remota FOO se correlaciona con 1234567 y la etiqueta local con los mapas FOO con fedcba9, 'git fetch --tags' reemplazará a FOO con 1234567. – torek

+0

Actualización: en las versiones más nuevas de git, esto ya no actualizará las etiquetas locales. Puede forzar la actualización en su lugar, con 'git fetch '+ refs/tags/*: refs/tags/*'' ('--force' también podría funcionar, pero no lo he probado). – torek

-1

Las etiquetas no se sobrescribirán, ya que están destinadas a ser inmutables. Si desea tener un objeto que sea (realista) cambiable, utilice un puntero de bifurcación o una referencia en su lugar. Eso te deja con: la etiqueta git -d tagname ... y luego volver a buscarla.

+0

No estoy de acuerdo con su primera declaración. Esto distorsionaría el punto de usar un VCS ¿no cree? – lightonphiri

+0

Git no fomenta la reescritura (ya compartida, remota) de la historia. Eso no derrota el punto de vista de un VCS, ¡que es mantener la historia! En la mayoría de los casos, es posible obligar a que sucedan tales cosas, pero puede causar bastantes problemas. –

4

git fetch --tags --all --prune

Esto le dirá explícitamente git a buscar, y al mismo tiempo, eliminar las etiquetas que ya no existen en el control remoto.

+1

Esto no parece eliminar las etiquetas que siempre estuvieron presentes localmente. –

+0

@MartijnHeemels, git no puede distinguir entre una etiqueta que nunca se insertó y una etiqueta que se eliminó del control remoto. –

0

En primer lugar, a diferencia de las sucursales, git no hace un seguimiento de las etiquetas remotas diferentes de las locales. Una vez que terminaron de obtener, son indistinguibles.

  • hace actualizar la etiqueta local (a pesar de que el manual no dice)
    • git fetch --tags
  • no actualiza la etiqueta local de
    • git fetch
    • git fetch --prune
    • git fetch --prune --force

Una etiqueta de actualización/sobreescritura se ve así:

From git:path/name 
- [tag update]  my_tag -> my_tag 

Esto funciona para las etiquetas de peso ligero y anotados, incluso mezclados. Es decir: una etiqueta anotada puede sobrescribirse con una ligera y viceversa.

que utiliza git versión 2.7.4

+0

nota: esto no borra las etiquetas que se eliminaron en el control remoto –

+0

@CarlosHeuberger Su comentario sugiere que usted cree que hay una manera de hacerlo, pero no es así. De hecho, puede eliminar todas las etiquetas locales que no existen en el control remoto, pero que también borran las etiquetas _local que nunca estuvieron en el control remoto (por ejemplo, aún no se presionaron, o las etiquetas para fines exclusivamente locales). No hay forma de eliminar solo las etiquetas que se eliminaron en remote_. –

+0

No estoy seguro de por qué cree que mi comentario sugiere que, ¡nunca escribí que haya una manera de hacerlo!?! Intenté complementar tu respuesta porque en ninguna parte indica que las etiquetas locales no se eliminan y que "actualiza la etiqueta local" podría interpretarse como una eliminación de una etiqueta que se eliminó en el control remoto. Creo que fue una declaración clara (sin sugerencias ocultas) ... pero mi inglés probablemente sea peor de lo que creo. –

Cuestiones relacionadas