そもそもGit Bash for Windowsって何?

bash mingw rsync windows

私は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とは何か」を調べる中で、Cygwindifferentという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 /allformat G:のようなコマンドをcmd.exeを使って実行することができます。これらのコマンドはC:\Windows\system32の下にある実際の実行ファイルで、ipconfig.exeformat.comファイルとして保存されています。cmd.exe は両方とは別のもので、ユーザの要求に応じてロードして実行します

ssh, scp, cat, findbash を使って全く同じように実行されます。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/ライブラリの実装はCygwinMSYSで提供されています

これは、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は、msys2mingw32mingw64の3つのサブシステムとそれに対応するパッケージリポジトリから構成されています

この議論も非常に参考になります。https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e

6  geneorama  2018-09-28


タイトルとURLをコピーしました