GitHub個人/組織アカウントのリポジトリを一括cloneする

準備

curl、jqが必要なので未インストールならインストールをする

$ brew install jq curl

実行方法

リポジトリのクローンを保存するディレクトリへ移動し、以下のコマンドを叩く。

  • 個人アカウントの場合
$ curl https://api.github.com/users/{PERSONAL ACCOUNT}/repos | jq .[].ssh_url | xargs -n 1 git clone
  • 組織アカウントの場合
$ curl https://api.github.com/orgs/{ORGANIZATION ACCOUNT}/repos  | jq .[].ssh_url | xargs -n 1 git clone

解説

上記ワンライナーの解説

  • curl

cURL*1はURLシンタックスを用いてファイルを送信または受信するコマンドラインツール。 今回はGitHub API にリクエストを投げるために利用する。

  • https://api.github.com/users/{PERSONAL ACCOUNT}/repos

GitHubが提供するAPIエンドポイント*2。 GET methodなのでパスの{PERSONAL ACCOUNT} を個人アカウント名に変えてブラウザで叩けばjsonが返ってくる。

例: https://api.github.com/users/tic40/repos

  • jq .[].ssh_url

jq*3コマンドラインjsonプロセッサーAPIレスポンスのjson配列の中から "ssh_url" の値を取り出す。

  • xargs -n 1 git clone

xargs*4Unixコマンドの一つ。 xargs -n 1 で1つの引数を受け取る。受け取った引数はその後に続く git clone の末尾に追加される。

感想

git clone ssh_url/*.git でいけるのかな〜とか思ったら、まあそんな簡単にはいかず。意外と面倒だった。

あと、privateリポジトリも含める場合はGitHubAPI token取得する必要があるのでご注意。