3

我的第一个大目录合并过程很艰难,希望能找到有关为什么会出现这些错误的线索。

一周前我将trunk/中的代码分支出来,并对branch/myBranch中的代码进行了很多修改,并决定是时候将它们合并到trunk/中了。此后主干中没有任何代码被触及,它与新代码分支时完全相同,所以我认为这意味着不会出现冲突。

似乎是错误的假设,据我所知,在尝试将新代码合并到主干和丢失文件的报告时会遇到一堆冲突。有人可以澄清为什么会这样吗?

这是基本事实:

  • 该代码在修订版 19466 中进行了分支。
  • 后备箱一直没有动过。无更改(上次更改版本:19453)。
  • 该分支(不幸的是?)在本地完成,并包含了一些更改。
  • 我尝试使用以下命令合并来自分支介绍主干的更改svn merge -r19466:HEAD branches/myBranch trunk/:(不管我是站在后备箱里跳过最后一个参数,还是只做上面的事情都没有关系)
  • Subversion 抱怨缺少文件 fooDao。 ! C trunk/fooDao.java

    > local missing, incoming edit upon merge

    该文件在创建分支的同一提交中重命名(19466),但我认为 subversion 应该选择它,因为它是使用svn move. 日志显示了它的祖先:

    ... A /branches/myBranch/fooDao.java(来自 /branches/myBranch/fooDato.java:19452)

  • 如果您想知道为什么即使没有代码更改,修订号也会增加,那是因为它是一个包含许多其他(活动项目)的共享存储库。
4

1 回答 1

3

我遇到的错误的主要原因是由于以不健全的方式创建分支。如果您正确地进行分支,branch 点将具有与主干中完全相同的文件(在该版本中)。如果要将在修订 100 中创建的分支合并到主干中,那么我可以只使用svn merge -r100:HEAD ../branches/myBranch ./trunk并获取对这些修订中文件的更改。

不幸的是,在创建分支之前,我在 trunk/ 中进行了本地修改。这些修改被复制到新分支中,然后提交。因此 myBranch 和 trunk 中的文件在创建分支时是不同的。为了纠正这种情况,我必须在创建分支之前找到一个修订版(比如:rev99)并从那里进行合并。出现的任何冲突都可以通过选择“tf”(它们的完整)从冲突中的分支获取完整文件来简单地解决。我可以做这个快速修复,因为树干没有受到影响并且没有任何变化。

总结一下:为了避免问题,通过确保正确进行分支

于 2011-04-05T14:21:28.710 回答