git-subtree push --squash benötigt eine lange Zeit und wird im Laufe der Zeit mit mehr Commits länger

9

Ich habe die Erweiterung git subtree ( Ссылка ) verwendet. Ich benutze "--squash", um das Protokoll des Hauptprojekts sauber zu machen, meine Schritte wie folgt:

  1. lib in Hauptprojekt einfügen

    git Unterverzeichnis hinzufügen - P sub / libdir --squash lib_remote master

  2. bekomme ein Update von lib

    git subtree pull -P Unter / libdir --squash lib_remote master

  3. 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)?

    
Megodno 08.03.2012, 07:34
quelle

2 Antworten

2

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.

  1. lib in Hauptprojekt einfügen

    git Unterverzeichnis hinzufügen - P sub / libdir --squash lib_remote_url Hauptverzeichnis

  2. bekomme ein Update von lib

    git subtree pull - P sub / libdir --squash lib_remote_url master

  3. Teilen Sie die Unterbaumänderungen in einen separaten Zweig

    git Unterverzeichnis split -P sub / libdir -b lib_remote_branch

  4. 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.

    
weynhamz 09.03.2012 12:52
quelle
1

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 ...

    
owagh 09.04.2013 15:08
quelle

Tags und Links