Git Bash の仕組み

作成日:
Git Bash Windows CLI

概要

Git Bash は Windows 上で Git を使うために配布される端末エミュレータ・シェル環境。内部では MinGW-w64MSYS2 という移植レイヤーを利用し、Windows ネイティブな実行環境の上に Unix 互換の Bash シェルと GNU コアユーティリティを提供する。

基本概念

MinGW(Minimalist GNU for Windows)

MinGW は GNU ツールチェーンを Windows へ移植したプロジェクト。gccmake などの 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 Bashcmd.exePowerShell
シェル言語Bash (POSIX sh 互換)バッチ(.bat)PowerShell スクリプト
パス区切り/ (自動変換)\\ または /
コアユーティリティGNU (ls, grep, sed …)独自コマンドエイリアス+コマンドレット
ターミナルMinTTYconhost.execonhost / Windows Terminal

関連トピック

参考