Pregunta

Se git remote update el equivalente de git fetch?

¿Fue útil?

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 que git remote update y git remote prune menos necesario (no hay un plan para eliminar remote update ni remote 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 ejemplo cherry-pick A..B y cherry-pick --stdin), también lo hizo git revert; ellos no soportan la más agradable rebase [-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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top