Pretende que tengo el repositorio A, y sus submódulos A.1 A.2.

Si corro

git clone --recursive https://github.com/A/A.git .

Clonará el repositorio principal y sus submódulos.

Pero si corro:

git clone --recursive https://github.com/A/A1.git .

¿No puedo ejecutar nada que pueda manejar el repositorio principal y otros submódulos?

0
Ramon Medeiros 13 dic. 2016 a las 15:27

2 respuestas

La mejor respuesta

No puede saber si un repositorio es un submódulo o no. Cada repositorio utilizado como submódulo en otro lugar es un repositorio independiente completo. El hecho de que se use en algún otro repositorio como submódulo está definido puramente por ese repositorio maestro (o repositorios). Puede utilizar un repositorio también como repositorio de submódulo para una cantidad arbitraria de repositorios maestros. Esto es como preguntar "¿Cómo sé que otros paquetes usan el paquete java.util.regex?" O "¿Cómo sé que otro software usa log4j como biblioteca?".

4
Vampire 13 dic. 2016 a las 12:34

No sé si hay una forma 100% confiable de saberlo, ya que cada submódulo es un repositorio adecuado en toda regla. Sin embargo, podría aprovechar el hecho de que, cuando clona un repositorio con submódulos, las carpetas del submódulo tendrán un archivo .git, a diferencia del repositorio principal (nivel superior) que tiene un .git carpeta. Como tal:

test -d .git; echo $?

Imprimirá 1 si está en un submódulo y 0 si está en el repositorio de nivel superior. Para que también funcione desde subcarpetas:

(cd `git rev-parse --show-toplevel` && test -d .git); echo $?

Si está usando esto en un script de shell, no hay necesidad de echo el valor de retorno, por supuesto, puede usar el resultado del subshell directamente.

1
DUman 13 dic. 2016 a las 12:48