Git
git-completion.bash
git-completion
git-v2.18
list-cmds

Git でサブコマンドを補完しようとしたときに Unknown option: --list-cmds と表示される問題の解決法

症状

本日新しい MacBook Pro が届き、早速、環境構築をしていたのですが、git-completion を導入したところ、Git の補完でエラーが発生してしまいました。

$ git com  # <- ここでタブキーを押して git commit を補完しようとしたら下記のようなエラーが発生
Unknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config

原因

エラーの内容をコピペしてググったら以下の記事が一番最初に出てきました。

.git-completion.bash producing error on macOS Sierra 10.12.6

アンサーを見てみると、どうやら Git 2.18 から新しく --list-cmds というオプションが追加されたようで、それが git コマンド側で認識されていないためにこのような原因が起こるようです。

このような問題が起きてしまった理由としては、ぼくの場合は、git コマンドを使用する際の Git (/usr/bin/git) と git-completion を使用する Git (/usr/local/git) が異なっていて、それぞれで別のバージョンを使用してしまったためでした。git コマンドを使用する Git のバージョンは 2.15.1 で、git-completion を使用する Git のバージョンが 2.18 だったので、2.18 で追加された新オプションを git コマンドを使用するほうの Git が認識していなかったためです。

解決策

原因がわかったらやることはシンプルで、単純に Git のバージョンをそろえてあげれば OK です。今回はとりあえず git-completion に新オプションが追加される前の v2.17.1 にダウングレードすればよさそうなので、v2.17.1 にチェックアウトしてみます。

$ cd /usr/local/git     # git-completion をクローンしたパスに置き換えてください
$ git checkout v2.17.1  # 補完はまだ効かないので注意!

チェックアウトしたらシェルを再起動します。

git com などと入力したあとにタブキーで補完して、エラーが出ずに git commit が補完されたら問題ないと思います。お疲れ様でした。