1

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

此外,可以说共享代码不能轻易拆分和“库化”。

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

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

命名分支:

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

编译标志:

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

你能建议:

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

谢谢

4

1 回答 1

0

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

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


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

未来阅读:“Mercurial:权威指南”,第 12 章。使用 Mercurial 队列管理变更第 13 章。Mercurial 队列的高级使用

于 2012-11-28T11:01:12.970 回答