2009-12-14 15 views
57

Al cambiar de sucursales con git checkout, supongo que la mayoría de las veces le gustaría actualizar sus submódulos.¿Por qué la actualización del submódulo de git no es automática en el pago de git?

  • En qué situación cree usted no desea actualizar submódulos después de cambiar?
  • ¿Qué se rompería si esto fuera hecho automáticamente por git checkout?

actualiza con ejemplo:

  • Branch A tiene submódulo S en 3852f1
  • Branch B tiene submódulo S en fd72d7

en la rama A, git checkout B dará lugar a una copia de trabajo de la rama B con el submódulo S en 3852f1 (con una S modificada). La actualización del submódulo git se descargará S en fd72d7.

+2

Relacionado: http://stackoverflow.com/questions/4611512/is-there-a-way-to-make-git-pull-automatically-update-submodules – philfreo

+1

estoy de acuerdo con usted. Estoy trabajando con un proyecto con submódulos y después de cada extracción debería ejecutar la actualización del submódulo de git, pero es innecesario en la mayoría del tiempo. La única razón para hacer eso es no perderse cuando uno de los submódulos en realidad se actualizó. –

Respuesta

19

Creo que los submódulos que no se actualizan automáticamente están en línea con los objetivos de desarrollo de Git. Git está diseñado para funcionar en modo distribuido y no supone que pueda conectarse a un repositorio no local a menos que se lo indique explícitamente. Git no refrescar automáticamente un submódulo sería el comportamiento esperado cuando se piensa de esa manera.

Dicho esto, si usted sabe que siempre quiere que esos submódulos se extraigan y sepa que nunca se ramificará de esos submódulos a otro repositorio local, entonces no debería romper nada si los actualiza automáticamente después de un pago. se añadirá

+37

Creo que git checkout debería simplemente quejarse si la confirmación de un submódulo no estaba disponible en lugar de dejar el directorio de trabajo en un estado incoherente por defecto. Entonces podrías hacer la actualización del submódulo git para recuperar la confirmación referenciada. Una vez más, normalmente el compromiso estará disponible y el proceso de pago puede realizarse sin ningún acceso a la red. Aceptando su respuesta, ya que suena razonable (pero no me gusta); – serbaut

+1

En segundo lugar, la noción de que git debería intentar hacer un submódulo init y actualizarse en la comprobación inicial y quejarse y mostrarse en estado si existe un submódulo que no ha sido ha sido extraído localmente la primera vez. Después de tenerlo una vez, la noción de necesitar actualizar explícitamente tiene sentido porque los repos son distintos y el submódulo hace referencia a una confirmación específica. Pero incluso en un mundo distribuido donde podría no haber estado disponible, lo más probable es que lo desees en algún momento y Git debería informarte que nunca fue retirado. – cclark

+4

'git fetch' tiene una opción para automáticamente * buscar * submódulos, por lo tanto, también creo que el proceso de pago debe tener una opción similar para actualizar/verificar automáticamente los submódulos. –

4

git checkout --recurse-submodules a git 2.13

Esto se menciona en las notas de la versión en: https://github.com/git/git/commit/e1104a5ee539408b81566066aaa6963cb87d5cd6#diff-c24776ff22455a30fbb78e378b7df0b0R139

En this mailing list thread, el dev Git Randall S. Becker dice que también tiene la intención de añadir un config submodule.recurse más adelante para activarlo por defecto, lo que creo que es probable que se fusione en algún momento.

¡Entonces solo tenemos que esperar a que se convierta en el predeterminado en git 3.0! :-)

Cuestiones relacionadas