我试图设置git以在所有git pull命令上执行git submodule update --init --recursive
(或者当在服务器端提取新提交时)。
我的目标是让我的同事和我不会被执行git add *
或git pull
的人再次咬伤,然后必须手动播放子模块命令以恢复他的问题
我的问题是我认为克隆项目和/或拉动应该使用远程git的配置进行更新(这包括子模块)。在开发图书馆的高级项目中,情况发生了很多,但人们忘了更新他们的子模块......
我虽然现在已经回答了,但我找不到它。现在,我有同事想要一个git repo(没有子模块)但是它为CI / CD的观点带来了它自己的一系列问题...
我不想做像Piper(谷歌解决方案)这样的事情来管理这个...我相信有人必须得到答案,并且可以帮助我解决这个问题。
此致 Eric Lafontaine
答案 0 :(得分:0)
我把这个答案留在参考中。为了解决在pull上更新子模块的问题,我们需要了解git子模块是如何工作的。
子模块是另一个git仓库中的git仓库的嵌套。换句话说,第一个Git(项目)引用另一个Git仓库(子模块,可能是一个库)。使用标准子模块时,它将作为具有特定SHA的分离头检出。这意味着对它进行拉动将 而不是 更新项目参考。
如果子模块配置为遵循分支,那么这意味着我们期望子模块发展,我们也期望它始终符合我们项目的某些标准。
考虑到这一点,当我们执行git pull
时,我们希望将子模块“检出”到我们已配置的修订版本(无论是特定提交还是分支)。为此,我们可以将“fetch”配置为在我们的配置上递归;
git config --global fetch.recurseSubmodules true
我希望以这种方式配置,你想使用git子模块。然后,这个技巧可能有助于在执行推送之前查看子模块中的冲突;
git config --global push.recurseSubmodules check
REF:[https://chrisjean.com/git-submodules-adding-using-removing-and-updating/]