Was ist Git Bash für Windows überhaupt?

61

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

Gestern hatte ich ein Problem mit rsyncund fing an, mich eingehender mit Git Bash für Windows zu beschäftigen. Mir wurde klar, dass ich mir des Namens des Bash-Programms nicht sicher bin, da es nur mit dem git-scm-Download gebündelt ist. Ich nenne es Git Bash für Windows, was vernünftig erscheint.

Als ich mir "What is Git Bash" ansah , las ich etwas über Cygwin und ein anderes Ding namens mysys2 , das in Beziehung zu mysysGitstehen scheint , und ich sah Hinweise darauf 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.

Grundsätzlich möchte ich wissen, auf welcher Basis * nix-Befehle ssh scp cat lsin Git Bash für Windows funktionieren.

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

genorama
quelle
Fanden eine sehr gute Antwort hier: Was ist die genaue Bedeutung von Git Bash?
Genorama
1
Ich denke, der offizielle Name / die offizielle Sache bei Google ist "Git Bash". Hilft, es in Anführungszeichen zu setzen, da beide Wörter unabhängig voneinander bedeutungsvoll sind.
Genorama
Einige gute Diskussionen über Reddit hier und hier (ab 2017). Sie sprechen sogar meine ursprüngliche rsyncFrage an !!
Genorama

Antworten:

72

Zusammenfassung

Sie haben Recht, Git Bash für Windows ist nicht nur bashfür Windows kompiliert. Es ist Paket , das enthält bash(die eine ist die Befehlszeilen - Shell ) und eine Sammlung von anderen, separaten * nix - Utilities wie ssh, scp, cat, findund andere ( mit dem Sie die Shell ausführen verwenden), für Windows kompiliert und eine neue Kommandozeilen - Schnittstelle Terminal Fenster angerufen mintty.

In einer Nussschale

Unter Windows können Sie Befehle wie ipconfig /alloder format G:mithilfe von ausführen cmd.exe. Diese Befehle sind aktuelle ausführbare Dateien unter C:\Windows\system32, gespeichert als ipconfig.exeund format.comDateien. cmd.exeist von beiden getrennt und lädt und führt sie auf Benutzerwunsch aus.

ssh, scp, cat, findVerwenden laufen bashin genau der gleichen Weise. Sie werden normalerweise unter /usr/binund nicht in C:\Windows\system32* 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\binder sich auch in der emulierten Linux-Umgebung unter befindet /usr/bin.

Genauso wie die Möglichkeit, nur cmd.exeauf * 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 portiert haben, einschließlich Windows. Die Windows-Implementierung von POSIX-APIs / -Bibliotheken wird von Cygwinund bereitgestellt MSYS.

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

Minze

minttyist enthalten, weil cmd.exeim Standard-Windows-Befehlszeilenfenster einige wichtige Funktionen fehlen, die normalerweise auf den meisten * nix-Systemen verfügbar sind. In den meisten Fällen minttyist dies 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 cmd.exe.

Pabru
quelle
1
Es stellt sich heraus, dass die meisten meiner Fragen in den FAQ des Projekts beantwortet werden: github.com/git-for-windows/git/wiki/FAQ und ich kann genauere Informationen in der google group groups.google.com/forum/# ​​finden! Forum / Git-for-Windows .
Genorama
@geneorama Das sollte kein Problem sein, diese Antwort zu akzeptieren, wenn sie tatsächlich korrekt, informativ und nützlich ist.
Walen
1
@geneorama Möglicherweise war es Ihre Absicht, dieses Feld auszufüllen, aber das war nicht die Frage, die Sie gestellt haben. Dein Beitrag trägt den Titel "Was ist Git Bash für Windows?" , und die einzige Frage, die sich in seinem Körper stellt, ist "Ich möchte wissen, auf welcher Basis * nix-Befehle ssh scp cat lsin Git Bash für Windows funktionieren". . Der Beitrag von Pabru beantwortet beide Fragen sehr gut und ist eine korrekte Antwort für alle, die dieselbe Frage haben (wie angegeben). Indem Sie akzeptieren, dass Sie anderen Benutzern helfen, helfen Sie ihnen. Haben Sie versucht, eine neue Frage für das rsyncProblem zu stellen?
Walen
4
Das Posten von Fragen auf SO und verwandten Websites ist so unangenehm, dass ich bezweifle, dass ich jemals mehr Fragen posten werde. Dies war eigentlich ein Test, der meine Gefühle bestätigte. In meinem Bestreben, die Frage kurz zu halten und meine Recherchen zu dokumentieren (und ich habe einen ganzen Tag lang recherchiert), habe ich die eigentliche Frage wohl weggelassen. Wenn ich sorgfältig bearbeite, scheinen die Leute die Kürze als Mangel an Forschung zu betrachten. Wenn ich die Frage zu ausführlich stelle, wird sie ignoriert. Egal was passiert, die Frage wird kritisiert (mehrere ausgesprochen unhöfliche Kommentare wurden gelöscht). Sogar meine "berühmten" Fragen wurden anfangs heftig abgelehnt.
Genorama
1
@geneorama Wenn es Sie tröstet, hat mir Ihre Frage geholfen, mehr über Git Bash zu erfahren, bevor ich die Antwort überhaupt gelesen habe. Aber ich verstehe, was du meinst.
Walen
4

Hintergrund

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

Jetzt denke ich, der Name ist "Git Bash for Windows". Leider ist die vollständige Antwort kompliziert, da es sich bei dieser Sache eigentlich 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?!?!?!?"

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

Die Beziehung zwischen msysGit und Git für Windows

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

Auf der anderen Seite 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 fork()Aufrufs unter Windows). Daher wird MSYS (das minimale System ) eingeführt, das das minimale System bietet, das für die Bash- (und Perl-) Funktionalität 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 die vollständige README gelöscht wird, habe ich sie in eine Liste kopiert .

Das Terminalfenster: mintty

Der andere Teil von Git Bash für Windows ist die eigentliche Windows-Befehlszeile, mintty. Gott sei Dank gibt es, aber ich muss nicht googeln.

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 Untersystemen und deren entsprechenden Paketdepots, msys2, mingw32, und mingw64.

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

genorama
quelle
1
"Folglich wird MSys mit einer POSIX-Ebene ausgeliefert ( basierend auf einer alten Version von Cygwin ) ..." - Dies hat mir zu dem Schluss gebracht, dass die Installation von git unter Cygwin Git Bash für Windows überflüssig macht, sodass ich es einfach deinstallieren kann.
Daniel Sokolowski