📩

ghq getをコピーするブックマークレット

ghqを利用する際に便利なブックマークレットを紹介します。

# ブックマークレット

以下をコピーしてブックマークレットに登録してください。

javascript: ((d) =>
  ((c, b, l) => {
    c.textContent = l.href.replace(/(https:\/(\/[^/]+){3}).*/, "ghq get $1");
    b.appendChild(c);
    c.select();
    d.execCommand("copy");
    b.removeChild(c);
  })(d.createElement("textArea"), d.body, location))(document);
1
2
3
4
5
6
7
8

# 解説

ページ URL からドメイン名/ユーザー名/リポジトリ名までを抜き出し、ghq getの後に連結します。
一時的にtextareaを作るイディオムを使ってクリップボードにコピーします。

# ghq とは

git リポジトリのクローン先を特定のディレクトリにまとめることで管理をしやすくするツールです。

x-motemen/ghq: Remote repository management made easy (opens new window)

ghq get https://github.com/kawarimidoll/kawarimidollとすると以下のように設定されたディレクトリ以下にgit cloneを実行します。

ghq get kawarimidoll

実行場所に関わらずクローン先がまとまるので、変な場所にリポジトリが収まることを防げます。

上記では~/ghqにリポジトリが、このへんは調整可能です。詳細はリポジトリのページを御覧ください。

# リポジトリ移動の tips

クローン先がまとめられるとはいえ、前述の通り~/ghq/github.com/kawarimidoll/kawarimidollのように結構深い階層にクローンされます。
ここまで普通に移動しようとすると大変です。

ghq listでクローンしたディレクトリが一覧できるので、そこから選択して移動するのが楽だと思います。自分はfzfを使っています。

以下を~/.bashrc~/.zshrcに保存してご利用ください。

cgh() {
  has 'ghq' || return 1
  local dir
  dir=$(ghq list | fzf --no-multi --exit-0 --query="$*" --preview="ls -FA1 $(ghq root)/{}")
  [ -n "$dir" ] && cd "$(ghq root)/$dir" || return
}
1
2
3
4
5
6

# まとめ

ghqを使いやすくするブックマークレットを紹介しました。
繰り返し行うことはどんどん省力化していきたいものです。