Version control SVN合并有什么不对?

Version control SVN合并有什么不对?,version-control,tortoisesvn,merge-tracking,Version Control,Tortoisesvn,Merge Tracking,当SVN与合并跟踪工作,它真的很好,我喜欢它。但它总是被扭曲。我们用的是乌龟。我们不断得到以下信息: 错误:仅当1234至2345版本以前从/Trunk合并到重新整合源时,才能使用重新整合,但情况并非如此 作为参考,这是我们正在使用的方法: 创建分支 在分支机构中发展 偶尔合并从主干到分支的一系列修订 分支稳定时,将分支从分支重新整合到主干 删除分支 I在重新整合操作之前,将修订范围从主干合并到分支(保留该范围为空,因此应为所有修订),因此分支应与主干正确同步 现在,主干有多个与之关联的SVN合

当SVN与合并跟踪工作,它真的很好,我喜欢它。但它总是被扭曲。我们用的是乌龟。我们不断得到以下信息:

错误:仅当1234至2345版本以前从/Trunk合并到重新整合源时,才能使用重新整合,但情况并非如此

作为参考,这是我们正在使用的方法:

  • 创建分支
  • 在分支机构中发展
  • 偶尔合并从主干到分支的一系列修订
  • 分支稳定时,将分支从分支重新整合到主干
  • 删除分支
  • I在重新整合操作之前,将修订范围从主干合并到分支(保留该范围为空,因此应为所有修订),因此分支应与主干正确同步

    现在,主干有多个与之关联的SVN合并跟踪属性。应该吗?或者,重新整合者是否应该不添加任何合并跟踪信息

    我们的流程有问题吗?这使得SVN无法使用-每3次重新整合中就有1次迫使我潜入并破解合并跟踪信息。

    可能是解决方案

    基本上,当您要从主干中提取这些更改时,不要将主干更改连续合并为单个分支(
    branchs/foo
    ,我们称之为分支):

  • 将中继复制到新分支(
    分支/foo2
  • 合并旧分支的更改(将
    分支/foo
    合并到
    分支/foo2
  • 删除旧分支(删除
    分支/foo

  • 您的问题是,您试图对已“损坏”的分支使用重新集成合并,因为已经对其执行了“半合并”。我的建议是,如果这是您的工作流程,请忽略重新整合,并坚持使用纯版本合并

    但是,出现错误的主要原因是SVN正在为您执行一些检查。在这种情况下,如果合并中有来自单个文件的额外合并信息,那么svn将抛出一个抖动并阻止您进行合并-主要是因为这种情况可能会产生您可能没有注意到的错误。这在svn重新整合术语中被称为a(请阅读“重新整合到救援”部分,特别是结尾处有争议的重新整合检查)

    您可以在执行中间合并时停止记录mergeinfo,或者在分支准备就绪之前不记录分支,然后合并将拾取对主干所做的更改。我认为你也可以通过这个检查,只需要将整个主干合并到分支,而不是单独的文件,这样就可以保证mergeinfo在最后重新整合时的安全性

    编辑:

    @randomusername:我认为(从未仔细观察过)移动是因为它落入了“部分合并”的陷阱。SVN的一个很酷的特性是,您可以执行稀疏签出-只获取树的部分副本。当您在中合并一个部分树时,SVN不能说整个东西都合并了,因为它显然不是,所以它记录的合并信息略有不同。这对重新整合没有帮助,因为重新整合必须将所有内容合并回主干,现在它发现一些位在未合并的情况下被修改,所以它抱怨。移动看起来是一样的-分支树的一部分现在在mergeinfo中的显示与预期不同。我不会为重新整合而烦恼,而是坚持正常的修订范围合并。这是一个好主意,但它试图在太多不同的情况下为太多的用户提供太多的东西


    这个问题有时发生在以前从主干到分支进行对等合并时。部分合并是指对整个树执行合并,但仅提交其中的一部分。这将为树中的文件提供与树的其余部分不同步的mergeinfo数据

    上面的
    --reintegrate
    错误消息应该列出svn有问题的文件(至少在svn 1.6中是这样)

    您可以:

  • 使用错误消息中的范围从主干到分支手动合并问题文件。注意:必须从范围的开始处减去1,因此要运行的命令为:

    cd <directory of problem file in branch working copy>
    svn merge -r1233:2345 <url of file in trunk>
    svn commit
    

  • (我认为您可以使用
    ——只记录整个树上的
    ,但我还没有尝试过,您必须绝对确保不需要从主干进行真正的合并)

    我怀疑您没有正确遵循合并说明:

    “现在,使用svn merge和--reintegrate选项将分支更改复制回主干中。您需要/trunk的工作副本。您可以通过执行svn签出、从磁盘上的某个位置挖掘旧的主干工作副本或使用svn开关(请参阅“遍历分支”一节)获得一个副本。”.主干工作副本不能有任何本地编辑或包含修订的混合版本(请参阅“混合修订工作副本”一节)。尽管这些通常是合并的最佳做法,但在使用--reintegrate选项时需要它们

    拥有主干的干净工作副本后,您就可以将分支合并回主干了:“


    我在合并方面没有什么问题。

    我会研究一下,但这似乎很令人讨厌。如果管理分支如此困难,那么SVN的价值似乎很低。这就是为什么我在家里使用git,很快(当Windows集成稍微好一点时)在工作中使用git的原因:-谢谢你的回答。我现在对子树合并有了更好的理解,但我不知道为什么我们会看到它——我们只在顶层合并,而不是在子目录或文件级合并。然而,我们进行了一些更名,我认为这是罪魁祸首。您链接到po的页面
    cd <directory of problem file in branch working copy>
    svn merge --record-only -r1233:2345 <url of file in trunk>
    svn commit