我正在开发一个我计划保留在git存储库中的新项目。我知道如何在CVS中这样做,但我对git有点新意,可以使用一些建议。
该项目是两个嵌入式设备的固件,这两个嵌入式设备相互通信并作为一对打包。对于这两种设备,存在生产变体和代码的制造变体。两个设备项目都有许多子/兄弟项目,用于执行各种硬件(闪烁LED等)或硬件相关的代码位(驱动程序等)。大多数代码在所有内容中都很常见。
我还要求能够相互独立地修改生产和制造固件,以防止更改为通过验证发送另一个固件。
以下是我现有的目录布局。它有机地发展,并且在我知道我将使用git之前基本上已经奠定了。如果有更好的方法,我不反对重组整个事情。
我很想将生产和制造放在分支机构上,但我通常在某一天工作,git只允许一个分支一次处于活动状态。然后我不知道如何处理眨眼,按钮等因为它们不是真正的制造或生产。建议
澄清:
在生产线上使用代码的制造版本来测试硬件。生产代码在硬件通过测试站后加载,并运送给客户。这两者至少有75%相似,但它们需要独立,因此我可以修复生产代码中的错误而无需停止生产线。
由于DeviceA和DeviceB是一对,因此两个代码集都会使用相同的版本号进行标记和发布。
答案 0 :(得分:2)
我使用git来管理硬件/软件代码,因此我可能会提供一些有用的建议。
根据经验,如果您的设计部分可以互相互操作而不管您正在进行的修订,那么最好为这些修改单独的git存储库。
举个例子,您希望您的驱动程序与硬件设计位于不同的存储库中。这是因为软件和硬件之间的界面非常清晰,并且是分解的天然接缝。此外,相同的驱动程序版本将适用于您设备的一系列设计阶段。
我不确定您对设计的生产和制造版本的意思。如果你想分离开发版本和稳定版本,那么你可以选择单独的分支。
git中的分支和合并尽可能便宜,并且分支之间的切换速度很快;因此,分支机构不会受到惩罚。在分支之间挑选兼容的变化也相当容易。您通常在软件世界中看到的方法(发布的分支,加上一个HEAD)运行得相当好。
您应该将演示/测试模块(闪光灯等)与他们应该演示/测试的模块放在一起。这是因为演示耦合接口通常易于更改。这样您就必须使演示代码与实际设备保持同步,从长远来看,这有助于设计稳定性。
作为旁注,在FPGA领域,您通常是在大型设备上进行原型设计,并在受限设备上进行生产。这样,您的模块最终会有两个独立开发的变体。您可能希望将这些变量保存在单独的存储库中,因为它们实际上是不同的实体。在这种情况下,两者之间共享的代码(总有一些可以重用的可移植代码)可以存在于一个单独的存储库中,并且是一个单独的库。特别是如果代码大小合理的话。
然后,您可以使用git子模块将所有提到的模块绑定在一起。
答案 1 :(得分:1)
我认为你可以使用子模块。 我不是100%确定这是如何工作的,但你可以为你的公共代码创建一个git repo(比如LED和用户界面,甚至每个代码都有一个repo),并包含这个repo的副本作为你的repo的子模块A,另一个副本作为B的回购的子模块。
如果要更改公共部分,请在当前正在使用的设备上进行更改。完成后,将更改推送到其他产品的子模块。 如果感觉更舒服,你也可以在其他地方拥有公共部分的回购。
总结一下:将您的可重用代码放在单独的存储库中,以便您可以重复使用它。
我不是子模块之王,但我很快就需要做你正在做的事情。所以我对你如何使它发挥作用感兴趣。