Git v2系のWindows版がGit for Windowsの方で少し前から公開され始めていたことを今さら知ったので、更新した。2015/05/05現在はv2.4.0がリリースされている。インストールから動かすまでけっこう手間取ったので、メモがてら記事に残しておく。Git v2の使い勝手とかについては特に書かない。

~/.bashrcの読み込み

このGit for Windowsでは、デフォルトで無理やり~/.bashrcを読みに行くことがなくなった。~/.bash_profileは読みに行くので、~/.bash_profileから~/.bashrcを読みに行くように、つまり普通にBashを設定してやれば良い。

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

これだけ書いた~/.bash_profileを作成するのが良い。あまり関係ないイシューではそのうち~/.bash_profileがなかったら作成するようにするというような事を言っているので、これについてはそのうち直りそうだ。

OpenSSLのアップデート

様々なコマンドから使われるlibeay32.dllが、その読み込み優先順の問題で、システムにインストールされているlibeay32.dllを呼びに行ってしまうようだ。もしバージョンが古いOpenSSLが何らかの理由でシステムにインストールされていたりすると、エラーで落ちたりする。僕の場合はgit-remote-https.exeが「プロシージャ エントリ ポイント EVP_aes_128_ctr がダイナミック リンク ライブラリ LIBEAY32.dll から見つかりませんでした。」というエラーで落ち、pushfetchなどがまったくできなかった。

libeay32.dllがらみでエラーが出る人は、Git for Windows v2.4.0では最新版の1.0.2aを使っているようなので、それと同じものをシステムにインストールするのが良いだろう。インストーラーで配布しているところもあるが、OpenSSLの公式サイトからリンクされているページで配布されているZIPアーカイブを展開してコピーする方が良い。

64bit版Windowsを使っている人はopenssl-1.0.2-x64_86-win64.zipをダウンロードして、展開し、中に入っているlibeay32.dllssleay32.dllC:\Windows\System32へコピーする。

環境変数MSYSTEM

デフォルトでインストールされるGit Bash (実体はMinTTY)を使う場合は問題ないが、他のターミナルを使うとうまく判定されない事があり、パスが上手く通らないことがあるようだ(ConEmuで上手く通らなかった)。パスの最適化は環境変数MSYSTEMを見て行われるようなので、新規ユーザー環境変数としてMSYSTEMを作り、その値をMINGW64(32bit版をインストールした人はMINGW32)に設定してやれば良い。

上記OpenSSLがらみのエラーもこのあたりが怪しいが、Git CMDでも同じエラーでダメだったので、アップデートは必須だと思われる。

git.exe他、実行ファイル群のパス

全て一箇所に集約されていたv1系とは違い、多くの実行ファイルがインストール先フォルダーのmingw64/bin/以下に移動した。curl.exeなどもここにある。またその他の実行ファイルもusr/bin/に移動されている。bash.exevim.exeなど、MSYS関係の実行ファイルはこちらにある。

Vimなど他のプログラムから気軽に呼び出したい場合、両者にパスが通っていることが必要になることもあるので、うまいことパスを通す方法を模索する必要がある。僕は~/.vim/vimrcの先頭で無理やり$PATHを最適化してお茶を濁した。

if has('win32')
  let $PATH = substitute($PATH, '\\', '/', 'g');

  if $PATH !~? '\(^\|;\)C:/git/usr/bin\(;\|$\)'
    let $PATH = 'C:/git/usr/bin;' . $PATH
  endif

  if $PATH !~? '\(^\|;\)C:/git/mingw64/bin\(;\|$\)'
    let $PATH = 'C:/git/mingw64/bin;' . $PATH
  endif
endif

ちゃんとインストールできた状態だと、HTTPSでの認証もそのまま継承され、ちゃんとpushすることができた。問題なく動いている。とはいっても特に何もすごく良くなったところもない気がしないでもないので、興味ある人だけいれるのが良いだろう。