【问题标题】:"Naive" svn merge from branch into trunk?“天真” svn 从分支合并到主干?
【发布时间】:2010-02-08 09:30:03
【问题描述】:

我在我的 C++ 项目中使用 TortoiseSVN,并且正在尝试将分支“重新集成”回主干。

我的情况很简单,因此对于分支中已更改的每个文件,我希望它完全覆盖主干中的匹配文件。不幸的是,TortoiseSVN 比我聪明,所以它合并了每一对文件——导致一些不一致的代码。例如,分支中已删除的部分代码行在合并版本中恢复。

有什么方法可以强制 TortoiseSVN 使用覆盖所有修改文件的幼稚合并行为?

谢谢, 丹

【问题讨论】:

    标签: svn merge tortoisesvn branch


    【解决方案1】:

    以下是仅使用 SVN 的方法(不要在文件系统中乱搞):

    1. 检查您从中创建分支的主干版本(不是 HEAD 版本)。
    2. 将其提交到存储库(这将撤消所有后续的主干更改)。
    3. 重新整合合并(您的主干工作副本现在应该与分支相同。)
    4. 提交合并的主干,你就完成了!

    【讨论】:

    • 我认为这行不通。重新整合合并本身就是问题所在。据我所见,在第 3 步之后,主干工作副本可能不与分支相同 - 因为最终文件不只是取自分支,它是两者之间合并的结果主干文件和分支文件。
    • 不,合并只会合并双方在共同祖先点之后所做的更改。在这里,由于主干与您分支的位置没有任何变化,因此它应该可以正常工作。
    • 第 2 步的命令是什么?如果我执行 'svn commit' 什么都不会发生,因为 svn 认为没有任何改变
    【解决方案2】:
    1. 更新到分支上的最新版本
    2. 将所有文件复制到工作站的某处
    3. 将分支切换到主干
    4. 使用常规 Windows 资源管理器覆盖(仅覆盖更改的文件)
    5. 提交

    【讨论】:

    • 太麻烦了,并且在第 4 步中容易丢失文件。(我将不得不有选择地复制文件,因为复制所有内容都不是一个选项 - 以 .svn 文件夹本身为例)。跨度>
    • 您可以使用 TortoiseSVN "Export..." 命令导出没有 .svn 文件夹的分支。但是,如果您在分支中删除或重命名文件,则 websen 的程序将不起作用。
    【解决方案3】:

    对webwesen's answer的一点改进,因为我真的没有看到一个简单的方法:

    • 在某个目录中对分支进行 svn 导出
    • 将此目录中的所有文件复制到主干目录
    • 提交

    【讨论】:

    • 嗯嗯,我猜没关系。我最终使用了类似的东西 - 使用 Beyond Compare (scootersoftware.com) 的镜像功能来获取修改后的文件。尽管如此,这是我希望 TortoiseSVN 提供的基本功能。至少我应该有一个简单的方法来查看错误的合并 - TortoiseSVN“重新整合一个分支”更新文件与 Merged 副本,所以我什至不能查看合并历史记录。
    【解决方案4】:

    据我所知,目前这在 svn 中是不可能的,所以 TortoiseSVN 帮不了你。

    为了简化一点(好吧,很多),以svn update 命令为例。如果您的工作副本和存储库中有修改,但没有实际冲突,svn update 将简单地将存储库的更改合并到您的工作副本中。

    我认为没有办法解决这个问题。如果您有实际冲突,您可以使用--accept ACTION 命令行选项仅保留本地更改(例如)。但是,如果您想为存储库和工作副本中更改的任何文件指定接受操作,那么您很不幸。

    我突然想到,在这种情况下向 svn 开发人员询问命令行选项可能是一个想法,而不是及时发布它来帮助您。

    我提到的冲突解决问题暗示了一个丑陋的黑客,我不推荐。使用您喜欢的工具,获取分支中更改的文件的列表。现在,对于该列表中的每个文件,通过在每行前面添加一个不寻常的字符来在主干上对其进行修改。将更改提交到主干。在重新集成之前合并以使分支保持最新,但使用--accept 以防止任何可怕的主干文件进入。然后,重新集成,再次使用--accept 覆盖可怕的主干文件。

    我应该补充一点,你不能用 TortoiseSVN 做到这一点,至少不是很明显,因为它不支持--accept,至少我找不到。

    好吧,我说它丑得可怕。不要在家里尝试这个! (我当然没有。)

    【讨论】:

      【解决方案5】:

      “svn merge”命令就是为此目的而设计的,它可以让你一步合并。指令here.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-08
        • 1970-01-01
        • 2010-11-25
        • 2015-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-20
        相关资源
        最近更新 更多