¿Cómo verifico una versión específica de un submódulo usando 'git submodule'?

Respuestas:

167

Los repositorios de submódulos permanecen en un estado HEAD separado que apunta a una confirmación específica. Cambiar esa confirmación simplemente implica verificar una etiqueta o confirmación diferente y luego agregar el cambio al repositorio principal.

$ cd submodule
$ git checkout v2.0
Previous HEAD position was 5c1277e... bumped version to 2.0.5
HEAD is now at f0a0036... version 2.0

git-status en el repositorio principal ahora informará un árbol sucio:

# On branch dev [...]
#
#   modified:   submodule (new commits)

Agregue el directorio del submódulo y comprométase a almacenar el nuevo puntero.

joemaller
fuente
14
Después de haber confirmado el repositorio principal con una rama / versión específica de un submódulo, ¿otros pueden verificar la misma versión del submódulo en el futuro? ¿O tienen que volver a especificar manualmente?
QZHua
@QZHua: Experimenté con esto yo mismo y parece que el ID de confirmación del submódulo se conserva cuando se clona el padre.
Psychonaut
37

Paso 1: agregue el submódulo

   git submodule add git://some_repository.git some_repository

Paso 2: arregla el submódulo a una confirmación en particular

De forma predeterminada, el nuevo submódulo hará un seguimiento de HEAD de la rama maestra, pero NO se actualizará a medida que actualice su repositorio principal. Para cambiar el submódulo para rastrear una confirmación en particular o una rama diferente, cambie el directorio a la carpeta del submódulo y cambie las ramas como lo haría en un repositorio normal.

   git checkout -b some_branch origin/some_branch

Ahora el submódulo está fijo en la rama de desarrollo en lugar de HEAD del maestro.

De dos tipos discutiendo: vincule los submódulos de Git a una confirmación o rama en particular .

fsenart
fuente
20
Es más fácil de usargit submodule add -b some_branch git://some_repository.git some_repository
Caumons
15
En este momento no parece que git submodule add -bpueda tomar una etiqueta o un sha1hash. Solo puede tomar una rama.
CMCDragonkai
¿Hay algún problema para esto en el rastreador de problemas de Git? ¿Alguien podría publicar una URL para que podamos rastrearla? Gracias.
colan
Las instrucciones de @colan para informar errores se encuentran en git-scm.com/community . Pero -bel hecho de admitir ramas y no etiquetas o commit shas es una característica, no un error (de hecho, -bes una abreviatura de --branch).
Henry
1
Suspiro. Después de todos estos años, todavía no tienen un rastreador público de problemas.
colán