SVN - 管理修订的部分合并

标签 svn branch merge

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

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

以下是我需要猛拉的修订:

修订版 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,因此遇到了树冲突(来自我后来所做的进一步更改)。

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

  • 有没有办法只合并我想要的特定修订版的特定更改?
  • 有没有什么办法可以捕获我重新整合整个分支时故意错过的变化?
  • 我可以在主干中创建我需要的目录结构,然后只合并文件更改吗?
  • 我可以创建另一个分支,将所需的更改移到那里,重新集成该分支,然后从主干拉到我的原始分支吗?

  • 谢谢。

    最佳答案

    Is there a way of merging in only the specific changes I want from a specific revision?



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

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

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

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

    Is there any way of grabbing the changes I deliberately missed when I re-integrate the entire branch?



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

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

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

    Could I create the directory structure I need in the trunk and then merge over only the file changes?



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

    Can I create another branch, move the required changes over there, reintegrate that branch and then pull from the trunk to my original branch?



    现在你只是让我的头受伤了 :) 手动修复它对我来说听起来工作量更少。我会修复你在主干上排除的部分,然后重试重新整合分支。

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

    关于SVN - 管理修订的部分合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2062006/

    相关文章:

    svn - 探索新的版本控制系统。我最大的需要: Reliable merging

    svn - 在 svn 中添加/删除文件/文件夹的用户权限

    svn - 如何验证 Subversion 工作副本

    svn - 在我不能 "force"的情况下,我怎样才能 "reintegrate"树干上的一个分支?

    git:如何以交互方式逐个分支删除远程仓库中不存在的本地分支?

    git - 我可以只从另一个 git 存储库中提取某些文件吗?

    svn - 对于Subversion 1.5.6 和1.6.3 之间在易于合并方面的差异,大家有什么看法?

    javascript - 有没有办法检查所有手动解决的 Mercurial merge 冲突?

    git - 如何检查提交是否已 merge 到我当前的分支 - 某个时间?

    r - 在 R4.0.0 中合并数据帧比 R3.6.3 慢 60 倍?