18 Stimmen

Warum verliert git svn dcommit die Historie von Merge Commits für lokale Zweige?

Ich habe ein lokales Git-Repository erstellt mit git svn clone . Ich erstelle einen lokalen Zweig, nehme einige Änderungen vor und wechsle zurück zum Master, git svn rebase und wenn alles in Ordnung ist, führe ich meinen Zweig wieder in Master ein. Dann sieht der Baum ungefähr so aus:

Alt-Text http://img.skitch.com/20090108-cjguu3hcci9x2k17mcftamw8f1.jpg

Manchmal, wenn ich später git svn rebase wiederholen und einige entfernte Änderungen erhalten, geht die Tatsache verloren, dass a_branch in die Mainline eingebunden wurde und der Baum sieht wie folgt aus:

Alt-Text http://img.skitch.com/20090108-kn3bn1qgi5ijw8ja5ijkd75pa3.jpg

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

22voto

richq Punkte 53842

Die Manpage von git-svn empfiehlt, dass Sie merge nicht verwenden. Dies ist ein Nebeneffekt. Da Sie den Zweig neu einbinden (git svn rebase ist ein bisschen wie "git pull --rebase"), wird die Historie effektiv neu geschrieben. Es verwirft möglicherweise alle lokalen Commits, die bereits stromaufwärts in Subversion sind, wie z.B. der Merge, und behält nur die Commits, die wirklich im svn-Repository existieren. Da ein trivialer Merge-Commit eines lokalen Zweiges keine Entsprechung in SVN hat, committen Sie nur die "echten" Änderungen, so dass diese die einzigen Änderungen sind, die in Ihrem neuen, neu basierten Master-Zweig zu sehen sind.

Idealerweise sollte Ihr lokaler Zweig nur im Schnelldurchlauf zusammengeführt werden, d.h. es wird kein Merge-Commit erzeugt. Wenn dies nicht der Fall ist, sollten Sie in Erwägung ziehen, Ihren lokalen Zweig auf master zu rebasen, anstatt ihn zusammenzuführen. Dies vermeidet die Erstellung eines Merge Commits vollständig.

0voto

Dustin Punkte 85400

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X