Ist die Unannehmlichkeit beim Zusammenführen in SVN vor Version 1.5 inzwischen veraltet, wenn das Fehlen von Metadaten nicht mehr der Fall ist?

11

Ich fange mit SVN an und so viele Quellen sagen, dass das Zusammenführen in SVN im Vergleich zu DVCS-Tools sehr schwierig ist. Die neuesten Fragen, die ich hier auf SE finden konnte, stammen aus dem Jahr 2012.

Manchmal wird erwähnt, dass der Grund dafür ist, dass SVN vor Version 1.5 keine Metadaten hatte, aber SVN ist jetzt in Version 1.8.9.

Angesichts der Tatsache, dass SVN jetzt viel ausgereifter als Version 1.5 ist, und insbesondere der Tatsache, dass wir SVN 1.5 nicht verwendet haben, damit wir nicht unter dem erwähnten Mangel an Metadaten leiden - gibt es immer noch viel Gültigkeit in diesen Argumenten gegen SVN?

Ich verstehe, dass DVCS einen völlig anderen Ansatz verfolgt, der oft wünschenswerter ist, aber für diejenigen, die SVN aus irgendeinem Grund "müssen", ist das Zusammenführen nicht mehr wirklich "Hölle", oder?

Torben Gundtofte-Bruun
quelle
3
@ TorbenGundtofte-Bruun - Ich habe momentan nicht die Zeit, eine solche Antwort zu geben, aber ich werde sagen "Keine Angst vor SVN". Es gibt Einschränkungen, aber auch DVCS.
kdgregory

Antworten:

15

Es funktioniert gut, wenn Sie sich an die einfachen Fälle halten , aber es gibt einige komplexe Fälle , die dies nicht tun.

Die Einschränkungen, an die ich denken kann:

  • Der neueste Vorfahr kann nur gefunden werden, wenn er sich in einem der beteiligten Zweige befindet. Also , wenn Sie erstellen branches/thisund branches/thatbeide aus trunkund dann versuchen , fusionieren branches/thiszu branches/that, wird es nicht wissen , was zu tun ist . Das heißt, Sie können nur einen Zweig zum oder vom übergeordneten Zweig zusammenführen. Dies kann auftreten, wenn Sie zwei Feature-Zweige starten und später feststellen, dass die Features voneinander abhängig sind und diese kombinieren müssen.

  • Während es behauptet, dass es Umbenennungen verfolgen kann, findet das Zusammenführen von Zweigen, wenn Dateien auf der einen Seite verschoben und auf der anderen Seite geändert wurden, nicht immer die richtigen Dateien zum Zusammenführen, und das manuelle Korrigieren ist etwas mühsam, da die erforderlichen Informationen nirgendwo zurückbleiben Hand.

  • Hinzugefügte Dateien verursachen bei späteren Zusammenführungen manchmal falsche Konflikte.

  • Da Subversion kein separates Verzweigungskonzept hat, können Sie nur einen Teilbaum eines Projekts zusammenführen, was ziemlich schnell zu großen Problemen führen kann. Es wird dringend empfohlen, stets darauf zu achten, dass vollständige Zweige zusammengeführt werden. Leider werden die Eigenschaften von Zusammenführungsinformationen aus irgendeinem Grund manchmal in Unterverzeichnissen angezeigt, auch wenn sie überflüssig erscheinen und die Zusammenführung für den gesamten Zweig korrekt durchgeführt wurde.

  • Zu guter Letzt ist es langsam . Merges an einem Projekt einer ernsthaften Größe dauert oft Minuten , wo die meisten DVCS es tun kann unter einer Sekunde.

Jan Hudec
quelle
+1, tolle Antwort. Der Punkt in Bezug auf den gemeinsamen Vorfahren ist etwas, worauf ich achten muss. Haben Sie Referenzen für diese Fakten?
Doval
1
@Doval: Erfahrung.
Jan Hudec
möglicherweise auch erwähnenswert, dass svn auch kein separates Konzept für Tags hat
jk.
Könnte Ihr erstes Aufzählungszeichen (danke für eine sehr klare Erklärung!) Nicht durch die Verwendung eines Akkumulationszweigs gelöst werden, der denselben Verzweigungspunkt wie die Feature-Zweige hat? (basierend auf Vance98 ) Tritt das Problem nur dann wirklich auf, wenn die beiden Feature-Zweige unterschiedliche Verzweigungspunkte haben?
Torben Gundtofte-Bruun
@ TorbenGundtofte-Bruun: Der letzte gemeinsame Vorfahr muss kein Verzweigungspunkt sein. Sie können es selbst finden und Subversion anweisen, Änderungen zwischen bestimmten Peg-Revisionen anzuwenden. Aber das Problem ist, dass es eine Menge Arbeit ist und man erkennen muss, dass man es tun muss, weil Subversion nicht unbedingt die Hände hochwirft und sagt, dass es nicht verschmelzen kann. Stattdessen kann es einen gemeinsamen Vorfahren finden, der nicht aktuell ist, und viele Konflikte erzeugen.
Jan Hudec
1

Nach meiner Erfahrung wurde das Zusammenführen in SVN in Version 1.6 "behoben". Ich arbeite sowohl in Mercurial als auch in SVN, und seit Version 1.6 von SVN scheint das Zusammenführen auf beiden Plattformen ungefähr gleich viel Arbeit zu bedeuten. Die einzige Ausnahme könnte sein, dass Sie daran denken müssen, die --reintegrateOption anzugeben, wenn Sie mithilfe von SVN von einem Zweig zurück in den Trunk führen.

Dies ist nur meine operative Erfahrung. Ich weiß nichts über die Interna von SVN.

Charles E. Grant
quelle
2
1.8 kann zum Glück endlich den "Reintegrate" -Fall selbst erkennen. Dies kümmert sich jedoch nur um die neuesten gemeinsamen Vorfahren auf lokaler oder entfernter Ebene. Es kann es immer noch nicht im dritten Zweig finden.
Jan Hudec