2010-11-18 7 views
6

Mögliche Duplizieren:
Merging: hg/git vs. svnWas macht Git besser als Subversion für die Zusammenführung?

Ich habe gehört/gelesen, dass Git und DVCS ist im Allgemeinen besser als Subversion und zentralisierte Versionskontrollsysteme. Und einer der Gründe, die ich dafür gehört habe, ist, dass das Zusammenführen bei DVCS viel besser ist als bei einem zentralisierten System.

Was ist der Unterschied zwischen den beiden, wenn es um das Zusammenführen geht? Was macht Git besser als Subversion, wenn Sie beispielsweise eine Verzweigung neu integrieren?

+0

Ich denke, viel von der "SVN Merging Debatte" kommt von DVCS-Fans. Die Verschmelzung ist eine der Sachen, die SVN im Vergleich zu CVS verbessert hat, aber CVS '(zu Recht) schlechte Reputation könnte sich auf SVN auswirken. In unserem Team verschmelzen wir viel in SVN und ich kenne keine Probleme. – sbi

+2

Sehr verwandt: http://stackoverflow.com/questions/2613525/what-makes-merging-in-dvcs-easy – kolobos

Antwort

5

Es ist nicht so sehr die Tatsache, dass sie verteilt werden, sondern vielmehr, dass sie Changesets statt Versionen verfolgen. (Allerdings arbeiten verteilte Systeme in der Regel mit Changesets, während zentralisierte Systeme häufig Versionen verwenden, da verteilte Systeme mit einem versionsbasierten Ansatz nicht funktionieren, während zentralisierte Systeme davon profitieren können).

Subversion sagt, OK, zuerst hatte ich diese Version und dann hatte ich diese Version. Und dann, wenn es Zeit ist zu verschmelzen, braucht es die zwei Versionen, vergleicht sie und macht fundierte Vermutungen darüber, wie man sie kombiniert. Git, mercurial und ähnliche SCMs, sagen wir, OK, zuerst hatte ich nichts, dann hat jemand diese Änderung gemacht und dann hat jemand anders diese Änderung gemacht, usw. Wenn es Zusammenführungszeit ist, müssen sie im Grunde nur die Änderungen anwenden Ordnung, hier und da Zeilennummern korrigieren und Dateiumbenennung berücksichtigen, aber das ist es im Grunde genommen.

Subversion hat nicht wirklich genug Informationen, um eine intelligente Zusammenführung durchzuführen: Es sieht nur die Unterschiede, aber nicht wo sie herkommen.

+4

Konnte nicht Subversion die Überarbeitungen durchqueren, um die gleichen Informationen zu finden? –

+2

@Lasse: Natürlich hat es. Was ist der Unterschied zwischen 'r1' und' r2' wenn nicht die Änderungen zwischen 'r1' und' r2'? Dieses Argument entgeht mir wirklich. – sbi

+3

Nun, wenn Subversion nur die Originaldatei und dann das Endergebnis betrachtet, hat es alle Zwischenschritte verloren, wobei DVCS zumindest diese Schritte verwendet, um die Zusammenführung durchzuführen. Aber meine Frage ist nur, warum Subversion die Zwischenrevisionen nicht analysieren konnte, um diese Schritte zu finden. Ich bin immer noch auf der Suche nach einer guten Erklärung, woher die Magie beim DVCS-Merging kommt. –

3

Linus torvalds hat ein Gespräch über Git, available on youtube und sehenswert. Darin entlässt er alle Quell-Kontroll-Lösungen, aber git, und erklärt dann, warum Git großartig ist.

Persönlich fand ich Git frustrierend, um mit zu kommen, und ich benutze SVN professionell jeden Tag. Ich denke, Svn ist schnell genug und verzweigt sich & Merge gut genug für meine Bedürfnisse.

Aber ich bin kein Quellcode-Experte!

+2

Nun, er erklärt irgendwie, dass git * großartig ist, aber nicht so sehr wie * wie * git es schafft groß. Zum Beispiel sagt er, dass Git das gesamte Projekt statt einzelner Dateien verfolgt. Einfache Experimente, bei denen Text in eine andere Datei verschoben wird, wenn jemand sie ändert, führen jedoch immer noch zu Konflikten bei der Zusammenführung. –