Git Bash の仕組み
概要
Git Bash は Windows 上で Git を使うために配布される端末エミュレータ・シェル環境。内部では MinGW-w64 と MSYS2 という移植レイヤーを利用し、Windows ネイティブな実行環境の上に Unix 互換の Bash シェルと GNU コアユーティリティを提供する。
基本概念
MinGW(Minimalist GNU for Windows)
MinGW は GNU ツールチェーンを Windows へ移植したプロジェクト。gcc・make などの Unix コマンドを Windows 実行ファイル(.exe)としてビルドし、POSIX 互換レイヤー(Cygwin のような DLL)を必要とせずに動作する点が特徴。
Git for Windows では MinGW-w64(64 ビット版)が採用されている。
MSYS2
MSYS2 は Cygwin から派生した移植レイヤー。/usr/bin・/etc などの Unix 的ディレクトリ構造を Windows ファイルシステム上に仮想的に構築し、Bash やコアユーティリティが期待するパス解決を可能にする。
Git Bash の内部では MSYS2 のランタイム DLL(msys-2.0.dll)がパス変換やシグナル処理などを担当する。
パス変換
Windows パス(C:\Users\foo)と Unix パス(/c/users/foo)の相互変換は MSYS2 ランタイムが自動で行う。これにより、Unix スタイルのパスを Bash スクリプトで書いても Windows API に正しく渡される。
端末エミュレータ(MinTTY)
Git Bash のウィンドウは MinTTY という端末エミュレータが担当する。Windows コンソール(conhost.exe)の代わりに VT100/xterm 互換の端末を提供し、カラー表示・リサイズ・コピー&ペーストなどを実現する。
Git 本体との関係
Git for Windows に同梱される git.exe は、MinGW でネイティブビルドされた Windows 実行ファイル。Git Bash のシェルから呼び出すと、MSYS2 ランタイムがパスやシグナルを変換しつつ git.exe を実行する。
PATH の統合
Git Bash はインストール時に「Git の実行ファイルを PATH に追加するか」を選択できる。
- Git Bash のみ: Windows のシステム PATH は変更せず、Git Bash 内だけで
gitが使える - コマンドプロンプトからも使う:
git.exeを Windows PATH に追加し、cmd/PowerShell からも呼び出せるようにする
Windows の cmd / PowerShell との違い
| 項目 | Git Bash | cmd.exe | PowerShell |
|---|---|---|---|
| シェル言語 | Bash (POSIX sh 互換) | バッチ(.bat) | PowerShell スクリプト |
| パス区切り | / (自動変換) | \ | \ または / |
| コアユーティリティ | GNU (ls, grep, sed …) | 独自コマンド | エイリアス+コマンドレット |
| ターミナル | MinTTY | conhost.exe | conhost / Windows Terminal |
関連トピック
参考
- Git for Windows 公式: https://gitforwindows.org/
- MSYS2 公式: https://www.msys2.org/
- MinGW-w64 公式: https://www.mingw-w64.org/
- Git for Windows コンポーネント解説: https://github.com/git-for-windows/git/wiki/Technical-overview