hubコマンドでissueの一覧を確認する
少し前から、[hub][hub]コマンドでissueやpull requestを確認できるようになりました1。
$ hub issue
123] Sample issue ( https://github.com/user/repo/issues/123 ) # issue
124] Sample issue2 ( https://github.com/user/repo/issues/124 ) # issue
125] Sample PR ( https://github.com/user/repo/pull/125 ) # pull reques
そこで、hub issue
と、pecoを組み合わせて、issue番号を確認しつつ、issue/[issue番号]
でブランチを切るのを楽にしてみました。
本当はgitのサブコマンドにでも...と思っていたのですが、結局エイリアスとして、"issue/[issue番号]"を返すものを定義しました。
準備するもの
- Git
- [hub][hub]
- [peco][peco] or [fzf][fzf] (あるいはそれ以外、お好みで)
私が試した環境は
$ hub version
git version 2.7.1
hub version 2.2.2
です。
エイリアスを追加する
以下の記述を、~/.bashrc
、~/.zshrc
等に追加してください!
peco
pecoはこちらです。
git-checkout-from-issue() {
local issues=$(hub issue 2> /dev/null | grep 'issues')
if [ -z "$issues" ]; then
echo "issue not found." 1>&2
return
fi
local number=$(echo "$issues" | peco --query "$LBUFFER" | sed 's/^[^0-9]*\([0-9]*\).*$/\1/1')
if [ -z "$number" ]; then
return
fi
echo "issue/$number"
}
alias -g IB='$(git-checkout-from-issue)'
fzf
fzfはこちらです。自分がデフォルトで **-m(複数選択を可能にするオプション)**を指定しているので、 +mを入れていますが、不要なら除いて大丈夫です。
git-checkout-from-issue() {
local issues=$(hub issue 2> /dev/null | grep 'issues')
if [ -z "$issues" ]; then
echo "issue not found." 1>&2
return
fi
local number=$(echo "$issues" | fzf --exit-0 +m --query "$LBUFFER" | sed 's/^[^0-9]*\([0-9]*\).*$/\1/1')
if [ -z "$number" ]; then
return
fi
echo "issue/$number"
}
alias -g IB='$(git-checkout-from-issue)'
使い方
以下のようにコマンドを打てば、issueを確認しつつ、選択したissue番号で現在のブランチからissueブランチが切られます。
$ git branch
* develop
master
$ git checkout -b IB
# issueを選択する (例では123番を選択したことにする)
Switched to a new branch 'issue/123'
# alias g=git , co = checkout などとしていれば、
# $ g co -b IB
# で済みますね!
$ git branch
develop
* issue/123
master
もしissueが存在しない場合や、選択しないで(ctrl-c)などで中断した場合はgitのエラーが出ますが、特に変な挙動をしたりはしません。
切るブランチの名前を変えたい!
人や開発環境によっては、
- "issue_[issue番号]"
- "[issue番号]_issue"
- "ticket/[issue番号]"
と切りたい場合もあると思うので、その場合はgit-checkout-from-issue()
の最後の行をいい感じに変えてください!
hub issue
の代わりに
[ghi][ghi]というものもあるので、お好みでどうぞ!
-
hub(v2.2.2)現在、issueコマンドの説明に betaと書いてあるので、今後制式採用、廃止、表示形式の変更があるかもです。 ↩