657 votos

Manera fácil tirar más reciente de todos los submódulos

Estamos usando git submódulos para gestionar un par de grandes proyectos que tienen dependencias en muchas otras bibliotecas que hemos desarrollado. Cada biblioteca es un repo llevado a las personas a cargo del proyecto como un submódulo. Durante el desarrollo, que a menudo sólo quieren ir a tomar la última versión de cada dependiente del submódulo.

¿Git han construido en un comando para hacer esto? Si no, ¿cómo acerca de Windows o archivo por lotes similares que pueden hacerlo.

710voto

Henrik Gustafsson Puntos 11755

Para git 1.6.1 o por encima de usted puede usar algo similar a (modificada a la suit):

git submodule foreach git pull

Ver git-submódulo(1) para más detalles

400voto

Alexander Bartosh Puntos 2299

Si usted necesita sacar cosas para submódulos en su submódulo repositorios de uso

git pull --recurse-submodules

una característica git aprendido en 1.7.3.

Pero esto no checkout adecuada comete(las que su repositorio principal de los puntos a) en submódulos

A la caja apropiada compromete en su submódulos usted debe actualizar después de tirar de uso

git submodule update --recursive

205voto

gahooa Puntos 38006

Podemos utilizar esto. Se llama git-pup:

#!/bin/bash
# Exists to fully update the git repo that you are sitting in...

git pull && git submodule init && git submodule update && git submodule status

Sólo tienes que poner en un adecuado reciclaje de directorio (/usr/local/bin). Si en Windows, puede que necesite modificar la sintaxis para conseguir que funcione :)

Actualización:

En respuesta a la observación formulada por el autor original acerca de tracción en todas las Cabezas de todos los submódulos -- esa es una buena pregunta.

Estoy bastante seguro de que git no tiene un comando para esto internamente. Para ello, sería necesario identificar qué HEAD realmente es un submódulo. Que podría ser tan simple como diciendo master es la más actualizada de la rama, etc...

Después de esto, crear un simple script que haga lo siguiente:

  1. compruebe git submodule status para la "modificación" de los repositorios. El primer carácter de la salida de las líneas indica esto. Si un sub-repo es modificado, es posible que NO desea continuar.
  2. para cada repo aparece, cd en el directorio y ejecutar git checkout master && git pull. Comprobación de errores.
  3. Al final, te sugerimos que imprima una pantalla para que el usuario indique el estado actual de los submódulos -- tal vez de obligarlos a agregar a todos y cometer?

Me gustaría mencionar que este estilo no es realmente lo que submódulos de git fueron diseñadas. Normalmente, quiere decir "LibraryX" está en la versión "2.32" y permanecerá así hasta que se los digo para "actualizar".

Que es, en un sentido, lo que están haciendo con la secuencia de comandos se describe, pero sólo de manera más automática. Se requiere cuidado!

Actualización 2:

Si usted está en una plataforma windows, usted puede desear mirar en el uso de Python para implementar la secuencia de comandos ya que es muy capaz en estas áreas. Si usted está en unix/linux, entonces le sugiero que simplemente un script en bash.

Necesita alguna aclaración? Acaba de publicar un comentario.

132voto

mturquette Puntos 1099

Henrik es en la pista de la derecha. El 'foreach' comando se puede ejecutar cualquier secuencia de comandos de shell. Dos opciones para tirar de la última podría ser,

git submodule foreach git pull origin master

y,

git submodule foreach /path/to/some/cool/script.sh

Que se repite a través de todas las inicializado submódulos y ejecutar las instrucciones que recibe.

107voto

zachleat Puntos 1402

Los siguientes trabajó para mí en Windows.

git submodule init
git submodule update

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X