非仓库所有者如何编辑Git子模块并推送修改?
处理Git子模块自定义修改并推送至自有仓库的正确流程
核心思路
先将原子模块仓库fork到自己的账号下,修改主项目中子模块的远程地址指向自己的fork仓库,之后在子模块内完成适配修改并推送到自己的仓库,最后更新主项目的子模块引用即可。
详细操作步骤
1. Fork原子模块仓库
前往原子模块所在的Git平台,点击fork按钮将仓库复制到自己的账号下,获取自己的仓库地址(例如git@github.com:your-username/submodule-repo.git)。
2. 修改主项目中子模块的远程地址
两种方式任选其一:
- 方式一:通过命令行修改
进入主项目根目录,定位到子模块文件夹后修改远程地址:
# 进入子模块目录 cd path/to/your/submodule # 查看当前远程地址 git remote -v # 替换为自己的fork仓库地址 git remote set-url origin git@github.com:your-username/submodule-repo.git # 确认地址已更新 git remote -v
- 方式二:修改配置文件
编辑主项目根目录下的.gitmodules文件,找到对应子模块的url字段,替换为自己的fork仓库地址,然后执行同步命令:
git submodule sync
3. 在子模块内做修改并推送
在子模块目录中创建专属分支,完成适配修改后推送到自己的仓库:
# 创建并切换到自定义分支,例如feature/adapt-main-project git checkout -b feature/adapt-main-project # 进行代码修改 # 提交修改 git add . git commit -m "适配主项目的调整:[简要说明修改内容]" # 推送到自己的fork仓库 git push origin feature/adapt-main-project
4. 更新主项目的子模块引用
回到主项目根目录,更新子模块的指针指向自己推送的新提交:
# 查看子模块状态,确认有未提交的引用更新 git submodule status # 提交主项目对子模块的引用变更 git add path/to/your/submodule git commit -m "更新子模块引用为自定义适配分支的最新提交" # 推送到主项目仓库 git push origin main
针对你遇到的问题的解决方案
- 推送时提示无权限/覆盖原仓库:之前未修改子模块的远程地址,直接推送到了原作者的仓库,修改远程地址为自己的fork仓库后即可正常推送。
- 执行
git submodule update --remote --merge后子模块为空:该命令默认拉取原仓库的远程分支,修改远程地址后,执行git submodule update --init --recursive可重新拉取自己fork仓库的代码。 - fork后子模块文件夹为空:未正确初始化子模块,修改
.gitmodules的url后执行git submodule sync,再执行git submodule update --init --recursive即可拉取代码到子模块目录。
内容的提问来源于stack exchange,提问作者TheProblemInTheCodeIsMe
相关产品推荐
相关产品推荐

