Ich benutze Avery Pennaruns Git-Teilbaum, der eine Erweiterung von Git ist.
Wie kann ich einen Commit von einem Sub-Repo in meinen Haupt-Repo mit git subtree auswählen? Wie gehe ich zu einem bestimmten Commit in der Geschichte des Sub-Repos, nachdem ich bereits einen Git-Teilbaum an diesem Präfix ausgeführt habe?
Ich betreibe dies hauptsächlich im Squash-Commits-Modus.
Wie gehe ich zu einem bestimmten Commit in der Geschichte des Sub-Repos?
Wenn Sie die Commits gequetscht haben, dann gibt es keinen Weg, da der Squash die verschiedenen Commits verliert.
Andernfalls können Sie mit einem nicht gequetschten Teilbaum zu jedem Commit des Teilbaums mit dem gleichen Hash wie im ursprünglichen Repository navigieren, aus dem der Teilbaum erstellt wurde.
git subtree
(ohne Squash) fügt Ihrem Repository alle relevanten Commits aus dem externen Repository als unabhängigen Baum innerhalb Ihres aktuellen Repos hinzu. Wenn Sie git subtree add
ausführen, können Sie feststellen, dass mehrere Commits hinzugefügt wurden (alle ursprünglichen Commits aus dem externen Repo) und ein letztes Merge-Commit, das den Inhalt aus diesem Teilbaum in das angegebene Verzeichnis mit der Option --prefix
verschiebt. Kurz gesagt, es prüft einen Zweig aus einem anderen, nicht verwandten Repository und fügt es dann in Ihren aktuellen Zweig ein, indem der gesamte Inhalt in einen bestimmten Unterordner verschoben wird.
All dies bedeutet, dass Ihnen die Geschichte des externen Repos zur Verfügung steht, Sie können es einfach so auschecken, wenn Sie bedenken, dass diese Kasse, da sie ein völlig anderer Baum ist, wahrscheinlich ALLE Inhalte Ihres Arbeitsbereichs verändern wird, was bei großen Projekten lange dauern kann.
Das bringt uns zur zweiten:
Wie kann ich einen commit von einem Sub-Repo in meinen Hauptrepo mit git subtree auswählen?
Scheint so, als ob das aktuelle "cherrypicking" nicht von git subtree
auf sich selbst unterstützt wird. Aber angesichts der Implikationen all der oben genannten kann das Folgende getan werden.
Berücksichtige, dass du, wenn du versuchst, git subtree pull
in deinen Unterbaum zu übernehmen, ein Update erhältst, und das Commit enthält, das du ausgewählt hast, wirst du mit einem Konflikt enden, da du zwei Änderungen am selben Ort hast.
Eine weitere, einfachere Möglichkeit, wenn Sie Zugriff auf das ursprüngliche Teilbaum-Repository haben, besteht darin, die Auswahl in einem Zweig zu treffen und dann nur git subtree pull
für diesen bestimmten Zweig auszuwählen.
Tags und Links git git-subtree cherry-pick