Gitでブランチ名を入力補完する方法がわかった
ここ数日、Perl入学式の講義資料を修正する作業をやっているのだけど、
- 公式サイト
- 講義資料のあるリポジトリ
GitHub - perl-entrance-org/workshop-2016
- 作業風景
current status pic.twitter.com/dLa2bQRlO6
— Hiroaki Kadomatsu (@note103) 2016年12月2日
工程としては、そのリポジトリを手元にcloneして、ある程度のまとまりというか、修正の種類ごとにブランチを切って、それぞれ手を入れた後にコミット&プルリクしていく、というもので。
しかし普段、ぼくのGit用途ってとくにブランチを切る必要もないことばかりなので、そのブランチ間を移動するっていう経験じたいあまりなく、それゆえ、たまにやるとついブランチ名を長くしてしまって(一意になるように)、しかしディレクトリ移動時のように途中まで打ち込んでからタブを打っても入力は補完されず(当然)、ぐむむ……と思いながら地道に手で打ち込んでいた。
さらにしかし、今回はその修正対象がけっこう多岐にわたったこともあり、ブランチの数やその名前もどっと増えてしまったので、さすがにこれはツライ……とTwitterにとりあえずそのストレスを呟いて気を落ち着けようかと思ったのだけど、よくあるパターンとして、そうすると誰かが「こんな方法があるよ」と教えてくれたりするので、そこまでわかっているならそのやり取りも省略して自分で先に調べよ……と思って検索したらすぐに見つかって問題が解消した。
まず参考になったのは以下で、
qiita.com
内容は短いのだけど、ようは以下のリポジトリを紹介していて、
bashを使っているなら、その中のbash用ファイルをそのファイル冒頭に書かれているとおりに設置&設定すればいい。
.bashrc
source ~/.git-completion.bash
ちなみに、同リポジトリにあるプロンプトをいい感じに設定できるシェルスクリプトもなかなか素敵で、ついでにそれも設定しておいた。
source ~/.git-prompt.sh
before
PS1='[note103] \W\$ '
after
PS1='[note103] \W$(__git_ps1 "->%s")\$ '
閑話休題。
しかし、実際に設置してみたものの、なぜか肝心のブランチ名の補完がきかない。
慣れない作業なので、設定方法を間違っているのかとしばらく調べたがわからず、検索しなおしたら以下の記事にぶつかって、
一部引用すると、
alias g='git' と定義していて常に g と打っているのだけど補完が効かなかったので git-completion.bash をいじったら動いた (正しいのかは知らない)。
__git_complete git __git_main + __git_complete g __git_main __git_complete gitk __gitk_main
とのこと。なるほど……エイリアスを設定していると動かないってことか?
たしかにぼくは git checkout のエイリアスを gco にしていて、gco と打った後にそのブランチ名が入らないなあ、と思っていたので、たぶん上に引用した箇所で、__git_main と同等の、git checkout にあたる変数を見つけて同様に記載すればいいのではないか、と思ってファイル内を検索してみたら、それっぽいのがあったのでこのようにしてみたところ、
__git_complete git __git_main
__git_complete gitk __gitk_main
+ __git_complete gco _git_checkout
補完されるようになった。
これで一気に労力が軽減され、本質的ではない入力作業にかける時間を人生から削減できた。便利だし、ありがたい。
毎度のことだけれど、こうした知見をネットに書き残してくれている先人に感謝。
gitの長いブランチ名とかいちいち打つのつらい・・みんなどうやってるんだろう、とつぶやく前に調べたらすぐ見つかった&設定したら便利。Twitter効果。エイリアスを反映させるのに少し時間かかったので時間できたらブログにメモしておきたい
— Hiroaki Kadomatsu (@note103) 2016年12月2日
大抵のことはとりあえず呟いてみればなんとかなるものだが、今回は呟く前に解決し、解決してから呟いた。