【问题标题】:Svn Merge From Branch to Trunk Without deleting the trunk(or its history)Svn 从分支合并到主干而不删除主干(或其历史记录)
【发布时间】:2014-05-08 00:47:57
【问题描述】:

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

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

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

有人知道用分支替换主干而不删除主干的解决方案吗?

例如:在版本 12121 创建的分支 后备箱最新款12500 分支最新12777

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

【问题讨论】:

    标签: java eclipse svn merge tortoisesvn


    【解决方案1】:

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

    现在,让我直说:

    • 您有一个trunk。
    • 您有一个发生重大变化的分支branch A。
    • 现在trunk 有一些小的变化。
    • 您创建了一个新的branch B 关闭branch A?真的不清楚你创建的branch B 关闭
    • 您将trunk 更改合并为branch B
    • 现在您希望branch B 成为您的trunk(换句话说,您需要将整个branch B 合并到trunk)

    您为什么不直接将那些从trunk 到branch A 的细微更改合并为keeping branch in sync,然后将reintegrate branch A 合并到trunk?您应该每天保持功能分支与主干同步,越频繁越好。唯一不应该使分支保持同步的情况是,这是一个发布分支,并且您不希望其中有新的主干更改。但是根据您的问题,您确实希望trunk 更改branch A,不是吗?

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

    表演:

    1. 将branch A 合并到trunk

    获得与执行相同的有效结果:

    1. 创建branch B 关闭branch A
    2. 将trunk 合并到branch B
    3. 将branch B 合并回trunk 以保留trunk 历史记录

    “branch A -> trunk”之间合并的复杂度与“trunk -> branch B(与branch A相同)”之间合并的复杂度相同

    请提供branch B存在的原因,也许我在这里完全遗漏了一些观点。

    你应该做的是:

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

    上述在SVN中的commit会清楚地表明这些更改来自Branch A

    如果存在冲突,您必须使用您配置的任何差异工具来解决它们。您提到的那个文件filename.java.2.working 是一个冲突解决文件。当 SVN 检测到无法自动解决的两个文件之间的冲突时,它会为您提供“您的”文件的副本、“他们的”文件的副本和“合并”文件的副本。您在“您的”和“他们的”文件之间进行选择并放入“合并文件”,然后将冲突标记为已解决。一旦标记为“已解决”,所有 3 个都将从工作​​场所中删除并替换为原始文件名,其中包含“合并”文件的内容。这就是然后被提交的内容。

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

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

    以上将显示为直接提交,不会显示更改来自branch B

    最后:
    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(任何主干或分支)中任何地方的任何新提交都将具有修订版 12778 或更高版本。还要注意这是一个revision,在SVN中没有version这样的东西,你不能把“revisions”当成一个“版本”,它是不一样的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      相关资源
      最近更新 更多