Was ist Git Bash für Windows überhaupt?

Ich habe gerne Git und Git Bash von https://git-scm.com/. Es gibt eine Seite mit mehr Informationen hier: https://git-for-windows.github.io/.

Gestern bin ich auf ein Problem mit rsync gestoßen und habe angefangen, tiefer in Git Bash für Windows zu graben. Mir wurde klar, dass ich mir des Namens des Bash-Programms nicht einmal sicher bin, da es nur mit dem git-scm-Download gebündelt ist. Ich nenne es Git Bash für Windows, was scheint angemessen.

Bei der Suche nach "Was ist Git Bash" las ich über Cygwin und ein anderes Ding namens msys2, das mit msysGit verwandt zu sein scheint, und ich sah Verweise auf MinGW. Aber dann sah ich in der FAQ, dass mintty das Standardterminal für Git Bash ist.

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

Grundsätzlich würde ich wie zu wissen, was ist die Basis, die macht *nix Befehle wie ssh, scp, cat, und ls Arbeit in Git Bash für Windows?

(Ich denke, eine gute Antwort würde jemandem helfen, in großen Zügen zu verstehen, wie diese Komponenten zusammenpassen und die richtigen Wörter für die Komponenten verstehen, aber ich möchte das SO-Frage-Antwort-Format nicht brechen.)

Author: Paul Du Bois, 2016-03-16

2 answers

Zusammenfassung

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

Auf den Punkt gebracht

Unter Windows können Sie Befehle ausführen wie ipconfig /all oder format G: mit cmd.exe. Diese Befehle sind tatsächlich ausführbare Dateien unter C:\Windows\system32, gespeichert als ipconfig.exe und format.com Dateien. cmd.exe ist von beiden getrennt und lädt und führt sie auf Anfrage des Benutzers aus.

ssh, scp, cat, find werden mit bash auf genau die gleiche Weise ausgeführt. Sie werden normalerweise unter /usr/bin und nicht in C:\Windows\system32 auf *nix-Systemen gespeichert, da Windows und *nix ihre Systemdateistruktur unterschiedlich organisieren.

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

Genau wie Sie cmd.exe einfach auf *nix ausführen können, können Sie nicht viel ohne die anderen Systemdienstprogramme tun, nur Bash unter Windows ausführen zu können, ist auch nicht sehr nützlich. 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 auf Windows

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

Dies ist ähnlich zu dem, was die Wine project tut es, aber es konvertiert POSIX - >Windows anstelle von Windows - >POSIX wie Wine.

Mintty

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

 90
Author: Pabru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-08-28 05:39:01

Hintergrund

Ich bin der OP. Ich wollte ursprünglich nur wissen, der formale name für diese Sache, die ich verwendete.

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

Die Top-Antwort von 2016 war ursprünglich nicht hilfreich für mich, aber sie wurde stark bearbeitet und immer hilfreicher. Trotzdem vermisst es 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; Dinge wie" wo im @*#! sind alle autokratischen Einstellungen gespeichert?!?!?!?"

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

Die Beziehung zwischen msysGit und Git für Fenster

Git für Windows ist das Softwarepaket, das eine minimale Umgebung installiert, um Git unter Windows auszuführen. Es wird mit einer Bash (einer Unix-Shell), einem Perl-Interpreter und der ausführbaren Git-Datei und ihren Abhängigkeiten geliefert.

Auf der anderen Seite ist msysGit das Softwarepaket, das die Build-Umgebung installiert, die Git für Windows erstellen kann. Am einfachsten installieren Sie es über das net installer .

Die Unterschied zwischen MSYS und MinGW

Das Ziel des [[44]}MinGW-Projekts ist es, eine Möglichkeit zu bieten, native Windows-Binärdateien ohne POSIX-Layer mit dem GNU C-Compiler zu kompilieren.

Zumindest die Bash benötigt jedoch eine POSIX-Ebene (insbesondere aufgrund des Fehlens des fork() - Aufrufs unter Windows). Daher wird MSYS (das minimale System) ausgelöst, das das minimale System bietet, das erforderlich ist, um Bash - (und Perl -) Funktionen unter Windows anzubieten.

Folglich wird MSYS mit einer POSIX-Schicht (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.

BTW, nur in Fall, die vollständige README-Datei gelöscht wird, ich kopierte es in eine Kern.

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 brauche Google.

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 den entsprechenden Paket-Repositorys, msys2, mingw32, und mingw64.

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

 7
Author: geneorama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-04-24 15:39:54