Git子模块经init+update初始化后缺失分支,如何获取所需分支?
Git子模块分支切换问题(GitLab CI场景)
我有一个包含子模块的Git仓库,需要在克隆并初始化后修改子模块指向的分支,使用场景为GitLab CI任务。
正常可行的操作流程
如果使用git clone --recurse-submodules克隆仓库,可通过以下命令正常切换子模块分支:
git submodule set-branch ... git submodule update --remote
执行完成后,进入子模块目录运行git branch -a -v,能看到所有分支。
异常场景及问题
但如果不使用--recurse-submodules克隆,而是通过git submodule init+git submodule update初始化子模块,再尝试上述切换分支命令时,会触发报错:
Unable to find refs/remotes/origin/
revision in submodule path
同时子模块目录下仅能看到少数分支。我尝试了git fetch的多种参数(--unshallow、--deepen、--all)均无效,也找不到强制GitLab CI使用--recurse-submodules的方法。
解决方案
MacBook本地环境
可通过以下命令解决:
git rm <submodule> git submodule add -b <目标分支> <子模块仓库地址>
GitLab CI环境
需执行以下命令:
cd <submodule> git reset --hard cd .. git rm -f <submodule> git submodule add -f -b <目标分支> --name foobar <子模块仓库地址>
内容的提问来源于stack exchange,提问作者Guillaume Laurent
相关产品推荐
相关产品推荐

