我可以(也应该)在GitHub上的存储库之间合并吗?

时间:2018-10-16 12:11:01

标签: git github

我在一个拥有10多年历史的相当老的存储库中有一个嵌入式C项目。现在,我需要将整个项目移植到新平台,不同的CPU,一些不同的API。仍然需要支持旧平台的错误修复和一些次要的新功能,这意味着偶尔会有新的代码和错误修复,需要从新版本合并到旧版本中。

现在我看到两种方法:

1)只需为旧平台创建一个分支“旧版”,在master上进行移植,然后将我需要从master合并到旧版的内容合并

2)签出现有代码,将其移植到新平台,并从中创建一个新的存储库。这意味着,我偶尔需要合并这两个存储库之间的代码,但是我有一个新的,新鲜的存储库,其中没有10年的悠久历史和50多个废弃分支。

第二种方法可行吗,即是否可以在具有共同祖先的不同存储库之间合并(或选择)?

如果这样,您会推荐哪种方式,为什么?

任何想法都受到高度赞赏!

编辑:选项2)的另一个原因是它会更简单,因为我需要在新平台上使用新的IDE,即我需要创建一个新项目并从旧项目中复制代码进入新项目。然后,我不得不以某种方式向git解释,我创建的这个项目是新的项目主,而无需从仓库中撤出。

2 个答案:

答案 0 :(得分:0)

我处于同样的情况:一个20年的C存储库必须在具有25年历史的8位平台和非常新的ARM芯片上工作。旧的C代码带有内联汇编,因此我不得不将其全部考虑在内。然后,我写了一个实现了一些现代C功能的clang重写程序,并用旧的C编译器可以理解的术语重铸了它们。例如,内联函数根据always-inline属性进行了适当的扩展,而旧代码以前为此使用了宏(ugh)。它还发出了一些必要的内联程序集,可解决旧编译器中的错误。因此,我建议您仅在熟悉基于clang的源到源重写之后再做:否则,很难编写不会在现代编译器上触发百万警告和样式建议的可读代码。我可能会写一个IR到C的后端,因为它将处理大多数原始编译器无法处理的错过的优化。

答案 1 :(得分:0)

您可以保持新的github存储库紧凑且专注,而不会丢失历史记录,因为您可以在任意位置获取/推送任意历史记录,孤立新的历史记录,如果发现需要从旧的历史记录中获取内容,则从那里获取并浏览/ cherrypick /无论您的内心满足感如何。从私有实用程序仓库中获取实用程序代码是一个方便的特技。