我在使用 SVN merge
时遇到了一个特殊问题。我想从开发分支合并到主干。我们有多个开发分支同时切断了主干。
我正在使用以下命令将其中一个分支合并到主干:
svn merge trunk branch_1
我看到不属于此分支的更改被合并到主干中。我究竟做错了什么 ?
SVN 版本:
Subversion 命令行客户端,版本 1.6.16-SlikSvn-tag-1.6.16@1076804-WIN32。
您的 svn merge
语法错误。
您想签出 trunk
的工作副本,然后使用 svn merge --reintegrate
选项:
$ pwd
/home/user/project-trunk
$ svn update # (make sure the working copy is up to date)
At revision <N>.
$ svn merge --reintegrate ^/project/branches/branch_1
--- Merging differences between repository URLs into '.':
U foo.c
U bar.c
U .
$ # build, test, verify, ...
$ svn commit -m "Merge branch_1 back into trunk!"
Sending .
Sending foo.c
Sending bar.c
Transmitting file data ..
Committed revision <N+1>.
有关详细信息,请参阅 SVN book chapter on merging。
请注意,在编写它时,这是正确的答案(并被接受),但事情已经发生了变化。查看 topk 的答案,http://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate
如果您的工作目录指向主干,那么您应该能够将您的分支与:
svn merge https://HOST/repository/branches/branch_1
一定要在你的trunk的根目录下发出这个命令
在主干中进行 svn 更新,记下修订号。
从后备箱:
svn merge -r<revision where branch was cut>:<revision of trunk> svn://path/to/branch/branchName
您可以通过执行 svn log 来检查分支从树干中切出的位置
svn log --stop-on-copy
svn
版本(例如 OP 正在使用的一个)合并。
svn://path/to/branch/branchName
应该只从该分支而不是从其他分支中提取更改。如果是这样,我们就有危险了!
语法错误,应该改为
svn merge <what(the range)> <from(your dev branch)> <to(trunk/trunk local copy)>
--reintegrate
确实不是强制性的,但在这种情况下确实推荐使用。我试图在没有--reintegrate
的情况下做到这一点,并以数百次冲突告终。使用--reintegrate
,没有冲突,一切都很好!--reintegrate
选项简单有效,但必须注意“一旦从分支到主干完成--reintegrate
合并,该分支就不能再用于进一步的工作。它无法正确吸收新的主干更改,也不能再次正确地重新集成到主干。”正如你所链接的书所解释的那样。