如何自动将GitHub组织A的所有仓库复制到新组织B(非派生)
自动化复制组织A仓库到组织B(作为普通仓库)
我来给你一套实用的自动化方案,能把组织A的所有仓库完整复制到组织B,而且复制后的都是独立的普通仓库,不会有派生关系:
前提准备
- 安装**GitHub CLI(gh)**并完成登录授权(确保你的账号对组织A的仓库有读权限,对组织B有创建/写入仓库的权限);或者准备好带有相应权限的个人访问令牌(PAT)。
步骤1:导出组织A的所有仓库列表
先把组织A的所有仓库名导出到一个文本文件里,方便后续批量处理:
# 导出组织A的仓库名到repos.txt,--limit可以根据实际仓库数量调大(比如1000) gh repo list A --limit 1000 --json name --jq '.[].name' > repos.txt
步骤2:编写批量复制脚本
创建一个shell脚本(比如copy_repos.sh),内容如下:
#!/bin/bash # 读取仓库列表文件 while read repo_name; do echo "开始处理仓库: $repo_name" # 1. 在组织B下创建新的普通仓库(--private可改成--public根据需求调整) gh repo create B/$repo_name --private --clone=false # 2. 镜像克隆原仓库(包含所有分支、标签、提交历史) git clone --mirror https://github.com/A/$repo_name.git # 3. 推送镜像到新仓库 cd "$repo_name.git" git push --mirror https://github.com/B/$repo_name.git # 如果仓库有LFS文件,需要额外执行以下两行 # git lfs fetch --all # git lfs push --mirror https://github.com/B/$repo_name.git # 4. 清理本地镜像文件 cd .. rm -rf "$repo_name.git" echo "仓库 $repo_name 复制完成!" # 加个小延迟避免触发GitHub API限流 sleep 2 done < repos.txt
步骤3:执行脚本
给脚本加执行权限并运行:
chmod +x copy_repos.sh ./copy_repos.sh
关键说明
- 为什么是普通仓库?:这个方法是通过镜像克隆+推送创建全新仓库,完全绕过GitHub的派生机制,所以复制后的仓库和原仓库没有任何派生关联,是独立的普通仓库。
- 权限注意:如果处理私有仓库,建议用SSH地址代替HTTPS(把脚本里的
https://github.com/换成git@github.com:),避免频繁输入密码,同时确保SSH密钥已配置好。 - 限流处理:如果组织A仓库数量很多,脚本里的
sleep 2可以适当延长,防止触发GitHub的API请求限制。
内容的提问来源于stack exchange,提问作者user4506906




