¿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?


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/*

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í.


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

2
git pull --forceno incluyegit fetch --tags --force
Geniy

21

Para mí, lo siguiente parecía funcionar.

git pull --tags

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


1

Lo uso con magit en kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
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.