Sie sollten darauf achten, explizit zu notieren, wovon Sie sprechen, wenn Sie den Begriff "Teilbaum" im Zusammenhang mit verwenden, gitda es hier tatsächlich zwei separate, aber verwandte Themen gibt:
git-subtree und git subtree verschmelzen Strategie .
Die TL; DR
Mit beiden Teilbaumkonzepten können Sie effektiv mehrere Repositorys in einem verwalten. Im Gegensatz zu git-submodule, bei dem nur Metadaten in Form von .gitmodules im Root-Repository gespeichert sind und Sie die externen Repositorys separat verwalten müssen.
Mehr Details
Die Strategie zum Zusammenführen von Git-Teilbäumen ist im Grunde die manuellere Methode, bei der die von Ihnen referenzierten Befehle verwendet werden.
git-subtree ist ein Wrapper-Shell-Skript, um eine natürlichere Syntax zu ermöglichen. Dies ist eigentlich immer noch ein Teil von contribund nicht vollständig in Git mit den üblichen Manpages integriert. Die Dokumentation wird stattdessen neben dem Skript gespeichert.
Hier sind die Nutzungsinformationen:
NAME
----
git-subtree - Merge subtrees together and split repository into subtrees
SYNOPSIS
--------
[verse]
'git subtree' add -P <prefix> <commit>
'git subtree' add -P <prefix> <repository> <ref>
'git subtree' pull -P <prefix> <repository> <ref>
'git subtree' push -P <prefix> <repository> <ref>
'git subtree' merge -P <prefix> <commit>
'git subtree' split -P <prefix> [OPTIONS] [<commit>]
Ich bin auf eine ziemlich große Anzahl von Ressourcen zum Thema Teilbäume gestoßen, als ich vorhatte, einen eigenen Blog-Beitrag zu schreiben. Ich werde diesen Beitrag aktualisieren, wenn ich dies tue, aber im Moment sind hier einige relevante Informationen zu der vorliegenden Frage:
Vieles von dem, was Sie suchen, finden Sie in diesem Atlassian-Blog von Nicola Paolucci im entsprechenden Abschnitt unten:
Warum Teilbaum anstelle von Submodul verwenden?
Es gibt mehrere Gründe, warum Sie eine subtreebessere Verwendung finden könnten :
- Die Verwaltung eines einfachen Workflows ist einfach.
- Ältere Versionen von
gitwerden unterstützt (auch vorher v1.5.2).
- Der Code des Unterprojekts ist direkt nach Abschluss
clonedes Superprojekts verfügbar .
subtreeDie Benutzer Ihres Repositorys müssen nichts Neues lernen. Sie können die Tatsache ignorieren, dass Sie subtreeAbhängigkeiten verwalten.
subtreefügt keine neuen Metadatendateien wie submodules(dh
.gitmodule) hinzu.
- Der Inhalt des Moduls kann geändert werden, ohne dass an anderer Stelle eine separate Repository-Kopie der Abhängigkeit vorhanden ist.
Meiner Meinung nach sind die Nachteile akzeptabel:
- Sie müssen sich über eine neue Zusammenführungsstrategie (dh
subtree) informieren .
- Das Zurückgeben von Code
upstreamfür die Teilprojekte ist etwas komplizierter.
- Die Verantwortung, Super- und Teilprojektcode nicht in Commits zu mischen, liegt bei Ihnen.
Ich würde auch vielem zustimmen. Ich würde empfehlen, den Artikel zu lesen, da er einige häufig verwendete Begriffe behandelt.
Sie haben vielleicht bemerkt, dass er hier auch ein Follow-up geschrieben hat, in dem er ein wichtiges Detail erwähnt, das bei diesem Ansatz weggelassen wird ...
git-subtree Derzeit ist die Fernbedienung nicht enthalten!
Diese Kurzsichtigkeit ist wahrscheinlich auf die Tatsache zurückzuführen, dass Benutzer beim Umgang mit Teilbäumen häufig manuell eine Fernbedienung hinzufügen, diese wird jedoch auch nicht in git gespeichert. Der Autor beschreibt einen Patch, den er geschrieben hat, um diese Metadaten zu dem git-subtreebereits generierten Commit hinzuzufügen . Bis dies in die offizielle Git-Hauptzeile gelangt, können Sie etwas Ähnliches tun, indem Sie die Commit-Nachricht ändern oder in einem anderen Commit speichern.
Ich finde diesen Blog-Beitrag auch sehr informativ. Der Autor fügt git-streeder Mischung eine dritte Teilbaummethode hinzu, die er aufruft . Der Artikel ist eine Lektüre wert, da er die drei Ansätze ziemlich gut vergleicht. Er gibt seine persönliche Meinung darüber ab, was er tut und was nicht und erklärt, warum er den dritten Ansatz entwickelt hat.
Extras
Gedanken schließen
Dieses Thema zeigt sowohl die Leistung gitals auch die Segmentierung, die auftreten kann, wenn ein Feature nur die Marke verfehlt.
Ich persönlich habe eine Abneigung gegen das aufgebaut, git-submodulewas ich für Mitwirkende verwirrender finde. Ich bevorzuge es auch, ALLE meine Abhängigkeiten in meinen Projekten zu verwalten, um eine leicht reproduzierbare Umgebung zu ermöglichen, ohne zu versuchen, mehrere Repositorys zu verwalten. git-submoduleAllerdings ist es derzeit viel bekannter, daher ist es offensichtlich gut, sich dessen bewusst zu sein und abhängig von Ihrem Publikum, das Ihre Entscheidung beeinflussen kann.