处理SVN 1.7功能分支中的树冲突

时间:2014-07-14 15:40:04

标签: svn version-control tortoisesvn tree-conflict

我创建了一个功能分支,因为我需要重构一个相当大的项目。功能分支是70%移动的东西和20%修改代码和10%新代码。它看起来像这样。

Trunk     Branch     Actions 
2000   =  2001       create branch
|         2002       move lots of file and directories plus a few file edits
|         2003       lots of edits plus a few more file moves
2004      |          a few edits to files that have been moved in the branch
|         2005       some more edits and a new file or two
2006      |          a few edits to files that have been moved in the branch
|         2007       feature is done... time to pull changes from the trunk

当我尝试将更改从主干拉到分支时,我看到了#34树冲突"错误而不是其他。这是我发现的时候,我跟踪了一个在分支中移动并在主干中修改过的文件。

\old\path\file.txt - trunk version 2006
\new-path\file.txt - branch version 2007

---- I would like ----
\new-path\file.txt - merged trunk version 2006 and branch version 2007

我正在使用SVN 1.7和最新的TortoiseSVN客户端,所以我认为这些更改会被自动跟踪,这不会发生......我想我错了。我的第一个想法是使用命令行创建另一个分支然后逐个合并变更集,直到我再次使一切工作,但我不确定使用哪个参数来执行此操作。我觉得承诺2002完全破坏了我的祖先/历史,但我不确定。

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:2)

  

我认为这些变化会被自动跟踪,但这不会发生......

不,在合并的两侧重命名+编辑即使在1.8+中也会给你树冲突(合并略有改进,与1.7相反)

  

以为是使用命令行创建另一个分支,然后逐个合并变更集

错误的想法。因为您知道树冲突的两个来源,所以您强制将\old\path\file.txt合并到\new-path\file.txt,并且仅在此合并集之后合并树\old\path\\new-path\ - 没有树冲突

PS - 为了避免Subversion中的“Refactoring Hell”我总是建议单独重构refactor + merge(在SCM中合并为一等公民)并且在成功合并后只需用Mercurial工作目录的内容替换WC(你可以克隆SVN-repos,但无法推送合并集)