GitHub の複数のリポジトリをまとめて private にする

はじめに

新年に向けて GitHub で特に公開している必要もないリポジトリをまとめて private にしたいと思い、調べたことをまとめる。

GitHub CLIgh)を使う。

GitHub CLI をインストールする

macOS の場合。

1brew install gh

gh auth login で GitHub にログインする

GitHub CLI で GitHub にログインする。

1gh auth login

例えば、以下のような形式でログインする。

1? What account do you want to log into? GitHub.com
2? What is your preferred protocol for Git operations on this host? HTTPS
3? Authenticate Git with your GitHub credentials? Yes
4? How would you like to authenticate GitHub CLI? Login with a web browser
5
6! First copy your one-time code: 60BF-3927
7Press Enter to open github.com in your browser...
8✓ Authentication complete.
9- gh config set -h github.com git_protocol https
10✓ Configured git protocol
11✓ Logged in as kimizuy

gh repo list でリポジトリ一覧を取得する

gh repo listでリポジトリ一覧を取得する。42の部分は取得するリポジトリ数なので、適宜変更する(デフォルトのリスト取得数は 30)。

1gh repo list -L 42 --visibility public --json name

以下のような形式で出力される。

1[
2  {
3    "name": "repo1"
4  },
5  {
6    "name": "repo2"
7  },
8  {
9    "name": "repo3"
10  }
11]

上記のリストから公開しておきたいリポジトリは除外しつつ、適当な方法で("repo1" "repo2" "repo3")みたいな形式にする。

gh repo edit で private にする

ループを回してリポジトリを private にしていく。kimizuyの部分は自分のユーザ名に置き換える。

1repos=("repo1" "repo2" "repo3")
2for repo in "${repos[@]}"; do
3  gh repo edit "kimizuy/$repo" --visibility private
4done

もう一度 private になっていることを確認する

1gh repo list -L 42

INFOの部分がprivateになっていれば成功。