¿Podemos establecer un valor predeterminado de Git para recuperar todas las etiquetas durante una extracción remota?

154

Actualmente tengo una configuración remota de git como la siguiente:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*

Cuando publico git pullen branch master, todos los cabezales remotos se obtienen en remotes / upstream, luego remotes / upstream / master se fusionan en master. Cualquier etiqueta que se pueda alcanzar también se obtiene al mismo tiempo, lo cual es muy conveniente.

También me gustaría git pullbuscar todas las etiquetas desde el control remoto, no solo aquellas a las que se puede acceder directamente desde las cabezas. Originalmente intenté seting tagopt == --tags, pero descubrí que esto solo causaba que las etiquetas fueran recuperadas y, por lo tanto, rompía todo. (Junio ​​incluso dice que es una mala configuración horrenda ).

¿Hay alguna manera de hacer que git pulltodas las etiquetas remotas se recuperen de forma predeterminada, además de los cabezales remotos?

jleahy
fuente
1
Un recordatorio para mí mismo: asegúrese de haber presionado la etiqueta primero (no funciona automáticamente): git push origin <tag_name>
Hafenkranich
Usar la tagoptsolución ya no es una configuración incorrecta; a partir de 1.9 / 2.0 (Q1 2014) esto buscará todas las etiquetas además de lo que normalmente se obtiene.
mgiuffrida

Respuestas:

95

Debería poder lograr esto agregando una refspec para las etiquetas a su configuración local. Concretamente:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*
joshtkling
fuente
55
Ajá, nunca me di cuenta de que podrías tener varias líneas de búsqueda, supuse que la última simplemente anularía. Eso es muy agradable y explícito.
Jleahy
1
Tenga cuidado al usar esto con git 2.21, consulte apple.stackexchange.com/questions/352404/…
Vadorequest
306

Un simple git fetch --tagsfuncionó para mí.

russoue
fuente
13
@Fizzix Quizás el título debería modificarse para incluir "por defecto". Esta publicación respondió mi pregunta.
Matt Kneiser el
2
Esto no funcionó para mí. Puedo ver las etiquetas con git ls-remote.
dangeroushobo
Es posible que esto no responda la pregunta exacta, pero sí responde la pregunta en el título y así es como lo encontré a través de la búsqueda web.
Hubert Grzeskowiak
68

La --forceopción es útil para actualizar las etiquetas locales. Principalmente si tienes etiquetas flotantes:

git fetch --tags --force

La opción git pull también tiene las --forceopciones, y la descripción es la misma:

Cuando git fetch se usa con <rbranch>: <lbranch> refspec, se niega a actualizar la rama local <lbranch> a menos que la rama remota <rbranch> que recupere sea un descendiente de <lbranch>. Esta opción anula esa verificación.

pero, según el documento de --no-tags:

Por defecto, las etiquetas que apuntan a objetos que se descargan del repositorio remoto se obtienen y almacenan localmente.

Si esa declaración predeterminada no es una restricción, entonces también puede intentar

git pull --force
platillo
fuente
2
git pull --forceno incluyegit fetch --tags --force
Geniy
21

Para mí, lo siguiente parecía funcionar.

git pull --tags
Vasantha Ganesh K
fuente
Obteniendo etiquetas solamente, probablemente quisiste decir: `git fetch --tags`
Yuseferi
Ya hay una respuesta con git fetch --tags. Quería dar una respuesta alternativa. pull = buscar + fusionar. Así que buscar también sucede.
Vasantha Ganesh K
13

Es sencillo. Hacer un

git fetch --todos

amulamul
fuente
1

Lo uso con magit en kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
evento
fuente