豆腐とコンソメ

豆腐とコンソメ

もろもろのプログラム勉強記録

gitをコマンドラインで操作するときにブランチ名を補完できるようする

今までgitはGUIツールをメインで使ってきたけれども、もう少しちゃんと理解するためにコマンドで操作することにしている。
その中で、ブランチを切り替えたりする際に、ブランチ名が長いとコピペで面倒なので、補完できるように設定する。
設定に関しては、ググればでてくるのだけどハマったのでメモ。


環境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G65


Bashのバージョンをあげる

これをやらなかったことでハマった。
OSXにデフォルトで入ってるBashのバージョンはライセンスの関係?で古いものが入ってるみたい。
古いBashだと、ブランチを補完する設定をしても、うまくいかなかった。
なので、まずはBashのバージョンをあげる。

バージョンをあげるにあたってはこちらの記事を参考にさせていただいた。

https://itnext.io/upgrading-bash-on-macos-7138bd1066ba

Bashのバージョンをチェックする

$ echo $BASH_VERSION
3.2.57(1)-release

BashのPathを確認する

$ which -a bash
/bin/bash

新しいBashをインストール

$ brew install bash

HomebrewでインストールしたあとにPathを確認すると/usr/local/bin/bashに新しいBashがインストールされたことが確認できる。

Pathを再度確認する

$ which -a bash
/usr/local/bin/bash
/bin/bash

次にターミナルを起動したときのBashが新しくインストールした/usr/local/bin/bashを参照するようにする。

ログインシェルとして指定する前に、このBashは大丈夫だぜみたいな情報を登録する必要があるみたい。

shellのwhitelist的なものに登録

$ sudo vim /etc/shells

/usr/local/bin/bashを追加する。

/etc/shells

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
# 追加
/usr/local/bin/bash

追加したら、ログインシェルを新しいものにかえる。

ログインシェルを変更するコマンドを叩く

$ chsh -s /usr/local/bin/bash

Bashのバーションを確認すると5.0.3になってることが確認できた!

$ echo $BASH_VERSION
5.0.3(1)-release


Gitのタグ名を補完する設定をする

タグ補完をするには、git-completion.bash.bashrcとかで読み込む設定を書けばいいだけみたい。
肝心のgit-completion.bashは、gitをインストールするとデフォルトで入ってるとのことなので、検索してみるとたしかにありました。
※なければgithubとかに公式ソースを取得できるみたい。

git-completion.bashを探す

$ find / -name git-completion.bash 2>/dev/null
/usr/local/git/contrib/completion/git-completion.bash

上記のシェルスクリプトを.bashrcで読み込むようにする。

.bashrcに追加

$ vim ~/.bashrc

.bashrcに追加

#gitのブランチ名補完
source /usr/local/git/contrib/completion/git-completion.bash

これでsource ~/.bashrcをするなりして、gitで管理しているディレクトリに移動すると無事ブランチ名が補完させることが確認できた。


おまけ プロンプトにブランチ名を表示させる。

こちらの記事を参考にさせていただきました。

coderwall.com

.bash_profileに書いただけ

#ブランチ名を表示する
parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "


おまけ VSCodeの統合ターミナルで新しいBashを使用する

VSCodeの統合ターミナルを使う場合も、デフォルトのBashを変更しておく。

 "terminal.integrated.shell.osx": "/usr/local/bin/bash"