将主干合并到Subversion中的分支


75

我正在使用Subversion 1.4.6,目前无法升级到1.5版。

情况:

  1. 中继线有很多结构上的变化(即,主要是移动文件)。

  2. 我有一个最近从主干合并的分支,但在进行重大更改之前。

将主干合并到分支的最佳方法是什么?

我的想法是:

  1. 首先,通过仅将分支中的已修改文件合并到主干中,仔细地将分支合并到主干中。

  2. 将中继线复制到分支。在不丢失分支历史的情况下执行此操作的最佳方法是什么?我应该弃用分支并创建一个新分支吗?


好的,看来我没有给予SVN足够的信誉。毕竟足够聪明。我只是被“ D”和“ A”的输出推迟了,但是在后台它做了一个动作。


1
问题和答案与非常老的SVN客户端和服务器版本有关,与SVN 1.5+,尤其是SVN 1.8+不相关
bahrep

Answers:


88

有什么可以阻止您合并自上次合并以来的所有修订版?

svn merge -rLastRevisionMergedFromTrunkToBranch:HEAD url/of/trunk path/to/branch/wc

应该工作正常。至少如果您要将主干上的所有更改合并到分支中。


3
当我干运行它时,那里有很多文件的“ D”和“ A”,因为文件在主干中移动了。我的问题是,在这种情况下,SVN是否会记住文件的历史记录。
吉拉德·纳尔

在中继中移动文件时是否使用svn重命名?如果您这样做了,历史应该会保留下来。我认为您应该进行小规模尝试-创建一个新的存储库,一个文件的主干,一个更改的分支,在主干上进行svn重命名并检查历史记录是否存在。
Yuval F

1
我怎么知道哪个最新版本是从主干合并到分支的?
LeandroLópez,2009年

1
在较新版本的svn中,它存储为文件属性(某处?也许是根目录)。旧版本不存储此信息,您必须手动搜索它。即在日志中搜索上一次合并的提交。(这是一个主要的不便之处。Git,Mercurial,Bazaar没有这些限制)
Ronny Brendel

2
此处提供了一个很好的指南:stereointeractive.com/blog/2009/02/17/…–
David d C e Freitas

16

通过在工作副本目录中运行以下命令,可以找到从主干合并到分支的最新修订:

svn log -v --stop-on-copy

4
创建分支后,这只会停止日志;它不会显示在那之后发生的任何合并。
moswald

2
因为,通过@moswald的一些警告,了解这一点非常有用。我没看到问题。我通常没有长寿的分支机构(最多一个星期),因此我通常只在重新融合之前从树干上拔出来。
Andrew Backer

12

这是“过时的”方式来指定您希望合并的修订范围。使用1.5+,您可以使用:

svn merge HEAD url/of/trunk path/to/branch/wc

4
我正在使用1.6.11,这使我进入一个范围。
Brent212

18
你还要说很多吗?在工作副本中“ svn merge / url / of / trunk”有什么问题?
GreenAsJade 2014年

1
svn:E195002:无效的合并源“ HEAD”;工作副本路径只能与存储库修订版(数字,日期或标题)一起使用
独奏,

2
@Solo HEAD确实要求您指定一个修订号,但是不再需要使用HEAD。正如GreenAsJade所说,“ svn merge / url / of / trunk path / to / branch / wc”对我有用。
Tim Smit

答案应修改为删除“ HEAD”
Jeff
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.