Ich habe ein Git-Repo ~/.janus/
mit ein paar Submodulen. Ich möchte ein Submodul hinzufügen ~/.janus/snipmate-snippets/snippets/
, aber wenn ich git submodule add <[email protected]:...>
im snipmate-snippets
Verzeichnis ausgeführt werde, wird die folgende Fehlermeldung angezeigt:
You need to run this command from the toplevel of the working tree.
Die Frage ist also: Wie füge ich dem snipmate-snippets
Verzeichnis ein Submodul hinzu ?
git
git-submodules
Robert Audi
quelle
quelle
git submodule add -b <branch> <url> <relative_path_4m_root>
Antworten:
Du gehst hinein
~/.janus
und rennst:Wenn Sie weitere Informationen zu Submodulen (oder Git im Allgemeinen) benötigen, ist ProGit sehr nützlich.
quelle
'subprojects' already exists in the index
(ich habe Teilprojekte als Verzeichnisnamen verwendet) . Stattdessen hat die Antwort des VonC unten geholfen, dh zu tuncd subprojects
, und danngit submodule add <get@github …>
ohne den Pfad.Beachten Sie, dass Sie ab git1.8.4 (Juli 2013) nicht mehr zum Stammverzeichnis zurückkehren müssen.
( Bouke Versteegh kommentiert, dass Sie nicht verwenden müssen
/.
, wie insnippets/.
:snippets
ist genug)Siehe Commit 091a6eb0feed820a43663ca63dc2bc0bb247bbae :
Kommt drauf an Commit 12b9d32790b40bf3ea49134095619700191abf1f
quelle
/.
nicht erforderlich ist. Git erstellt die Verzeichnis-Snippets ohne dieses.Relative path can only be used from the toplevel of the working tree
. Ich machegit submodule add ../../../functest
Relative path can only be used from the toplevel of the working tree
") ist nicht die aus der ursprünglichen Frage ("You need to run this command from the toplevel of the working tree
")Ich hatte ein ähnliches Problem, hatte mich aber mit GUI-Tools in eine Ecke gemalt.
Ich hatte ein Teilprojekt mit ein paar Dateien, die ich bisher nur kopiert hatte, anstatt in ihr eigenes Git-Repo einzuchecken. Ich habe ein Repo im Unterordner erstellt, konnte mich gut verpflichten, pushen usw. Aber im übergeordneten Repo wurde der Unterordner nicht als Submodul behandelt, und seine Dateien wurden immer noch vom übergeordneten Repo verfolgt - nicht gut.
Um aus diesem Chaos herauszukommen, musste ich Git anweisen, den Unterordner nicht mehr zu verfolgen (ohne die Dateien zu löschen):
Dann musste ich sagen, dass es dort ein Submodul gibt (was Sie nicht tun können, wenn irgendetwas dort gerade von git verfolgt wird):
Aktualisieren
Der ideale Weg, dies zu handhaben, umfasst ein paar weitere Schritte. Im Idealfall wird das vorhandene Repo in ein eigenes Verzeichnis verschoben, das frei von übergeordneten Git-Modulen ist, festgeschrieben und gepusht und dann als Submodul wie folgt hinzugefügt:
Dadurch wird das Git-Repo als Submodul geklont. Dies umfasst die Standardschritte zum Klonen, aber auch einige andere undurchsichtigere Konfigurationsschritte, die Git in Ihrem Namen ausführt, damit dieses Submodul funktioniert. Der wichtigste Unterschied besteht darin, dass dort anstelle eines .git-Verzeichnisses eine einfache .git-Datei abgelegt wird, die einen Pfadverweis darauf enthält, wo sich das echte git-Verzeichnis befindet - im Allgemeinen im Stammverzeichnis des übergeordneten Projekts .git / modules / jslib.
Wenn Sie die Dinge nicht so machen, funktionieren sie gut für Sie, aber sobald Sie die Eltern verpflichten und pushen und ein anderer Entwickler diese Eltern zieht, haben Sie ihnen das Leben viel schwerer gemacht. Es wird für sie sehr schwierig sein, die Struktur auf Ihrem Computer zu replizieren, solange Sie ein vollständiges .git-Verzeichnis in einem Unterordner eines Verzeichnisses haben, das sein eigenes .git-Verzeichnis enthält.
Also, verschieben, drücken, Submodul hinzufügen, ist die sauberste Option.
quelle
Für diejenigen unter Ihnen, die meine seltsame Vorliebe für das manuelle Bearbeiten von Konfigurationsdateien teilen, würde das Hinzufügen (oder Ändern) des Folgenden ebenfalls den Trick tun.
.git / config (persönliche Konfiguration)
.gitmodules (festgeschriebene gemeinsam genutzte Konfiguration)
Sehen Sie dies auch - Unterschied zwischen .gitmodules und der Angabe von Submodulen in .git / config?
quelle
Einzeiliges Bash-Skript, um Chris 'Antwort oben zu erleichtern, da ich mich auch in einer Ecke mit Vundle-Updates für meine .vim-Skripte gemalt hatte.
DEST
ist der Pfad zu dem Verzeichnis, das Ihre Submodule enthält. Tun Sie dies nach dem Tungit rm -r $DEST
Prost
quelle