Ich habe die Erweiterung git subtree ( Ссылка ) verwendet. Ich benutze "--squash", um das Protokoll des Hauptprojekts sauber zu machen, meine Schritte wie folgt:
lib in Hauptprojekt einfügen
git Unterverzeichnis hinzufügen - P sub / libdir --squash lib_remote master
bekomme ein Update von lib
git subtree pull -P Unter / libdir --squash lib_remote master
drückt Änderungen an lib_remote
git subtree push -P Unter / libdir --squash lib_remote master
Es funktioniert sehr gut für mich (beide Hauptprojekt und lib, haben eine Geschichte sinnvoll). Das Problem ist die Zeit von git subtree push, wird länger und länger.
Mein Zweck der Verwendung von git-subtree ist fast derselbe mit Screndib, der fragte git- Teilbaum speichert keine Historie, daher kann ich Teilbaumänderungen nicht durchführen, wie kann ich das beheben / dieses Problem in Zukunft vermeiden?
Ich denke, bei der Verwendung von --squash muss git subtree jedes Mal, wenn ein Push ausgeführt wird, den gesamten Verlauf seit dem "subtree add" durchsuchen.
Wie kann ich die Zeit des Subtree Push reduzieren? Oder machen Sie es effektiver, anstatt die gesamte Geschichte, nur Änderungen seit letzten Git Teilbaum push (oder ziehen)?
Ich gehe davon aus, dass "lib_remote" in Ihrem Code die URL des entfernten lib Repo nicht eine Verzweigung in Ihrem aktuellen Repo ist? Sowohl die Remote-Repo-URL als auch die Verzweigung in Ihrem aktuellen Repository funktionieren.
Ich sehe, dass Sie git subtree add
verwendet haben, um die remote lib als Teilbaum hinzuzufügen, und dann verwenden Sie einfach git subtree push
, um die Änderungen zu übernehmen.
Es ist besser, eine git subtree split
-Operation zu machen, um die Teilbaum-Änderungen vor der Push-Operation in einen separaten Zweig in Ihrem laufenden Repo aufzuteilen, dann den geteilten Zweig zum entfernten Repo zu schieben und diesen geteilten Zweig jedes Mal vorher zu halten die pushen, machen Sie eine git subtree split
-Operation erneut, dies wird die Geschichte des Unterbaums aus dem Punkt erstellen, den Sie zuletzt geteilt haben, es wird viel schneller sein. Andernfalls müsste git subtreee ohne diese Aufteilung die Historie des Unterbaums von dem Punkt aus erstellen, den Sie hinzugefügt haben. Solange der Unterbaum festgeschrieben wird, wird die Zeit des Gebäudes immer länger.
Wenn du --squash
nicht benutzt, während du hinzufügst, kannst du --rejoin
verwenden, während du splitest, das wird viel schneller.
Also sollte der Schritt der folgende sein.
lib in Hauptprojekt einfügen
git Unterverzeichnis hinzufügen - P sub / libdir --squash lib_remote_url Hauptverzeichnis
bekomme ein Update von lib
git subtree pull - P sub / libdir --squash lib_remote_url master
Teilen Sie die Unterbaumänderungen in einen separaten Zweig
git Unterverzeichnis split -P sub / libdir -b lib_remote_branch
drückt Änderungen an lib_remote
git push lib_remote_url lib_remote_branch: master
Behalten Sie den lib_remote_branch vor und wiederholen Sie Schritt 3 und Schritt 4, wenn Sie das nächste Mal drücken.
Das Hauptproblem besteht in den neuen Commits auf verschiedenen Präfixen seit dem ersten Add. Meine Lösung für dieses Problem ist eine "Bereinigung" -Operation, wo Sie alle Ihre Änderungen filtern, die nicht in anderen Repositories sind, und dann eine git subtree add für diesen neuen Zweig tun.
Dies ist eine ziemlich brutale Art, es zu tun, aber es ist im Grunde das gleiche wie zu sagen, machen Sie eine "git subtree add" auf einer frischen Kopie Ihres Haupt-Repository. Das ist das einzige, was für mich funktioniert hat ...
Tags und Links git git-subtree