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?

11voto

LTK Punkte 127

Das hat bei mir funktioniert:

git ls-files --stage | grep ^160000

Sie basiert auf diesem großartigen Artikel: Verstehen von Git-Submodulen

Sie muss lauten grep ^160000 .

10voto

PolyGlot Punkte 532

Anzeige ALLER Informationen über jedes Submodul mit Hilfe der eingebauten Git-Funktionen:

git submodule foreach -q git config -l

Oder nur URL-s:

git submodule foreach -q git config remote.origin.url

Gestohlen von aquí .

9voto

Skarab Punkte 6751

Ich benutze diese:

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

Ausgabe (Pfad + Version):

tools/deploy_utils (0.2.4)

5voto

Alex Gray Punkte 15268

Einfach die Submodulpfade Bitte, Ma'am...

git config --list | grep \^submodule | cut -f 2 -d .
Vendor/BaseModel
Vendor/ObjectMatcher
Vendor/OrderedDictionary
Vendor/_ObjC
Vendor/XCodeHelpers

5voto

VonC Punkte 1117238

git config ermöglicht die Angabe einer Konfigurationsdatei.
Und .gitmodules es eine Konfigurationsdatei.

Mit der Hilfe von " Leerzeichen als Begrenzungszeichen mit dem Befehl cut verwenden ":

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

Dadurch werden nur die Pfade aufgelistet, einer pro deklariertem Submodul.

Als Tino weist darauf hin in den Kommentaren :

  • Dies schlägt bei Untermodulen mit Räume darin.
  • Submodulpfade können enthalten Zeilenumbrüche wie in

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

Als robustere Alternative schlägt Tino vor:

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

Für Pfade mit Zeilenumbrüchen (sie können mit git mv ), lassen Sie die | tr '\0' '\n' und verwenden Sie etwas wie ... | while IFS='' read -d '' path; do ... zur weiteren Verarbeitung mit der Bash.
Dies erfordert eine moderne Bash, die Folgendes versteht read -d '' (vergessen Sie nicht das Leerzeichen zwischen -d and '' ).

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