it-swarm.com.de

Was ist Git Bash für Windows überhaupt?

Ich habe mit Git und Git Bash glücklich wurde von https://git-scm.com/ . Hier finden Sie eine Seite mit weiteren Informationen: https://git-for-windows.github.io/ .

Gestern bin ich auf ein Problem mit rsync gestoßen und habe angefangen, mich eingehender mit Git Bash für Windows zu befassen. Mir ist aufgefallen, dass ich nicht einmal sicher bin, wie das Bash-Programm heißt, weil es nur mit dem git-scm-Download gebündelt ist. Ich nenne es Git Bash für Windows, was vernünftig erscheint.

Bei der Suche in „Was ist Git Bash“ Ich habe gelesen, Cygwin und anders Ding namens mysys2 , die mysysGit verwandt zu sein scheint, und ich sah Verweise auf MinGW. Aber dann habe ich in den FAQ gesehen, dass mintty das Standardterminal für Git Bash ist.

Es scheint, dass die Bash-Anwendung tatsächlich ein speziell zusammengestelltes Bündel anderer Dinge ist (meistens oben aufgeführt), die unabhängig voneinander verfügbar sind.

Im Grunde würde Ich mag wissen, was die Basis ist, die * nix-Befehle machen wie sshscpcatls Arbeit in Git Bash für Windows?

(Ich glaube, eine gute Antwort würde helfen, jemand zu verstehen, in groben Zügen, wie diese Komponenten zusammenpassen und verstehen, die richtigen Worte für die Komponenten, aber ich will nicht die SO Frage/Antwort-Format zu brechen. )

54
geneorama

Zusammenfassung

Sie haben Recht, Git Bash für Windows ist nicht nur bash für Windows kompiliert. Das Paket enthält bash (eine Befehlszeilen-Shell ) und eine Sammlung anderer, separater * nix-Dienstprogramme wie ssh, scp, cat, find und andere (die Sie mit dem ausführen) Shell), kompiliert für Windows, und ein neues Terminalfenster für die Befehlszeilenschnittstelle mit dem Namen mintty.

In einer Nussschale

Unter Windows können Sie Befehle wie ipconfig /all oder format G: mit cmd.exe ausführen. Diese Befehle sind ausführbare Dateien unter C:\Windows\system32, die als ipconfig.exe- und format.com-Dateien gespeichert sind. cmd.exe ist von beiden getrennt und wird auf Anforderung des Benutzers geladen und ausgeführt.

ssh, scp, cat, find werden mit bash genauso ausgeführt. Sie werden normalerweise unter /usr/bin und nicht in C:\Windows\system32 auf * nix-Systemen gespeichert, da die Dateistruktur von Windows und * nix unterschiedlich organisiert ist.

Bei Git Bash für Windows befinden sich diese Programme im Git-Installationsordner: C:\Program Files\Git\usr\bin, der sich auch in der emulierten Linux-Umgebung unter /usr/bin befindet.

Genauso wie die Möglichkeit, cmd.exe nur unter * nix auszuführen, es Ihnen nicht erlaubt, viel ohne die anderen Systemdienstprogramme zu tun, ist es auch nicht sehr nützlich, Bash nur unter Windows ausführen zu können. Dies bedeutet, dass alle diese zusätzlichen Befehle zusammen mit Bash gebündelt werden müssen, um ein verwendbares Softwarepaket zu erstellen.

Details: POSIX-Anwendungen unter Windows

Normalerweise werden diese zusätzlichen Befehle auf * nix-Systemen und nicht unter Windows gefunden, da sie mit der POSIX-Programmierschnittstelle (die von * nix verwendet wird) und nicht mit den Win32-APIs (die von Windows verwendet werden) programmiert wurden. Die POSIX-API-Dokumentation ist offen verfügbar, sodass einige Benutzer sie auf andere Systeme, einschließlich Windows, portiert haben. Die Windows-Implementierung von POSIX-APIs Bibliotheken wird von Cygwin und MSYS bereitgestellt.

