我正在努力寻找一种使用 Mercurial 处理我的工作流程的好方法。我在 SO 和其他地方阅读了许多相关问题,但找不到合理的解决方案。
假设我有两个分支:
- 我在其中进行正常开发的默认分支。从中部署发布并使用发布标签对其进行标记
- 单独维护的特定客户的分支机构。它在一个单独的版本号上运行,该版本号从应用程序的旧版本分支而来。
这两个分支现在大部分相同,但已经存在一些差异。随着时间的推移,他们会更加疏远。
这意味着我有 4 种类型的源文件:
- Type-A:在两个分支中保持相同的文件(如果引入了更改,则应该在两个分支中都存在)。这些是大部分文件。
- Type-B:只在默认分支中,不需要合并到客户分支中的文件
- Type-C:只在客户分支中的文件,不需要合并到默认分支中
- Type-D:两个分支中都存在的文件,具有共享代码,但也包含应该保持独立且特定于每个分支的代码
开发在默认分支上完成,并且有大部分是增量的定期版本。但我也有这两种情况:
- 对默认分支所做的一些更改也需要合并到客户分支(例如,需要修复/添加到两者的错误或功能)。
- 对客户分支完成的“修补程序”,不能立即合并到默认分支,但最终需要在某个时候合并。
问题是我想不出一种相当简单、干净和安全的方法来支持这两种情况。Mercurial 没有部分合并或在合并时忽略文件的概念。它合并了变更集,但它坚持包含以前版本中引入的文件。
在这些场景中将 default 合并到 customer 分支或 customer 到 default 会迫使我添加 Type-B 和 Type-C 的文件。对不需要添加到另一个分支的 Type-A 文件进行更改(使其成为 Type-D)带来了挑战。
现在显然我可以通过使用编译器定义来解决其中一些问题(从而在两个分支中保持源文件相同),手动编辑代码并在合并后手动删除文件,但这并不是最有效和最干净的处理方式这。
当然,这是一个足够普遍的工作流程,比我更聪明的人已经想通了。任何人都可以提出任何可以简化这些场景中的工作的方法或最佳实践吗?还是我的设置存在根本缺陷?
另外,Git 是否更优雅地处理这些流程?
谢谢。