在 TortoiseSVN / 分支实践中合并特定文件

Merging specific files in TortoiseSVN / branch practices

我有一个个人分支机构,我在其中同时处理多项功能。完成一个功能后,我想将相关文件合并回主干,但我不知道如何做。 Merge 将单方面合并所有内容,如果我想要任何一种粒度,我必须一次通过接口流一个文件。

我尝试使用修订图来比较分支和主干,让我从更改中 select 相关文件 - 但是从统一差异创建补丁不包括任何新文件。

"Merge range of revisions" 也不是很有用,因为我对我的个人分支的许多提交都包含不同功能的工作,因为我在多台机器上工作并且必须确保我所做的一切都是提交的,完整的或不是。

我是不是做错了?我应该为每个功能都创建一个新分支吗?我觉得我会有一打和一次建造它们的噩梦。我是否应该对我的分支提交进行微观管理,以确保每个功能都为以后 selection 分开?我想我不能对此提出强烈反对,我只是对缺乏合并特定文件的明显能力感到困惑。

Am I just doing it wrong?

如果 "it" 是你的 "branching policy",那么 - 是

如果 "it" 是你的 "branch development policy",那么 - 是

Should I be taking out a new branch for every single feature?

也许,但 "it depends" 至少:并行分支的数量、每个此类分支的生命周期、您的合并习惯(开发期间的累积合并或 "Big Bang" 已完成功能的合并),因此 -我不能给你 最终答案 (tm)

如果您在共享分支中遵循 "branch per task" 政策 至少 "commit per task",您就可以减少头痛。对于合并

,它至少在某种程度上是可管理的

无论如何,您必须阅读有关 different merge-types, pay attention to subtree and cherrypick 合并的内容:

  • 如果你要在公共分支中提交每个任务,你可以只收集所有与分支中的功能提交相关的内容,然后将这些子集分别挑选到 t运行k
  • 每个任务都有分支,你将使用普通合并到 t运行k,但是很多合并地狱与跨分支合并(这对 long 运行 来说是一个真正的痛苦)

现在你只有一种方法:混合子树和 cherrypick 以及大量的手工操作:

  • 收集与功能相关的文件列表
  • 收集与功能相关的修订列表
  • subtree-merge p.1 中的每个文件与 p.2 中的 cherrypicking 修订在同一个命令中(无论如何,你将对每个功能进行不止一次合并,因为 "Merge file N for feature X..." for 源码树的每个独立部分必须)