如何复制含全部子模块的GitHub仓库作为模板?是否有现成工具?
现有方案整理
GitHub官方自带方案
1. 模板仓库(Template Repositories)
- 先把你的父仓库设为GitHub模板仓库,新建仓库时直接选“Use this template”就能生成基础结构,但默认不会带子模块。解决办法:
- 在模板里加个初始化脚本,新仓库创建后跑
git submodule update --init --recursive拉取子模块,再手动改子模块的远程URL到新仓库地址。 - 配合GitHub Actions,设置仓库创建后的自动工作流,自动完成子模块的初始化和远程配置更新。
- 在模板里加个初始化脚本,新仓库创建后跑
2. GitHub API
- 完全自定义流程的核心方案,能批量搞定所有仓库创建和配置:
- 用
POST /user/repos(个人仓库)或POST /orgs/{org}/repos(组织仓库)接口批量创建父仓库和子模块对应的远程仓库。 - 把模板仓库克隆到本地,修改
.gitmodules里每个子模块的url字段为刚创建的子仓库地址,提交后推送到新的父仓库。 - 用curl或者官方的Octokit SDK写脚本就行,不用额外装第三方工具。
- 用
第三方实用工具
1. Cookiecutter
- 专门做项目模板化的工具,支持复杂结构包括子模块:
- 把你的Web应用结构做成cookiecutter模板,定义好仓库名、子模块地址这些可配置变量。
- 模板里加钩子脚本,生成项目时自动调用GitHub API创建所有仓库,同时把模块的远程地址配置好。
2. Terraform + GitHub Provider
- 适合用“基础设施即代码”思路管理仓库的场景:
- 写HCL配置文件,把父仓库和所有子模块仓库的信息(名称、权限、分支规则等)都定义清楚。
- 执行
terraform apply就能自动创建所有仓库,之后再把模板代码推上去,调整子模块的远程指向。
自己写脚本的核心步骤
如果不想用现成工具,自己写脚本的关键流程:
- 调用GitHub API批量创建父仓库和所有子模块仓库。
- 克隆你的模板仓库到本地临时目录。
- 遍历
.gitmodules文件,把每个子模块的url改成新创建的对应仓库地址。 - 提交父仓库的修改,推送到新的远程父仓库。
- 逐个推送子模块的代码到对应的新远程仓库。
内容的提问来源于stack exchange,提问作者lmonninger
相关产品推荐
相关产品推荐

