🏄‍♂️

ghqでリポジトリ管理を簡単にする

2022/04/28に公開

どうもフロントエンドエンジニアのoreoです。

前回、ターミナルの改造に関する記事の中で、過去に使用したコマンド検索やディレクトリ移動などが簡単にできるpecoについて記載しました。

今回はghqを導入しpecoと組み合わせて簡単にリポジトリ管理ができるように改造します。

尚、この記事では、pecoはあらかじめ導入している前提です。導入してない場合は、前回の記事をご覧ください!

1 ghqのインストールと設定

ghpを使用すると、リポジトリの一元管理ができ、リポジトリ一覧の確認やリポジトリへの移動が簡単にできます。

https://github.com/x-motemen/ghq

1-1 ghqのインストール

ghqをインストールします

brew install ghq

ghqで管理するrootディレクトリを~/srcに設定します。

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

1-2 pecoでコマンドを設定

pecoの設定ファイルを編集します。

vim ~/.zshrc

👇の内容を追記し、保存します。

## ghqとの連携。ghqの管理化にあるリポジトリを一覧表示する。ctrl - ]にバインド。
function peco-src () {
  local selected_dir=$(ghq list -p | peco --prompt="repositories >" --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

.zshrcを再度読み込みます。

source ~/.zshrc

この段階で、ctrl と ] でリポジトリの一覧確認とリポジトリへの移動ができます。

なお、私の.zshrcにおけるpecoの設定は下記で過去のクエリー検索などもできます。

# peco settings
## 過去に実行したコマンドを選択。ctrl-rにバインド。
function peco-select-history() {
  BUFFER=$(\history -n -r 1 | peco --query "$LBUFFER")
  CURSOR=$#BUFFER
  zle clear-screen
}
zle -N peco-select-history
bindkey '^R' peco-select-history

## 過去に実行したディレクトリ移動を選択。ctrl-gにバインド。
if [[ -n $(echo ${^fpath}/chpwd_recent_dirs(N)) && -n $(echo ${^fpath}/cdr(N)) ]]; then
    autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
    add-zsh-hook chpwd chpwd_recent_dirs
    zstyle ':completion:*' recent-dirs-insert both
    zstyle ':chpwd:*' recent-dirs-default true
    zstyle ':chpwd:*' recent-dirs-max 1000
    zstyle ':chpwd:*' recent-dirs-file "$HOME/.cache/chpwd-recent-dirs"
fi

function peco-cdr () {
  local selected_dir="$(cdr -l | sed 's/^[0-9]\+ \+//' | peco --prompt="cdr >" --query "$LBUFFER")"
  if [ -n "$selected_dir" ]; then
    BUFFER="cd `echo $selected_dir | awk '{print$2}'`"
    CURSOR=$#BUFFER
    zle reset-prompt
  fi
}
zle -N peco-cdr
bindkey '^G' peco-cdr

## ghqとの連携。ghqの管理化にあるリポジトリを一覧表示する。ctrl - ]にバインド。
function peco-src () {
  local selected_dir=$(ghq list -p | peco --prompt="repositories >" --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

1-3 ghqで新たなリポジトリをクローンする

以下のコマンドで、~/src配下にリポジトリがcloneされ、ghq管理にすることができます。

#HTTPSの場合
ghq get https://github.com/hoge/hoge.git

#SSHの場合
ghq get git@github.com:hoge/hoge.git

1-4 既存のリポジトリをghq管理に組み込む

既存のリポジトリをghq管理にするために、👇のghq-migratorを利用します。

https://github.com/astj/ghq-migrator

ghq-migratorをクローンします。

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

ghq-migratorに移動します。

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

ghq管理に組み込みたいリポジトリへのホームディレクトリからのパスを👇の./(YOUR_REPOSITORY)/に記載して実行するとghq管理に組み込むことができます。

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

2 最後に

今までパラパラとリポジトリを管理していましたが、これで一元管理ができるようになりました。非常に便利ですね!尚、この記事は下記「3 参考」の記事を大いに参考にさせていただきました。ありがとうございます。

3 参考

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

Discussion