Git 子模块

../_images/git-submodules.png

ArduPilot 依赖于多个外部代码库,这些代码库位于 子模块.它们与 ArduPilot 一起被分叉、克隆和构建。

本页介绍了我们如何使用 git 子模块 在 ArduPilot 构建中。

子模块方法

ArduPilot 使用单一级别的 git 子模块,所有模块都存储在 模块 目录。之所以选择这种方法,是因为它可以简化对子模块问题的诊断。这意味着,如果外部项目(如 MAVLink)有自己的子模块,这些子模块会直接出现在 ArduPilot 模块目录.

ArduPilot 会维护每个外部项目 repo 的本地分叉,以避免意外更改。

您可能还会注意到,子模块的 URL 使用的是旧的 git:// 协议。这样做的目的是在开发人员逐渐习惯主版本库时,减少主版本库中意外提交的可能性。 git 子模块 作为 git:// 协议为只读协议)。拥有子模块提交权限的开发人员应根据需要添加一个新的可写协议的 ardupilot 远程模块。

更新本地软件仓库的子模块

要手动更新子模块,请使用以下命令

git 子模组 更新 --递归

在 ArduPilot 中偶尔会添加一个新的子模块,之后每个开发人员都必须运行该命令:

git 子模组 启动

常见错误

下面列出了注释错误及处理方法。

更新已修改的子模块

如果您对分支的子模块进行了修改 发展因此,在运行 "git submodule update -init -recursive" 命令时,有必要避免你的修改被原始子模块取代:

  • 为子模块创建自己的版本库,在此提交修改内容

  • 发展 分支版本库,修改 .gitmodule 文件,链接你自己的子模块版本库,而不是 分支机构

  • 将修改应用到子模块,提交并推送回远程仓库

  • 回到 发展 分支,你可以用 git status 查看修改情况。提交修改就大功告成了(下面的例子是针对 MAVLink 子模块的修改)

git 增加 .gitmodules
git 增加 模块/多点连接
git 承诺 -m 'mavlink:更新子模块 + 修改 gitmodule';
git 推动

的子模块 MAVLink 发展 分支现在链接到与 .第一条命令必须反映超级项目的更改:

git 子模组 同步

下面的常规命令将根据分支更新相应的子模块 (发展)你正在进行的工作。

git 子模组 更新 --启动 --递归

灾后恢复

如果你的 git 树出了大问题,最简单的办法就是从本地 repo 中完全删除 modules/ 目录,然后运行这些命令来重新初始化和更新子模块:

git 子模组 启动
git 子模组 更新 --递归