2 Stimmen

Welches Versionskontrollwerkzeug eignet sich am besten für die reflektierende oder zyklische Zusammenführung? SVN, Git?

Reflektierende/zyklische Zusammenführung

Dies lässt sich am einfachsten anhand eines Beispiels erklären. Nehmen wir an, Sie arbeiten an einem Funktionszweig, der von Ihrem Stamm kopiert wurde. Während des Entwicklungsprozesses führen Sie regelmäßig "alle" neuen Änderungen vom Stamm in Ihren Zweig ein, so dass der Zweig mit der Arbeit am Stamm "synchron" bleibt. Wenn Sie schließlich Ihren Zweig wieder mit dem Stamm zusammenführen, nennt man das eine reflektierende (oder zyklische) Zusammenführung.

Siehe den Artikel Subversion merge reintegrate auf http://blogs.open.collab.net/svn/2008/07/subversion-merg.html für weitere Einzelheiten. Sie können auch nachlesen unter http://jugalps.wordpress.com/2009/07/31/svn-branching-and-merging-in-scrum/ um einen Überblick über einen typischen reflektierenden Zusammenführungsprozess zu erhalten. Meine persönliche Erfahrung mit SVN ist nicht gut genug, wenn es um solche Szenarien geht.

Hat jemand Erfahrung mit einem anderen Versionskontrollwerkzeug als SVN für die reflektierende Zusammenführung?

3voto

Cascabel Punkte 449595

Git wurde schon immer mit dieser Fähigkeit im Hinterkopf entwickelt. Es war mein erstes VCS, und für mich ist diese Art von Arbeitsablauf völlig normal. Im Allgemeinen ist das Zusammenführen (ein Push oder ein angeforderter Pull) zurück zum Ursprung ("trunk") trivial, da Sie durch regelmäßiges Zusammenführen vom Ursprung sichergestellt haben, dass Ihr HEAD (Branch Tip) den HEAD des Ursprungs in seiner Vergangenheit hat, so dass Origin, wenn es Ihre Arbeit zusammenführt, sich nur vorwärts durch die Historie bewegen muss, anstatt tatsächlich ein Zusammenführen durchzuführen (Git nennt dies ein "Fast Forward").

Die Rebase-Funktion von Git kann auch verwendet werden, um den Verlauf noch schöner zu gestalten. Wenn Sie diesen Arbeitsablauf anwenden, können Sie Ihre Arbeit immer auf das, was Sie aus dem Ursprung ziehen, rebasen, anstatt sie zusammenzuführen. (Das ist ein Umschreiben der Historie, also müssen Sie sicher sein, dass Sie es nicht mit etwas bereits Veröffentlichtem machen) Auf diese Weise sind alle Ihre Merges von Origin ein Schnelldurchlauf und Ihre Arbeit ist nur eine einzige Sequenz von Commits über dem HEAD von Origin. Das macht die Geschichte direkter - hoffentlich eine gerade Linie, anstelle einer Serie von vielen Zusammenführungen.

2voto

Ich habe kürzlich alle meine neuen Projekte von SVN auf Git umgestellt. Ich kann nur sagen, dass Branching und Merging viel einfacher ist.

Zweige sind so einfach zu erstellen und zu verwalten, dass ich praktisch jeden Tag einen neuen Zweig entwickle, den ich in meinen lokalen Zweig übertrage und dann wieder zusammenführe, wenn ich fertig bin. Ich arbeite mit einer kleinen Gruppe zusammen, und wir hatten keine Probleme, so zu arbeiten.

1voto

Lucas S. Punkte 13041

Wie Sie sagten, war das reflektierende Zusammenführen mit SVN früher ein Alptraum, aber mit der neuesten Version der svn 1.6.x Serie gibt es viel Unterstützung dafür (jetzt werden beim Zusammenführen Metadaten zum Zusammenführen in der Historie gespeichert, was beim Zurückführen von Änderungen hilft).

Ich verwende derzeit Bazaar als VC-System (es ist ein verteiltes VCS, wie Git), und ich kann sagen, dass es mehr Unterstützung für Verzweigungen und Re-Parenting/Merging-Back-Zweige in die Hauptlinie hat. Auch Git hat Unterstützung dafür (Rebase), beide sind mit Branching/Merging-Back im Hinterkopf entworfen.

1voto

Jonathan Leffler Punkte 694013

Das Produkt ClearCase von IBM Rational unterstützt genau diese Arbeitsweise - es ist eine Standardmethode für die Arbeit an Entwicklungszweigen, und die Zusammenführung erfolgt so gut wie automatisch in beide Richtungen (es sei denn, es gibt widersprüchliche Änderungen, natürlich). Die restliche Infrastruktur, die für ClearCase benötigt wird, bedeutet jedoch wahrscheinlich, dass Sie es nur verwenden werden, wenn Ihr Unternehmen eine größere Investitionsentscheidung trifft.

0voto

Aaron Digulla Punkte 308693

Subversion, das mehr oder weniger ein großer Bugfix für CVS ist, hat ähnliche Probleme mit dem Zusammenführen wie CVS. Beide wurden für wirklich einfache Merge-Fälle entwickelt, nicht für das, was wir heute verwenden (hunderte von Leuten, die an der gleichen Code-Basis arbeiten, wobei jeder eine leicht unterschiedliche Version hat).

Git und andere moderne DVCS wurden entwickelt, um dieses Problem zu lösen (sowie den Teil des verteilten VCS). Git verfügt über viele verschiedene Zusammenführungsalgorithmen und es ist einfach, einen neuen zu erstellen. Aber ich vermute, dass es schwer wäre, ein Szenario zu entwickeln, das die Linux-Kernel-Entwickler noch nicht gesehen haben ;)

Nach meiner persönlichen Erfahrung ist Git ein gutes Werkzeug, wenn man das meiste, was man über SVN weiß, vergisst. Andernfalls wird man versuchen, sein SVN/CVS-Wissen anzuwenden, und das wird einfach nicht funktionieren. Setzen Sie sich hin, arbeiten Sie die Tutorials durch und fangen Sie wirklich an, so zu arbeiten, als hätten Sie noch nie ein VCS gesehen. Ich habe zum Beispiel versucht, mehrere Projekte in ein einziges Repository zu packen.

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