hub+peco(fzf)でissueを確認しつつ、issue/[issue番号]でブランチを切る

  • 9
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

hubコマンドでissueの一覧を確認する

少し前から、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
  • peco or fzf (あるいはそれ以外、お好みで)

私が試した環境は

$ hub version
git version 2.7.1
hub version 2.2.2

です。

エイリアスを追加する

以下の記述を、~/.bashrc~/.zshrc等に追加してください!

peco

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を入れていますが、不要なら除いて大丈夫です。

fzf
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というものもあるので、お好みでどうぞ!


  1. hub(v2.2.2)現在、issueコマンドの説明に betaと書いてあるので、今後制式採用、廃止、表示形式の変更があるかもです。