git - 需要新项目的 git repo 布局建议

标签 git layout dvcs firmware

我正在开发一个新项目,计划将其保存在 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/

相关文章:

git - 如何配置 visual studio 2017 以使用外部 difftool 和 mergetool

ruby-on-rails - 根据request.xhr设置布局?

java - 将缩略图显示为网格

mercurial - 如何使用 mercurial 进行发布管理?

git log 修订范围给出了不正确的提交范围

mercurial - 如何在推送默认分支时阻止命名分支?

git - 如何在 git 中使用 "publish"私有(private) Typescript npm 包?

git - .gitignore 中的评论?

html - CSS Flexbox 右对齐响应式

ruby-on-rails - Git 仅从特定文件夹 merge