为什么将一个分支提交到仍未受影响的主干会导致冲突?

时间:2011-04-04 15:28:19

标签: svn branching-and-merging

我的第一个大目录合并有一段艰难时期,并希望找到解决这些错误原因的线索。

我在一周前将trunk中的代码分支出来并对branches / myBranch中的代码进行了大量更改,并决定将它们合并到trunk /中。之后没有代码在主干中被触及,它与新代码分支时的代码完全相同,所以我认为这意味着不会出现冲突。

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

这是基本事实:

  • 该代码在修订版19466中分支。
  • 后备箱已经不受影响。没有变化(Last Changed Rev: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)

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

1 个答案:

答案 0 :(得分:3)

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

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

总结一下:为避免出现问题,请确保

正确分支