Svn从分支合并到中继而不删除主干(或其历史记录)

时间:2014-03-28 13:55:31

标签: java eclipse svn merge tortoisesvn

我创建了一个分支,已经提交了很多修订。与此同时,干线也做了一些改变。所以我创建了一个新分支并手动将主干中的修订合并到新创建的分支,因为分支有重大变化,而主干变化相对最小。

现在我必须用新分支替换主干。我看到各种帖子建议删除主干。但对我来说这不是一个可行的解决方案,trunk从一开始就修改了文件,我不想放弃它们。当我尝试在Eclipse中合并trunk和new分支时,它会异常终止。

在检查标记为冲突的文件时,分支中的最新更改未在比较窗口中正确显示(名为filename.java.2.working的文件包含最新的分支更改,但该文件未在eclipse的比较窗口中显示)。

有没有人知道用树枝替换树干而不删除树干的解决方案?

例如:在版本12121创建的分支       Trunk最新12500       分公司最新12777

现在当我进行合并时,我希望所有文件都在12501版本的trunk中提交。

1 个答案:

答案 0 :(得分:2)

TL; DR:您无法删除SVN位置并将其历史记录分配给其他位置,即使它们的名称相同。您可以做的是合并到正确的位置并保留所有原始历史记录。

现在,让我直截了当地说:

  • 您有trunk
  • 您有一个主要更改branch A的分支机构。
  • 现在trunk有一些细微的变化。
  • 您创建了一个新的branch B关闭branch A?它真的不清楚你创建了branch B off
  • 的内容
  • 您将trunk更改合并到branch B
  • 现在您希望branch B成为trunk(换句话说,您需要将整个branch B合并到trunk

为什么你没有直接将trunkbranch A的那些细微变化合并到keeping branch in sync,然后reintegrate branch A到{ {1}}?你应该每天让你的功能分支与主干保持同步,越多越好。您不应该保持分支同步的唯一时间是这是一个发布分支,并且您不希望其中有新的主干更改。但是,根据您的问题,您希望trunk中的trunk更改,不是吗?

branch A在这里似乎完全是多余的。我对Eclipse一无所知,但它可能失败了,因为branch B不是branch B的直接后代。

表演:

  1. trunk合并到branch A
  2. 获得与执行相同的有效结果:

    1. 关闭trunk
    2. 创建branch B
    3. branch A合并到trunk
    4. branch B合并回branch B以保留trunk历史记录
    5. " trunk - >之间合并的复杂性branch A"与" trunk - >之间合并的复杂性相同trunk(与branch B相同)"

      请提供branch A存在的原因,也许我在这里完全遗漏了一些内容。

      你应该做的是:

      • 查看branch B或更新现有结帐
      • 使用TortoiseSVN(因为你链接了那个,我不认识Eclipse),右键点击trunk,选择trunk - > TortoiseSVN
      • 点击,下一步,提供Merge
      • 的网址
      • 点击branch A,选择您要合并的所有修订,或者您可以使用Show Log
      • 指定范围
      • 点击12121-12777
      • 点击Next
      • 解决冲突,如果有的话。
      • Merge提交给SVN。

      SVN中的上述提交将清楚地表明这些更改来自trunk

      如果存在冲突,则必须使用已配置的差异工具解决它们。您提到的那个文件Branch A是冲突解决文件。当SVN检测到无法自动解析的两个文件之间的冲突时,它会为您提供一份"您的"文件,"他们的"的副本文件和"合并"文件。你选择了"你的"和#34;他们的"将文件放入"合并文件",然后将冲突标记为已解决。一旦标记为"已解决",所有3个都将从工作​​区中删除并替换为原始文件名,其中包含" merged"文件。这就是承诺。

      在您的情况下快速而肮脏:
      鉴于您已经创建了多余的filename.java.2.working且已合并的branch B已更改为trunk,现在希望branch B成为您的新branch B,您可以执行以下操作又快又脏

      • 查看trunk或更新现有结帐
      • 在文件系统上,右键单击trunk结帐文件夹,选择branch B,然后导出到新文件夹
      • 将新文件夹中的所有文件复制到TortoiseSVN -> Export结帐(覆盖)
      • 提交trunk

      以上内容将显示为直接提交,并且不会显示更改来自trunk

      最后:
      branch B
      以上是不可能的,因为SVN(任何主干或分支)中的任何新提交都将具有修订版E.g.: Branch created at version 12121 Trunk latest 12500 Branch latest 12777. Now when I do the merge, I want all the files to be committed at version 12501 in trunk.或更高版本。另请注意,这是修订版,SVN中没有版本这样的内容,您无法想到"修订版"作为"版本",它不是一回事。