如何将分叉项目存入同一GitHub仓库并自定义目标文件夹?
用Git子模块管理多fork项目并提交PR的方案
Git子模块完全能满足你的需求——它可以把多个独立的fork项目作为子目录嵌套在你预先创建的forked_projects仓库里,既保持每个项目的独立版本控制,又能统一管理所有fork项目。下面是具体的操作步骤:
操作步骤
先完成目标项目的fork
要提交PR的前提是先把目标项目fork到你自己的GitHub账号下,后续子模块要引用你自己fork后的仓库地址,而非原项目地址。初始化主仓库(如果还没完成)
- 克隆你自己的
forked_projects仓库到本地:git clone https://github.com/你的GitHub账号/forked_projects.git - 进入仓库目录:
cd forked_projects
- 克隆你自己的
添加子模块
用你自己fork后的仓库URL添加子模块,命令格式如下:git submodule add https://github.com/你的GitHub账号/目标项目名.git 本地存储目录名比如你要添加
repository1,就执行:git submodule add https://github.com/你的GitHub账号/repository1.git repository1执行后Git会自动生成/更新
.gitmodules文件,和你之前写的格式一致,无需手动修改。提交子模块配置到主仓库
把新增的子模块配置提交到forked_projects仓库:git add .gitmodules repository1 git commit -m "添加repository1作为子模块" git push修改子模块并提交PR
每个子模块都是独立的Git仓库,修改流程和普通仓库一致:- 进入子模块目录:
cd repository1 - 切换到主分支(比如
main):git checkout main - 做代码修改,然后提交到你自己fork的仓库:
git add . git commit -m "修复xxx问题" git push origin main - 之后去GitHub上你fork的
repository1页面,点击「Pull request」按钮,向原项目提交PR即可。
- 进入子模块目录:
更新主仓库的子模块引用
当子模块的代码有更新(比如你提交PR后原项目合并了,或者你在其他地方修改了子模块),可以在主仓库目录执行以下命令同步最新版本:git submodule update --remote repository1然后提交更新后的子模块版本到主仓库:
git add repository1 git commit -m "同步repository1的最新版本" git push
注意事项
- 子模块必须引用你自己fork后的仓库地址,不能用原项目地址,否则你没有权限推送修改。
- 克隆包含子模块的
forked_projects仓库时,建议加上--recurse-submodules参数,一次性拉取所有子模块代码:
要是已经克隆了主仓库,也可以执行git clone --recurse-submodules https://github.com/你的GitHub账号/forked_projects.gitgit submodule init && git submodule update拉取子模块代码。 - 主仓库只记录子模块当前的commit哈希值,子模块的实际代码存储在各自的仓库中,两者版本控制是独立的。
内容的提问来源于stack exchange,提问作者Rher
相关产品推荐
相关产品推荐

