シ〜らかんす

プログラミングとか、カメラとか。

ghq & hubを使って、organizationの全リポジトリをcloneする方法

最初に結論から

hubとghqを利用すると、orgs配下の全てのリポジトリをcloneすることができます。 転職したときなど、新しいorgに参加した際の初期セットアップの際に便利です。

導入の動機は?

転職した会社のリポジトリをとりあえず全部cloneしようと思ったけど、100以上リポジトリがあった。 100回以上git clone唱えるのが嫌だったので、一括でできる方法を探した。

手順をご紹介

まずは、事前準備

参考までに、~/.gitconfig 内にこういう風に書くと、ghqのrootディレクトリを ~/ghqに設定できます。

[ghq]
    root = ~/ghq

orgsの全リポジトリを実際にcloneするコマンドを順に紹介

  1. まずは、リポジトリのリストをhub apiコマンドで取得する
hub api orgs/{あなたのorgの名前}/repos | jq --raw-output '.[].full_name' > repolist.txt

ページングを利用する場合(100件ずつ)

hub api orgs/{あなたのorgの名前}/repos\?per_page=100\&page=1 | jq --raw-output '.[].full_name' > repolist.txt
hub api orgs/{あなたのorgの名前}/repos\?per_page=100\&page=2 | jq --raw-output '.[].full_name' >> repolist.txt
  1. repolist.txtから、全件リポジトリをcloneする
cat repolist.txt | ghq get --parallel -p

結果

ghqのrootディレクトリが仮に ~/ghq/ に設定されているとすると、 ~/ghq/github.com/{あなたのorgの名前}/ 配下に、全てのリポジトリがcloneされているはずです!