所以我有一个问题让我在 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/