Ich habe einen Ordner, der ein Git-Repo war. Es enthält einige Dateien und .gitmodules-Dateien. Nun, wenn ich es tuegit init
danngit submodule init
, ist die letztere Befehlsausgabe nichts. Wie kann ich git helfen, Submodule zu sehen, die in der .gitmodules-Datei definiert sind, ohne git submodule add
erneut von Hand ausgeführt zu werden?
Update: Dies ist meine .gitmodules-Datei:
[submodule "vim-pathogen"]
path = vim-pathogen
url = git://github.com/tpope/vim-pathogen.git
[submodule "bundle/python-mode"]
path = bundle/python-mode
url = git://github.com/klen/python-mode.git
[submodule "bundle/vim-fugitive"]
path = bundle/vim-fugitive
url = git://github.com/tpope/vim-fugitive.git
[submodule "bundle/ctrlp.vim"]
path = bundle/ctrlp.vim
url = git://github.com/kien/ctrlp.vim.git
[submodule "bundle/vim-tomorrow-theme"]
path = bundle/vim-tomorrow-theme
url = git://github.com/chriskempson/vim-tomorrow-theme.git
und hier ist eine Auflistung dieses Verzeichnisses:
drwxr-xr-x 4 evgeniuz 100 4096 июня 29 12:06 .
drwx------ 60 evgeniuz 100 4096 июня 29 11:43 ..
drwxr-xr-x 2 evgeniuz 100 4096 июня 29 10:03 autoload
drwxr-xr-x 7 evgeniuz 100 4096 июня 29 12:13 .git
-rw-r--r-- 1 evgeniuz 100 542 июня 29 11:45 .gitmodules
-rw-r--r-- 1 evgeniuz 100 243 июня 29 11:18 .vimrc
es ist also definitiv auf höchstem Niveau. das git Verzeichnis nicht geändert wird, nur git init
geschieht ,
git
git-submodules
evgeniuz
quelle
quelle
git rev-parse --show-toplevel
Sie das Submodul anstelle des Verzeichnisses "Supermodul" erhalten?.gitmodules
DateiAntworten:
git submodule init
Berücksichtigt nur Submodule, die sich bereits im Index befinden (dh "inszeniert"), für die Initialisierung. Ich würde ein kurzes Skript schreiben, das analysiert.gitmodules
und für jedesurl
und jedespath
Paar Folgendes ausführt :Sie können beispielsweise das folgende Skript verwenden:
Dies basiert darauf, wie das
git-submodule.sh
Skript selbst die.gitmodules
Datei analysiert .quelle
git submodule update --init
? Alle diese Befehle schlagen stillschweigend fehl. Es sieht so aus, als ob Git keine Module sieht, die nur in.gitmodules
git submodule init
, sehen Sie eine Ausgabe ausgit config --list | grep submodule
? (Wie in der Dokumentation angegeben,git submodule init
sollte "die Submodule initialisieren, dh jeden in .gitmodules gefundenen Submodulnamen und jede URL in.git/config
" registrieren .)git config --list
gibt nur Standardwerte an, keine Erwähnung von Submodulen.gitmodules
Datei aktualisieren ? Befindet sich Ihre.gitmodules
Datei definitiv auf der obersten Ebene Ihres Repositorys und nicht in einem Unterverzeichnis?Als Erweiterung der Antwort von @Mark Longair habe ich ein Bash-Skript geschrieben, um die Schritte 2 und 3 des folgenden Prozesses zu automatisieren:
Hinweis: Die Submodule werden an der Spitze ihres Hauptzweigs anstelle des gleichen Commits wie das Boilerplate-Repo ausgecheckt. Sie müssen dies also manuell tun.
Das Weiterleiten der Ausgabe von git config in die Leseschleife verursachte Probleme mit der Eingabeaufforderung, sodass sie stattdessen in eine temporäre Datei ausgegeben wird. Alle Verbesserungen an meinem ersten Bash-Skript wären sehr willkommen :)
Vielen Dank an Mark, https://stackoverflow.com/a/226724/193494 , bash: verschachteltes interaktives Lesen in einer Schleife, die auch read verwendet , und tnettenba @ chat.freenode.net, die mir geholfen haben, zu dieser Lösung zu gelangen!
quelle
Erweiterung der exzellenten Antwort von @Mark Longair um ein Submodul, das den Zweig- und Reponamen berücksichtigt.
quelle
Ich hatte ein ähnliches Problem.
git submodule init
scheiterte lautlos.Als ich das tat:
git submodule add <url> <path>
Ich habe:
The following path is ignored by one of your .gitignore files: ...
Ich denke, dass .gitignore (d) -Pfade die Ursache sein könnten.
quelle
Ich weiß, dass es eine Weile her ist, aber ich möchte diese Version teilen, die
git config
nur einmal aufruft , kein Skript benötigt und auch Zweige verarbeitet:Der einzige Nebeneffekt ist die Ausgabe der Befehle. Es wird nichts ausgeführt, sodass Sie die Prüfung durchführen können, bevor Sie sie festlegen.
Dies funktioniert mit einem einfachen Kopieren und Einfügen in der Konsole, sollte jedoch trivial sein, um es in ein Shell-Skript einzufügen.
Beispielausgabe:
quelle
Eine aktualisierte Version des Skripts von @ mark-longair. Dieser unterstützt auch Verzweigungen, behandelt den Fall, in dem einige der Submodule bereits vorhanden sind
.git/config
, und sichert bei Bedarf vorhandene Verzeichnisse mit demselben Namen wie die Submodulpfade.quelle
Probieren Sie für zsh-Benutzer meine Funktion aus, die
DRY_RUN=1
unterstützt, um zu sehen, welche Befehle ausgeführt werden, und die nurgit
zum Parsen der Datei verwendet wirdsed
.quelle