tag remota rama origin cambiar git git-remote git-fetch

rama - ¿Diferencias entre la actualización remota de git y fetch?



git push (2)

¿ git remote update el equivalente de git fetch ?


Si y no. git remote update obtiene de todos los controles remotos, no solo uno.

Sin mirar el código para ver si remote update es solo un script de shell (posible), básicamente, ejecuta fetch para cada control remoto. git fetch puede ser mucho más granular.


ACTUALIZACIÓN: más información!

Debería haber hecho esto desde el principio: agrupé las notas de la versión de Git en el repositorio de Git''s Git (¡así que meta!)

grep --color=always -R -C30 fetch Documentation/RelNotes/* | less

Luego --all less --all , y esto es lo que encontré en las notas de la versión 1.6.6 de Git :

git fetch learned --multiple y --multiple opciones, para ejecutar fetch desde muchos repositorios, y --prune option para eliminar las ramas de rastreo remotas que se volvieron obsoletas. Esto hace que git remote update y la git remote prune menos necesarias (sin embargo, no hay un plan para eliminar remote update remote prune ni remote prune ).

La versión 1.6.6 no fue lanzada hasta el 23 de diciembre de 2009 , y el póster original hizo su pregunta el 6 de diciembre de 2009.

Como pueden ver en las notas de la versión, los autores de Git eran conscientes del hecho de que la funcionalidad del comando de git remote update estaba siendo duplicada por git fetch , pero decidieron no eliminarla, tal vez por compatibilidad con scripts existentes y versiones anteriores. programas, o tal vez porque es demasiado trabajo y hay elementos de mayor prioridad.

Respuesta original con más detalles

La respuesta de xenoterracide tiene 3.5 años, y Git ha pasado por varias versiones desde entonces (ha pasado de v1.6.5.5 a v1.8.3.2 al momento de escribir esto), y está mirando la documentación actual para git remote update y git fetch , parece que ambos pueden realizar básicamente la misma función de obtener nuevas confirmaciones de múltiples controles remotos , dadas las opciones y argumentos correctos.

Obteniendo todos los controles remotos

Una forma de obtener múltiples controles remotos es con --all flag:

git fetch --all

Esto se obtendrá de todos sus controles remotos configurados, suponiendo que no tiene el remote.<name>.skipFetchAll configurado para ellos:

Si es verdadero, este control remoto se omitirá de manera predeterminada al actualizar usando git-fetch (1) o el subcomando de actualización de git-remote (1) . - Documentación de git-config

Esto sería equivalente a usar

git remote update

sin especificar ningún grupo remoto a recuperar, y tampoco teniendo remotes.default configurados en su configuración de repositorio, y también que ninguno de sus controles remotos tiene remote.<name>.skipDefaultUpdate establecido en verdadero.

La documentación actual de 1.8.3.2 para la configuración de Git no menciona la configuración de remotes.default , pero consulté a The Almighty Google al respecto y encontré esta útil explicación de Mislav Marohnić :

$ git config remotes.default ''origin mislav staging'' $ git remote update # fetches remotes "origin", "mislav", and "staging"

Puede definir una lista predeterminada de controles remotos para ser recuperados por el comando de remote update . Estos pueden ser controles remotos 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 tiene remotes.default configuración remotes.default , y no todos sus controles remotos figuran en ella, entonces git remote update no recuperará todos los controles remotos que su repositorio esté "al tanto".

En cuanto a la configuración remote.<name>.skipDefaultUpdate , los documentos de Git lo explican de este modo:

Si es verdadero, este control remoto se omitirá de manera predeterminada al actualizar usando git-fetch (1) o el subcomando de actualización de git-remote (1) .

Obtener un grupo específico de controles remotos

En lugar de buscar todos los controles remotos, tanto la fetch como remote update permiten especificar múltiples controles remotos y grupos de controles remotos para recuperar:

git fetch [<options>] <group> git fetch --multiple [<options>] [(<repository> | <group>)…]

git fetch [<options>] <group> permite buscar múltiples controles remotos que son parte de un grupo (para tomar otro ejemplo de Mislav ):

$ git config remotes.mygroup ''remote1 remote2 ...'' $ git fetch mygroup

git fetch --multiple permite especificar varios repositorios y grupos de repositorios para obtener a la vez (de los documentos ):

Permita que se especifiquen varios argumentos <repository> y <group> . No se pueden especificar <refspec>s .

Ambigüedad en git remote update documentación de git remote update

La sinopsis de git remote update especifica que la sintaxis del comando es la siguiente:

git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]

Observe la última parte, [(<group> | <remote>)…] ? Los puntos finales ... implican que puede especificar múltiples grupos y controles remotos con el comando, lo que significa que se comporta de la misma manera que git fetch --multiple ... ¿ve cómo la sintaxis entre los dos es tan similar?

Sin embargo, en el mismo documento, la explicación del comando de update no dice nada acerca de especificar múltiples grupos y argumentos remotos, solo que

Obtener actualizaciones para un conjunto de remotos con nombre en el repositorio, tal como se define en los remotes.<group> .

Por lo tanto, no está claro si git remote update funciona de manera idéntica a la git fetch --multiple con respecto a la especificación de múltiples controles remotos individuales y múltiples grupos remotos.

Obtener un solo control remoto

Finalmente, todos conocen el simple caso de buscar un único control remoto:

git fetch <remote>

Puede ser que también puedas usar

git remote update <remote>

hacer lo mismo, pero como mencioné en la sección anterior, la documentación para git remote update no está clara sobre si es posible buscar algo que no sea un solo grupo de controles remotos con el comando.

Envolver

Como he explicado, git remote update git fetch y git remote update comportan de manera similar con respecto a la git fetch desde múltiples remotos. Comparten sintaxis y argumentos similares, aunque la git fetch es más corta, por lo que las personas probablemente les resulte más fácil escribir y usar.

Puede ser que git remote update no se pueda usar para buscar solo un control remoto como con git fetch , pero como ya he señalado, la documentación no lo deja en claro.

Aparte

La duplicación de la funcionalidad entre los comandos de porcelana de Git, ejemplificada por la git fetch git remote update y git remote update arriba, no es única. He notado una situación similar con git rebase --onto y git cherry-pick , en el sentido de que ambos pueden tomar un rango de confirmaciones para parchear en una nueva base de compromiso.

Supongo que, a medida que Git evolucionó a lo largo de los años, algunas funciones se duplicaron (¿inevitablemente?), Tal vez a veces como una conveniencia para los usuarios finales (por ejemplo, es más fácil pasar un rango para cherry-pick , que pasar un solo compromiso una y otra vez para elegir un rango). Aparentemente, cherry-pick no siempre aceptaba un rango de confirmaciones, como se explica en las notas de la versión v1.7.2 :

git cherry-pick aprendió a elegir un rango de commits (por ejemplo, cherry-pick A..B y cherry-pick --stdin ), así git revert ; sin embargo, estos no son compatibles con el mejor control de secuenciación rebase [-i] .