在Subversion中跨分支合并不会添加所有新文件.为什么不?

sta*_*san 25 svn merge branch

我在Subversion中有一个带有几个分支的源代码树.我刚刚在一个活跃的分支中完成了一个相当激烈的调试会话,现在需要将更改合并到新分支.最近,在旧分支中的所有开发(显然)之后但在我提交所有调试之前,新分支被取下了trunk(代表已发布的代码).svn merge但是,尝试不会合并所有已添加的文件.它增加了一些,但不是全部.

这是时间表:

  • 分支后备箱创建分支dev1.
  • dev1中的代码,修改文件和添加文件.
  • 分支后备箱创建分支dev2.
  • 在dev1中修复错误,修改文件但不添加文件.
  • 将dev1中的所有更改合并到dev2.

正如预期的那样,有许多变化,包括新文件,但不是全部.是因为我合并的版本范围包括dev2分支的版本吗?或者我应该合并到主干然后下降到dev2?

编辑:所有代码完全提交到Subversion.但我认为可能发生的事情是文件添加不会通过合并传播.也就是说,之前合并 DEV1增加了一些文件,但合并 DEV1涵盖现有合并提交包括添加的文件.

但我还在检查.

Jas*_*onZ 30

我一直都知道svn警告是颠覆的迹象表明你以某种方式搞砸了.然后我遇到了上面的情况,我从一个分支合并得到了很多跳过的文件,但我知道我有合并的正确路径.跳过的文件是在分支上添加和更改但在主干上尚未存在的所有文件.

然后我意识到所有这些文件已经存在,虽然没有版本化,但是在我的工作副本上还没有 - 我在一周之前完成了一次测试合并(不是干运行)并且还原了,但是这些文件从来没有被我的SVN物理删除客户.一旦我从我的工作副本中删除它们,这个问题就消失了!

  • 谢谢你记录这个.这是我的确切问题. (5认同)
  • 这也是我的确切问题.如果svn说"嘿,这些文件已经存在于你的WC中",而不仅仅是在没有解释的情况下跳过它,那将是很棒的 (4认同)
  • +1这正是发生在我身上的事情(树冲突,文件被跳过,文件没有添加 - >再次树冲突) (3认同)
  • 同意 - '跳过'不够描述.告诉我他们已经在那里了! (3认同)

Bla*_*jac 29

以下陈述不正确:

在跨多个修订版进行合并时,添加到分支然后在分支上更改的文件不会被添加

这意味着合并完全被打破.

进行合并时,您需要确保合并创建该文件的修订版,否则您将收到有关无目标的警告.

需要注意的另一件事是,如果你合并到一个工作副本,然后决定你不满意并恢复一切,新添加的文件仍将在工作副本中,所以如果你再次合并,未版本控制的文件将阻止新文件的合并,因此您将错过它们.因此,运行"svn status"并删除未版本控制的文件将确保合并正常.

不应该关于添加空文件的注释,因为新文件没有来自何处的历史记录.换句话说,它不是副本,因此"svn log"不会显示其历史记录.最后,如果文件是一个千兆字节的照片,你不希望将它合并到一个新文件中,因为那时存储库将有两个完全相同的上下文副本.使用历史记录进行合并和复制可以节省存储库存储(至少在放入代理共享之前).

  • +1这就指出"svn revert"会破坏合并,这是我的问题. (4认同)