Diese Dokumentation wurde zur Beschreibung der Serie 1.7.x von Apache™ Subversion® erstellt. Falls Sie eine unterschiedliche Version von Subversion einsetzen, sei Ihnen dringend angeraten, bei http://www.svnbook.com/ vorbeizuschauen und stattdessen die zu Ihrer Version von Subversion passende Version dieser Dokumentation heranzzuiehen.

Name

svn merge — Anwenden der Unterschiede zweier Quellen auf einen Pfad der Arbeitskopie.

Aufruf

svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]

svn merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]

svn merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]

Beschreibung

In allen drei Formen ist TARGET_WCPATH der Pfad der Arbeitskopie, der die Unterschiede erhalten wird. Wird TARGET_WCPATH weggelassen, werden die Änderungen auf das aktuelle Verzeichnis angewendet, es sei denn, die Quellen haben identische Basisnamen, die auf eine Datei im aktuellen Arbeitsverzeichnis passen. In diesem Fall werden die Änderungen auf diese Datei angewendet.

In den ersten beiden Formen kann SOURCE entweder ein URL oder ein Arbeitskopiepfad sein (wobei dessen entsprechende URL verwendet wird). Falls die Peg-Revision REV nicht angegeben ist, wird HEAD angenommen. In der dritten Form treffen dieselben Regeln auf SOURCE1, SOURCE2, M und N zu, mit dem einzigen Unterschied, dass, falls irgendeine Quelle ein Arbeitskopiepfad ist, die Peg-Revision explizit angegeben werden muss.

  • Zusammenführungen zum Synchronisieren und Rosinenpicken

    Die erste Form ohne irgendeine der Optionen -c oder -r wird Synchronisierungs-Zusammenführung genannt und es wird -r 1:REV impliziert. Diese Variante wird verwendet, um auf einem Zweig alle in Frage kommenden Änderungen von seinem unmittelbaren Vorgänger-Zweig unterzubringen, siehe „Einen Zweig synchron halten“.

    Wird die erste Form mit den Optionen -c oder -r verwendet, ist das eine Zusammenführung zum Rosinenpicken und wird verwendet, um eine explizit definierte Menge von Änderungen von einem Zweig zu einem anderen zu bringen, siehe „Die Rosinen herauspicken“

    [Tipp] Tipp

    Mehrfache Instanzen von -c und/oder -r können angegeben werden und Vorwärts- können mit Rückwärtsbereichen gemischt werden – die Bereiche werden intern auf ihre Minimalrepräsentierung komprimiert, bevor die Zusammenführung beginnt (die als Ergebnis eine leere Zusammenführung oder Konflikte bewirken kann, die die Zusammenführung beenden, bevor alle verlangten Revisionen zusammengeführt werden).

    In beiden Varianten der ersten Form wird SOURCE in Revision REV verglichen, wie sie zwischen den Revisionen N und M für jeden angegebenen Revisionsbereich existiert hat.

  • Zusammenführung zur Reintegration

    Die zweite Form wird Reintegrations-Zusammenführung genannt und wird verwendet, um Änderungen von einem Zweig (SOURCE) zurück auf den unmittelbaren Vorgänger-Zweig (TARGET_WCPATH) zu bringen.

    [Tipp] Tipp

    Zusammenführungen zur Reintegration unterstützen nur diesen speziellen Anwendungsfall und besitzen deshalb eine Reihe besonderer Anforderungen und Einschränkungen, die die anderen beiden Formen der Zusammenführung nicht haben. Siehe „Einen Zweig synchron halten“, „Reintegration eines Zweigs“, „Einen reintegrierten Zweig am Leben erhalten“, und „Funktions-Zweige“.

  • 2-URL-Zusammenführungen

    In der dritten Form, 2-URL-Zusammenführung genannt, wird der Unterschied zwischen SOURCE1 in Revision N und SOURCE2 in Revision M erstellt und auf TARGET_WCPATH angewendet. Die Revisionen sind standardmäßig HEAD, falls sie nicht angegeben sind.

Falls Verfolgung von Zusammenführungen aktiviert ist, zeichnet Subversion intern Metadaten (d.h., die Eigenschaft svn:mergeinfo) über die Zusammenführung auf, falls die beiden Quellen abstammungsmäßig in Beziehung stehen – falls die erste Quelle ein Vorgänger der zweiten ist oder umgekehrt. Bei Verwendung der ersten beiden Formen ist das gewährleistet. Subversion berücksichtigt ebenfalls bereits bestehende Metadaten über Zusammenführungen beim Ziel in der Arbeitskopie, wenn es die zusammenzuführenden Revisionen bestimmt; um wiederholte Zusammenführungen und unnütze Konflikte zu vermeiden kann es sein, dass nur eine Teilmenge der verlangten Bereiche zusammengeführt wird

[Tipp] Tipp

Verfolgung von Zusammenführungen kann durch die Option --ignore-ancestry abgestellt werden.

Anders als svn diff berücksichtigt der Zusammenführungsbefehl die Herkunft einer Datei beim Zusammenführen. Dies ist sehr wichtig, falls Sie Änderungen von einem Zweig auf einen anderen übertragen und eine Datei auf einem Zweig umbenannt haben, jedoch nicht auf dem anderen.

Optionen

Beispiele

Zurückführen eines Zweigs auf den Stamm (unter der Annahme, dass Sie eine aktuelle Arbeitskopie des Stamms haben):

$ svn merge --reintegrate \
            http://svn.example.com/repos/calc/branches/my-calc-branch 
--- Zusammenführen der Unterschiede zwischen Projektarchiv-URLs in ».«:
U    button.c
U    integer.c
U    Makefile
 U   .  
-- Aufzeichnung der Informationen für Zusammenführung zwischen Projektarchiv-URLs in ».«:
 U   .

$ # bauen, testen, verifizieren, ...

$ svn commit -m "Merge my-calc-branch back into trunk!" 
Sende          .
Sende          button.c
Sende          integer.c
Sende          Makefile
Übertrage Daten ..
Revision 391 übertragen.

Zum Zusammenführen von Änderungen in eine einzelne Datei:

$ svn merge -c 31 ^/trunk/thhgttg.txt thhgttg.txt 
-- Zusammenführen von r31 in »thhgttg.txt«:
U    thhgttg.txt 
-- Aufzeichnung der Informationen für Zusammenführung von r31 in »thhgttg.txt«:
 U   thhgttg.txt