Git 2.8 (marzo 2016) include un commit molto dettagliato che spiega l'importanza di msys2 per il nuovo git-for-windows che ha sostituito msysgit all'inizio del 2015 .
Vedi commit df5218b (13 gennaio 2016) di Johannes Schindelin ( dscho
) .
(Unito da Junio C Hamano - gitster
- in commit 116a866 , 29 gennaio 2016)
Per molto tempo, Git per Windows è rimasto indietro rispetto alle versioni 2.x di Git perché gli sviluppatori di Git per Windows volevano che quel grande salto coincidesse con un necessario salto da MSys a MSys2.
Per capire perché questo è un grosso problema, bisogna notare che molte parti di Git non sono scritte in C portatile, ma Git si basa su una shell POSIX e Perl per essere disponibile .
Per supportare gli script, Git per Windows deve distribuire un livello minimo di emulazione POSIX con Bash e Perl inseriti , e quando lo sforzo di Git per Windows è iniziato nell'agosto 2007, questo sviluppatore ha deciso di utilizzare MSys, una versione ridotta di Cygwin .
Di conseguenza, il nome originale del progetto era "msysGit" (che, purtroppo, ha causato molta confusione perché pochi utenti di Windows conoscono MSys e anche meno cura).
Per compilare il codice C di Git per Windows, è stato utilizzato anche MSys: sfoggia due versioni del compilatore C GNU:
- uno che si collega implicitamente al livello di emulazione POSIX,
- e un altro che si rivolge alla semplice API Win32 (con alcune funzioni di convenienza inserite).
Gli eseguibili di Git per Windows sono creati usando quest'ultimo, e quindi sono davvero solo programmi Win32. Per distinguere gli eseguibili che richiedono il livello di emulazione POSIX da quelli che non lo fanno, questi ultimi sono chiamati MinGW (Minimal GNU per Windows) quando i primi sono chiamati eseguibili MSys .
Anche questa dipendenza da MSys ha comportato delle difficoltà:
- alcune delle nostre modifiche al runtime di MSys - necessarie per supportare meglio Git per Windows - non sono state accettate a monte, quindi abbiamo dovuto mantenere il nostro fork.
- Inoltre, il runtime di MSys non è stato ulteriormente sviluppato per supportare, ad esempio, UTF-8 o 64-bit, e oltre alla mancanza di un sistema di gestione dei pacchetti fino a molto tempo dopo (quando è
mingw-get
stato introdotto), molti pacchetti forniti dal progetto MSys / MinGW sono in ritardo rispetto ai rispettivi versioni del codice sorgente, in particolare Bash e OpenSSL.
Per un po ', il progetto Git per Windows ha cercato di porre rimedio alla situazione cercando di creare versioni più recenti di quei pacchetti, ma la situazione è diventata rapidamente insostenibile, soprattutto con problemi come il bug Heartbleed che richiedono un'azione rapida che non ha nulla a che fare con lo sviluppo di Git per Windows ulteriormente.
Fortunatamente, nel frattempo è emerso il progetto MSys2 ( https://msys2.github.io/ ) ed è stato scelto per essere la base di Git per Windows 2.x.
Proprio come MSys, MSys2 è una versione ridotta di Cygwin, ma è attivamente aggiornata con il codice sorgente di Cygwin .
Pertanto, supporta già Unicode internamente e offre anche il supporto a 64 bit che desideravamo sin dall'inizio del progetto Git per Windows.
MSys2 ha anche portato il sistema di gestione dei pacchetti Pacman da Arch Linux e lo usa pesantemente . Questo porta la stessa comodità a cui gli utenti di Linux sono usati per da yum
o apt-get
, ed a cui gli utenti MacOSX sono usati per da Homebrew o MacPorts, o gli utenti BSD dal sistema delle porte, ad MSys2: una semplice pacman -Syu
aggiornerà tutti i pacchetti installati per le versioni più recenti attualmente disponibile.
MSys2 è anche molto attivo, in genere fornisce aggiornamenti dei pacchetti più volte alla settimana.
Richiedeva ancora uno sforzo di due mesi per portare tutto a uno stato in cui la suite di test di Git passava, molti altri mesi fino al rilascio del primo Git ufficiale per Windows 2.xe un paio di patch attendono ancora la loro presentazione ai rispettivi progetti a monte . Tuttavia, senza MSys2, la modernizzazione di Git per Windows non sarebbe semplicemente avvenuta .
Questo impegno pone le basi per supportare build Git basate su MSys2.
Nei commenti , la domanda è stata posta a gennaio 2016:
Poiché Git per Windows è già basato su MSYS2, i binari che non dipendono dal livello di emulazione sono stati resi disponibili come pacchetto MSYS2?
Ray Donnelly rispose allora:
Non ci siamo ancora completamente uniti, no. Ci stiamo lavorando però.
Ma ... Madz sottolinea che all'inizio del 2017, tale sforzo non è andato a buon fine.
Vedere:
Il problema è che non posso apportare modifiche che si tradurranno in un nuovo runtime msys2 in modo tempestivo.
Non è un grosso problema, comunque: terrò il fork di Git per Windows in esecuzione a tempo indeterminato.
Il wiki quindi menziona ora (2018):
Git per Windows ha creato alcune patch per runtime msys2 che non sono state inviate a monte. (Questo era stato pianificato, ma era stato determinato nel numero 284 che probabilmente non sarebbe successo.)
Ciò significa che devi installare Git per Windows msys2-runtime personalizzato per avere un git completamente funzionante all'interno di MSYS2.
Si noti che, dal momento del commit aeb582a9 (Git 2.22, Q2 2019), il progetto Git per Windows ha avviato il processo di aggiornamento a una versione runtime MSYS2 basata su Cygwin v3.x.
mingw
: consente la creazione con un runtime MSYS2 v3.x
Recentemente il progetto Git per Windows ha avviato il processo di aggiornamento a una versione runtime MSYS2 basata su Cygwin v3.x.
Ciò ha la notevole conseguenza che $(uname -r)
non riporta più una versione che inizia con "2", ma una versione con "3".
Ciò rompe la nostra build, poiché df5218b ( config.mak.uname
: supporto MSys2, 13-01-2016, Git v2.8.0-rc0) semplicemente non si aspettava che la versione segnalata uname -r
dipendesse dalla versione Cygwin sottostante: si aspettava che la versione segnalata corrispondesse alla " 2 "in" MSYS2 ".
Quindi invertiamo quel caso di test per provare qualcos'altro che una versione che inizia con "1" (per MSys).
Ciò dovrebbe salvaguardarci per il futuro, anche se Cygwin finirà per rilasciare versioni come 314.272.65536.
Git 2.22 (Q2 2019) sarà un test a prova di futuro contro un aggiornamento alla serie v3.x di runtime MSYS2.
Vedi commit c871fbe (07 maggio 2019) di Johannes Schindelin ( dscho
) .
(Unito da Junio C Hamano - gitster
- in commit b20b8fe , 19 maggio 2019)
t6500(mingw)
: usa il PID di Windows della shell
In Git per Windows, utilizziamo MSYS2 Bash che eredita un modello PID non standard dal livello di emulazione POSIX di Cygwin: ogni processo MSYS2 ha un PID Windows regolare e inoltre ha un PID MSYS2 (che corrisponde a un processo ombra che emula Gestione del segnale in stile Unix).
Con l'aggiornamento a MSYS2 runtime v3.x, non è più possibile accedere a questo processo shadow tramite OpenProcess()
, e quindi t6500 ha ritenuto erroneamente che il processo a gc.pid
cui si fa riferimento (che in realtà non è un gc
processo reale in questo contesto, ma la shell corrente) non è più esiste.
Risolviamolo assicurandoci che il PID di Windows sia scritto in
gc.pid
questo script di test in modo che git.exe
sia in grado di capire che quel processo esiste davvero.