So verwenden Sie Git Subtree zum Verwalten mehrerer Projekt-Repositorys

0
536

Programmierer verwenden Code häufig wieder. Tatsächlich ist es eines der Kernprinzipien jeder guten Codebasis, und zwar nicht wiederholen (DRY). Was ist, wenn Sie ein freigegebenes Projekt in mehreren anderen Repositorys verwenden möchten? Der git subtree-Befehl kann dabei helfen.

Das Problem der Codewiederverwendung

Das Einbetten von Projekten in andere Projekte stellt ein Problem dar; Project 1 und Project 2 sind beide mit Git verbunden, aber die direkte Verwendung des gemeinsamen Unterprojekts für beide ist keine gute Designwahl. Dies bedeutet im Wesentlichen, dass das Teilprojekt an zwei Stellen verwendet wird, und es wird unmöglich sein, eine offizielle Version des Teilprojekts zu verwalten.

Es gibt einige Lösungen für dieses Problem, jede mit ihren eigenen Nachteilen.

Die naheliegendste Lösung besteht zunächst darin, das Unterprojekt in ein Paket zu verwandeln und es auf einem Paketmanager wie NPM oder NuGet zu verteilen. Dies funktioniert sehr gut für Dinge, die nicht oft aktualisiert oder gewartet werden und es sich leisten können, in diskreten Versionsnummern an ihre Verbraucher verteilt zu werden. Wenn Sie diesen Code jedoch regelmäßig ändern, funktioniert das Integrieren, Veröffentlichen und Ziehen neuer Versionen des Projekts aus einer Drittanbieterquelle einfach nicht so gut wie der direkte Zugriff auf den Code. Es führt auch zu Komplikationen für die lokale Entwicklung.

Die andere Lösung besteht darin, ein Monorepo zu verwenden, ein riesiges Repository für Ihren gesamten Code. Dies ist nicht so verrückt, wie Sie vielleicht denken, und funktioniert gut, wenn sich Ihr gesamter Code in derselben Domäne befindet. Google verwendet ein Monorepo für seinen gesamten Code, und Microsoft verwendet eines für alle von ihnen verwalteten .NET-Assemblys. Dies löst das Problem, denn wenn Sie Code im Unterprojekt ändern, wird dieser bei jedem Neuaufbau aktualisiert. In Visual Studio kann dies ganz einfach mit Projektreferenzen erfolgen.

Werbung

Es gibt jedoch viele Fälle, in denen Sie das Beste aus beiden Welten möchten, und es zentral als Paket, sondern ermöglicht auch das direkte Einbetten und Bearbeiten in mehrere Projekte. Dafür bietet Git Subtree eine Lösung.

Das Kernkonzept ist ziemlich einfach: Sie können kleinere Git-Repos mit ihren

Normalerweise ist Git schlau genug, um das Pushen und Zusammenführen automatisch zu handhaben, je nachdem, welche Änderungen von welchem ​​Unterbaum stammen. Es empfiehlt sich jedoch, Commits nicht zwischen Unterbaum-Code und Hauptprojektcode zu mischen, da es Fälle gibt, in denen es zu einer komplizierteren Zusammenführung kommen kann, bei der Sie die zugrunde liegenden Git-Tools verwenden müssen, die git subtree-wraps.

Git-Unterbaum einrichten

Wenn Sie nur ein leeres Projekt einrichten und Teilbäume einrichten möchten, müssen Sie ein erstes Commit durchführen, auch wenn es leer ist, oder Git gibt sonst einen Fehler aus ein mehrdeutiger KOPF. Sie können einen leeren Commit mit dem folgenden Befehl ausführen:

git commit –allow-empty -n -m “Initial Commit.”

Sie möchten die Fernbedienung für das Unterprojekt hinzufügen und ihr einen Namen geben. Sie verwenden diesen Namen, um darauf zu verweisen:

git remote add -f SubTreeName https://github.com/user/project.git

Dann können Sie den Teilbaum mit dem angegebenen Präfix hinzufügen. Verwenden Sie den –squash Befehl, damit nicht der gesamte Teilprojektverlauf im Hauptprojekt gespeichert wird.

git subtree add –prefix .Path/To/SubTree SubTreeName master –squash

Verwenden von Git-Unterbaum

Wenn Sie einen Pull benötigen, aktualisiert Git nur das Hauptprojekt automatisch, sodass Sie die Fernbedienung abrufen und dann einen untergeordneten Baum verwenden müssen Befehl ziehen. Es ist etwas langwierig, da Sie das Präfix übergeben müssen, aber die Aufgabe erledigt:

git fetch SubTreeName master git subtree pull –prefix .Path/To/SubTree SubTreeName SubTreeName master –squash Advertisement

Beachten Sie, dass Sie Commits von der Fernbedienung abrufen können, aber wenn Sie sie in den Teilbaum ziehen oder an die Fernbedienung verschieben, müssen Sie speziell git subtree verwenden.

Wenn es soweit ist zurück zum Upstream beitragen, müssen Sie git subtree push verwenden:

git subtree push –prefix=.Path/To/SubTree SubTreeName master