Skip to content

Latest commit

 

History

History
66 lines (43 loc) · 2.84 KB

07-bulk-ghq-get.md

File metadata and controls

66 lines (43 loc) · 2.84 KB
title type published
リポジトリ一括取得のレシピ集(`STDIN | ghq get`)
tech
true

リポジトリ一括取得のレシピ集(STDIN | ghq get)

ghq getは標準入力からもtargetリストを受け取れますが、これは一括取得に重宝します。このとき、--parallel(-P)オプションを利用すると並列で高速に取得をおこなうため便利です。これを利用したtipsを幾つか紹介します。

一括アップデート

手元の管理リポジトリを一括で最新の状態に更新します。

% ghq list | ghq get --update --parallel

別マシンへのリポジトリ移行

ある環境のリポジトリを別環境に移したい場合、ghq listの出力を保存しておいて、それを別環境でghq getに食わせてやれば、リポジトリの移行ができます。

% ghq list > repolist.txt
% cat repolist.txt | ghq get --parallel

submodulesを別で一括取得する

Git submoduleをそれぞれ個別に取得したい場合、以下のワンライナーで実現できます。

% cat .gitmodules | grep '\turl = ' | cut -d' ' -f 3 | ghq get --parallel

Goのプロジェクトの依存モジュールを一括取得する

Go Modules時代に移行しつつあり、GOPATH/src以下にソースリポジトリが配置されなくなってきています。Go Modulesに対応したプロジェクトであっても、以下のワンライナーで、依存モジュールを一括取得できます。

% go list -f '{{join .Deps "\n"}}' | xargs go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}' | ghq get --parallel

ghqは元々Goのパッケージ取得のルールを参考にして作られたツールなのに、Goのライブラリを取得するために逆にghqが必要になったというのも面白い話です。

GitHub上でスターをつけたリポジトリを一括取得する

github-list-starredを使います。

% go get github.com/motemen/github-list-starred
% github-list-starred Songmu | ghq get --parallel

ちなみに、github-list-starredは任意のユーザーを指定して、自分以外がスターを付けたリポジトリも一覧できるため、それをghq getに食わせても面白いかもしれません。

Pocketに追加したGitHubリポジトリを一括取得する

go-pocketを使います。

% github.com/motemen/go-pocket/cmd/pocket
% pocket list --domain=github.com | ghq get --parallel

このように、リポジトリ一覧を出力する何かがあれば、それを簡単に一括取得できます。他にもアイデアはたくさんあると思うので、皆さんも是非考えてみてください。