假设我有一个以特定编程语言实现的项目,其出于任何原因被分为两个(或更多)版本。
这两个版本提供了不同的机制来实现项目的某些功能。因此,相同的代码在版本之间不可移植。
如何在git存储库中组织这种情况?但是,保留分支中特定版本的目录?在同一个存储库中复制分支?或者为每个版本使用不同的存储库?
答案 0 :(得分:2)
这取决于编程语言,但如果两个版本之间的差异导致代码有显着差异,那么我想:
一旦将两个不同的实现分开,就可以将它们保存在同一个分支中,就像在分支中保留同一个接口的任意两个不同实现一样。
对于一个微不足道的区别,例如,如果您只需要将稍微不同的标志传递给某个函数,那么我可能不会遇到所有麻烦。相反,我只是做相同的:
#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
那里应该有默认消息。您可以保留原样,也可以添加有关保持此特定版本正常工作的更多信息。