Mercurial 分支与编译标志:一个代码库——多个产品

Posted

技术标签:

【中文标题】Mercurial 分支与编译标志:一个代码库——多个产品【英文标题】:Mercurial Branches vs. Compilation Flags: One Codebase -- Multiple Products 【发布时间】:2011-01-07 08:21:02 【问题描述】:

假设我正在创建一组产品,它们共享大部分代码但不是全部(例如:具有多个前端的应用程序:命令行、Windows/MAC/Linux GUI、移动(最小)GUI、 Web GUI 等)

此外,假设共享代码不能轻易拆分和“库化”。

我正在考虑为不同的产品使用 mercurial 命名分支(例如分支:CLI、Windows、MAC、Linux、Mobile、Web)或代码中的编译标志(例如#if (FRONT_END == CLI) #elif (FRONT_END == WEB) ...)。

我对这两种方法都不满意。以下是我的不满:

命名分支:

如果我更改了一段共享代码,我需要将它与所有分支合并。 是否有 hg 命令可以(半)自动执行此操作? 很难/快速查看特定功能如何在所有分支中实现(可视化代码某个区域的差异)

编译标志:

代码混乱 没有隐式的分支修订历史。必须手动执行(提交时会显示哪些产品受到影响)

你能建议吗:

如何减轻我的疑虑? 不同的观点 结合这两种方法的优雅方式

感谢

【问题讨论】:

您是否从同一个项目构建不同的前端?为什么这会对共享代码产生影响? IE。为什么共享代码需要知道它需要在 Web 应用程序和桌面应用程序中使用? 共享代码拆分有什么问题? 【参考方案1】:

我想,我有适合你的最佳策略。

前言:我非常、非常讨厌 ifdef'ed spaghetti-code


命名的分支机构还不错,但有管理层的缺点,是的。经过一些尝试和失败后,我停止了“单一代码库 + 多 MQ 补丁”的想法。使用新鲜的 Mercurial,您甚至可以拥有多个队列,您可以使用受保护的补丁......因此您有一个 vanilla 代码 - 许多(任何)目标

未来阅读:《Mercurial:权威指南》,Chapter 12. Managing change with Mercurial Queues 和 Chapter 13. Advanced uses of Mercurial Queues

【讨论】:

以上是关于Mercurial 分支与编译标志:一个代码库——多个产品的主要内容,如果未能解决你的问题,请参考以下文章

使用Mercurial SCM进行分支

合并来自不同存储库的 Mercurial 分支

在推送之前丢弃 Mercurial 中的本地分支

来自分支的 Mercurial 克隆

是否可以使用bazaar,mercurial或git进行部分克隆/分支?

如何为Mercurial最佳地配置中央存储库/多个中央存储库?