Git 2.8 (mars 2016) inclut un commit très détaillé qui explique l'importance de msys2 pour le nouveau git-for-windows qui a remplacé msysgit début 2015 .
Voir commit df5218b (13 janvier 2016) par Johannes Schindelin ( dscho
) .
(Fusionné par Junio C Hamano - gitster
- dans commit 116a866 , 29 janvier 2016)
Pendant longtemps, Git pour Windows a pris du retard par rapport aux versions 2.x de Git parce que les développeurs de Git pour Windows voulaient que ce grand saut coïncide avec un saut bien nécessaire de MSys à MSys2.
Pour comprendre pourquoi c'est un si gros problème, il faut noter que de nombreuses parties de Git ne sont pas écrites en C portable, mais à la place, Git s'appuie sur un shell POSIX et Perl pour être disponible .
Pour prendre en charge les scripts, Git pour Windows doit fournir une couche d'émulation POSIX minimale avec Bash et Perl , et lorsque l'effort Git pour Windows a commencé en août 2007, ce développeur a décidé d'utiliser MSys, une version allégée de Cygwin .
Par conséquent, le nom original du projet était "msysGit" (ce qui, malheureusement, a causé beaucoup de confusion car peu d'utilisateurs de Windows connaissent MSys, et encore moins de soins).
Pour compiler le code C de Git pour Windows, MSys a également été utilisé: il contient deux versions du compilateur GNU C:
- celui qui relie implicitement à la couche d'émulation POSIX,
- et un autre qui cible l'API Win32 ordinaire (avec quelques fonctions pratiques ajoutées).
Les exécutables de Git pour Windows sont construits en utilisant ce dernier, et donc ce ne sont en réalité que des programmes Win32. Pour discerner les exécutables nécessitant la couche d'émulation POSIX de ceux qui ne le font pas, ces derniers sont appelés MinGW (Minimal GNU pour Windows) alors que les premiers sont appelés exécutables MSys .
Cette dépendance envers MSys a également posé des problèmes:
- certaines de nos modifications apportées au runtime MSys - nécessaires pour mieux supporter Git pour Windows - n'ont pas été acceptées en amont, nous avons donc dû maintenir notre propre fork.
- En outre, le runtime MSys n'a pas été développé davantage pour prendre en charge, par exemple, UTF-8 ou 64 bits, et mis à part l'absence d'un système de gestion des packages jusqu'à beaucoup plus tard (lors de
mingw-get
son introduction), de nombreux packages fournis par le projet MSys / MinGW sont en retard sur les les versions de code source, en particulier Bash et OpenSSL.
Pendant un certain temps, le projet Git pour Windows a tenté de remédier à la situation en essayant de construire de nouvelles versions de ces packages, mais la situation est rapidement devenue intenable, en particulier avec des problèmes comme le bogue Heartbleed nécessitant une action rapide qui n'a rien à voir avec le développement de Git pour Windows plus loin.
Heureusement, entre-temps, le projet MSys2 ( https://msys2.github.io/ ) a vu le jour et a été choisi pour être la base du Git pour Windows 2.x.
Tout comme MSys, MSys2 est une version allégée de Cygwin, mais elle est activement maintenue à jour avec le code source de Cygwin .
De ce fait, il prend déjà en charge Unicode en interne, et il offre également le support 64 bits auquel nous aspirions depuis le début du projet Git pour Windows.
MSys2 a également porté le système de gestion de paquets Pacman d'Arch Linux et l'utilise beaucoup . Cela apporte la même commodité à laquelle les utilisateurs Linux sont habitués à partir de yum
ou apt-get
, et à laquelle les utilisateurs MacOSX sont habitués de Homebrew ou MacPorts, ou des utilisateurs BSD du système Ports, à MSys2: un simple pacman -Syu
mettra à jour tous les packages installés vers les dernières versions actuellement disponible.
MSys2 est également très actif, fournissant généralement des mises à jour des packages plusieurs fois par semaine.
Il a fallu encore deux mois d'efforts pour tout amener à un état où la suite de tests de Git réussit, bien d'autres mois avant la sortie du premier Git officiel pour Windows 2.x, et quelques correctifs attendent toujours leur soumission aux projets en amont respectifs. . Pourtant, sans MSys2, la modernisation de Git pour Windows n'aurait tout simplement pas eu lieu .
Ce commit jette les bases de la prise en charge des builds Git basés sur MSys2.
Dans les commentaires , la question a été posée en janvier 2016:
Étant donné que Git pour Windows est déjà basé sur MSYS2, les binaires qui ne dépendent pas de la couche d'émulation ont-ils été rendus disponibles sous forme de package MSYS2?
Ray Donnelly a répondu à l'époque:
Nous n'avons pas encore complètement fusionné, non. Nous y travaillons cependant.
Mais ... madz souligne qu'au début de 2017, cet effort n'a pas abouti.
Voir:
Le problème est que je ne peux pas apporter de modifications qui résulteront en un nouveau runtime msys2 en temps opportun.
Pas un gros problème, cependant: je vais simplement garder le fork de Git pour Windows indéfiniment.
Le wiki mentionne donc maintenant (2018):
Git pour Windows a créé des correctifs pour msys2-runtime qui n'ont pas été envoyés en amont. (Cela avait été planifié, mais il a été déterminé dans le numéro 284 que cela ne se produirait probablement pas.)
Cela signifie que vous devez installer Git pour Windows personnalisé msys2-runtime pour avoir un git entièrement fonctionnel dans MSYS2.
Notez que, depuis la validation aeb582a9 (Git 2.22, Q2 2019), le projet Git pour Windows a démarré le processus de mise à niveau vers une version d'exécution MSYS2 basée sur Cygwin v3.x.
mingw
: autorise la construction avec un runtime MSYS2 v3.x
Récemment, le projet Git pour Windows a lancé le processus de mise à niveau vers une version d'exécution MSYS2 basée sur Cygwin v3.x.
Cela a pour conséquence très notable de $(uname -r)
ne plus signaler une version commençant par "2", mais une version avec "3".
Cela casse notre build, car df5218b ( config.mak.uname
: support MSys2, 2016-01-13, Git v2.8.0-rc0) ne s'attendait tout simplement pas à ce que la version rapportée par uname -r
dépende de la version sous-jacente de Cygwin: il s'attendait à ce que la version rapportée corresponde à la " 2 "dans" MSYS2 ".
Alors inversons ce cas de test pour tester autre chose qu'une version commençant par "1" (pour MSys).
Cela devrait nous protéger pour l'avenir, même si Cygwin finit par publier des versions comme 314.272.65536.
Git 2.22 (Q2 2019) assurera la pérennité d'un test par rapport à une mise à jour de la série v3.x d'exécution MSYS2.
Voir commit c871fbe (07 mai 2019) par Johannes Schindelin ( dscho
) .
(Fusionné par Junio C Hamano - gitster
- dans commit b20b8fe , 19 mai 2019)
t6500(mingw)
: utilisez le PID Windows du shell
Dans Git pour Windows, nous utilisons le MSYS2 Bash qui hérite d'un modèle PID non standard de la couche d'émulation POSIX de Cygwin: chaque processus MSYS2 a un PID Windows normal, et en plus il a un PID MSYS2 (qui correspond à un processus d'ombre qui émule Gestion des signaux de style Unix).
Avec la mise à niveau vers le runtime MSYS2 v3.x, ce processus de duplication miroir n'est pas accessible via OpenProcess()
, et donc t6500 pensait à tort que le processus référencé dans gc.pid
(qui n'est pas réellement un gc
processus réel dans ce contexte, mais le shell actuel) n'est plus existe.
Résolvons ce problème en nous assurant que le PID Windows est écrit dans
gc.pid
ce script de test afin qu'il git.exe
puisse comprendre que ce processus existe toujours.