Nota: comenzando con git 1.9 / 2.0 (Q1 2014) , git fetch --tags
obtiene etiquetas además de las obtenidas por la misma línea de comando sin la opción.
Ver commit c5a84e9 por Michael Haggerty (mhagger) :
Anteriormente, la --tags
opción " " de búsqueda se consideraba equivalente a especificar la especificación de referencia
refs/tags/*:refs/tags/*
en la línea de comando; en particular, hizo remote.<name>.refspec
que se ignorara la configuración.
Pero no es muy útil buscar etiquetas sin también buscar otras referencias, mientras que es bastante útil poder obtener etiquetas además de otras referencias.
Así que cambie la semántica de esta opción para hacer la última.
Si un usuario desea obtener solo etiquetas, aún es posible especificar una especificación de referencia explícita:
git fetch <remote> 'refs/tags/*:refs/tags/*'
Tenga en cuenta que la documentación anterior a 1.8.0.3 era ambigua sobre este aspecto del " fetch --tags
" comportamiento.
Commit f0cb2f1 (2012-12-14) fetch --tags
hizo que la documentación coincida con el comportamiento anterior.
Esta confirmación cambia la documentación para que coincida con el nuevo comportamiento (ver Documentation/fetch-options.txt
).
Solicite que todas las etiquetas se obtengan del control remoto además de cualquier otra cosa que se obtenga .
Dado que Git 2.5 (Q2 2015) git pull --tags
es más robusto:
Ver commit 19d122b por Paul Tan ( pyokagan
) , 13 de mayo de 2015.
(Fusión por Junio C Hamano - gitster
- en commit cc77b99 , 22 de mayo de 2015)
pull
: eliminar --tags
error en caso de candidatos no fusionados
Dado que 441ed41 (" git pull --tags
": error con un mensaje mejor., 28/12/2007, Git 1.5.4+), git pull --tags
imprimiría un mensaje de error diferente si
git-fetch
no devuelve ningún candidato de fusión:
It doesn't make sense to pull all tags; you probably meant:
git fetch --tags
Esto se debe a que, en ese momento, git-fetch --tags
anularía cualquier especificación de referencia configurada y, por lo tanto, no habría candidatos para la fusión. El mensaje de error se introdujo así para evitar confusiones.
Sin embargo, desde c5a84e9 ( fetch --tags
: buscar etiquetas además de
otras cosas, 2013-10-30, Git 1.9.0+), git fetch --tags
buscaría etiquetas además de cualquier refspecs configurado.
Por lo tanto, si ocurre una situación de candidatos sin fusión, no es porque --tags
se estableció. Como tal, este mensaje de error especial ahora es irrelevante.
Para evitar confusiones, elimine este mensaje de error.
Con Git 2.11+ (Q4 2016) git fetch
es más rápido.
Ver commit 5827a03 (13 de octubre de 2016) por Jeff King ( peff
) .
(Fusionada por Junio C Hamano - gitster
- en commit 9fcd144 , 26 oct 2016)
fetch
: utilice "rápido" has_sha1_file
para seguir la etiqueta
Al buscar desde un control remoto que tiene muchas etiquetas que son irrelevantes para las ramas que estamos siguiendo, solíamos desperdiciar demasiados ciclos al verificar si el objeto señalado por una etiqueta (¡que no vamos a buscar!) Existe en nuestro repositorio con mucho cuidado
Este parche enseña a fetch a usar HAS_SHA1_QUICK para sacrificar la precisión por la velocidad, en los casos en que podríamos ser rápidos con un reempaque simultáneo.
Estos son los resultados del script de perf incluido, que establece una situación similar a la descrita anteriormente:
Test HEAD^ HEAD
----------------------------------------------------------
5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3%
Eso solo se aplica a una situación en la que:
- Tiene muchos paquetes en el lado del cliente para hacer que sea
reprepare_packed_git()
costoso (la parte más costosa es encontrar duplicados en una lista sin clasificar, que actualmente es cuadrática).
- Necesita una gran cantidad de referencias de etiquetas en el lado del servidor que sean candidatos para el seguimiento automático (es decir, que el cliente no tiene). Cada uno desencadena una relectura del directorio del paquete.
- En circunstancias normales, el cliente seguiría automáticamente esas etiquetas y después de una búsqueda grande, (2) ya no sería cierto.
Pero si esas etiquetas apuntan al historial que está desconectado de lo que el cliente obtiene, entonces nunca se seguirá automáticamente, y esos candidatos lo afectarán en cada búsqueda.
Git 2.21 (febrero de 2019) parece haber introducido una regresión cuando la configuración noremote.origin.fetch
es la predeterminada ( '+refs/heads/*:refs/remotes/origin/*'
)
fatal: multiple updates for ref 'refs/tags/v1.0.0' not allowed
Git 2.24 (Q4 2019) agrega otra optimización.
Ver commit b7e2d8b (15 sep 2019) por Masaya Suzuki ( draftcode
) .
(Fusionada por Junio C Hamano - gitster
- en commit 1d8b0df , 07 oct 2019)
fetch
: use oidset
para mantener los OID deseados para una búsqueda más rápida
Durante git fetch
, el cliente comprueba si los OID de las etiquetas anunciadas ya están en el conjunto de OID deseado de la solicitud de búsqueda.
Esta verificación se realiza en un escaneo lineal.
Para un repositorio que tiene muchas referencias, repetir este análisis lleva más de 15 minutos.
Para acelerar esto, cree un oid_set
OID para otras referencias.