【发布时间】:2010-11-30 01:32:01
【问题描述】:
我很快就开始维护一系列包含相同嵌入式软件变体的产品。由于我玩了 git 一年了,非常欣赏它,我很可能会用它来做源码控制。
我可以看到几个用于维护固件变体的选项,但没有一个让我很满意。您为自己的工作应用了哪些最佳实践?
我能想到的替代方案:
定义。预处理。 优点:一切都始终存在于源代码中,很难错过其中一种产品的更新。 缺点:更难阅读。当我们只有两个变体时可能没问题,当它变成四个或更多时会很痛苦。此外,应用 DRY 原则(不要重复自己)似乎更难。
每个产品变体一个分支。 当包含适用于所有产品的更改时,必须将更改合并到其他产品。 缺点:如果提交既包含所有产品的更改,又包含特定变体的更改,则会有麻烦。当然,您可以确保提交只包含一种更改:this-product-changes 或 the-whole-family-changes。但是尝试将其强加给团队?再加上合并是行不通的,我们应该挑选樱桃。对吧?
作为子模块的核心存储库。 使所有包含核心功能的文件都成为自己的存储库。 所有产品都包含一个版本的核心存储库作为子模块。 缺点:我看不出最终不会有核心子模块的变体。然后我们又遇到麻烦了,然后我们又会使用定义或其他不好的东西。 带有分支的核心存储库?然后我们回到之前的替代方案:必须合并适用于所有分支的更改,但合并还包括特定于产品的内容。
创建每个模块的存储库。 例如,显示驱动程序的存储库,电源管理硬件的另一个存储库,用户输入界面的另一个存储库,...... 优点:良好的模块化。只需将您需要的模块作为子模块来制作新产品!所有子模块都可能有分支,例如,如果一个变体以不同的方式使用硬件。 缺点:很多很多模块,每个模块都跟踪几个文件(一个包含文件和一个源文件)。一个麻烦。 有人在某些模块中进行了重要更新?然后,如果合适的话,有人需要在这个模块的其他分支中包含更改。然后有人还必须更新每个产品存储库中的子模块。 相当多的工作,我们有点失去了 git 的快照方面。
你是怎么做的,它是如何工作的?或者你会怎么做?
我觉得我应该体验一下樱桃采摘。
【问题讨论】:
-
每个产品解决方案只有一个分支,您始终可以在 swperate 分支上进行开发,然后将该分支合并到变体(每个产品)分支中。
标签: git embedded workflow branch