Git 2.8 (marzec 2016) zawiera bardzo szczegółowe zatwierdzenie, które wyjaśnia znaczenie msys2 dla nowego git-for-windows, który zastąpił msysgit na początku 2015 roku .
Zobacz commit df5218b (13 stycznia 2016) autorstwa Johannesa Schindelina ( dscho
) .
(Scalone przez Junio C Hamano - gitster
- w zobowiązaniu 116a866 , 29 stycznia 2016 r.)
Przez długi czas Git dla Windows pozostawał w tyle za wydaniami Git 2.x, ponieważ programiści Git dla Windows chcieli pozwolić, aby ten duży skok zbiegł się z bardzo potrzebnym skokiem z MSys do MSys2.
Aby zrozumieć, dlaczego jest to tak poważny problem, należy zauważyć, że wiele części Gita nie jest napisanych w przenośnym C, ale zamiast tego Git polega na powłoce POSIX i dostępności Perla .
Aby obsługiwać skrypty, Git for Windows musi dostarczać minimalną warstwę emulacji POSIX z wrzuconymi Bash i Perl , a kiedy prace nad Git for Windows rozpoczęły się w sierpniu 2007 roku, ten programista zdecydował się na użycie MSys, okrojonej wersji Cygwin .
W związku z tym oryginalna nazwa projektu brzmiała „msysGit” (co niestety spowodowało wiele zamieszania, ponieważ niewielu użytkowników systemu Windows wie o MSys, a jeszcze mniej troszczy się o to).
Aby skompilować kod C Git dla Windows, użyto również MSys: obsługuje on dwie wersje kompilatora GNU C:
- taki, który łączy się niejawnie z warstwą emulacji POSIX,
- i inny, który jest przeznaczony dla zwykłego interfejsu API Win32 (z wprowadzonymi kilkoma wygodnymi funkcjami).
Pliki wykonywalne Git dla systemu Windows są budowane przy użyciu tego ostatniego, dlatego tak naprawdę są tylko programami Win32. Aby odróżnić pliki wykonywalne wymagające warstwy emulacji POSIX od tych, które jej nie wymagają, te drugie nazywane są MinGW (Minimal GNU dla Windows), podczas gdy te pierwsze nazywane są plikami wykonywalnymi MSys .
Jednak to uzależnienie od MSys stanowiło wyzwanie:
- niektóre z naszych zmian w środowisku wykonawczym MSys - niezbędne do lepszej obsługi Git dla Windows - nie zostały zaakceptowane przez użytkowników, więc musieliśmy utrzymywać własne rozwidlenie.
- Ponadto środowisko uruchomieniowe MSys nie było dalej rozwijane w celu obsługi np. UTF-8 lub 64-bitowego, a oprócz braku systemu zarządzania pakietami aż do znacznie później (kiedy
mingw-get
został wprowadzony), wiele pakietów dostarczonych przez projekt MSys / MinGW pozostaje w tyle za odpowiednim wersje kodu źródłowego, w szczególności Bash i OpenSSL.
Przez pewien czas projekt Git for Windows próbował zaradzić tej sytuacji, próbując zbudować nowsze wersje tych pakietów, ale sytuacja szybko stała się nie do utrzymania, szczególnie w przypadku problemów takich jak błąd Heartbleed wymagający szybkiej akcji, która nie ma nic wspólnego z tworzeniem Gita dla Okna dalej.
Na szczęście w międzyczasie pojawił się projekt MSys2 ( https://msys2.github.io/ ) i został wybrany jako podstawa Git dla Windows 2.x.
Podobnie jak MSys, MSys2 jest okrojoną wersją Cygwin, ale jest aktywnie aktualizowany z kodem źródłowym Cygwin .
W ten sposób obsługuje już wewnętrznie Unicode, a także oferuje obsługę 64-bitową, za którą tęskniliśmy od początku projektu Git dla Windows.
MSys2 również przeportował system zarządzania pakietami Pacman z Arch Linux i intensywnie go używa . Daje to tę samą wygodę, do której użytkownicy Linuksa są przyzwyczajeni z yum
lub apt-get
, i do której użytkownicy MacOSX są przyzwyczajeni z Homebrew lub MacPorts lub użytkowników BSD z systemu Ports do MSys2: prosty pacman -Syu
zaktualizuje wszystkie zainstalowane pakiety do najnowszych wersji obecnie dostępne.
MSys2 jest również bardzo aktywny, zazwyczaj dostarcza aktualizacje pakietów kilka razy w tygodniu.
Nadal wymagało to dwumiesięcznego wysiłku, aby doprowadzić wszystko do stanu, w którym przechodzi pakiet testowy Gita, wiele miesięcy, zanim został wydany pierwszy oficjalny Git dla Windows 2.x, a kilka poprawek wciąż czeka na ich przesłanie do odpowiednich projektów. . Jednak bez MSys2 modernizacja Git dla Windows po prostu nie nastąpiłaby .
To zobowiązanie kładzie podwaliny pod obsługę kompilacji Git opartych na MSys2.
W komentarzach pytanie padło w styczniu 2016 roku:
Ponieważ Git dla Windows jest już oparty na MSYS2, czy pliki binarne, które nie zależą od warstwy emulacji, zostały udostępnione jako pakiet MSYS2?
Ray Donnelly odpowiedział wtedy:
Nie połączyliśmy się jeszcze w pełni, nie. Jednak pracujemy nad tym.
Ale ... madz zwraca uwagę, że na początku 2017 roku ten wysiłek się nie udał .
Widzieć:
Problem polega na tym, że nie mogę wnieść zmian, które spowodują nowe środowisko uruchomieniowe msys2 w odpowiednim czasie.
Nie jest to jednak duży problem: po prostu utrzymam rozwidlenie Git dla Windows działające w nieskończoność.
Dlatego wiki wspomina teraz (2018):
Git dla Windows stworzył kilka łatek dla msys2-runtime, które nie zostały wysłane do klienta. (Było to zaplanowane, ale w numerze 284 ustalono, że prawdopodobnie tak się nie stanie).
Oznacza to, że musisz zainstalować Git for Windows dostosowany do środowiska uruchomieniowego msys2-runtime, aby mieć w pełni działającego gita wewnątrz MSYS2.
Zwróć uwagę, że od wydania aeb582a9 (Git 2.22, Q2 2019) projekt Git for Windows rozpoczął proces aktualizacji do wersji środowiska uruchomieniowego MSYS2 opartej na Cygwin v3.x.
mingw
: zezwól na budowanie za pomocą środowiska uruchomieniowego MSYS2 v3.x
Niedawno projekt Git for Windows rozpoczął proces aktualizacji do wersji uruchomieniowej MSYS2 opartej na Cygwin v3.x.
Ma to bardzo godną uwagi konsekwencję, że $(uname -r)
nie zgłasza już wersji zaczynającej się od „2”, ale wersja z „3”.
To psuje naszą kompilację, ponieważ df5218b ( config.mak.uname
: wsparcie MSys2, 2016-01-13, Git v2.8.0-rc0) po prostu nie spodziewał się, że wersja zgłoszona przez uname -r
będzie zależała od podstawowej wersji Cygwin: oczekiwał, że zgłoszona wersja będzie pasować do " 2 "w" MSYS2 ".
Odwróćmy więc ten przypadek testowy, aby przetestować coś innego niż wersja zaczynająca się od „1” (dla MSys).
To powinno nas zabezpieczyć na przyszłość, nawet jeśli Cygwin ostatecznie wyda wersje takie jak 314.272.65536.
Git 2.22 (drugi kwartał 2019 r.) Zapewni przyszłe testy pod kątem aktualizacji do serii MSYS2 runtime v3.x.
Zobacz commit c871fbe (7 maja 2019) autorstwa Johannesa Schindelina ( dscho
) .
(Scalone przez Junio C Hamano - gitster
- w zatwierdzeniu b20b8fe , 19 maja 2019 r.)
t6500(mingw)
: użyj PID Windows powłoki
W Git dla Windows używamy MSYS2 Bash, który dziedziczy niestandardowy model PID z warstwy emulującej POSIX Cygwin: każdy proces MSYS2 ma zwykły PID Windows, a ponadto ma MSYS2 PID (który odpowiada procesowi w tle, który emuluje Obsługa sygnałów w stylu uniksowym).
Po uaktualnieniu do środowiska uruchomieniowego MSYS2 v3.x, ten proces w tle nie jest OpenProcess()
już dostępny, dlatego t6500 pomyślał niepoprawnie, że proces, do którego się odwołuje gc.pid
(który w rzeczywistości nie jest rzeczywistym gc
procesem w tym kontekście, ale bieżącą powłoką) już nie istnieje.
Naprawmy to, upewniając się, że PID systemu Windows jest zapisany
gc.pid
w tym skrypcie testowym, aby git.exe
był w stanie zrozumieć, że ten proces rzeczywiście nadal istnieje.