🌵

ghqとpecoでリポジトリの管理を便利にする

2021/12/19に公開

はじめに

この記事はフィヨルドブートキャンプ Part 1 Advent Calendar 2021の記事です。Part 2もあります。
https://adventar.org/calendars/6331
https://adventar.org/calendars/6360

概要

リポジトリをあちこちに置いていたのですが、ghqとpecoを使うことでリポジトリの管理がとても楽になったので紹介したいと思います。
https://github.com/x-motemen/ghq
https://github.com/peco/peco

  • cloneするときにどこにcloneするかいちいち考えなくてよくなる
  • 色んな場所に散らばったリポジトリを一括管理できるようになる
  • リポジトリの一覧、移動が秒でできる

などがメリットとして挙げられます

Goのインストール

ghqとpecoはGo製ツールなのでまずインストールします

$ brew install go

パスを設定する(zshの場合)

~/.zshrc
# 下記を追記する
export GOPATH=$HOME
export PATH=$PATH:$GOPATH/bin

ターミナルを再起動、もしくは下記を実行する

$ source ~/.zshrc

ghqのインストール

$ brew install ghq

ghqで管理するrootディレクトリを設定(この記事では~/srcとする)
参考:x-motemen/ghq: Remote repository management made easy

$ git config --global ghq.root '~/src'

pecoのインストールとghqとの連携

pecoのインストール

$ brew install peco

ghqの管理化にあるリポジトリを一覧表示するキーバインドを設定する(この記事ではctrl + ]とする)

~/.zshrc
# 下記を追記する
function peco-src () {
  local selected_dir=$(ghq list -p | peco --query "$LBUFFER")
  if [ -n "$selected_dir" ]; then
    BUFFER="cd ${selected_dir}"
    zle accept-line
  fi
  zle clear-screen
}
zle -N peco-src
bindkey '^]' peco-src

使い方

これで環境が整ったので使い方を説明します

ghqでcloneする

$ ghq get https://github.com/foo/bar.git
# もしくは
$ ghq get git@github.com:foo/bar.git

コマンド実行するだけで~/src/github.com/foo/bar配下にgit cloneしてくれます

ghq管理化のリポジトリを一覧

先程登録したキーバインドを押下するとghq管理化のリポジトリを一覧表示してくれます

QUERY>                                            IgnoreCase [2 (1/1)]
/Users/hoge/src/github.com/foo/bar
/Users/hoge/src/github.com/baz/fuga

キーもしくはctrl + n ctrl + pでカーソルを移動できるので任意のリポジトリ上でエンターを押下するとそのパスへcdしてくれます(文字列でも絞り込みもできます)

すでにローカルにあるリポジトリをghq管理化に移行する

ghqは新しくクローンをする場合はコマンド一発でできるのですが、すでにローカルにあるリポジトリはなかなか面倒くさそう。そこでいい感じに移行してくれるツールがあるのでそちらを使います
https://github.com/astj/ghq-migrator

早速ghqでクローンします

$ ghq get git@github.com:astj/ghq-migrator.git

ディレクトリを移動しておきます

$ cd ~/src/github.com/astj/ghq-migrator

あとは環境変数 GHQ_MIGRATOR_ACTUALLY_RUN=1を指定して移動したいディレクトリを引数に渡して実行するだけです

# ホームディレクトリに置いてある`hoge`の場合
$ GHQ_MIGRATOR_ACTUALLY_RUN=1 ./ghq-migrator.bash ~/hoge

これですでにローカルにあったリポジトリもghq管理下に移行できます。

さいごに

少し作業の作業で環境が整えられてめちゃくちゃ効率よくリポジトリ管理ができるようになるのでかなりオススメです!
自分も以前は何も考えずにホームディレクトリにcloneしていて、だんだん量が増えてきたのでなんとかしたいな〜と思っているときにタイミング良くこれらのツールの存在を知ったのでよかったです。

色んなリポジトリでホームディレクトリが散らかってる方は是非今年のうちに整理しておきましょう〜

参考:
ghqでリポジトリ管理とpeco連携で快適git生活 - Qiita
雑にgit cloneして管理していたリポジトリ群をghq管理下に移行してスッキリさせる - 平常運転

Discussion