ghq list の vcs オプションとその有効な使い方
先日 ghq の v0.11.1 がリリースされました! このバージョンより ghq list コマンドに --vcs オプションが追加されています。🎉
$ ghq list --help NAME: list - List local repositories USAGE: ghq list [-p] [-e] [<query>] (省略) OPTIONS: --exact, -e Perform an exact match --vcs value Specify VCS backend for matching --full-path, -p Print full paths --unique Print unique subpaths
この機能は私が1年ほど前に提案したもので、最近になって開発者の方からフィードバックを頂いたことを受けて、PR を作成して master に取り込んで頂いたという流れになります。💪
Feature request: specify vcs argument on `ghq list` · Issue #94 · motemen/ghq · GitHub
例えば --vcs git
といったように指定すると、Git の作業ディレクトリのみをリストアップすることができます。あなたが過去に SubVersion や Mercurial のプロジェクトを ghq get
したことがあっても、その実行結果には含まれません。
vcs オプションの value として使用可能なキーワードは、README のこの辺りやソースコードのこの辺りを見ればいいんじゃないかと思います。
Accepted values are "git", "github" (an alias for "git"), "subversion", "svn" (an alias for "subversion"), "git-svn", "mercurial", "hg" (an alias for "mercurial"), and "darcs".
GitHub - motemen/ghq: Remote repository management made easy
var vcsRegistry = map[string]*VCSBackend{ "git": GitBackend, "github": GitBackend, "svn": SubversionBackend, "subversion": SubversionBackend, "git-svn": GitsvnBackend, "hg": MercurialBackend, "mercurial": MercurialBackend, "darcs": DarcsBackend, "fossil": FossilBackend, "bzr": BazaarBackend, "bazaar": BazaarBackend, }
ghq/vcs.go at v0.11.1 · motemen/ghq · GitHub
私はこの機能を使って、ローカルの全 Git リポジトリに対して git gc
をかけてます。
この処理はワンライナーでこう書けます。
ghq list --full-path --vcs=git | xargs -I{} sh -c 'echo {}; git -C {} gc --aggressive'
これを cron に仕込むなどして日次実行するようにしておけば、ヒストリーの長いプロジェクトだったりブランチを多数抱えていても、最適化がかかってディスクサイズが減らせますし、Git 実行時に不定期で始まる GC もオフにできます。😎
※ 私はこういった意図しない処理が走って時間がかかる(Homebrew の自動アップデートとか)のが苦手なので、どちらかと言えば後者の目的でやってますね!
git config gc.auto 0