環境変数で失敗: Git pullできない(fatal: Not a git repository)


コマンドプロンプトでgit pullしようとするとfatal: Not a git repository: 'C:\Program Files\Git\bin'というエラーが出てしまい、何が何だかわからない事態に陥った。git-cmdでは動くからgit自体は問題なさそうなのに、なんでこんなことが起きるのかと思っていたら、「Gitディレクトリ外からgitコマンドを実行する」を読んでようやく理解できた。気付きにくい残念な失敗だったので残しておく。

原因: 意図せず意味のある環境変数"GIT_DIR"を定義していた

Node.jsを実行するコマンドプロンプトを開く際、PATHPYTHONなどの環境変数を設定したかったので、以下のようなバッチファイルを作っていた。その中で、GitのバイナリへのPATHのつもりで環境変数GIT_DIRを定義していた。この環境変数は一時的な用途のつもりだったのだが、悪さをしてしまった。

setting.bat
set NPM_DIR=E:\node\9_5_0\npm_global
set NODE_DIR=E:\node\9_5_0
set GIT_DIR=C:\Program Files\Git\bin ←これが良くなかった
set PYTHON=E:\Python\2_7\python.exe
set PYTHON_DIR=E:\Python\2_7
set PATH=%NODE_DIR%;%NPM_DIR%;%GIT_DIR%;%PYTHON_DIR%;%PATH%

cd /d %~dp0
cmd /K npm config set prefix %NPM_DIR%

環境変数設定画面を開く手間、環境変数が増え過ぎ防止、複数バージョンをインストールすることなどを考慮し、起動用のプロンプトを作っていた。それがこんな悪さをするなんて…

Gitディレクトリ外からgitコマンドを実行する」によると、GIT_DIRはgit pull などを実行する際の.gitの場所を指定するための環境変数ということだった。一時的な環境変数のつもりが、実は意味があって.gitフォルダを指定してしまったことで、「リポジトリじゃない!」と怒られてしまうのだった。(しかもこの環境変数は、-Cオプションより強いため、無効化しないといけなかった)

対処: GIT_DIRの定義を削除(改名)した

環境変数GIT_DIRさえ定義しなければよいので、以下のようにして解決…しょぼい。

setting.bat
set NPM_DIR=E:\node\9_5_0\npm_global
set NODE_DIR=E:\node\9_5_0
set GIT_PATH=C:\Program Files\Git\bin
set PYTHON=E:\Python\2_7\python.exe
set PYTHON_DIR=E:\Python\2_7
set PATH=%NODE_DIR%;%NPM_DIR%;%GIT_PATH%;%PYTHON_DIR%;%PATH%

cd /d %~dp0
cmd /K npm config set prefix %NPM_DIR%

もっと別な名前があるかもしれないが、とりあえず動いたのでこれで良し…

気を付けること

一時的な用途のつもりで作った環境変数でも、誰かにとって意味があるかもしれない。意図せず何かの設定をいじってしまい、不可解なトラブルを起こす可能性がある。環境変数を作るときは、MY_abcとかTMP_xyzのような、まず被らない名前を付けるべきだったと思う。