如何一次性将GitHub组织所有仓库复制至另一普通GitHub账号?
批量复制GitHub组织仓库到个人账号
前提准备
- 安装最新版
ghCLI工具 - 通过
gh auth login分别登录组织账号和目标个人账号(可使用gh auth switch切换上下文,或通过环境变量指定token) - 确认你对组织内所有仓库拥有读取权限,目标个人账号具备创建仓库的权限
具体操作步骤
1. 导出组织仓库列表
假设组织名为my-org,执行以下命令导出所有仓库名称到文件:
gh repo list my-org --limit 1000 --json name --jq '.[].name' > repos.txt
--limit值设为足够大的数确保覆盖所有仓库,jq用于提取纯仓库名称。
2. 批量克隆并推送至个人账号
编写shell脚本循环处理每个仓库(替换your-personal-username为你的个人账号名):
TARGET_USER="your-personal-username" while read repo; do # 浅克隆加快速度(需完整历史则去掉--depth 1) git clone --depth 1 git@github.com:my-org/$repo.git cd $repo # 添加个人账号远程仓库地址 git remote add personal git@github.com:$TARGET_USER/$repo.git # 推送所有分支和标签 git push --all personal git push --tags personal cd .. # 清理本地克隆文件(可选) rm -rf $repo done < repos.txt
3. 私有仓库适配
若组织包含私有仓库,可先在个人账号创建对应私有仓库再推送,修改脚本如下:
TARGET_USER="your-personal-username" while read repo; do # 在个人账号创建私有仓库 gh repo create $TARGET_USER/$repo --private --clone=false git clone git@github.com:my-org/$repo.git cd $repo git remote add personal git@github.com:$TARGET_USER/$repo.git git push --all personal git push --tags personal cd .. rm -rf $repo done < repos.txt
注意事项
- 仓库数量过多时可能触发GitHub API限流,遇到后暂停一段时间再继续
- 确保SSH密钥已添加至两个账号,避免重复输入密码
- 含Git LFS的仓库需额外执行
git lfs push --all personal完成大文件推送
内容的提问来源于stack exchange,提问作者user13236143
相关产品推荐
相关产品推荐

