2

我正在开发一个计划保存在 git 存储库中的新项目。我知道如何在 CVS 中执行此操作,但我对 git 有点陌生,可以使用一些建议。

该项目是两个嵌入式设备的固件,它们相互通信并被打包成一对。对于这两种设备,都有代码的生产变体和制造变体。这两个设备项目都有许多子/兄弟项目,用于执行硬件的各个位(闪烁 LED 等)或与硬件相关的代码位(驱动程序等)。大多数代码在所有事物中都是通用的。

我还要求能够独立地修改生产和制造固件,以防止对一个固件的更改通过验证将另一个发回。

下面是我现有的目录布局。在我知道我会使用 git 之前,它就有机地成长了,而且大部分时间都被放下了。如果有更好的方法,我不反对重新组织整个事情。

  • 项目根
    • 包括
    • 源代码
    • 设备A
      • 生产
      • 制造业
      • 纽扣
      • ...
    • 设备B
      • 生产
      • 制造业
      • 纽扣
      • ...

我很想将生产和制造放在分支上,但我通常在给定的一天同时工作,而 git 一次只允许一个分支处于活动状态。然后我不知道如何处理闪烁、按钮等,因为它们并不是真正的制造或生产。建议?

说明:

  • 代码的制造版本在生产线上用于测试硬件。产品代码在硬件通过测试站后加载,然后交付给客户。两者至少有 75% 相似,但它们需要独立,这样我就可以修复生产代码中的错误,而无需停止生产线。

  • 因为 DeviceA 和 DeviceB 是一对,所以两个代码集都被标记并同时发布,具有相同的发布版本号。

4

2 回答 2

2

我使用 git 来管理硬件/软件代码设计,所以我可能会提供一些有用的建议。

根据经验,如果您的设计部分可以相互操作,而不管您正在处理的版本是什么,那么您最好为这些部分创建单独的 git 存储库。

举个例子,您希望您的驱动程序位于与您的硬件设计不同的存储库中。这是因为软件和硬件之间的接口非常清晰,是一个天然的分解缝。此外,相同的驱动程序版本将适用于您设备的一系列设计阶段。

我不确定您所说的设计的生产和制造版本是什么意思。如果你想解耦开发和稳定版本,你应该为这些单独的分支做好准备。

git 中的分支和合并尽可能便宜,分支之间的切换快如闪电;因此,拥有分支机构不会受到任何惩罚。在分支之间挑选兼容的更改也相当容易。您通常在软件世界中看到的方法(发布分支,加上一个 HEAD)效果很好。

您可能应该将演示/测试模块(闪烁器等)与它们应该演示/测试的模块放在一起。这是因为演示耦合接口通常易于更改。这样,您必须使演示代码与实际设备保持同步,从长远来看,这应该有助于设计稳定性。

附带说明一下,在 FPGA 世界中,您通常在大型设备上进行原型设计,并在受限设备上进行生产。这样,您的模块最终会拥有两个独立开发的品种。您可能希望将这些品种保存在单独的存储库中,因为它们实际上是不同的实体。在这种情况下,两者之间共享的代码(总有一些您可以重用的可移植代码)可以存在于单独的存储库中,并且是一个单独的库。特别是如果代码大小证明它是合理的。

然后,您可以使用 git 子模块将所有提到的模块绑定在一起。

于 2009-05-19T07:00:22.750 回答
1

我认为您可以使用子模块。我不是 100% 确定它是如何工作的,但是您可以为您的通用代码创建一个 git 存储库(例如 LED 和用户界面,甚至每个存储库),并包含此存储库的副本作为您的存储库的子模块A,另一个副本作为 B 的 repo 的子模块。

如果您想对公共部分进行更改,请在您当前正在使用的单元上进行。完成后,将更改推送到其他产品的子模块。如果感觉更舒服,您也可以在其他地方拥有公共部分的回购。

总结一下:将您的可重用代码放在单独的存储库中,以便您可以重用它。

我不是子模块之王,但我很快就需要做和你一样的事情。所以我对你将如何让它工作很感兴趣。

于 2009-05-19T06:57:39.213 回答