MinGW+MSYS と msysgit を連携させる


はじめに

MinGW+MSYS 環境から Git を使えるよう試行錯誤し、満足のいく結果が得られたのでご紹介します。
terminal2

最初、msysgit の開発者用環境をインストールしてその MSYS 環境を使うことも考えました。しかし、この MSYS 環境はあくまで Git を運用するためにパッチをあてたものです。実際、一部のツールはバージョンが古かったりします。

一方、純粋な MinGW+MSYS に Git をインストールしようとしても mingw-get では Git をインストールできません。msysgit があえて独自の MSYS 環境と共に配布されている事実を考えれば、通常の MSYS 環境で Git をビルドするのも容易でないことが想像できます。そのため、Git を使うには msysgit の Git Bash を別途起動する必要があります。しかし、MinGW+MSYS を開発環境として使うのであれば、(Git Bash を開くのでなく) 直接 MinGW Shell から Git を利用できることが望ましいです。

これらの事から、MSYS 環境としては MinGW+MSYS を純粋にインストールし、そこから msysgit の Git を利用できるようにすることを考えました。msysgit の MSYS は、単に Git の一部と割り切ることにしました。ただし、MSYS は各種ツールを含むため、Windows 上でむやみにパスを通すと他のツールに干渉することが考えられます。そこで、できるだけ MinGW Shell 内に限定してパスが有効になるような設定を行いました。

※2013/12/23 この記事の後、Git の入った MSYS バイナリを見つけました。ここで紹介する方法より、そちらの方がベストだと思っています。導入は、こちらの記事を参照してください。

基本方針

基本方針は以下の通りです。

  1. MinGW+MSYS と msysgit を各々独立してインストールする。(それぞれを単独で利用できる)
  2. MinGW+MSYS の環境から Git を使えるようにする。(msysgit の Git Bash から MinGW+MSYS のツールが使える必要は無い)
  3. Windows のグローバルな環境変数は極力さわらない。MinGW Shell 内に限定した環境を作る。
  4. git だけでなく、gitk も使えるようにする

MinGW と msysgit のインストール

まず、MinGW+MSYS と msysgit をそれぞれインストールします。注意点は、インストール先がスペースを含まないディレクトリ名の階層になるようにすることです。パスを参照する際にスペースが含まれていると、問題が発生する可能性があるためです。特に msysgit はデフォルトで Program Files にインストールされてしまうので、すでにインストール済であれば再インストールした方が良いでしょう。ここでは、MinGW を c:MinGW に、msysgit を c:Git にインストールしました。

MinGW から Git が使えるようにする

MinGW から Git を使うには、MinGW 環境内で msysgit へのパスを通します。

まず、MinGW (MSYS) にログインした時のシェルを Bash にします。ホームディレクトリ (この例では、C:MinGWmsys1.0homeユーザ名) に、以下の内容で .profile を作成します。

次に、ホームディレクトリに .bashrc を配置して msysgit にパスを通します。この時、ついでにブランチを表示するようにプロンプトも設定しておくと便利です。

1行目で Git のディレクトリ (c:Gitbin) にパスを通しています。msysgit 環境は Git のための限定した使用にとどめたいので、他のパスより後に設定しておきます。また、3行目がプロンプトの設定です。ここで使用している __git_ps1 の定義を取得するために 2 行目で git-promt.sh (msysgit に付属しています) を読み込んでいます。プロンプトの形式は好みで修正してください。

最後に .gitconfig を配置します。(あるいは git config –global コマンドで各種設定をします。) 既に msysgit で設定済の場合は、Windows のホームディレクトリ (C:Usersユーザ名 等) からコピーしてくると良いと思います。ただし、オープンソースのビルドでは CRLF の改行が問題を起こすことが多いので、autocrlf の設定は false にしておく方が無難です。ターミナルから以下を実行しておきます。

以上で、MinGW Shell (msys.bat) から git や gitk を使うことができるようになります。

[関連記事]
MinGW (64bit) + MSYS 環境の構築 (1) | DeVlog – 銀の翼で翔べ –