GitHub 批量修改 repo 可见性

打算把公开的 repo 全部改成私密所以找了下操作方法,实测可用,不过我这里终端是用的 Windows 11 下的 Git Bash (MINGW64),用 PowerShell 的话批处理不一样。


1. 环境准备与登录

首先确保安装了 GitHub CLI,并在终端完成授权。

Bash

# 登录并按提示完成浏览器或 Token 授权
gh auth login

# 检查登录状态和权限(确保有 repo 权限)
gh auth status

2. 核心批量执行脚本

Bash

# 逻辑:获取所有公开仓库名 -> 循环处理 -> 修改为私密
gh repo list --visibility=public --limit 1000 --json nameWithOwner --jq '.[].nameWithOwner' | while read repo; do
    echo "正在处理: $repo"
    gh repo edit "$repo" --visibility private --accept-visibility-change-consequences
done

3. 关键参数解析

  • --visibility=public: 筛选当前状态为“公开”的仓库,避免对已是私密的仓库重复操作。
  • --json nameWithOwner: 必须使用这个字段。gh 命令修改仓库时需要 用户名/仓库名 格式(如 username/repo_name),只传仓库名会报错。
  • --accept-visibility-change-consequences: 最关键的安全开关。GitHub 为了防止你误操作导致 Stars 丢失或 Pages 下线,强制要求加上这个标志。
  • --limit 1000: 默认只返回 30 个结果,调大此数值可确保处理你所有的仓库。