Git工具|子模块的变化

ArduPilot的带头人Tridge带来关于Git工具-子模块变化的个人分享,以下是他给大家分享的内容:

github 处理子模块的方式发生了一些重大变化,这些变化影响了ArduPilot项目。关于这些变化在github的博文中有提及,以下是文章链接:

接下来,我将和大家分享这些变化如何影响到ArduPilot以及如何帮助ArduPilot的开发人员以修复或避免相关问题。

一、git:// 协议

git 版本控制系统最早支持的协议之一就是git://协议。它是一个只读协议,不需要任何身份验证。ArduPilot对子模块广泛使用了git://协议。(ArduPilot所依赖的代码库,并通过子模块引用包含在ArduPilot中。)

我们使用 git:// 协议是因为当时在我们创建这些子模块时 github的访问控制粒度非常差,因此我们希望开发人员能够标记pull请求,那么我们必须给他们完全的写访问权限。对于刚接触git的开发人员来说,这是有风险的,因为git命令中的一个错误可能会造成很多损害。通过使用git://协议,用户不太可能会发生意外损坏,因为子模块是只读的,除非他们明确地将它们更改为读写。

二、发生的变化

github 断断续续停止了对git://协议的支持,这是通过一组故意“限制”来迫使项目更改为https://协议。这会导致大量失败的持续集成工作,开发人员无法使用现有的git克隆。它还会影响我们所有旧的稳定分支。这些限制将在明年永久生效(有关时间表,请参阅本文顶部的链接)。

三、我们如何应对

我们已经对主分支和稳定的3.6、3.9、4.0和4.1分支应用了补丁,以改变我们的git子模块使用https://协议。这避免了问题的出现,但拥有自己分支的供应商和开发人员仍然面临这个问题。你是否会遇到过以下这个问题:
46603d9c31c3adc2971c8803225dafba_640_wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
关键句是“端口9418上的未经验证的git协议不再被支持”。

四、快速修复

快速修复的方法是设置git在使用git://协议时自动使用https://,你可以通过运行以下命令来实现:
git config --global url.https://github.instead0f git://github
它将做的是在你的主目录的.gitconfig文件中添加以下内容:

[url"https://github"]
instead0f = git://github+
这个修复对个人开发人员来说是很好的。如果需要了解适用于整个开发团队更完整的修复,请参阅下面内容。

五、修复你的分支

如果你有自己的分支或ArduPilot稳定分支中的一个git检验,那么你可以通过应用一个补丁,然后运行一个“同步”脚本来修复你的子模块。

你需要的补丁在以下pull请求中:

  • git: changed submodule protocols to https:// for master by tridge · Pull Request #19109 · ArduPilot/ardupilot · GitHub 1
  • git: changed to https git protocol for copter4.1 by tridge · Pull Request #19118 · ArduPilot/ardupilot · GitHub
  • git: changed to https protocol for plane 4.1 by tridge · Pull Request #19111 · ArduPilot/ardupilot · GitHub 2
  • git: changed protocol to https for copter-4.0 by tridge · Pull Request #19113 · ArduPilot/ardupilot · GitHub 2
  • git: changed protocol to https for copter-4.0 by tridge · Pull Request #19113 · ArduPilot/ardupilot · GitHub 2
  • git: changed to https git protocol for plane3.9 by tridge · Pull Request #19114 · ArduPilot/ardupilot · GitHub
  • git: changed to https git protocol for Copter-3.6 by tridge · Pull Request #19115 · ArduPilot/ardupilot · GitHub

你可以从这些PR中的相应分支中“挑选”最后一个补丁来解决问题。

六、子模块同步脚本

应用补丁后,你需要运行这个脚本:

Too1s/gittoo1s/submodule-sync.sh

它将运行git子模块同步命令来修复你的检验。

END

Ardupilot公众号的二维码