维护满足两个版本平台的项目的正确方法是什么?

时间:2012-01-16 15:51:41

标签: git language-agnostic

假设我有一个以特定编程语言实现的项目,其出于任何原因被分为两个(或更多)版本。

这两个版本提供了不同的机制来实现项目的某些功能。因此,相同的代码在版本之间不可移植。

如何在git存储库中组织这种情况?但是,保留分支中特定版本的目录?在同一个存储库中复制分支?或者为每个版本使用不同的存储库?

2 个答案:

答案 0 :(得分:2)

这取决于编程语言,但如果两个版本之间的差异导致代码有显着差异,那么我想:

  1. 定义一个接口,表示其实现需要不同的功能。
  2. 编写该接口的两个实现。
  3. 在构建时或运行时根据语言和项目选择正确的。
  4. 一旦将两个不同的实现分开,就可以将它们保存在同一个分支中,就像在分支中保留同一个接口的任意两个不同实现一样。

    对于一个微不足道的区别,例如,如果您只需要将稍微不同的标志传递给某个函数,那么我可能不会遇到所有麻烦。相反,我只是做相同的:

    #if NEW_PLATFORM
        // enable useful new flag 2
        #define FLAGS 0x11
    #elif OLD_PLATFORM
        // we can live without flag 2 if it's not supported
        #define FLAGS 0x1
    #else
        #error what platform even is this?
    #endif
    

    但要注意,随着代码的发展,微不足道的差异会越来越大,最终你会得到一堆平台检测代码。您的目标应该是在最多一个地方测试平台,或者甚至更好地使用构建选项控制整个事物。在上面的例子中,您可以调用USE_USEFUL_NEW_FLAG而不是显式编码,这取决于特定的平台版本。然后由您的构建配置决定哪些平台支持哪些功能。

答案 1 :(得分:1)

您可以通过分支机构实现这一目标。您需要在合并期间确定它们之间可以和不可以发生什么变化。

git merge --no-commit

将执行合并但不执行最后的提交步骤。这允许您调查解决方案是否仍然有效。使其工作后,使用

完成合并
git merge

那里应该有默认消息。您可以保留原样,也可以添加有关保持此特定版本正常工作的更多信息。