私はhttps://git-scm.com/からGitとGit Bashを楽しく使っています。こちらに詳しいページがあります。https://git-for-windows.github.io/
昨日、rsync
の問題にぶつかったので、Windows用のGit Bashを深く掘り下げてみました。git-scm のダウンロードにバンドルされているだけなので、Bash プログラムの名前もよくわからないことに気がつきました。Git Bash for Windowsと呼んでいますが、これは妥当な気がします
Git Bashとは何か」を調べる中で、Cygwinとdifferentというmsys2というものを読み、msysGit
と関係がありそうだと思い、MinGW
への言及を見ました。しかし、その後FAQを見てみると、minttyがGit Bashのデフォルト端末であることがわかりました
Bash アプリケーションは、実際には他のもの(ほとんどが上に挙げたもの)を束ねた特別にキュレーションされたもので、それが独立して利用できるようになっているようです
根本的に、Windows版Git Bashでssh
, scp
, cat
, ls
のような*nixコマンドを動作させる根拠は何なのか知りたいです
(良い回答は、これらの構成要素がどのように組み合わされ、構成要素に適した言葉を理解するのに役立つと思いますが、SOの質問/回答の形式を崩したくありません)
81 geneorama 2016-03-16
Summary
あなたの言う通り、Git Bash for Windows は Windows 用にコンパイルされた bash
だけではありません。Windows 用にコンパイルされた bash
(コマンドラインシェル) と、ssh
, scp
, cat
, find
などの別個の *nix ユーティリティ (シェルを使って実行する) のコレクション、そして mintty
と呼ばれる新しいコマンドラインインターフェイスのターミナルウィンドウを含むパッケージです
一言で言えば
Windowsでは、ipconfig /all
やformat G:
のようなコマンドをcmd.exe
を使って実行することができます。これらのコマンドはC:\Windows\system32
の下にある実際の実行ファイルで、ipconfig.exe
やformat.com
ファイルとして保存されています。cmd.exe
は両方とは別のもので、ユーザの要求に応じてロードして実行します
ssh
, scp
, cat
, find
は bash
を使って全く同じように実行されます。Windowsと*nixではシステムのファイル構造が異なるため、*nixシステムではC:\Windows\system32
ではなく/usr/bin
に格納されます
Windows 版 Git Bash の場合、これらのプログラムは Git インストールフォルダにあります。C:\Program Files\Git\usr\bin
にあり、エミュレートされた Linux 環境でも /usr/bin
にあります
nix 上で cmd.exe
を実行するだけでは他のシステムユーティリティなしでは何もできないのと同じように、Windows 上で Bash を実行するだけでもあまり意味がありません。つまり、使えるソフトウェアパッケージを作るためには、これらの余分なコマンドをすべて Bash にバンドルしなければならないということです
詳細。Windows上のPOSIXアプリケーション
通常、これらの追加コマンドは、Windowsではなく*nixシステム上で発見されるでしょう。POSIX API のドキュメントは公開されているので、Windows を含む他のシステムに移植している人もいます。WindowsでのPOSIX API/ライブラリの実装はCygwin
とMSYS
で提供されています
これは、Wine プロジェクトが行うことと似ていますが、Wine のように Windows->POSIX ではなく POSIX->Windows に変換します
mintty
mintty
が含まれているのは、Windows のデフォルトのコマンドラインウィンドウである cmd.exe
には、ほとんどの *nix システムで通常利用できる重要な機能が欠けているからです。ほとんどの場合、コマンドを実行するには mintty
の方が適していますが (確かに Git Bash for Windows パッケージに付属のユーティリティはそうです)、Windows システムのアプリケーションでは cmd.exe
の方がうまく動作することもあります
85 Pabru 2016-03-16
Background
OPの者です。元々は自分が使っていたものの正式名称を知りたかっただけなのですが
今思うと「Git Bash for Windows」という名前だと思います。残念ながらこれは実際には色々あるので、完全な答えはややこしいです
2016年のトップの回答は、もともと私にとっては参考にならないものでしたが、重く編集されて、どんどん参考になっています。それでも、私の元の質問の一部を見逃しています
始まりです。msysgit
実際には、最初はおそらく MSYS
ですが、実際には MSYS2
です。”msysgit” という用語は、XYZ がおかしくなったときに何が起こっているのかを知るために検索をかけるのに良い用語です; “where in the @*#!
msysgitプロジェクトのREADME(https://github.com/msysgit/msysgit)には、コンポーネント間の関係が説明されています
msysGitとGit for Windowsの関係
Git for Windowsは、Windows上でGitを実行するための最低限の環境をインストールするソフトウェアパッケージです。これには、Bash (Unix 型シェル)、Perl インタプリタ、Git 実行ファイルとその依存関係が含まれています
一方、msysGitはWindows用のGitをビルドできるビルド環境をインストールするソフトウェアパッケージです。最も簡単な方法は、net installerを経由してインストールすることです
MSYSとMinGWの違い
MinGW プロジェクトの目標は、GNU C コンパイラを使って POSIX レイヤーを使わずにネイティブな Windows バイナリをコンパイルする方法を提供することです
しかし、少なくとも Bash は POSIX レイヤーを必要とします (特に Windows では
fork()
呼び出しがないため)。そのため、MSYS (最小システム) が投入され、Windows 上で Bash (と Perl) の機能を提供するために必要な最小システムが提供されていますその結果、MSYS は POSIX レイヤー (Cygwin の古いバージョンをベースにしたもの) を持って出荷されますが、これは Bash と Perl でのみ使用され、その環境でコンパイルされたものは使用されません
ところで、完全な README が削除された場合に備えて、gistにコピーしておきました
ターミナルウィンドウです。mintty
Git Bash for windowsのもう一つの部分は、実際のWindowsのコマンドラインであるminttyです。ありがたいことに存在していますが、ググる必要はありません
MSYS2 の参考文献
彼らの wiki は MSYS2 環境の詳細の宝庫です。https://github.com/msys2/msys2/wiki
序章では、この部分が私の本来の質問に最も関係しています
MSYS2は、
msys2
、mingw32
、mingw64
の3つのサブシステムとそれに対応するパッケージリポジトリから構成されています
この議論も非常に参考になります。https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e
6 geneorama 2018-09-28