svn将trunk合并到分支:所有路径都是树冲突

时间:2011-04-20 21:32:44

标签: svn

我似乎无法创建分支,然后将主干更改合并到分支中:

svn copy file:///svn/project/trunk file:///svn/project/branches/feature-branch
svn co file:///svn/project/branches/feature-branch
cd feature-branch
#change a couple of files, no additions/deletions
svn commit
svn merge file:///svn/project/trunk

使用此功能,分支中的每个路径都会列为树冲突(svn状态显示“本地添加,合并时传入添加”)。合并确实列出了它从r2开始在trunk上合并...所以看起来svn copy实际上并没有保留分支从trunk中分离出来的历史记录?这是颠覆书中列出的1.5的工作流程,是1.6一个完全不同的工作流程? (使用1.6.11)

编辑: svn log -v显示:

A /branches/feature_branch (from /trunk:3091)

svn proplist是空的。 (也许是因为我没有解决树冲突?)功能分支中的更改似乎也不在日志中,并且r3091不在svn log -v中。合并消息是“将r2到r3093合并到'。'”,所以看起来问题在于记住fork的位置。在多次删除并重新创建分支后,我们已经放弃了使用svn分支。

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。经过大量研究后,我发现在1.5之前的SVN服务器中,分支机构不会将合并信息存储在服务器中。 因此,每当您尝试在分支中进行合并时,它都会尝试从修订版1同步到HEAD。由于您的分支中可能有新文件不在trunk r1中,因此您将遇到许多树冲突。有两种解决方案:在merge命令中使用修订版本范围(svn merge -r 1234:HEAD http://trunk)或将svn服务器更新为版本大于等于1.5的版本,其中它保存有关合并的信息,所以每当你尝试在你的分支中进行合并,它会知道哪个是同步的最后一个版本,并且只会从那个版本进行合并。

答案 1 :(得分:0)

我希望这个工作正常(至少对我来说,使用v1.6.13.19776)。如果这是一个测试仓库,您可以在功能分支上发布输出:

svn log -v

应该有一个复制条目:

D:\svntest\feature-branch>svn log -v
------------------------------------------------------------------------
r6 | XXXX | 2011-04-21 08:04:21 +0100 (Thu, 21 Apr 2011) | 1 line
Changed paths:
   A /project/branches/feature-branch (from /project/trunk:5)

test branch
------------------------------------------------------------------------

这表明它是从'trunk'创建的跟踪'feature-branch'。

还值得检查以下输出:

svn proplist

在您尝试从主干合并之前,我希望这是空的,但是之后(假设它正常工作),您应该有一个mergeinfo属性:

D:\svntest\feature-branch>svn proplist
Properties on '.':
   svn:mergeinfo

然后您可以查询:

svn propget svn:mergeinfo

同样,如果一切正常,应该更新以指示已经进入分支的“主干”修订,例如:

D:\svntest\feature-branch>svn propget svn:mergeinfo
/project/trunk:6-7

答案 2 :(得分:0)

合并时,请确保提交根目录。 在此目录属性上,您具有已合并的修订号,如果您不提交,则下次合并时会出现冲突。