使用SVN merge重做手动合并

使用SVN merge重做手动合并,svn,merge,restore,svnadmin,Svn,Merge,Restore,Svnadmin,我正在尝试修复发生以下情况的SVN项目: 从主干中提取特征分支 对该分支有定期提交。 当需要将分支合并回主干时,开发人员没有使用SVN merge,而是使用WinMerge(!),因此我们丢失了所有的历史记录。 此外,手动WinMerge中还缺少一些小错误修复。 这发生在几周前,从那时起就有对trunk的定期提交,所以我们不能简单地恢复 所以,我试图返回并正确地重做合并,但事实证明这比我想象的要复杂 如果我试图恢复到“坏合并”之前的某个点,然后进行适当的合并,我就无法重新合并BM之后发生的其他更

我正在尝试修复发生以下情况的SVN项目:

从主干中提取特征分支 对该分支有定期提交。 当需要将分支合并回主干时,开发人员没有使用SVN merge,而是使用WinMerge(!),因此我们丢失了所有的历史记录。 此外,手动WinMerge中还缺少一些小错误修复。 这发生在几周前,从那时起就有对trunk的定期提交,所以我们不能简单地恢复

所以,我试图返回并正确地重做合并,但事实证明这比我想象的要复杂

如果我试图恢复到“坏合并”之前的某个点,然后进行适当的合并,我就无法重新合并BM之后发生的其他更改

所以,我想我必须使用svnadmin dump和load,类似于,但我不能精确地计算出我需要做什么

  • 在BM之前转储更改(ChangesetX)
  • 在BM后转储更改(更改设置)
  • 将ChangesetX加载到什么?新的回购协议
  • 做适当的合并
  • 负荷变化
  • 这是可能的吗?任何帮助都将不胜感激

    谢谢


    Tom可能不是最优雅的方式,但在客户端是可行的:

    • svn将中继头导出到目录A中
    • svn签出中继到目录B的错误提交
    • 将文件从A复制到B
    B现在包含在错误提交之后作为本地更改进行的所有提交(这些提交之间失去了区别)

    现在:

    • svn签出中继到目录C的错误提交-1
    • 执行分支的svn合并,并将主干中分支的起点合并到工作副本C中
    • 将C复制到A
    现在您在目录A中有了正确的合并,因为本地更改了HEAD.Commit A.Trunk现在有了正确的合并为HEAD

    最后:

    • svn更新B至HEAD
    • 解决冲突
    • 提交B
    此时,您已经提交了一个正常的合并以及错误合并后的所有更改。您丢失了一些历史记录,但与服务器端处理转储相比,麻烦更少

    祝你好运!

    你能做的是:

  • 向那个开发人员扔垃圾,最好是以打印在某种厚纸上的形式。(如果他能活下来,就解雇他。)

  • SVN可以选择“合并”和“记录”模式,记录哪些修订已合并到文件和文件夹属性中,但实际上未更改任何文件(使用SVN语言:其“属性状态”为“已更改”,但其“文本状态”为“未更改”)

  • 我已经有一段时间没有使用SVN命令行了,所以我不知道如何使用它,但有以下几点:

    你是, 记录一个像sbi这样的合并可能是一个好主意。如果所有其他方法都失败了,你可以通过签出一个文件的三个版本来手动进行合并,并直接在上面链接的答案中描述的那些版本上使用

    如果版本X和Y来自要素分支,而版本A到E位于主干上

        A----------+
        |          |
        |          |
       \_/        \_/
        B          X
        |          |
        |          |
       \_/        \_/
        C <======= Y   Merge without being recorded by svn as a merge (right?), aka BadMerge
        |
        |
       \_/
        D
        |
        |
       \_/
        E
    
    A----------+
    |          |
    |          |
    \_/        \_/
    Bx
    |          |
    |          |
    \_/        \_/
    查看第140页的svn命令。。。