2009-02-21 5 views
6

Ich habe ein Verzeichnis unter Subversion-Kontrolle. Ich habe einen Zweig daraus gemacht, nur um Verschmelzungen zu testen. Ich nahm eine Datei, änderte Zeile X im Stamm als "abc" und modifizierte die gleiche Zeile X wie "def" in seinem Zweig.SVN Merge Frage

Dann wird aus dem Zweig Arbeits dir habe ich:

svn merge branchURL trunkURL . 

es die Datei mit dem Inhalt als „abc“ in dieser Zeilennummer aktualisiert, dh es mir nicht an der gleichen Zeilennummer, einen Konflikt gab als hätte svn update mir gegeben, wenn ich es im selben Arbeitsverzeichnis getan hätte und jemand das "def" im Repository begangen hätte.

Also ersetzt der svn merge nur den Inhalt beim Zusammenführen und bringt keine Konflikte?

Und wenn das der Grund für die Verzweigung eines Proj-Dir aus dem Hauptstamm wäre nutzlos, wenn man nicht in einer Weise zusammenführen kann, um sowohl die Änderungen in Stamm und Zweig zu halten.

+0

Also Sie 1) verzweigte 2) modifizierte Zeile X auf "abc" auf dem Stamm 3) wechselte auf den Zweig 4) modifizierte Zeile X auf "def" auf dem Zweig 5) verschmolzen? Was war der Inhalt von Zeile X, bevor Sie ihn in "abc" geändert haben? –

+0

Ich denke, dass es einen Versionsunterschied in meinem Büro b/w mein Client svn und den Server svn geben würde, wie ich mich erinnere, dass ich vor kurzem meine svn-Version auf 1,5 aktualisiert und das nicht auf dem Server, wo die Repos existieren. Die Tatsache, dass ich keine Konflikte bekommen habe, kann daher auf Version Diff zurückzuführen sein. – ashishsony

Antwort

6

Sie erkennen, was

svn merge branchUrl trunkUrl branchWorkingCopy 

Eigentlich tut, nicht wahr?

Hier ist eine Übersetzung:

Abbildung aus dem Satz von Änderungen erforderlich, um den Inhalt von branchUrl identisch mit denen von trunkUrl zu machen. Führen Sie diese Änderungen nun am BranchWorkingCopy aus.

Sie werden keine Konflikte erhalten, die auf diese Weise verschmelzen. Wenn Sie jedoch Ihre branchWorkingCopy einchecken, haben Sie Ihren Zweig mit Ihrem Stamm identisch gemacht, was fast sicher nicht das ist, was Sie wollen.

Wenn Sie nur ausgewählte Änderungen von Stamm kopieren-Zweig, werden Sie Subversion sagen, müssen die Änderungen, die Sie wollen eine andere Form des Merge-Befehl kopieren und verwenden:

svn merge -r100:103 trunkUrl branchWorkingCopy 

Was bedeutet: Bestimmen Sie die Reihe von Änderungen erforderlich, um von R100 zu R103 auf Trunk zu erhalten. Führen Sie diese Änderungen an der Arbeitskopie (des Zweiges) durch. Beachten Sie, dass dieser "Satz von Änderungen" die von r100 vorgenommenen Änderungen nicht enthält, da diese durch die Reihe von Änderungen erfasst werden, die erforderlich sind, um von r99 auf r100 zu gelangen. Revisionsbereiche in Subversion sind halb offen.

Lesen Sie auch die fine manual, wenn Sie noch nicht haben.

+0

Er kann immer noch Konflikte bekommen (habe ich), aber Ihre Antwort ist ansonsten korrekt. –

+0

Das wundert mich, aber dann nehme ich keine unangekündigten Änderungen in BranchWorkingCopy an. Haben Sie Konflikte mit einem sauberen Ziel gesehen? – bendin

+0

tatsächlich löste diese Antwort alle meine Zweifel, als ich den Befehl mit der falschen Reihenfolge der Argumente verwendete ... – ashishsony

0

so funktioniert die svn merge nur ersetzt den Inhalt während der Zusammenführung und keine Konflikte bringen?

