Git pull setup更新子模块到remote的checkout SHA

Git pull setup to update the submodule to the checkout SHA of remote

我正在尝试设置 git 以在所有 git 拉取命令上执行 git submodule update --init --recursive(或者在服务器端拉取新提交时)。

我的目标是让我和我的同事不再被某人做 git add *git pull 咬伤,然后不得不手动使用子模块命令来恢复他的问题。

我的问题是,我认为克隆项目 and/or 拉动应该更新远程 git 的配置(这包括子模块)。这种情况经常发生在开发了库但人们忘记更新他们的子模块的高级项目中......

我虽然现在已经回答了这个问题,但我找不到了。现在,我有同事想要一个 git 回购协议(没有子模块),但是从 CI/CD 的角度来看,这带来了自己的一系列问题...

我不想做像 Piper(Google 解决方案)这样的事情来管理这个...我相信一定有人知道答案并且可以帮助我弄清楚。

此致, 埃里克·拉方丹

我把这个答案留在 reference.For 解决拉动更新子模块的问题,我们需要了解 git 子模块是如何工作的。

子模块是一个 git 仓库在另一个 git 仓库中的嵌套。换句话说,第一个 Git (项目)引用另一个 Git 仓库(子模块,可能是一个库)。使用标准子模块时,它将作为具有特定 SHA 的分离头检出。这意味着对其进行拉取将不会更新项目引用。

如果子模块被配置为跟随一个分支,那么这意味着我们希望子模块不断发展,并且我们也希望它始终符合我们项目的某些标准。

考虑到这一点,当我们执行 git pull 时,我们希望子模块是 "checked out" 我们配置的修订版(无论是特定提交还是分支)。为此,我们可以将 "fetch" 配置为在我们的配置中递归;

git config --global fetch.recurseSubmodules true

我希望以这种方式配置,您希望使用 git 子模块。那么这个技巧可能有助于在执行推送之前查看子模块中的冲突;

git config --global push.recurseSubmodules check

参考:[https://chrisjean.com/git-submodules-adding-using-removing-and-updating/]