处理SVN1.7功能分支中的树冲突

处理SVN1.7功能分支中的树冲突,svn,version-control,tortoisesvn,tree-conflict,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 f

我创建了一个功能分支,因为我需要重组一个相当大的项目。功能分支是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
当我尝试将更改从主干拉入分支时,我看到的是“树冲突”错误,而不是其他错误。这就是我在跟踪一个在分支中移动并在主干中修改的文件时发现的

\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客户端,所以我认为这些变化会被自动神奇地跟踪,而这不会发生。。。我想我错了。我的第一个想法是使用命令行创建另一个分支,然后一个接一个地合并变更集,直到一切都恢复正常,但我不确定要使用哪些参数来实现这一点。我觉得我的祖先/历史被彻底摧毁了,但我不确定

对如何解决这个问题有什么建议吗

我以为这些变化会被自动神奇地跟踪,而这不会发生

不,即使在1.8+版本中,在合并的对侧重命名+编辑也会导致树冲突(与1.7版本相反,merge有轻微改进)

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

错误的想法。因为您知道树冲突的两个来源,所以您必须将
\old\path\file.txt
强制合并到
\new path\file.txt
,并且只有在该合并集之后,才能合并树
\old\path\
\new path\
,而不存在树冲突


PS-为了避免Subversion中的“重构地狱”,我始终建议分别进行重构+合并重构(在合并为头等公民的SCM中),并在成功合并后用Mercurial的工作目录内容替换WC(您可以克隆SVN repos,但不能将合并集推回)

基本上遵循了您的建议。已使用<代码>svn差异--汇总-r2003:标题https://my.repo/my/project/trunk要获取更改列表,请将它们合并到我的分支中,然后使我的分支成为新的主干。有点难看,但它奏效了。