如何将本地Git子模块推送到GitHub远程仓库并设置正确URL?
问题解决步骤
1. 修正.gitmodules中的子模块URL
你的子模块对应的远程仓库是libBasexTest和libBasexCpp,因此.gitmodules里的URL必须指向这两个独立仓库,相对路径在本地可用但GitHub解析易出问题。修正后的内容如下:
[submodule "libBasexTest"] path = libBasexTest url = git@github.com:BenEngbers/libBasexTest.git [submodule "libBasexCpp"] path = libBasexCpp url = git@github.com:BenEngbers/libBasexCpp.git
若习惯HTTPS认证,可替换为:
[submodule "libBasexTest"] path = libBasexTest url = https://github.com/BenEngbers/libBasexTest.git [submodule "libBasexCpp"] path = libBasexCpp url = https://github.com/BenEngbers/libBasexCpp.git
2. 同步子模块配置到本地
执行命令将.gitmodules的配置同步到每个子模块的本地Git配置:
git submodule sync
3. 验证并修正子模块的远程仓库
进入每个子模块目录,检查远程仓库是否正确:
cd libBasexTest git remote -v
若输出不是对应子模块的远程地址,手动设置:
git remote set-url origin git@github.com:BenEngbers/libBasexTest.git
重复上述操作处理libBasexCpp目录。
4. 推送子模块内容到对应远程仓库
确保子模块的本地提交已推送到各自的远程仓库:
# 处理libBasexTest cd libBasexTest git push origin main # 分支为master则替换为master cd .. # 处理libBasexCpp cd libBasexCpp git push origin main cd ..
5. 推送主仓库更新
提交.gitmodules的修改并推送到主仓库:
git add .gitmodules git commit -m "Fix submodule remote URLs and sync commits" git push origin main
问题根源说明
最初添加子模块时错误使用了主仓库的URL,导致子模块指向主仓库本身;后续修改为相对路径后未同步子模块本地配置,且git push --recurse-submodules=on-demand因子模块远程配置错误,无法将子模块提交推送到正确远程仓库,最终GitHub无法找到子模块对应commit,出现错误提示。
内容的提问来源于stack exchange,提问作者Ben Engbers
相关产品推荐
相关产品推荐

