五 月
7
日曜日

ghqでローカルリポジトリを管理する

クローンしたローカルリポジトリがHOME配下のそこかしこへ自由奔放に点在している現状を整理すべくghqを導入する。
fzfを併用しリポジトリの一覧表示と絞り込み、また選択時に当該ディレクトリへ移動や、GitHubページの閲覧をできるようにする。


インストール

ghqをインストール。

brew install ghq

hubをインストール。
hubコマンドはでCUIからgithubページを開く為の限定的な用途で利用する。

brew install hub

fzfは「fzfによるCUI生活の改善」にて導入済み。

コンフィグレーション

ghq

ghqのルートディレクトリはデフォルトでは~/.ghqとなる。
カスタマイズする場合はgit configコマンドでghq.rootオプションを定義する。
今回は~/Sourcesをルートディレクトリとした。

git config --global ghq.root ~/Sources

またルートディレクトリは環境変数GHQ_ROOTで指定することもできる。
環境変数とgit configを併用した場合は環境変数側が優先される。

fish

XDG_CONFIG_HOME/fish/conf.d/ghq.fishを追加し

  • fzfでローカルリポジトリのディレクトリへ移動するため関数 __ghq_cd_repository
  • fzfでgithubページをブラウザで開くための関数 __ghq_browse_github
  • __ghq_browse_githubのエイリアスghb

を定義する。

function __ghq_cd_repository -d "Change local repository directory"
  ghq list --full-path | fzf | read -l repo_path
  cd $repo_path
end

function __ghq_browse_github -d "Browse remote repository on github"
  ghq list | fzf | read -l repo_path
  set -l repo_name (string split -m1 "/" $repo_path)[2]
  hub browse $repo_name
end

alias ghb __ghq_browse_github

XDG_CONFIG_HOME/fish/functions/fish_user_key_bindings.fishを修正し、

  • CTRL-G__ghq_cd_repository関数の呼び出し

を定義する。

bind \cg '__ghq_cd_repository'
if bind -M insert >/dev/null ^/dev/null
  bind -M insert \cg '__ghq_cd_repository'
end

利用する

リモートリポジトリをcloneする

ghq getコマンドでリモートリポジトリをcloneする。

ghq get https://github.com/nijohando/blog

上記例の場合、cloneしたローカルリポジトリはghqルートディレクトリ配下に以下のように配置される。

github.com/nijohando/blog

ghq管理下のローカルリポジトリへ移動する

CTRL-G でfzfのファインダーが開きghq管理下のローカルリポジトリ一覧が表示される。
リポジトリを選択すると対象ディレクトリへ移動する。

githubページをブラウザで表示する

ghbコマンドを実行するとfzfのファインダーが開きghq管理下のローカルリポジトリ一覧が表示される。
リポジトリを選択するとGitHubのリポジトリページへ移動する。