为Git子模块添加pushurl失败的问题求助
解决子模块推送至私有仓库的问题
让我来帮你搞定这个子模块推送的麻烦!你遇到的问题核心是:子模块默认关联的是上游AUR仓库,即便改了pushurl,也需要确保子模块的修改已经提交到你自己的分支,并且远程配置正确指向你的仓库。咱们一步步来:
1. 进入子模块目录,检查远程配置
首先切换到子模块文件夹里,看看当前的远程仓库设置:
cd gnome-keyring-query git remote -v
你大概率会看到只有上游AUR仓库的fetch地址,push地址要么没有,要么还是指向AUR(你没权限推的)。
2. 配置子模块的推送远程
这里有两种方式,选你方便的:
- 方式一:修改现有origin的push地址(保持fetch还是上游,push到你的仓库)
git remote set-url --push origin 你的仓库地址 - 方式二:新增一个专属远程仓库(比如叫
myrepo)git remote add myrepo 你的仓库地址
3. 确保子模块处于可用分支(避免detached HEAD)
子模块默认克隆后通常处于detached HEAD状态(只指向某个commit,没有关联分支),这种状态没法直接推送。所以先创建并切换到你自己的分支:
git checkout -b my-custom-branch # 分支名可以自定义,比如my-feature
4. 提交子模块里的修改
把新增的Makefile提交到子模块的本地仓库:
git add Makefile git commit -m "Add custom Makefile"
5. 推送子模块修改到你的仓库
根据你之前选的方式来推送:
- 如果是修改了origin的pushurl:
git push origin my-custom-branch - 如果是新增了
myrepo远程:git push myrepo my-custom-branch
6. 更新主仓库的子模块引用
回到主仓库,因为子模块的HEAD已经更新,你需要把这个新的子模块状态提交到主仓库:
cd .. # 回到主仓库根目录 git add gnome-keyring-query git commit -m "Update submodule: add custom Makefile" git push # 推送主仓库的修改
为什么之前的操作没生效?
你修改.gitmodules和.git/modules/.../config的思路是对的,但可能缺了关键步骤:
- 子模块处于
detached HEAD状态,没有可推送的分支; - 没有先在子模块里提交
Makefile的修改,直接推送自然没内容可推; - 可能
pushurl配置后,你没有切换到子模块目录执行推送,而是在主仓库操作(主仓库没法直接推子模块的内容)。
内容的提问来源于stack exchange,提问作者ramgorur
相关产品推荐
相关产品推荐

