¿Hay alguna manera de tener automáticamente git submodule update(o preferiblemente git submodule update --initllamado cada vez que git pullse hace?
Buscando una configuración de git, o un alias de git para ayudar con esto.
git
git-submodules
philfreo
fuente
fuente

Respuestas:
A partir de Git 2.14 , puede usarlo
git pull --recurse-submodules(y asignarle el alias que desee).A partir de Git 2.15 , puede establecer
submodule.recurseen verdadero para habilitar el comportamiento deseado.Puede hacer esto globalmente ejecutando:
fuente
git pullque también obtenga un submódulo y se ejecutesubmodule update. Esto realmente necesita ser la respuesta aceptada ahoragit config --global submodule.recurse truegit clonetambién. Y actívelo por defecto. De lo contrario, siempre habrá una gran resistencia al uso de submódulos, ya que los módulos de las personas siempre se desincronizan :-(commit,fetch,pull, etc.) están diseñados para ser aplicado solamente al repositorio actual. un submódulo es otro repositorio y no debería verse afectado por comandos ejecutados en el repositorio principal de forma predeterminada. Este es un tipo de decisión de diseño del desarrollador de git.git config --global alias.pullall '!git pull && git submodule update --init --recursive'Si desea que los argumentos se pasen a git pull, use esto en su lugar:
fuente
Comenzando con Git 1.7.5, debería actualizar los submódulos automáticamente de forma predeterminada, como lo desea.
[EDIT: por comentarios: el nuevo comportamiento 1.7.5 es automáticamente ir a buscar las últimas confirmaciones de submódulos, pero no a actualizar ellos (en el
git submodule updatesentido). Por lo tanto, la información en esta respuesta es relevante como fondo, pero no es una respuesta completa en sí misma. Todavía necesita un alias para extraer y actualizar submódulos en un comando.]El comportamiento predeterminado, "a pedido", es actualizar los submódulos cada vez que obtiene una confirmación que actualiza la confirmación del submódulo, y esta confirmación aún no se encuentra en su clon local.
También puede actualizarlo en cada búsqueda o nunca (supongo que antes del comportamiento 1.7.5).
La opción de configuración para cambiar este comportamiento es
fetch.recurseSubmodules.Ver:
git configpágina de manual (1.7.5) (o la últimagit configpágina de manual )git fetchpágina de manual (1.7.5) (o la última página de manual de git fetch )para más información.
fuente
git fetch, no agit submodule update.git pull, en lugar degit fetch, esta opción solo hace que la búsqueda sea recursiva. No cambiará el commit que está desprotegido en los submódulos. Así quegit submodule updatesigue siendo necesario, según lo observado por @Artem.¡Me sorprende que nadie haya mencionado usar git hooks para hacer esto!
Simplemente agregue los archivos con nombre
post-checkoutypost-mergea su.git/hooksdirectorio de los repositorios relevantes, y ponga lo siguiente en cada uno de ellos:Como solicitó específicamente un alias, suponiendo que desea tenerlo para muchos repositorios, puede crear un alias que los agregue a un repositorio
.git/hookspara usted.fuente
core.hooksPathde un directorio de ganchos , consulte los documentos paragit-configobtener más detalles.git pull --rebase:(Un alias, como lo sugiere Kevin Ballard, es una solución perfectamente buena. Solo para lanzar otra opción, también podría usar un gancho posterior a la fusión que simplemente se ejecuta
git submodule update [--init].fuente
Puede crear un alias para el comando git que maneja automáticamente la actualización de submódulos. Agregue lo siguiente a su .bashrc
fuente
Como otros han mencionado, puede configurarlo fácilmente con:
Sin embargo, si eres como yo y tienes una
.gitconfigconfiguración más compleja (mi~/.gitconfigarchivo principal se usaincludepara cargar en otros.gitconfigarchivos), y nunca puedes recordar cómo convertir entre elgitformato de configuración de la línea de comandos y el.gitconfigformato, así es como agregarlo a cualquiera de sus.gitconfigarchivos:fuente
La única forma en que pude actualizar los submódulos y submódulos anidados:
Estaba luchando para crear el alias a través de la terminal debido a los corchetes, así que tuve que agregar esto manualmente a .gitconfig para global:
¿Alguna sugerencia sobre cómo ejecutar los comandos o el alias automáticamente?
fuente