我在 Windows 8.1 上运行 git,并使用以下批处理脚本从上游拉取:
git pull --recurse-submodules
git submodule update --recursive --remote --init --merge
git submodule foreach "git pull || true"
我知道这是多余的,但反复试验表明,有时上述命令中的任何一个都无法获取其他命令所获取的内容,因此在与它战斗了一段时间并阅读了关于 SO 的不同答案后,我放弃并去了采用“腰带和吊带”的方法。
这工作了大约一年,直到一周前我更新到 git 版本 2.18.0.windows.1
从那时起,几乎每次调用都会导致某些子模块中的头部分离。我进入有问题的git checkout
分支,正确的分支,git pull
从子模块内部执行一个,一切看起来都很好,但是如果我尝试在主仓库中再次运行脚本,BAM!即使上游没有发生任何变化并且没有任何内容被拉出,相同的子模块也会进入分离的头部状态。
我知道唯一改变的是 git 版本。
我做错了什么,正确的方法是什么?
编辑:
项目已建立,子模块用于在多个存储库之间共享的文件,并且这些文件由开发人员定期更改(不,我没有发言权)。
我想要完成的是在他们的签出分支上获取存储库的最新提交,然后更新超级项目指针并推送到原点。
编辑2:
下面会做我上面的打算吗?
git pull
git submodule foreach "git pull || true"