我正在开发一个新项目,计划将其保存在 git 存储库中。我知道如何在 CVS 中执行此操作,但我对 git 有点陌生,可以使用一些建议。
该项目是两个嵌入式设备的固件,它们相互通信并打包为一对。对于这两种设备,都有代码的生产变体和制造变体。这两个设备项目都有许多子/同级项目,用于执行硬件的各个位(闪烁 LED 等),或与硬件相关的代码位(驱动程序等)。大多数代码在所有事物中都是通用的。
我还要求能够彼此独立地修改生产和制造固件,以防止对其中一个固件的更改导致另一个通过验证发回。
下面是我现有的目录布局。它是有机增长的,并且在我知道我将使用 git 之前就已基本完成。如果有更好的方法的话,我并不反对重新组织整个事情。
- 项目根目录
- 包括
- 来源
- 设备A
- 生产
- 制造
- 眨眼
- 按钮
- ...
- 设备B
- 生产
- 制造
- 眨眼
- 按钮
- ...
我很想将生产和制造放在分支上,但我通常在一天内同时处理这两个分支,而 git 一次只允许一个分支处于事件状态。然后我不知道如何处理闪烁、按钮等,因为它们并不是真正的制造或生产。有建议吗?
说明:
代码的制造版本用于在生产线上测试硬件。生产代码在硬件通过测试站后加载,然后运送给客户。两者至少有 75% 相似,但它们需要独立,这样我就可以修复生产代码中的错误,而不必停止生产线。
由于DeviceA和DeviceB是一对,因此两个代码集都被标记并同时发布,并且发布版本号相同。
最佳答案
我使用 git 来管理硬件/软件协同设计,所以我可能会提供一些有用的建议。
根据经验,如果您的设计部分可以彼此互操作,无论您正在进行的修订如何,您最好为这些部分创建单独的 git 存储库。
举个例子,您希望驱动程序位于与硬件设计不同的存储库中。这是因为软件和硬件之间的接口(interface)非常清晰,是分解的天然接缝。此外,相同的驱动程序版本将适用于您设备的一系列设计阶段。
我不确定您所说的设计的生产和制造版本是什么意思。如果您想将开发版本和稳定版本解耦,那么您应该可以为这些版本建立单独的分支。
在 git 中进行分支和 merge 非常便宜,并且分支之间的切换速度快如闪电;因此,拥有分支机构不会受到任何惩罚。在分支之间挑选兼容的更改也相当容易。您在软件世界中通常看到的方法(发布分支,加上一个 HEAD)效果相当好。
您可能应该将演示/测试模块(闪烁器等)与它们应该演示/测试的模块放在一起。这是因为演示耦合接口(interface)通常容易发生变化。这样,您就必须使演示代码与实际设备保持同步,从长远来看,这将有助于设计的稳定性。
顺便说一句,在 FPGA 世界中,您通常在大型设备上进行原型(prototype)设计,并在受限设备上进行生产。这样,您的模块最终就会有两个独立开发的品种。您可能希望将这些变体保存在单独的存储库中,因为它们实际上是不同的实体。在这种情况下,两者之间共享的代码(总是有一些可以重用的可移植代码)可以存在于单独的存储库中,并且是单独的库。特别是如果代码大小合理的话。
然后,您可以使用 git 子模块将所有提到的模块绑定(bind)在一起。
关于git - 需要新项目的 git repo 布局建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/881230/