本手册旨在描述 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 在修订版 N
和 M
中指定。这是要比较的两个源。如果省略,修订版默认为 HEAD
。
在第二种形式中,与源工作副本路径相对应的 URL 定义了要比较的源。必须指定修订版。
在第三种形式中,SOURCE
可以是 URL 或工作副本路径(在这种情况下,将使用其对应的 URL)。如果未指定,SOURCE
将与 WCPATH
相同。SOURCE
在修订版 REV
中与它在提供的每个修订版范围内的 N
和 M
修订版之间存在的版本进行比较。如果未指定 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