複数のrootが設定できることを知ったので、使ってみる。
背景
今までghqのrootを ${HOME}/Projects
に設定していた。
この状態で ghq get ~
をすると、${HOME}/Projects/github.com/yamachu/hogehoge
みたいな感じにリポジトリがクローンされていた。
しかしGoのProjectで問題が起こった。GOPATH
問題。
パッケージやリポジトリみたいなものは ${GOPATH}/src/github.com/yamachu/hogehoge
みたいな置き方にしろよーっていうのがGoの流儀。
であれば、${HOME}/Projects
にカレントディレクトリに対して src
というシンボリックリンクを張れば良いんじゃないかと思ってやってみたが、dep
でまたまた問題が…
GOPATH 以下にシンボリックリンクを置いて楽できる! - ハトネコエ Web がくしゅうちょう
これと同じ状況になった。
これの打開策として
というのが思いついた。
1.はただmvコマンドを叩くだけで解決するのでそれでも良かったのだが、go get
をした時にsrc以下に大量の関連パッケージが流れ込むので、ghq list
やそれをpeco
などで絞り込む時に邪魔になる。
2.は ${HOME}/go
みたいなところで管理すると決めれば割と平和だけれども、今まで ghq で管理していたのでそのために作った便利エイリアスが使えなくなるのは辛い。
みたいなデメリットなども出てきた。
やったこと
2.の選択肢を採用し、それもghqで管理できるようにした。
.gitconfig
[ghq] root = ~/Projects root = ~/go
これだけで ghq list
した時に今まで管理していたProjectとgoのProjectが表示されるようになった。
pecoとかで絞り込みたくなったら、^src
や ^pkg
をgrepで除外したりすることで通常のghqで管理していたProjectを絞り込めるし、逆にgoのProjectを絞り込みたくなったら^src
で絞り込む…みたいなことが出来る。
また表示だけでなく、goのProjectはGOPATH以下にクローンしたいので、
alias gghq='GHQ_ROOT=${GOPATH}/src ghq'
みたいな形にした。 こうすることで複数のrootをghqで使用し、goとそれ以外のProjectで平和な世界を築けるようになった。
めでたし。
エイリアス関係
今の所こんな感じで使っている。
alias g='cd $(ghq root)/$(ghq list | grep -v -e "^src" -v -e "^pkg" -v -e "^\d"| peco)' alias gghq='GHQ_ROOT=${GOPATH}/src ghq' alias gg='cd ${GOPATH}/$(ghq list| grep -E "^src"|peco)'