373 Stimmen

Auflisten von Untermodulen in einem Git-Repository

Ich habe ein Git-Repository, das mehrere Untermodule enthält. Wie liste ich die Namen aller Untermodule nach git submodule init durchgeführt wurde?

En git submodule foreach Befehl könnte die Namen der Submodule ausgeben, aber das funktioniert nur, wenn sie ausgecheckt wurden, was nach dem init-Schritt noch nicht geschehen ist. Es gibt weitere Schritte in der Kette, die stattfinden müssen, bevor sie ausgecheckt werden können, und ich möchte die Namen der Submodule nicht fest in das Skript einbauen müssen.

Gibt es also einen Git-Befehl, um die Namen aller derzeit registrierten, aber noch nicht ausgecheckten Submodule zu erhalten?

264voto

Ikke Punkte 95045

Sie könnten den gleichen Mechanismus verwenden wie git submodule init selbst verwendet, nämlich unter .gitmodules . Diese Datei listet jeden Submodulpfad und die URL auf, auf die er verweist.

Zum Beispiel von Root of repository, cat .gitmodules gibt den Inhalt auf dem Bildschirm aus (vorausgesetzt, Sie haben cat ).

Da .gitmodule-Dateien das Git-Konfigurationsformat haben, können Sie git config zum Parsen dieser Dateien verwenden:

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

würde Ihnen alle Submoduleinträge anzeigen, und mit

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

würden Sie nur den Submodulpfad selbst erhalten.

221voto

Jon Koops Punkte 8336

Sie können verwenden git submodule status oder wahlweise git submodule status --recursive wenn Sie verschachtelte Untermodule anzeigen möchten.

Aus der Git-Dokumentation:

Zeigt den Status der Submodule an. Dies druckt den SHA-1 der aktuell ausgecheckten Übergabe für jedes Submodul, zusammen mit dem Submodulpfad und die Ausgabe von git describe für den SHA-1. Jeder SHA-1 wird ein - vorangestellt, wenn das Submodul nicht initialisiert ist, + wenn die aktuell ausgecheckte Submodulübergabe nicht mit dem SHA-1 im Index des enthaltenen Repositorys übereinstimmt und U, wenn das Submodul Merge-Konflikte hat.

88voto

A.T. Punkte 928

Der folgende Befehl listet die Submodule auf:

git submodule--helper list

Die Ausgabe sieht in etwa so aus:

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

Hinweis: Es erfordert Git 2.7.0 oder höher.

67voto

mholm815 Punkte 1899

Um nur die Namen der registrierten Submodule zurückzugeben, können Sie diesen Befehl verwenden:

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

Betrachten Sie es als git submodule --list die es nicht gibt.

42voto

Sandeep Gill Punkte 563

Verwendung:

$ git submodule

Es listet alle Submodule im angegebenen Git-Repository auf.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X