web-dev-qa-db-ja.com

とにかくGit Bash for Windowsとは何ですか?

https://git-scm.com/ からGitとGit Bashを使っています。ここでより多くの情報があるページがあります: https://git-for-windows.github.io/

昨日私はrsyncで問題に遭遇しました、そして私はWindows用のGit Bashをより深く掘り始めました。私は、Bashプログラムの名前がわからないことに気付きました。それは、git-scmダウンロードにバンドルされているだけだからです。私はそれをGit Bash for Windowsと呼んでいますが、これは妥当と思われます。

"Git Bashとは何か"を見ていくうちに、私は Cygwinの違い について読みました。 - ) mysys2 と呼ばれるもの。これはmysysGitに関連しているようで、私はMinGWへの参照を見ました。しかし、それから私はFAQで、 mintty がGit Bashのデフォルトの端末であることを見ました。

Bashアプリケーションは実際には独立して利用可能な他のもの(大部分は上記にリストされている)の特別にまとめられたバンドルであるようです。

基本的に、Git Bash for Windowsでsshscpcatlsのような* nixコマンドが機能するための基礎が何であるかを知りたいですか?

(良い答えは、これらのコンポーネントがどのように組み合わされてそのコンポーネントの正しい単語を理解するのかを幅広いストロークで理解するのに役立ちますが、私はSO質問/回答フォーマットを破りたくありません。 )

54
geneorama

概要

あなたは正しい、Windows用Git BashはWindows用にコンパイルされたbashだけではありません。 bash(これは コマンドラインシェル )とその他のコレクションを含むパッケージです。 Windows用にコンパイルされたsshscpcatfind、およびその他のような別の* nixユーティリティ、およびminttyと呼ばれる新しいコマンドラインインターフェースターミナルウィンドウ。

手短に

Windowsでは、ipconfig /allを使用してformat G:cmd.exeのようなコマンドを実行することができます。これらのコマンドは、C:\Windows\system32およびipconfig.exeファイルとして格納されているformat.comの下の実際の実行可能ファイルです。 cmd.exeは両方とも独立しており、ユーザーの要求に応じてそれらをロードして実行します。

sshscpcatfindは、bashを使用してまったく同じ方法で実行されます。 Windowsと* nixではシステムファイル構造が異なっているため、これらは通常* nixシステムの/usr/binではなくC:\Windows\system32の下に格納されます。

Git Bash for Windowsの場合、これらのプログラムはGitのインストールフォルダー:C:\Program Files\Git\usr\binにあります。これは、エミュレートされたLinux環境の/usr/binにもあります。

* nixでcmd.exeを実行できるだけでは、他のシステムユーティリティなしでできることは多くありません。WindowsでBashを実行できるだけではあまり役に立ちません。これは、使用可能なソフトウェアパッケージを作成するために、これらすべての追加コマンドをBashと一緒にバンドルする必要があることを意味します。

詳細:Windows上のPOSIXアプリケーション

通常、これらの余分なコマンドは、Windowsではなく* nixシステム上にあります。これは、(Windowsが使用するものである)Win32 APIではなく、POSIXプログラミングAPI(* nixが使用するもの)に対してプログラムされているためです。 POSIX APIドキュメントは公開されているので、Windowsを含む他のシステムに移植している人もいます。 POSIX API /ライブラリのWindows実装は、CygwinおよびMSYSによって提供されます。

これは Wineプロジェクト の動作に似ていますが、WineのようにWindows-> POSIXではなくPOSIX-> Windowsに変換されます。

ミント

デフォルトのWindowsコマンドラインウィンドウであるcmd.exeには、ほとんどの* nixシステムで通常利用可能ないくつかの重要な機能が欠けているため、minttyが含まれています。ほとんどの場合、minttyはコマンドの実行に適しています(確かにGit Bash for Windowsパッケージに付属のユーティリティには適しています)が、Windowsシステムアプリケーションがcmd.exeでうまく動作する場合もあります。

66
Pabru

バックグラウンド

私はOPです。私はもともと私が使っていたものの正式な名前を知りたいだけでした。

今私はその名前が "Git Bash for Windows"だと思います。残念ながら、完全な答えは複雑です。これは実際にはたくさんのことです。

2016年からのトップの答えはもともと私には役に立ちませんでしたが、それはかなり編集され、ますます役に立つようになりました。それでも、それは私の最初の質問のいくつかを逃します。

始まり:msysgit

実は、始まりはおそらくMSYSですが、実際はMSYS2です。 「msysgit」という用語は、XYZが失敗したときに何が起きているのかを突き止めるための検索に使用するのに適した用語です。 「@ *#!のすべてのautocrlf設定はどこに保存されていますか?!?!?!?」など

MsysgitプロジェクトのREADME( https://github.com/msysgit/msysgit )に、コンポーネント間の関係が説明されています。

msysGitGit for Windowsの関係

Windows用Git は、GitをWindows上で実行するための最小限の環境をインストールするソフトウェアパッケージです。それはBash(Unixタイプのシェル)、Perlインタプリタ、そしてGit実行ファイルとその依存関係を持っています。

一方、msysGitはGit for Windowsをビルドできるビルド環境をインストールするソフトウェアパッケージです。最も簡単な方法は net installer でインストールすることです。

MSYSとMinGWの違い

MinGW project の目標は、GNU Cコンパイラを使用して、POSIX層のないネイティブのWindowsバイナリをコンパイルする方法を提供することです。

しかし、少なくともBashはPOSIX層を必要とします(最も顕著なのはWindowsにfork()呼び出しがないためです)。したがって、MSYS(最小システム)が投入され、Windows上でBash(およびPerl)機能を提供するのに必要な最小システムを提供します。

その結果、MSYSには(古いバージョンのCygwinに基づく)POSIX層が同梱されています。これはBashとPerlでのみ使用され、その環境内でコンパイルされたものでは使用されません。

ところで、完全なREADMEが削除された場合に備えて、私はそれを Gist にコピーしました。

ターミナルウィンドウ:mintty

Windows用Git Bashの他の部分は、実際のWindowsコマンドライン、minttyです。それが存在する良さに感謝しなさい、しかしそれは私がグーグルに必要とするものではない。

MSYS2の参照

彼らのウィキはMSYS2環境に関する詳細な宝物です: https://github.com/msys2/msys2/wiki

はじめに、この部分は私の最初の質問に最も関連があります。

MSYS2は、3つのサブシステムとそれに対応するパッケージリポジトリ、msys2mingw32、およびmingw64で構成されています。

この議論は非常に役に立ちます。 https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3 /#8473/588e

4
geneorama