Ich arbeite auf einer Website mit Sharelatex (Github), aber es enthält andere Repository, die verwendet werden, um das Hauptprojekt zu bauen. [...] Ich bin in git auf Submodule gestoßen, aber da das Hauptprojekt kein Submodul enthält, kann ich das nicht nutzen.
Eigentlich haben Sie ein Submodul. Das ist, was ein verschachteltes Repository ist, und (soweit ich es ernst meinen) soweit, was Sie wissen müssen, um Submodule zu knacken, das ist alles gibt es zu Submodulen. Um Submodule zu verstehen, stellen Sie sich vor, Sie hätten ein geschachteltes Repository (Sie tun dies) und denken über die administrativen Anforderungen nach, was getan werden muss, um dieses Setup in einem dvcs zu unterstützen.
Wenn Leute ein Projekt klonen, das Submodule aus irgendeinem Repo verwendet, haben Sie alle entschieden, veröffentlichte Commits zu enthalten, dieser Klon wird offensichtlich auch nicht das Subprojekt-Repository bekommen (sicherlich sollte es nicht Ihre private und gott- weiß-was-du-hast-es-schon-gemacht-version). Sie müssen also das Teilprojekt Repo von einem seiner eigenen veröffentlichten Repositories erhalten.
Wie sagen Sie den Leuten, die Ihre Commits holen, wo Sie die nötigen Subprojekt-Commits erhalten?Offensichtlich müssen Sie eine Notiz irgendwo in einer festgeschriebenen Datei ablegen und sagen: "Hier ist ein Repo, der alle nötigen Subprojekt-Commits haben sollte". git submodule
hat sich auf .gitmodules
als der herkömmliche Ort, um solche Notizen zu speichern.
Nächste Seite: nun, was sind andere zu tun, wenn die URL, die du ihnen gegeben hast, offline geht? Sie werden einfach ein anderes Repo verwenden müssen. Daher .gitmodules
ist nur Vorschläge, die git submodule
Befehl verwendet die aktuellen Werte in Ihrem .git/config
, git submodule init
hat von den vorgeschlagenen in .gitmodules "bevölkert".
git submodule
die Operationen sind alle so. Vergiss es. Schaue dir den Befehl nicht einmal an, bis du etwas Hilfe brauchst, um das zu tun, was du bereits herausgefunden hast. Beginnen Sie mit dem Wissen, der einfachen Tatsache, dass ein Submodul nichts anderes als ein verschachtelter Repo ist, und das Projekt, das es verwendet, verpflichtet nichts weiter als eine Commit-ID, die irgendwo in diesem verschachtelten Repo sein soll. Das ist es. Das ist alles ein Submodul ist.
Während Sie langwierige Aufgaben erledigen, suchen Sie nach einem Unterbefehl git submodule
, der sie für Sie erledigt. Sie müssen den Unterbefehl nicht verwenden. Alles, was dieser Unterbefehl tut, ist die Automatisierung einfacher Aufgaben, die sonst mühsam wären. Es ist ein Toolkit, um zu tun, was immer Sie tun müssen, und es gibt keinen Weg auf der Welt, es könnte oder sollte willkürlich und ausreichend (< - das ist der schwierige Teil) Abstraktion über jeden auf der Welt auferlegen. Es ist also eine Wundertüte.
Das heißt, es gibt eine wichtige Sicherheits-Spiel git submodule update
und git submodule add
für Sie durchführen, wenn sie die git clone
für Sie tun. Repositories haben üblicherweise den eigentlichen Repo-Inhalt unter dem [sub] Projekt Toplevel .git
, aber wenn Sie einen Zweig auschecken, der dieses Teilprojekt nicht hat oder dieses Teilprojekt anderweitig brauchen oder wollen, wird auch sein .git
weggehen - nicht was Sie wollen, wenn es nicht nur Ihren ausgecheckten Inhalt enthält, sondern den gesamten tatsächlichen Repo. Wenn git submodule update
seinen ursprünglichen Klon ausführt, hebt es das Verzeichnis .git
des Submoduls in einen handlichen (und willkürlichen) kleinen Winkel im Repo des enthaltenden Projekts und ersetzt das Verzeichnis .git
, das gerade aus dem Submodul mit einer .git
-Datei verschoben wurde, die den relativen Pfad zu enthält das verschobene Verzeichnis
Um dieses anfängliche Hochziehen auf dem Repo durchzuführen, das Sie derzeit haben, verschieben Sie es aus Ihrem aktuellen Repo, fügen Sie hinzu und aktualisieren Sie von wo auch immer Sie es setzen, und beheben Sie dann die Upstream-URLs in .gitmodules
für die Bequemlichkeit anderer.
Dort. Jetzt wissen Sie absolut alles, was Sie wissen müssen, um git Submodule zu verstehen und inkrementell Details nur dann zu erfassen, wenn Sie sie brauchen, um zu verstehen, was der Befehl für Sie tut, und warum Sie sich nicht wirklich darum kümmern müssen, jedes kleine zu verstehen Ding auf seiner Manpage vorne. Zumindest glaube ich das.
Wenn ich etwas wichtiges verpasst habe, wäre ich sehr froh über (sanfte oder stumpfe, das ist mir wirklich egal) Korrekturen in den Kommentaren.