Git 2.8 (März 2016) enthält ein sehr detailliertes Commit, das die Bedeutung von msys2 für das neue git-for-windows erklärt, das msysgit Anfang 2015 ersetzt hat .
Siehe Commit df5218b (13. Januar 2016) von Johannes Schindelin ( dscho
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 116a866 , 29. Januar 2016)
Git für Windows blieb lange Zeit hinter den 2.x-Versionen von Git zurück, da die Entwickler von Git für Windows diesen großen Sprung mit einem dringend benötigten Sprung von MSys zu MSys2 zusammenfallen lassen wollten.
Um zu verstehen, warum dies ein so großes Problem ist, muss beachtet werden, dass viele Teile von Git nicht in portablem C geschrieben sind, sondern dass Git auf eine POSIX-Shell und Perl angewiesen ist, um verfügbar zu sein .
Um die Skripte zu unterstützen, muss Git für Windows eine minimale POSIX-Emulationsebene mit Bash und Perl liefern. Als die Git für Windows-Bemühungen im August 2007 begannen, entschied sich dieser Entwickler für MSys, eine abgespeckte Version von Cygwin .
Folglich war der ursprüngliche Name des Projekts "msysGit" (was leider viel Verwirrung stiftete, da nur wenige Windows-Benutzer über MSys Bescheid wissen und noch weniger darauf achten).
Zum Kompilieren des C-Codes von Git für Windows wurde auch MSys verwendet: Es enthält zwei Versionen des GNU C-Compilers:
- eine, die implizit mit der POSIX-Emulationsschicht verknüpft ist,
- und eine andere, die auf die einfache Win32-API abzielt (mit ein paar praktischen Funktionen).
Die ausführbaren Dateien von Git für Windows werden mit letzteren erstellt und sind daher eigentlich nur Win32-Programme. Um ausführbare Dateien, für die die POSIX-Emulationsschicht erforderlich ist, von solchen zu unterscheiden, die dies nicht tun, werden letztere als MinGW (Minimal GNU für Windows) bezeichnet, während erstere als ausführbare MSys-Dateien bezeichnet werden .
Dieses Vertrauen in MSys brachte jedoch auch Herausforderungen mit sich:
- Einige unserer Änderungen an der MSys-Laufzeit, die zur besseren Unterstützung von Git für Windows erforderlich sind, wurden im Upstream nicht akzeptiert, sodass wir unsere eigene Gabel warten mussten.
- Außerdem wurde die MSys-Laufzeit nicht weiterentwickelt, um beispielsweise UTF-8 oder 64-Bit zu unterstützen, und abgesehen davon, dass bis viel später (als sie
mingw-get
eingeführt wurde) kein Paketverwaltungssystem vorhanden war, blieben viele vom MSys / MinGW-Projekt bereitgestellte Pakete hinter den jeweiligen zurück Quellcode-Versionen, insbesondere Bash und OpenSSL.
Für eine Weile versuchte das Git für Windows-Projekt, Abhilfe zu schaffen, indem es versuchte, neuere Versionen dieser Pakete zu erstellen. Die Situation wurde jedoch schnell unhaltbar, insbesondere bei Problemen wie dem Heartbleed-Fehler, der schnelle Maßnahmen erfordert, die nichts mit der Entwicklung von Git zu tun haben Windows weiter.
Glücklicherweise entstand in der Zwischenzeit das MSys2-Projekt ( https://msys2.github.io/ ) und wurde als Basis für Git für Windows 2.x ausgewählt.
Genau wie MSys ist MSys2 eine abgespeckte Version von Cygwin, wird jedoch aktiv mit dem Quellcode von Cygwin auf dem neuesten Stand gehalten .
Dabei unterstützt es Unicode bereits intern und bietet auch die 64-Bit-Unterstützung, nach der wir uns seit Beginn des Git for Windows-Projekts gesehnt haben.
MSys2 portierte auch das Pacman-Paketverwaltungssystem von Arch Linux und verwendet es häufig . Dies bringt den gleichen Komfort, an den Linux-Benutzer von yum
oder apt-get
gewöhnt sind und an den MacOSX-Benutzer von Homebrew oder MacPorts oder BSD-Benutzer vom Ports-System an MSys2 gewöhnt sind: Ein einfaches pacman -Syu
Update aller installierten Pakete auf die neuesten Versionen derzeit verfügbar.
MSys2 ist auch sehr aktiv und bietet in der Regel mehrmals pro Woche Paketaktualisierungen an.
Es waren noch zwei Monate erforderlich, um alles in einen Zustand zu bringen, in dem die Testsuite von Git erfolgreich war, viele weitere Monate, bis der erste offizielle Git für Windows 2.x veröffentlicht wurde, und einige Patches warten noch auf ihre Einreichung bei den jeweiligen Upstream-Projekten . Ohne MSys2 wäre die Modernisierung von Git für Windows einfach nicht möglich gewesen .
Dieses Commit bildet die Grundlage für die Unterstützung von MSys2-basierten Git-Builds.
In den Kommentaren wurde im Januar 2016 die Frage gestellt:
Wurden die Binärdateien, die nicht von der Emulationsebene abhängen, als MSYS2-Paket verfügbar gemacht, da Git für Windows bereits auf MSYS2 basiert?
Ray Donnelly antwortete damals:
Wir haben uns noch nicht vollständig zusammengeschlossen, nein. Wir arbeiten aber daran.
Aber ... madz weist darauf hin , dass diese Bemühungen Anfang 2017 nicht erfolgreich waren.
Sehen:
Das Problem ist, dass ich keine Änderungen vornehmen kann, die rechtzeitig zu einer neuen msys2-Laufzeit führen.
Kein großes Problem: Ich werde die Gabel von Git für Windows einfach unbegrenzt laufen lassen.
Das Wiki erwähnt daher jetzt (2018):
Git für Windows hat einige Patches für msys2-runtime erstellt, die nicht im Upstream gesendet wurden. (Dies war geplant, aber in Problem Nr. 284 wurde festgestellt, dass dies wahrscheinlich nicht der Fall sein würde.)
Dies bedeutet, dass Sie die für Git für Windows angepasste msys2-Laufzeit installieren müssen, um ein voll funktionsfähiges Git in MSYS2 zu haben.
Beachten Sie, dass das Git für Windows-Projekt seit dem Festschreiben von aeb582a9 (Git 2.22, Q2 2019) den Upgrade-Prozess auf eine MSYS2-Laufzeitversion auf Basis von Cygwin v3.x gestartet hat.
mingw
: Erlaube das Erstellen mit einer MSYS2-Laufzeit v3.x.
Kürzlich hat das Git für Windows-Projekt den Upgrade-Prozess auf eine MSYS2-Laufzeitversion gestartet, die auf Cygwin v3.x basiert.
Dies hat die bemerkenswerte Konsequenz, dass $(uname -r)
nicht mehr eine Version mit "2" gemeldet wird, sondern eine Version mit "3".
Das bricht unseren Build, da df5218b ( config.mak.uname
: support MSys2, 2016-01-13, Git v2.8.0-rc0) einfach nicht erwartet hat, dass die von gemeldete Version von uname -r
der zugrunde liegenden Cygwin-Version abhängt: Es wurde erwartet, dass die gemeldete Version mit der " 2 "in" MSYS2 ".
Kehren wir also diesen Testfall um, um auf etwas anderes als eine Version zu testen, die mit "1" beginnt (für MSys).
Das sollte uns für die Zukunft schützen, auch wenn Cygwin Versionen wie 314.272.65536 veröffentlicht.
Git 2.22 (Q2 2019) wird einen Test gegen ein Update der MSYS2 Runtime v3.x-Serie zukunftssicher machen.
Siehe Commit c871fbe (07. Mai 2019) von Johannes Schindelin ( dscho
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit b20b8fe , 19. Mai 2019)
t6500(mingw)
: Verwenden Sie die Windows-PID der Shell
In Git für Windows verwenden wir den MSYS2-Bash, der ein nicht standardmäßiges PID-Modell von der POSIX-Emulationsschicht von Cygwin erbt: Jeder MSYS2-Prozess verfügt über eine reguläre Windows-PID und zusätzlich über eine MSYS2-PID (die einem emulierten Schattenprozess entspricht Signalbehandlung im Unix-Stil).
Mit dem Upgrade auf die MSYS2-Laufzeit v3.x kann nicht mehr über diesen Schattenprozess zugegriffen werden OpenProcess()
, und daher dachte t6500 fälschlicherweise, dass der Prozess, auf den verwiesen wird gc.pid
(was gc
in diesem Kontext eigentlich kein realer Prozess ist, sondern die aktuelle Shell), nicht mehr vorhanden ist existiert.
Lassen Sie uns dies beheben, indem Sie sicherstellen, dass die Windows-PID
gc.pid
in dieses Testskript geschrieben git.exe
ist, damit Sie verstehen, dass dieser Prozess tatsächlich noch vorhanden ist.