本手册旨在描述 Subversion 的 1.6.x 系列版本。如果您使用的是其他版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适用于您 Subversion 版本的手册。

名称

svn merge — 将两个源之间的差异应用于工作副本路径。

概要

svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH]

svn merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]

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

描述

在第一种形式中,源 URL 在修订版 NM 中指定。这是要比较的两个源。如果省略,修订版默认为 HEAD

在第二种形式中,与源工作副本路径相对应的 URL 定义了要比较的源。必须指定修订版。

在第三种形式中,SOURCE 可以是 URL 或工作副本路径(在这种情况下,将使用其对应的 URL)。如果未指定,SOURCE 将与 WCPATH 相同。SOURCE 在修订版 REV 中与它在提供的每个修订版范围内的 NM 修订版之间存在的版本进行比较。如果未指定 REV,则假定为 HEAD

-c M 等效于 -r <M-1>:M,而 -c -M 则执行相反的操作:-r M:<M-1>。如果未指定修订版范围,则使用默认范围 1:HEAD。可以指定多个 -c 和/或 -r 实例,并且允许混合正向和反向范围——在合并开始之前,这些范围会在内部压缩到最小的表示形式(这可能会导致无操作)。

WCPATH 是将接收更改的工作副本路径。如果省略了 WCPATH,则假设默认值为 .,除非源具有相同的基名,并且该基名与 . 中的文件匹配。在这种情况下,差异将应用于该文件。

Subversion 仅当两个源是祖先相关的(如果第一个源是第二个源的祖先,反之亦然)时,才会在内部跟踪有关合并操作的元数据。使用第三种形式时,可以保证这一点。与 svn diff 不同,合并命令在执行合并操作时会考虑文件的祖先关系。当您将一个分支的更改合并到另一个分支时,这一点非常重要,尤其是在您在一个分支上重命名了一个文件,而在另一个分支上没有重命名的情况下。

选项

--accept ACTION
--change (-c) REV
--depth ARG
--diff3-cmd CMD
--dry-run
--extensions (-x) ARG
--force
--ignore-ancestry
--quiet (-q)
--record-only
--reintegrate
--revision (-r) REV

示例

将分支合并回主干(假设您有一个主干的最新工作副本)

$ svn merge --reintegrate \
            http://svn.example.com/repos/calc/branches/my-calc-branch
--- Merging differences between repository URLs into '.':
U    button.c
U    integer.c
U    Makefile
 U   .

$ # build, test, verify, ...

$ svn commit -m "Merge my-calc-branch back into trunk!"
Sending        .
Sending        button.c
Sending        integer.c
Sending        Makefile
Transmitting file data ..
Committed revision 391.

要合并对单个文件的更改

$ cd myproj
$ svn merge -r 30:31 thhgttg.txt 
U  thhgttg.txt