理系学生日記

おまえはいつまで学生気分なのか

特定ユーザのGithub上のリポジトリをごそっとローカルにcloneする

Github 上にある特定 user のリポジトリをぜんぶローカルに持ってきたいなぁというときのワンライナー。 nablarch のところは適当なユーザに書き換えれば OK。ghq ではなく単に git を使いたければ、ghq getgit clone に変えれば良いです。

$ curl 'https://api.github.com/users/nablarch/repos?per_page=100' | jq -r '.[]["clone_url"]' | xargs -n1 -P4 ghq get

Github API

Github には API があって、参照だけなら HTTP リクエストを送るだけで情報を取得できるようになってます。特定ユーザのリポジトリ一覧を得る API はこちら。

デフォルトでは 30 件しか取得できなくてページングさせる必要がありますが、per_page パラメータを使うと 1 ページあたり 100 件まで取得できるようになります。

jq

jq に関しては特筆すべきことはないんですが、ダブルクオテーションを削除するために -r (--raw-output) を指定しています。

xargs

こちらも特段特別なことはしてないのですが、ghq get は引数が リポジトリ 1 つなので、-n 1 を指定しています。 また、clone 処理をはやめに終わらせるために -P 4 を指定して並列度を上げてます。このへんは CPU によって調節すれば良いでしょう。