Nun, nein. Ich kann nicht wirklich darauf hinweisen, was Sie falsch gemacht haben, aber das Verschmelzen von Flags ist mit dem des Updates identisch.

0

Ich vermisse etwas, aber wenn ich Svn merge verwendet habe, musste ich immer die Revisionsnummern richtig bekommen, wenn ich wollte, dass es richtig funktioniert.

Also, wenn Sie (oder letzte fusionierte) verzweigt in Revision 100, ist der Stamm derzeit bei 200, und Sie Änderungen aus dem Stamm in Ihrer Branche fusionieren, dann in der Branche Arbeitsverzeichnis Sie tun:

svn merge -r 100:200 trunkURL 

Dann denke ich, dass Sie einen Konflikt sehen werden, den Sie auflösen und einchecken. Sie tun eine ähnliche Sache im Stammarbeitsverzeichnis, um von Ihrem Zweig zurück in den Stamm zu verschmelzen.

svn merge ohne -r diffs die zwei Orte, die Sie angeben, und wendet dieses diff auf das Arbeitsverzeichnis an. Ich spekuliere also, dass es keinen Konflikt gegeben hat, weil Ihr Arbeitsziel mit dem Leiter der Branche übereinstimmt. So kann der Unterschied zwischen dem Zweigkopf und dem Stammkopf problemlos auf Ihr Arbeitsverzeichnis übertragen werden. Dies ist nicht das, was Sie tun möchten: es ändert nur Ihr Arbeitsverzeichnis, um dem Stamm zu entsprechen. Versuchen Sie eine weitere Änderung am Zweig vorzunehmen, checken Sie ein und wiederholen Sie den Vorgang. Wenn die Zusammenführung diese Änderung rückgängig macht (weil sie nicht auf dem Stamm ist), dann habe ich recht mit dieser Form der SVN-Zusammenführung, aber wie gesagt, ich habe sie nicht benutzt.

[Edit: vor SVN-Version 1.5 ...]

Arbeitsverzeichnisse und Zweige sind nicht die gleiche Sache in SVN und ärgerlich, wie es ist, müssen Sie die Unterschiede berücksichtigen. SVN benötigt mehr Informationen, um die gewünschte Filialzusammenführung durchzuführen, als ein Update oder Check-In durchzuführen, da afaik nicht automatisch berücksichtigt, wo die Verzweigung aufgetreten ist, auf die Art und Weise, wie sie immer berücksichtigt wird, wenn ein Arbeitsverzeichnis ausgecheckt wurde. Ich bin mir sicher, dass es einen Grund dafür gibt, ich weiß nicht genau, was es ist: möglicherweise weil svn copy für mehr Dinge als nur Zweige ist.

[Edit ... aber laut Joshua McKinnon's Kommentar zu dieser Antwort, ab 1.5 svn unterstützt richtige Branch Merges, die tun, was Sie wollen automatisch.Geben Sie die URL an, von der Sie eine Verbindung herstellen, und führen Sie den Befehl im Arbeitsverzeichnis von dem aus, mit dem Sie eine Verknüpfung herstellen. Versuchen Sie in diesem Fall

svn merge trunkURL 

und Sie sollten den Konflikt sehen. Sie könnten zunächst das Arbeitsverzeichnis zurückgreifen müssen.]

+0

Bis Subversion 1.5, ich glaube, das war immer notwendig. Jetzt führt eine direkte 'svn merge sourceURL' aus der Zielarbeitsplätze alle Revisionen zusammen, die nicht als in den Metadaten von subversion zusammengeführt protokolliert werden. –

+0

Schön, danke. Nun, Sie erwähnen es, ich erinnere mich zu hören, dass 1.5 Verbesserungen in dieser Hinsicht hatte. Aber die Firma, mit der ich zu dem Zeitpunkt 1.5 unterwegs war, hatte bereits eine Reihe von Skripten, um die richtigen Versionsnummern herauszufinden, und war bis zu meiner Abreise nicht dazu gekommen, Dinge zu ändern. –

+0

Ich denke, Sie haben einen gültigen Punkt darüber, warum ich den Konflikt nicht bekommen .. aber ich werde wieder am Montag versuchen müssen, bevor ich meine Beobachtungen weiter posten kann. danke für die Beantwortung. – ashishsony