Las diferencias entre la actualización remota git a buscar?
-
13-09-2019 - |
Pregunta
Se git remote update
el equivalente de git fetch
?
Solución
ACTUALIZACIÓN: más información
Debería haber hecho esto desde el principio: (! Por lo que los meta) Me grepped las notas de la versión de Git Git en repo de Git
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
A continuación, hice una búsqueda para less
--all
, y esto es lo que encontré bajo el notas de la versión 1.6.6 de Git :
git fetch
aprendió opciones--all
y--multiple
, para ejecutar buscarlo a muchos repositorios, y la opción de--prune
para eliminar ramas de seguimiento remoto que iban rancio. Esto hace quegit remote update
ygit remote prune
menos necesario (no hay un plan para eliminarremote update
niremote prune
, sin embargo).
Versión 1.6.6 no se libera hasta que diciembre 23, 2009 , y el cartel original hizo su pregunta el 6 de diciembre de 2009.
Así como se puede ver en las notas de la versión, los autores de Git eran conscientes del hecho de que la funcionalidad del comando git remote update
se está duplicando un tanto por git fetch
, pero decidieron no para eliminarlo, tal vez para mantener la compatibilidad con las secuencias de comandos existentes y programas, o tal vez porque es demasiado trabajo y hay elementos de mayor prioridad.
Respuesta original con más detalles
de xenoterracide respuesta es de 3,5 años de edad ahora, y Git ha pasado por varias versiones desde entonces (se ha pasado de a v1.8.3.2 partir de este escrito), y mirando a la actuales documentación git remote update
y git fetch
, parece que ambos pueden llevar a cabo, básicamente, la misma función de ir a buscar nuevas confirmaciones de varios mandos a distancia , teniendo en cuenta las opciones y argumentos adecuados.
Captación de todos los mandos a distancia
Una forma para traer varios mandos a distancia es con la bandera --all
:
git fetch --all
Esto obtendrá de todos los controles remotos configurados, en el supuesto de que usted no tiene conjunto remote.<name>.skipFetchAll
para ellos:
Si es verdad, esta distancia será omitido de forma predeterminada cuando se actualiza usando git-fetch (1) o la actualización de subcomando de git-remoto (1) . - documentación git-config
Esto sería equivalente a usar
git remote update
sin especificar cualquier grupo remoto a buscar, y también no tener conjunto remotes.default
en su configuración de repo, y también que ninguno de los controles remotos han remote.<name>.skipDefaultUpdate
establecido en true.
La 1.8.3.2 documentación actual para la configuración de Git no menciona el ajuste remotes.default
, pero yo consultados Google Todopoderoso al respecto y encontraron esta expl útilanation de Mislav Marohnić :
$ git config remotes.default 'origin mislav staging'
$ git remote update
# fetches remotes "origin", "mislav", and "staging"
Se puede definir una lista predeterminada de mandos a distancia para ser traída por el comando
remote update
. Estos pueden ser los mandos a distancia de sus compañeros de equipo, miembros de la comunidad de confianza de un proyecto de código abierto, o similar.
Así que, presumiblemente, si usted tiene remotes.default
conjunto, y no todos los mandos a distancia se enumeran en él, entonces no habrá git remote update
obtener todos los mandos a distancia que tu repositorio es "consciente" de.
En cuanto a la configuración remote.<name>.skipDefaultUpdate
, la documentación Git lo explican de esta manera:
Si es verdad, esta distancia será omitido de forma predeterminada cuando se actualiza usando git-fetch (1) o la actualización de subcomando de git-remoto (1) .
Captación de un grupo especificado de mandos a distancia
En lugar de ir a buscar todos los mandos a distancia, tanto fetch
y remote update
permiten especificar varios mandos a distancia y los grupos de controles remotos a buscar:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
le permite a buscar a varios mandos a distancia que son parte de un grupo (por tomar otro ejemplo de Mislav ):
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiple
le permite especificar varios repositorios y grupos de repositorios a buscar a la vez (de los docs ):
Permitir varios argumentos
<repository>
y<group>
a ser especificadas. Sin<refspec>s
se puede especificar.
La ambigüedad en la documentación git remote update
El remoto para git remote update
especifica que la sintaxis del comando es la siguiente:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
Tenga en cuenta la parte última, [(<group> | <remote>)…]
? Los puntos se arrastran ...
implica que se pueden especificar varios grupos y mandos a distancia con el comando, lo que significaría que se comporta de la misma manera que git fetch --multiple
... ver cómo la sintaxis entre los dos es tan similar?
Sin embargo, en el mismo documento, la explicación para el comando update
no dice nada acerca de cómo especificar múltiples argumentos de grupo y remotos, sólo que
Obtener [ES] versiones de un conjunto con nombre de mandos a distancia en el repositorio como se define en
remotes.<group>
.
Así que no está claro si git remote update
funciona de forma idéntica a git fetch --multiple
con respecto a la especificación de varios mandos a distancia individuales y múltiples grupos remotos.
Obtención de un solo control remoto
Finalmente, todo el mundo sabe que el simple caso de ir a buscar un único mando a distancia:
git fetch <remote>
Podría darse el caso de que también se puede utilizar
git remote update <remote>
para hacer lo mismo, pero como he mencionado en el apartado anterior, la documentación para git remote update
está claro acerca de si es posible acceder a otra cosa que no sea un solo grupo de mandos a distancia con el comando.
Wrapup
Como he explicado, git fetch
y git remote update
comportan de manera similar con respecto a ir a buscar a varios mandos a distancia. Comparten sintaxis y los argumentos similares, aunque git fetch
es más corta, por lola gente probablemente les resulta más fácil tipo y uso.
Puede ser el caso de que git remote update
no se puede utilizar para traer sólo un único mando a distancia como con git fetch
, pero como he señalado, la documentación no dejar esto claro.
Aparte
La duplicación de funcionalidad entre los comandos de porcelana Git, ejemplificada por git fetch
y git remote update
anteriormente, no es única. Me he dado cuenta de una situación similar con git rebase --onto
y git cherry-pick
, en tanto que puede adoptar una serie de confirmaciones para parchear sobre una nueva base cometió.
supongo que a medida que Git ha evolucionado a lo largo de los años, algunas funciones era (inevitablemente?) Duplicado, quizás a veces como una conveniencia para los usuarios finales (por ejemplo, es más fácil de pasar una serie de cherry-pick
, que pase a un único cometer una y otra vez para recoger una serie). Al parecer cherry-pick
no siempre aceptó una serie de confirmaciones, como se explica en el versión v1.7.2 señala :
git cherry-pick
aprendió a recoger una serie de confirmaciones (por ejemplocherry-pick A..B
ycherry-pick --stdin
), también lo hizogit revert
; ellos no soportan la más agradablerebase [-i]
control de secuencia tiene, sin embargo.
Otros consejos
Sí y no. git remote update
obtiene de todos los mandos a distancia, no sólo uno.
Sin mirar el código para ver si remote update
es solamente un guión (posible) que, básicamente, se ejecuta extracciones de cada control remoto. git fetch
puede ser mucho más granular.