LoginSignup
9
9

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-17

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と書いてあるので、今後制式採用、廃止、表示形式の変更があるかもです。 

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9