今まで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"