You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何自动将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

火山引擎 最新活动