如何在 Git 上存储共享公共共享驱动程序的项目
How do I store projects that share a common shared driver on Git
我想为我正在使用 Eclipse 开发的一些现有 STM32 嵌入式 C 项目创建 Git 存储库。
目前,我在各自的文件夹中有两个独立的项目,还有一个公共文件夹,其中包含两个项目都使用的 ST 官方 STM32 Cube 外设驱动程序(.c 和 .h)文件。
驱动程序文件夹不应更改(除非发布新版本)但项目文件将在我开发它们时进行编辑。
我应该如何将它们放在 Git 上?我应该:
- 有三个回购协议(一个用于每个项目,另一个用于驱动程序)?
- 有两个存储库并更改我的项目结构以将驱动程序与两个项目一起放置?
- 还有别的吗?
第一个选项似乎没问题,但如果我不克隆项目和驱动程序存储库,并将它们复制到特定位置,我将无法正确配置 Eclipse。
第二个似乎更轻松但多余(更新所有项目以使用发布的新驱动程序并不容易,并且它将使用更多服务器space)。
编辑:澄清一下,我没有使用 STM32CubeMX 软件。我只是简单地使用 STM32CubeF4 外设驱动程序,它们基本上只是用于芯片内部外设的嵌入式 C .c/.h source/header 文件(可能还有一些用于 DSP 计算的 .lib 库文件)。请参阅本页底部的 "download" 按钮以获取 .zip 存档(当前版本为 1.4.0):http://www.st.com/web/en/catalog/tools/PF259243
如果您在其他几个存储库中使用通用驱动程序,它看起来像是 git 个子模块的工作。
例如,在您的服务器上,您有三个独立的存储库,并且两个项目都将驱动程序代码作为子模块包含在内。每个项目 repo 中存储的是:
- 一个 URL 到驱动程序仓库(在您的服务器上)
- 将使用哪个 commit 驱动程序库
- path 放置驱动程序克隆的位置,相对于项目 repo
克隆一个项目仓库后,你运行git submodule update --init
,URL的仓库被克隆到相对path,它的 commit 被检出。
git submodule add --name <driver> /server/src/driver.git driver
(/server/src/driver.git
是 URL, driver
是 path. <driver>
只是一个可选的引用,以方便将来使用子模块。如果它与 path)
相同,请不要使用它
git 子模块一开始感觉有点笨重。例如,克隆或签出父(项目)存储库中的提交不会使子模块工作文件保持最新。为此,您必须手动 git submodule update
。
您最终将得到驱动程序的两个克隆,每个克隆一个在每个项目的工作文件结构中。但这并不是真正多余的,因为它们是您服务器上通用驱动程序存储库的克隆。
对于驱动程序的每次更新,您都会将驱动程序更改推送到您的服务器。要更新到另一个项目中的最新驱动程序版本,请转到该项目的子模块,执行通常的 git push
(您可能处于分离状态,在这种情况下,您需要先检出 master
)。更新将显示在项目的(不是子模块的)git status
中,它会在驱动程序子模块中告诉您 "New commits"。发生变化的是在您的子模块中检出哪个 SHA1;提交项目中的更改只会更新要检出的子模块提交。
我想为我正在使用 Eclipse 开发的一些现有 STM32 嵌入式 C 项目创建 Git 存储库。 目前,我在各自的文件夹中有两个独立的项目,还有一个公共文件夹,其中包含两个项目都使用的 ST 官方 STM32 Cube 外设驱动程序(.c 和 .h)文件。 驱动程序文件夹不应更改(除非发布新版本)但项目文件将在我开发它们时进行编辑。 我应该如何将它们放在 Git 上?我应该:
- 有三个回购协议(一个用于每个项目,另一个用于驱动程序)?
- 有两个存储库并更改我的项目结构以将驱动程序与两个项目一起放置?
- 还有别的吗?
第一个选项似乎没问题,但如果我不克隆项目和驱动程序存储库,并将它们复制到特定位置,我将无法正确配置 Eclipse。 第二个似乎更轻松但多余(更新所有项目以使用发布的新驱动程序并不容易,并且它将使用更多服务器space)。
编辑:澄清一下,我没有使用 STM32CubeMX 软件。我只是简单地使用 STM32CubeF4 外设驱动程序,它们基本上只是用于芯片内部外设的嵌入式 C .c/.h source/header 文件(可能还有一些用于 DSP 计算的 .lib 库文件)。请参阅本页底部的 "download" 按钮以获取 .zip 存档(当前版本为 1.4.0):http://www.st.com/web/en/catalog/tools/PF259243
如果您在其他几个存储库中使用通用驱动程序,它看起来像是 git 个子模块的工作。
例如,在您的服务器上,您有三个独立的存储库,并且两个项目都将驱动程序代码作为子模块包含在内。每个项目 repo 中存储的是:
- 一个 URL 到驱动程序仓库(在您的服务器上)
- 将使用哪个 commit 驱动程序库
- path 放置驱动程序克隆的位置,相对于项目 repo
克隆一个项目仓库后,你运行git submodule update --init
,URL的仓库被克隆到相对path,它的 commit 被检出。
git submodule add --name <driver> /server/src/driver.git driver
(/server/src/driver.git
是 URL, driver
是 path. <driver>
只是一个可选的引用,以方便将来使用子模块。如果它与 path)
git 子模块一开始感觉有点笨重。例如,克隆或签出父(项目)存储库中的提交不会使子模块工作文件保持最新。为此,您必须手动 git submodule update
。
您最终将得到驱动程序的两个克隆,每个克隆一个在每个项目的工作文件结构中。但这并不是真正多余的,因为它们是您服务器上通用驱动程序存储库的克隆。
对于驱动程序的每次更新,您都会将驱动程序更改推送到您的服务器。要更新到另一个项目中的最新驱动程序版本,请转到该项目的子模块,执行通常的 git push
(您可能处于分离状态,在这种情况下,您需要先检出 master
)。更新将显示在项目的(不是子模块的)git status
中,它会在驱动程序子模块中告诉您 "New commits"。发生变化的是在您的子模块中检出哪个 SHA1;提交项目中的更改只会更新要检出的子模块提交。