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://协议。这避免了问题的出现,但拥有自己分支的供应商和开发人员仍然面临这个问题。你是否会遇到过以下这个问题:
关键句是“端口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