tipos tag example etiquetas crear git git-submodules

tag - Listar submódulos en un repositorio git



git push tag (14)

Tengo un repositorio git que tiene varios submódulos. ¿Cómo hago una lista de los nombres de todos los submódulos después de ejecutar git submodule init ?

El comando git submodule foreach podría hacer eco de los nombres del submódulo, pero eso solo funciona una vez que se han desprotegido, lo que no sucedió después del paso de inicialización. Hay más pasos en la cadena que deben suceder antes de que puedan ser revisados ​​y no quiero tener que codificar los nombres de los submódulos en el script.

Entonces, ¿hay un comando git para obtener los nombres de todos los submódulos actualmente registrados pero que aún no han sido procesados?


Solo los caminos de los submódulos, por favor, señora ...

git config --list | grep /^submodule | cut -f 2 -d .

Vendor/BaseModel Vendor/ObjectMatcher Vendor/OrderedDictionary Vendor/_ObjC Vendor/XCodeHelpers

👍🏼


El siguiente comando listará los submódulos:

git submodule--helper list

El resultado es algo como esto:

<mode> <sha1> <stage> <location>

Nota: Requiere git 2.7.0 o superior.




Para enumerar todos los submódulos con la ruta

git submodule --quiet foreach --recursive ''echo $name''


Podrías usar el mismo mecanismo que el git submodule init usa, es decir, ver los .gitmodules . Este archivo enumera cada ruta de submódulo y la url a la que se refiere.

Por ejemplo, desde la raíz del repositorio, cat .gitmodules imprimirá los contenidos en la pantalla (suponiendo que tenga un cat ).

Editar:

Como los archivos .gitmodule tienen el formato de configuración de git, puede usar git config para analizar esos archivos:

git config --file .gitmodules --name-only --get-regexp path

Le mostraría todas las entradas del submódulo, y con

git config --file .gitmodules --get-regexp path | awk ''{ print $2 }''

solo obtendrías la ruta del submódulo.


Puede usar el git submodule status --recursive o, opcionalmente, el git submodule status --recursive si desea mostrar los submódulos anidados.

De los documentos de GIT SCM:

Muestra el estado de los submódulos. Esto imprimirá el SHA-1 del compromiso actualmente desprotegido para cada submódulo, junto con la ruta del submódulo y la salida de git describe para el SHA-1. Cada SHA-1 tendrá el prefijo - si el submódulo no está inicializado, + si la confirmación del submódulo actualmente desprotegido no coincide con el SHA-1 encontrado en el índice del depósito que lo contiene y con U si el submódulo tiene conflictos de fusión.


Puedes usar:

git submodule | awk ''{ print $2 }''


Si no te importa operar solo en submódulos inicializados, puedes usar git submodule foreach para evitar el análisis de texto.

git submodule foreach --quiet ''echo $name''


Veo que la respuesta ha sido seleccionada pero, para cualquier otra persona que llegue a esta página:

$ git submodule

listará todos los submódulos en el repositorio git especificado.

Aclamaciones


Yo uso este:

git submodule status | cut -d'' '' -f3-4

Salida (ruta + versión):

tools/deploy_utils (0.2.4)


Yo uso esto:

git config --list|egrep ^submodule


para devolver solo los nombres de los submódulos registrados, puede usar este comando.

grep path .gitmodules | sed ''s/.*= //''

pensar en ello como submódulo git --list que no existe


git config permite especificar un archivo de configuración.
Y .gitmodules es un archivo de configuración.

Entonces, con la ayuda de " use space como delimitador con comando de corte ":

git config --file=.gitmodules --get-regexp ^^submodule.*/.path$ | cut -d " " -f 2

Eso solo mostrará una lista de las rutas, una por submódulo declarado.

Como Tino señala en los comentarios :

  • Esto falla para los submódulos con espacios en él.
  • las rutas de los submódulos pueden contener líneas nuevas , como en

    git submodule add https://github.com/hilbix/bashy.git "sub module" git mv ''sub module'' $''sub/nmodule''

Como una alternativa más robusta, Tino propone:

git config -z --file .gitmodules --get-regexp ''/.path$'' | / sed -nz ''s/^[^/n]*/n//p'' | / tr ''/0'' ''/n''

Para las rutas con nuevas líneas en ellas (se pueden crear con git mv ), dejen de lado | tr ''/0'' ''/n'' | tr ''/0'' ''/n'' y usar algo como ... | while IFS='''' read -d '''' path; do ... ... | while IFS='''' read -d '''' path; do ... ... | while IFS='''' read -d '''' path; do ... para un procesamiento posterior con bash.
Esto necesita un bash moderno que entienda read -d '''' (no olvide el espacio entre -d and '''' ).