Ich arbeite an einem Open Source Projekt auf GitHub.
Es hat ein Unterverzeichnis / Vendor, in dem es eine Kopie mehrerer externer Bibliotheken hat. Der ursprüngliche Projektbetreuer hat dieses Verzeichnis von Zeit zu Zeit mit einer neueren Kopie der externen Bibliothek aktualisiert.
Ein Entwickler schickte mir eine Pull-Anfrage mit der Idee, diese Kopie durch ein Git-Submodul zu ersetzen .
Und ich überlege, ob es eine gute Idee ist oder nicht.
Git-Modul Vorteile:
- Submodule wurden speziell für ähnliche Szenarien entwickelt
- Dadurch wird die Möglichkeit eines versehentlichen Commits mit dem Anbieter beseitigt, das beim nächsten Update überschrieben wird
Git-Modul Nachteile:
- Es sieht so aus, als ob Git-Submodule die Komplexität vom Betreuer auf eine Person verlagern, die das Projekt klonen / ziehen wird (zusätzliche Schritte nach dem Klonen erforderlich, um mit dem Projekt zu arbeiten: "Git-Submodul Init", "Git-Submodul Update"
Was ist deine Meinung dazu?
Eine Sache noch. Dieses Problem ist eine recht kleine Bibliothek mit sehr begrenzten externen Abhängigkeiten. Ich denke, jedes Build-Tool wäre für den Moment übertrieben.
git clone --recursive
und müssen sie die Befehle des Submoduls nicht ausführen. Niemand sonst hatte diesen Leckerbissen erwähnt; Die meisten Leute, die Submodule haben, machen dies in der README bekannt.Antworten:
Eine Alternative zu einem Submodul ist die Verwendung
git subtree
. Dies bietet die Vorteilegit submodule
, ohne jedoch die Komplexität auf den Endbenutzer zu übertragen. Das Drittanbieter-Repository wird in der Hauptprojektstruktur zusammengeführt, es werden jedoch Metadaten so gespeichert, dass Sie:Für Git-Benutzer, die nicht über ausreichende Kenntnisse der Submodule verfügen, ist es mit dem Subtree-Ansatz nicht schwieriger, einen Klon Ihres Projekts zu erstellen als mit jedem anderen Klon. Ein kurzer Hinweis aus der Dokumentation:
Ich hatte ein Projekt bei der Arbeit mit Submodulen eingerichtet, und die Probleme, die Submodule in den Klonen aller auf dem neuesten Stand zu halten, waren zu viel Arbeit. Ich habe kürzlich die Verwendung von Teilbäumen überall geändert und diese Probleme sind verschwunden.
Beachten Sie, dass git-subtree Teil des
git/contrib
Verzeichnisses ist und separat installiert werden muss.quelle
Ein Nachteil der Verwendung von Submodulen besteht darin, dass die Tarballs oder Zip-Archive von Github (und vielen anderen Diensten) keine Quellen für Submodule enthalten. Das heißt, die Archive sind nicht in sich geschlossen. Dies ist ein Problem, wenn das Repository klein ist und nicht wirklich über ein Erstellungsskript verfügt, wie z. B. eine statische HTML-Site, die von einer JavaScript-Bibliothek abhängt.
quelle
Dies ist ein idealer Ort, um Submodule zu verwenden. Sie reduzieren die Größe und Komplexität Ihres Repositorys und erleichtern das Aktualisieren der externen Bibliotheken auf eine neue Version.
Sie sind nicht schwer herauszufinden, wie man sie benutzt, und sie werden in dieser Situation ziemlich häufig verwendet. Notieren Sie sich daher in der README-Datei des Projekts, dass Sie Submodule verwenden und was zu tun ist, und die Leute sollten in der Lage sein, dies herauszufinden es raus. Als ich das erste Mal auf ein Repository mit einem Submodul gestoßen bin, habe ich es innerhalb von 10 bis 15 Minuten eingerichtet und hatte seitdem nie mehr Probleme, herauszufinden, was zu tun ist.
quelle
Durch die Verwendung von Submodulen können Sie keine lokalen Änderungen am Code vornehmen und eine Abhängigkeit vom externen Repository herstellen. Wenn Sie sicher sind, dass Sie niemals eine Bibliothek anpassen oder lokale Fehlerbehebungen vornehmen möchten, und sicher sein können, dass der externe Server immer verfügbar ist, wenn Sie eine neue Kopie klonen möchten, sind Sie hier richtig.
Kurz gesagt - möchten Sie einfach die Bibliotheken verwenden oder betrachten Sie sie als Teil Ihrer Codebasis? Wenn sie nicht "Ihr" Code sind, warum befinden sie sich in der Versionskontrolle und nicht nur in etwas, das Sie für die Installation benötigen?
quelle