Dies ähnelt dem/- Wine-Projekt , konvertiert jedoch POSIX-> Windows und nicht Windows-> POSIX wie Wine.

minze

mintty ist enthalten, da in cmd.exe, dem Standard-Windows-Befehlszeilenfenster, einige wichtige Funktionen fehlen, die normalerweise auf den meisten * nix-Systemen verfügbar sind. In den meisten Fällen ist mintty die bessere Wahl für die Ausführung von Befehlen (insbesondere für die Dienstprogramme, die mit dem Git Bash für Windows-Paket geliefert werden), aber gelegentlich funktioniert eine Windows-Systemanwendung möglicherweise besser mit cmd.exe.

64
Pabru

Hintergrund

Ich bin der OP. Ich wollte ursprünglich nur den formalen Namen für dieses Ding wissen, das ich benutzte.

Jetzt denke ich, dass der Name "Git Bash für Windows" ist. Leider ist die vollständige Antwort kompliziert, da es sich bei dieser Sache tatsächlich um eine Menge Dinge handelt.

Die Top-Antwort aus dem Jahr 2016 war ursprünglich für mich nicht hilfreich, wurde aber stark überarbeitet und immer hilfreicher. Trotzdem fehlen einige meiner ursprünglichen Fragen.

Der Anfang: msysgit

Eigentlich ist der Anfang wahrscheinlich MSYS, aber wirklich MSYS2. Der Begriff "msysgit" ist ein guter Begriff, um herauszufinden, was passiert, wenn XYZ schief geht. sachen wie "wo in der @ * #! sind alle autocrlf einstellungen gespeichert?!?!?!?"

Das README ( https://github.com/msysgit/msysgit ) im msysgit-Projekt erklärt die Beziehung zwischen den Komponenten:

Die Beziehung zwischen msysGit und Git für Windows

Git für Windows ist das Softwarepaket, das eine minimale Umgebung zum Ausführen von Git unter Windows installiert. Es kommt mit einem Bash (eine Unix-Shell), mit einem Perl-Interpreter und mit der Git-Programmdatei und ihren Abhängigkeiten.

Andererseits ist msysGit das Softwarepaket, das die Build-Umgebung installiert, mit der Git für Windows erstellt werden kann. Der einfachste Weg ist die Installation über den net Installer .

Der Unterschied zwischen MSYS und MinGW

Das Ziel des MinGW-Projekts ist es, mithilfe des GNU C-Compilers eine Möglichkeit zum Kompilieren nativer Windows-Binärdateien ohne POSIX-Ebene bereitzustellen.

Zumindest der Bash benötigt jedoch eine POSIX-Ebene (insbesondere aufgrund des Fehlens des Aufrufs fork() unter Windows). Daher wird MSYS (das minimale System ) eingeführt, das das minimale System bietet, das für die Bereitstellung von Bash- (und Perl-) Funktionen unter Windows erforderlich ist.

Folglich wird MSYS mit einer POSIX-Ebene (basierend auf einer alten Version von Cygwin) ausgeliefert, die nur von Bash und Perl verwendet wird, jedoch nicht von irgendetwas, das in dieser Umgebung kompiliert wurde.

Übrigens, nur für den Fall, dass das vollständige README gelöscht wird, habe ich es in ein Gist kopiert.

Das Terminalfenster: mintty

Der andere Teil von Git Bash für Windows ist die eigentliche Windows-Befehlszeile, mintty. Gott sei Dank existiert es, aber es ist nicht etwas, was ich zum googeln brauche.

Referenzen für MSYS2

Ihr Wiki ist eine wahre Fundgrube an Details zur MSYS2-Umgebung: https://github.com/msys2/msys2/wiki

In der Einleitung ist dieser Teil für meine ursprüngliche Frage am relevantesten:

MSYS2 besteht aus drei Subsystemen und ihren entsprechenden Paket-Repositorys, msys2, mingw32 und mingw64.

Diese Diskussion ist auch sehr hilfreich: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e

4
geneorama