¿Hay una manera de hacer git pull automáticamente submódulos de actualización?

StackOverflow https://stackoverflow.com/questions/4611512

  •  26-09-2019
  •  | 
  •  

Pregunta

¿Hay una manera de tener automáticamente git submodule update (o preferiblemente git submodule update --init llama cuando se hace git pull?

Buscando un entorno git config, o un alias de git para ayudar con esto.

¿Fue útil?

Solución

A partir de git 2.14, podría configurar submodule.recurse a true para habilitar el comportamiento deseado.

Se puede hacer esto mediante la ejecución a nivel mundial:

git config --global submodule.recurse true

Otros consejos

git config --global alias.pullall '!git pull && git submodule update --init --recursive'

Si desea argumentos que se pasarán al git pull, a continuación, utilizar esto en su lugar:

git config --global alias.pullall '!f(){ git pull "$@" && git submodule update --init --recursive; }; f'

A partir de Git 1.7.5 debe actualizar submódulos automáticamente de forma predeterminada como usted desea.

[EDIT: por comentarios: el nuevo comportamiento 1.7.5 es automáticamente Obtener las últimas confirmaciones para submódulos, pero no a actualización ellos (en el sentido git submodule update). Por lo que la información de esta respuesta es relevante como fondo, pero no es una respuesta completa por sí misma. Todavía es necesario un alias para submódulos de tracción y de actualización en un comando.]

El comportamiento por defecto, "bajo demanda", es submódulos de actualización cada vez que traes una confirmación que las actualizaciones del submódulo cometer, y esto confirmar no está ya situada en el clon local.
También puede haber puesto al día en todos los que recoge o no (pre-1.7.5 comportamiento supongo).
La opción de configuración para cambiar este comportamiento es fetch.recurseSubmodules .

  

Esta opción puede ser establecida en un valor booleano o para on-demand.
  Si se establece en un valor lógico cambia el comportamiento de fetch y pull a Recurse incondicionalmente en submódulos Cuando se establece en verdadero o no a Recurse en absoluto cuando se establece en false.

     

Cuando se establece en on-demand (el valor predeterminado), fetch y pull será solamente recurse en un submódulo poblado cuando su SuperProject recupera una cometer que las actualizaciones de la referencia del submódulo .

Vea:

para más información.

git fetch --recurse-submodules[=yes|on-demand|no]

Me sorprende que nadie ha mencionado el uso de ganchos git para hacer esto!

Sólo tiene que añadir los archivos denominados post-checkout y post-merge a su directorio .git/hooks de los repositorios pertinentes, y poner el siguiente en cada una de ellas:

#!/bin/sh
git submodule update --init --recursive

Desde que specfically pedirá un alias, suponiendo que desea tener esto por muchos repositorios, puede crear un alias que se suma a estos .git/hooks de un repositorio para usted.

Un alias, como se sugiere por Kevin Ballard, es una buena solución a la perfección. Sólo para tirar otra opción que hay, también se puede utilizar un gancho posterior a la fusión, que simplemente se ejecuta git submodule update [--init].

Se puede crear un alias para el comando git que se encarga de automatizar la actualización submódulo. Añadir lo siguiente a su .bashrc

# make git submodules usable
#   This overwrites the 'git' command with modifications where necessary, and
#   calls the original otherwise
git() {
    if [[ $@ == clone* ]]; then
        gitargs=$(echo "$@" | cut -c6-)
        command git clone --recursive $gitargs
    elif [[ $@ == pull* ]]; then
        command git "$@" && git submodule update --init --recursive
    elif [[ $@ == checkout* ]]; then
        command git "$@" && git submodule update --init --recursive
    else
        command git "$@"
    fi
}

Como otros han mencionado, se puede establecer fácilmente esto con:

git config --global submodule.recurse true

Sin embargo, si eres como yo y tener una configuración más compleja .gitconfig (mis principales usos de archivos ~/.gitconfig include a la carga en otros archivos .gitconfig), y nunca se puede recordar cómo convertir entre el formato git de configuración de línea de comandos y el formato .gitconfig, así es como para agregarlo a cualquiera de sus archivos .gitconfig:

[submodule]
  recurse = true
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top