Gitリポジトリ管理の強い味方!ghq

2022.05.08
Gitリポジトリ管理の強い味方!ghq

ローカルでのGitリポジトリ管理の心強い味方、それがghq!


ghqはGOで作られたライブラリでHomebrewなどでインストールが出来ます。




ghq単体だとそこまで便利さを感じないのですが、

pecofzfといった「インクリメンタルサーチ」が行えるライブラリと組み合わせるととてつもなく強力!



どんな事が出来るかというとGitリポジトリのフォルダ移動が超がつくほど簡単になります!

↑の動画の「Alamofire」「auth0」はGitHubで公開されている有名リポジトリをローカル内にcloneしてきたもので、

その該当フォルダに即座に移動しています。

検証した環境

1 ghq 1.2.1

Gitリポジトリのフォルダ管理の問題点

リポジトリのclone場所は基本的にどこでも動く(例外や言語による特殊ケースなどありますが)ため、

どのフォルダにcloneしても問題がありません。



その結果

  • リポジトリをcloneするフォルダにルールがない
    • 結果リポジトリ迷子
  • 同じリポジトリを2つcloneして意図と反する方を編集してしまう

などなど

リポジトリフォルダの悩みはつきません。




私もGit操作を始めたばかりの頃「どこにcloneしよう...」と迷い

挙句の果てにはどこにcloneしたかを忘れる、という事をよくしていました 😅





しかし、今は ghqというライブラリの存在を知り、

Gitのリポジトリ管理はghqに任せているため、どのフォルダに保存するか?という事で迷う事はありません。



そして前述したpecofzfといった「インクリメンタルサーチ」が行えるライブラリと組み合わせる事ですぐに該当リポジトリのフォルダに移動が出来ます。



ghqの導入

Macを使っている人はHomebrewを使って簡単にインストール出来ます

$ brew install ghq

goでもインストール出来ます

$ go get github.com/x-motemen/ghq

その他のインストール方法は公式のGitHubで

x-motemen/ghq: Remote repository management made easy



インストール出来たことの確認

$ ghq -v
ghq version 1.2.1 (rev:dd139fb)



ghqの使い方

リポジトリをcloneするフォルダの設定(Optional)

ghqでcloneされるフォルダはデフォルトで~/ghqが設定されています。


変更するためには~/.gticonfigに設定する事で変更出来ます。

# コマンドで変更する場合
$ git config --global ghq.root '~/src'

上記設定は ~/ghq~/src に変更しています。



gitconfigに直接記述すると以下のようになります。

~/.gitconfig
[ghq]
   root = ~/src



cloneする

ghq get <リポジトリ先> がcloneと同じ動作になります。

「リポジトリ先」と書いた部分はGitHubの以下の部分。

もちろんsshでアクセス出来るリポジトリであれば、sshを指定しても動作します。



例えば以下のコマンドを実行すると、↑で設定しているghqのフォルダにcloneがされます。

# 試しにauth0-cliのリポジトリをcloneしてみる
$ ghq get https://github.com/auth0/auth0-cli.git

# sshでのアクセス権限があるリポジトリであればsshの指定も可能
# $ ghq get git@github.com:auth0/auth0-cli.git



これでクローンをすると以下のようなフォルダパスにcloneがされます。

(私はghqのclone先フォルダを ~/src に変更しています)

~/src/github.com/auth0/auth0-cli

リポジトリの一覧を確認する

ghqでcloneしたリポジトリの一覧はghq listを使用します

(ghqでcloneしたというより、上で記載した`root`で指定したフォルダ内のリポジトリフォルダ、という表現の方が正確です。)

$ ghq list
github.com/Alamofire/Alamofire
github.com/auth0/auth0-cli

オプションとして-pを渡す事でフルパスを出力出来ます

$ ghq list -p
/Users/yuu/src/github.com/Alamofire/Alamofire
/Users/yuu/src/github.com/auth0/auth0-cli




この-pとインクリメンタルサーチを組み合わせると簡単にフォルダ移動が出来ます

# ghqでリポジトリ一覧をpecoに渡し、選択したフォルダに移動(cd)する
$ cd $(ghq list -p | peco)

おすすめ