【问题标题】:SVN - Manage a partial merge of a revisionSVN - 管理修订的部分合并
【发布时间】:2011-01-04 22:37:18
【问题描述】:

所以我有一个问题让我在 Subverion 中感到非常悲伤。我在一个应该保持活动状态的分支中工作,直到我的功能集在重新集成之前开发完成。不幸的是,我已经完成的事情现在被企业认为是“关键任务”,他们希望我从分支中挑选出该功能并将其推送到主干中,以便质量检查人员能够获取它。

我遇到的问题是我在一个单独的目录中开发了该功能,该目录是我在完全处理其他事情时创建的。因此,为了合并我的功能所需的剩余代码,我首先需要引入我之前所做的目录创建。

以下是我需要删除的修订:

20 版
一个 ./project_foo
./project_foo/not_required_file.txt

24 版
./project_foo/required_file.txt

因此,为了将其放入后备箱,我必须执行以下操作:

svn merge -r20:21 -> 这让我得到了目录以及 not_required_file.txt
svn revert project_foo/not_required_file.txt -> 删除我不想要的文件
svn merge -r24:25 -> 这得到了我需要的文件

这很有效,并且在我完成开发并运行 svn merge --reintegrate 时将这些东西放入了我想要的树干中,但我(显然)没有从修订版 20 中取回 not_required_file.txt,因此遇到了树冲突在它上面(来自我后来所做的进一步更改)。

因此,我正在寻找一些关于在这些情况下该怎么做的指导。

  • 有没有一种方法可以只合并我想要从特定修订中获得的特定更改?
  • 有什么方法可以获取我在重新集成整个分支时故意遗漏的更改?
  • 能否在主干中创建所需的目录结构,然后仅合并文件更改?
  • 我可以创建另一个分支,将所需的更改移到那里,重新集成该分支,然后从主干拉到我原来的分支吗?

谢谢。

【问题讨论】:

    标签: svn branch merge


    【解决方案1】:

    有没有办法只合并 我想从 具体修改?

    如果您不想要完整的修订,我会通过创建补丁文件并将其应用到另一个分支并提交来手动复制您想要的内容。这样,subversion 不会稍后跳过该修订(当您重新集成分支时),它会尝试合并它,您只需处理手动复制的内容的普通冲突,但它也会合并您最初想要跳过的部分。

    在文件创建/删除/添加的情况下,它将在重新集成时创建它并避免您的树冲突,因为您想要的“部分修订”从未正式合并。

    在没有创建/删除/移动文件的情况下,您可以避免忘记的可能性 您在之前合并时排除了部分修订。

    遵循上述可以防止你的下一个:

    有什么方法可以抢 我故意错过的变化 重新整合整个分支?

    如果您不合并部分修订,则不会有任何被颠覆记录故意排除的内容,您应该只处理已经复制的部分的普通冲突。

    在您的情况下,您可以告诉 subversion 再次合并该单独的修订,与您之前所做的相反(解决冲突或恢复您最初想要的部分,同时保留您最初遗漏的部分),但我不确定一旦合并已被记录,这是如何工作的。

    或者,如果您使用 TortoiseSVN,您应该能够在日志中(在您的功能分支上)选择修订,右键单击您关心的作为该修订的一部分进行修改的文件,然后“显示更改作为 diff”,保存,然后手动将其应用回主干(或任何一个分支是我们重新集成分支的目标)。

    我可以创建目录结构吗 我需要在后备箱中然后合并 仅对文件更改?

    试试看。在最坏的情况下,您检查另一个工作区或手动修复文件的内容(如果它跳过它)

    我可以创建另一个分支,移动 那里需要改变, 重新整合该分支,然后拉 从树干到我原来的分支?

    现在你简直让我头疼 :) 手动修复它听起来对我来说工作量更少。我会修复您在主干上排除的部分,然后重试重新集成分支。

    希望其中的某些部分有所帮助。

    【讨论】:

      【解决方案2】:

      只是递归地“svn复制”从分支到主干的丢失文件夹。

      【讨论】:

        【解决方案3】:

        对于您当前的问题,您可能会考虑 SVK,它比 SVN 具有更好的合并支持(或者我上次使用 SVN 的程度足以不得不进行合并):http://svk.bestpractical.com/view/HomePage

        我注意到您提到了技术能力水平不同的多个团队的问题,因此 SVK 并不是真正的最佳解决方案。实际上我更喜欢 git-svn 而不是 SVK,因为它提供了类似的好处(甚至比 SVN 或 SVK 更好的合并)。

        根据您的技能水平范围的低端,SVK 可能与 SVN 足够接近,因此它可以解决问题,但它确实增加了一些额外的步骤来推出更改,我不知道它有多好在 Windows 下受支持(或如果在 Windows 下受支持),或者如果这是您的环境中的问题。

        【讨论】:

        • 感谢您的回答,但基本上是换了工具(最近才迁移到 SVN - 以前使用 VSS),不幸的是,该商店仅适用于 Windows - 适用于所有内容。
        【解决方案4】:

        好问题。 :-)

        看起来你的分支有点乱了。你有好主意如何解决它。如果有效?试试看,有时你永远不会知道。

        我认为您不需要合并 rev。在您的示例中,21 在 24 之前。无论如何都会创建缺少的目录。

        如果您无法帮助自己进行分支/合并,请尝试手动移动文件(Tortoise 可以帮助您)。

        一般来说,避免部分合并修订。更频繁地提交,以便您以更清洁的方式进行采摘。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-07
          • 2013-04-12
          • 2017-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多