¿Hay alguna manera de tener automáticamente git submodule update
(o preferiblemente git submodule update --init
llamado cada vez que git pull
se 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.recurse
en verdadero para habilitar el comportamiento deseado.Puede hacer esto globalmente ejecutando:
fuente
git pull
que también obtenga un submódulo y se ejecutesubmodule update
. Esto realmente necesita ser la respuesta aceptada ahoragit config --global submodule.recurse true
git clone
tambié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 update
sentido). 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 config
página de manual (1.7.5) (o la últimagit config
página de manual )git fetch
pá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 update
sigue 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-checkout
ypost-merge
a su.git/hooks
directorio 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/hooks
para usted.fuente
core.hooksPath
de un directorio de ganchos , consulte los documentos paragit-config
obtener 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
.gitconfig
configuración más compleja (mi~/.gitconfig
archivo principal se usainclude
para cargar en otros.gitconfig
archivos), y nunca puedes recordar cómo convertir entre elgit
formato de configuración de la línea de comandos y el.gitconfig
formato, así es como agregarlo a cualquiera de sus.gitconfig
archivos: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