2

我创建了一个功能分支,因为我需要重组一个相当大的项目。功能分支是 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 客户端,所以我认为更改会被自动跟踪,这不会发生......我想我错了。我的第一个想法是使用命令行创建另一个分支,然后一个接一个地合并变更集,直到我让一切重新工作,但我不确定使用哪些参数来执行此操作。我觉得 2002 年的承诺完全摧毁了我的祖先/历史,但我不确定。

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

4

1 回答 1

2

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

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

想法是使用命令行创建另一个分支,然后一个接一个地合并变更集

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

PS - 为了避免 Subversion 中的“重构地狱”,我总是建议单独重构重构 + 合并(在 SCM 中合并为一等公民),并在成功合并后将 WC 替换为 Mercurial 的工作目录的内容(您可以克隆 SVN-回购,但不能推回合并集)

于 2014-07-15T04:44:03.513 回答