2009-01-08 7 views
18

Ich habe ein lokales Git Repository mit git svn clone erstellt. Ich mache einen lokalen Zweig, mache einige Änderungen, wechsle zurück zum Master, git svn rebase und wenn alles gut ist, füge ich meinen Zweig wieder in den Master ein. Dann sieht der Baum etwas wie folgt aus:Warum verliert git svn dcommit die Historie von Zusammenführungs-Commits für lokale Zweige?

alt text http://img.skitch.com/20090108-cjguu3hcci9x2k17mcftamw8f1.jpg

Manchmal später, als ich git svn rebase wieder und einige entfernte Änderungen bekommen, verliert sie die Tatsache, dass a_branch in die Hauptlinie verschmolzen wurde und der Baum sieht wie folgt aus:

alt text http://img.skitch.com/20090108-kn3bn1qgi5ijw8ja5ijkd75pa3.jpg

Warum ist das? Kann ich damit aufhören? Gibt es eine einfache Möglichkeit zu sagen, dass ein Zweig zusammengeführt wurde, oder sollte ich meine Zweige löschen, wenn ich fertig bin, damit ich nicht vergesse, was zusammengelegt wurde und was nicht?

Antwort

22

Die Manpage git-svn empfiehlt, dass Sie keine Zusammenführung verwenden. Dies ist ein Nebeneffekt. Da Sie den Zweig neu erstellen (git svn rebase ist ein bisschen wie "git pull --rebase"), schreibt er den Verlauf neu. Es kann alle lokalen Commits wegwerfen, die bereits in der Subversion, wie beispielsweise der Zusammenführung, Upstream sind, und nur die Commits behalten, die tatsächlich im Svn-Repository existieren. Da ein triviales Merge-Commit einer lokalen Verzweigung in SVN keine Entsprechung hat, werden nur die "echten" Änderungen festgeschrieben. Dies sind also die einzigen Änderungen, die in Ihrer neuen referenzierten Master-Verzweigung zu sehen sind.

Im Idealfall sollte Ihr lokaler Zweig nur vorspulen, d. H. Es wird kein Zusammenführungs-Commit generiert. Wenn dies nicht der Fall ist, sollten Sie in Betracht ziehen, Ihren lokalen Zweig auf master zu retransferentieren, anstatt ihn zusammenzuführen. Dadurch wird vermieden, dass ein Zusammenführungs-Commit vollständig erstellt wird.

+1

+1 für Git Rebase Master – JoaoHornburg

0

Weil du durch Svn gehst. Sie werden eine Menge Informationen verlieren, wenn Sie das tun (Sie verlieren zum Beispiel auch den Autor).