[TIPS]git upgradeが反映されないときはPATHを確認しよう(Mac OS)

Homebrew を使ってgitをアップグレードしようとした時のつまずきと対処法です。
2021.03.31

おはこんばんちは。オペレーション部のもっさんです。
先日、Git に関する脆弱性のアナウンスがありましたね。
Git clone vulnerability announced - The GitHub Blog
このアナウンスをきっかけにGitを最新バージョンへアップグレードしようとして、つまずきました。原因は単純なことだったのですが、慌ててしまい対処に時間がかかった自分のための備忘録として、記事に残しておきます。

前提環境

OS : Mac OS Catalina
コマンド実行環境 : VScode の Terminal
シェル : zsh

事象:brew upgrede git 実行後もgit --versionの結果が古いバージョンだった

Mac OS の パッケージ管理に Homebrew を利用しているため、 Git のアップグレードも Homebrew で行いました。
アップグレードのコマンドを実行します。

$ brew upgrede git

コマンドの実行は成功したように見えたのですが、Gitのバージョンを確認すると、コマンド実行時点(2021/03/24 JST)での最新バージョン 2.31.0 になっていませんでした。

$ git --version
git version 2.24.3 (Apple Git-128)

原因:HomebrewのgitにPATHが通っていなかった

Mac OS には Apple Git という Git がプリインストールされています。私の環境では、Homebrewで管理しているGitを参照するようにPATHを設定するのを忘れていました。
そのため、Homebrewで管理しているGitのバージョンは最新になっているのに、git --version を実行した際にこのApple Gitが参照されており、バージョンアップができていないように見えたのです。

試しに、Homebrewで管理しているGitの場所を調べて、パスを指定してバージョンを確認してみました。
まずは、Homebrewで管理している 「git」を含むパッケージ名のリストを出力してみます。

$ brew ls git
### 中略 ###
/usr/local/Cellar/git/2.31.0/bin/git
### 以下略 ###

Homebrewで管理しているGitは、/usr/local/Cellar/ にあることがわかりました。
ただし、Cellarディレクトリ配下のgitは直接参照することができず、bin ディレクトリ配下のシンボリックリンクから参照する必要があります。

$ /usr/local/Cellar/git --version
zsh: permission denied: /usr/local/Cellar/git

# /usr/local/bin 配下をリストし、 gitがリンクされている場所を確認する
$ ls -l /usr/local/bin
### 中略 ###
lrwxr-xr-x    1 user1  admin    28  3 24 23:37 git@ -> ../Cellar/git/2.31.0/bin/git
### 以下略 ###

Homebrew で管理されているGitを参照するためには、/usr/local/bin/git を参照すれば良いことがわかりました。
※このパスは環境によって異なるので、ご自身の環境で確認するようにしてください。 Homebrewで管理されている Git にはバージョンアップが反映されているかを確認します。

$ /usr/local/bin/git --version
git version 2.31.0

Homebrewで管理しているGitのバージョンは、問題なく最新版になっているようです。

対応:Homebrewでインストールしたgitを参照するようにPATHを設定する

それでは、/usr/local/bin/を参照するように、シェルのPATHの設定を変更しましょう。

# zsh のPATH を変更する
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshenv

# 設定ファイルの再読み込み
source ~/.zshenv

# gitコマンドで参照されているGitのバージョンを確認する
$ git --version
git version 2.31.0

無事にGitのバージョンが新しくなっていることが確認できました。

まとめ : upgrede コマンドが成功しているのにバージョンが変わらない時は、PATHの設定を見直そう

今回はGitを例にあげましたが、Homebrewで管理しているパッケージと、直接インストールしたパッケージが同じ環境に混在する場合は、他のパッケージでも発生する可能性がある事象です。
バージョンアップがエラーなく完了しているように見えるのに、バージョンが変わらないときは、PATHの設定を確認して、コマンドを実行した時に参照しているパッケージの場所を確認しましょう。