Git 2.8 (март 2016 года) включает в себя очень подробный коммит, который объясняет важность msys2 для нового git-for-windows, который заменил msysgit в начале 2015 года .
Смотрите коммит df5218b (13 января 2016 г.) Йоханнеса Шинделина ( dscho
) .
(Слиты Junio C Hamano - gitster
- в фиксации 116a866 , 29 янв 2016 г.)
Долгое время Git для Windows отставал от выпусков Git 2.x, потому что разработчики Git для Windows хотели, чтобы этот большой скачок совпал с столь необходимым переходом от MSys к MSys2.
Чтобы понять, почему это такая большая проблема, необходимо отметить, что многие части Git написаны не на переносимом C, а вместо этого Git полагается на оболочку POSIX и Perl, которые будут доступны .
Для поддержки сценариев Git для Windows должен поставлять минимальный слой эмуляции POSIX с добавлением Bash и Perl , а когда в августе 2007 года началась работа над Git для Windows, этот разработчик решил использовать MSys, урезанную версию Cygwin .
Следовательно, первоначальное название проекта было «msysGit» (что, к сожалению, вызвало много путаницы, потому что мало пользователей Windows знают о MSys, и даже меньше заботятся).
Для компиляции кода C для Git для Windows также использовался MSys: он поддерживает две версии компилятора GNU C:
- тот, который неявно связан с уровнем эмуляции POSIX,
- и еще один, предназначенный для простого Win32 API (с несколькими добавленными вспомогательными функциями).
Исполняемые файлы Git для Windows создаются с использованием последних, и поэтому они на самом деле просто программы Win32. Чтобы отличить исполняемые файлы, требующие уровня эмуляции POSIX, от тех, которые этого не делают, последние называются MinGW (Minimal GNU для Windows), а первые называются исполняемыми файлами MSys .
Эта зависимость от MSys также вызывала проблемы:
- некоторые из наших изменений в среде выполнения MSys, необходимые для лучшей поддержки Git для Windows, не были приняты в апстриме, поэтому нам пришлось поддерживать собственный форк.
- Кроме того, среда выполнения MSys не получила дальнейшего развития для поддержки, например, UTF-8 или 64-разрядных, и, за исключением отсутствия системы управления пакетами до гораздо более позднего времени (когда она
mingw-get
была представлена), многие пакеты, предоставляемые проектом MSys / MinGW, отстают от соответствующих версии исходного кода, в частности Bash и OpenSSL.
Некоторое время проект Git для Windows пытался исправить ситуацию, пытаясь создать более новые версии этих пакетов, но ситуация быстро стала несостоятельной, особенно с такими проблемами, как ошибка Heartbleed, требующая быстрых действий, которые не имеют ничего общего с разработкой Git для Окна дальше.
К счастью, тем временем появился проект MSys2 ( https://msys2.github.io/ ), который был выбран в качестве основы для Git для Windows 2.x.
Как и MSys, MSys2 является урезанной версией Cygwin, но она активно обновляется с исходным кодом Cygwin .
Таким образом, он уже поддерживает внутреннюю Unicode, а также предлагает 64-битную поддержку, к которой мы стремились с начала проекта Git для Windows.
MSys2 также перенес систему управления пакетами Pacman из Arch Linux и активно использует ее . Это приносит то же удобство, к которому привыкли пользователи Linux из yum
или или apt-get
, и к которому привыкли пользователи MacOSX из Homebrew или MacPorts или пользователей BSD из системы портов, в MSys2: простое pacman -Syu
обновит все установленные пакеты до самых последних версий доступен на данный момент.
MSys2 также очень активен, обычно предоставляет обновления пакетов несколько раз в неделю.
Потребовалось еще два месяца, чтобы привести все в состояние, в котором тестовый набор Git проходит, еще много месяцев, пока не был выпущен первый официальный Git для Windows 2.x, и пара патчей все еще ожидает их отправки в соответствующие апстрим-проекты. , Однако без MSys2 модернизация Git для Windows просто не состоялась бы .
Этот коммит закладывает основу для поддержки сборок Git на основе MSys2.
В комментариях вопрос был задан в январе 2016 года:
Поскольку Git для Windows уже основан на MSYS2, были ли двоичные файлы, не зависящие от уровня эмуляции, доступны в виде пакета MSYS2?
Рэй Доннелли ответил тогда:
Мы еще не полностью слились, нет. Мы работаем над этим, хотя.
Но ... Мадз отмечает, что в начале 2017 года эти усилия не увенчались успехом .
Видеть:
Проблема в том, что я не могу своевременно вносить изменения, которые приведут к новой среде msys2.
Не большая проблема, однако: я просто буду держать форк Git для Windows на неопределенный срок.
Поэтому вики упоминает сейчас (2018):
Git для Windows создал несколько исправлений для msys2-runtime, которые не были отправлены в апстрим. (Это было запланировано, но в выпуске № 284 было определено, что этого, скорее всего, не произойдет.)
Это означает, что вам нужно установить Git для Windows, настроенную среду выполнения msys2, чтобы иметь полностью рабочий git внутри MSYS2.
Обратите внимание, что после фиксации aeb582a9 (Git 2.22, Q2 2019) проект Git для Windows запустил процесс обновления до версии MSYS2, основанной на Cygwin v3.x.
mingw
: разрешить сборку с MSYS2 runtime v3.x
Недавно проект Git для Windows начал процесс обновления до версии MSYS2, основанной на Cygwin v3.x.
Это имеет очень заметное следствие, что $(uname -r)
больше не сообщает о версии, начинающейся с «2», а о версии с «3».
Это нарушает нашу сборку, так как df5218b ( config.mak.uname
: support MSys2, 2016-01-13, Git v2.8.0-rc0) просто не ожидал, что версия, о которой сообщают, uname -r
будет зависеть от базовой версии Cygwin: она ожидала, что заявленная версия будет соответствовать " 2 "в" MSYS2 ".
Итак, давайте обратим этот контрольный пример для проверки чего-либо еще, кроме версии, начинающейся с «1» (для MSys).
Это должно защитить нас на будущее, даже если Cygwin в конечном итоге выпустит такие версии, как 314.272.65536.
Git 2.22 (Q2 2019) подготовит тест на будущее к обновлению серии MSYS2 runtime v3.x.
См. Коммит c871fbe (07 мая 2019 г.) Йоханнеса Шинделина ( dscho
) .
(Слиты Junio C Hamano - gitster
- в фиксации b20b8fe , 19 мая 2019)
t6500(mingw)
: используйте Windows PID оболочки
В Git для Windows мы используем MSYS2 Bash, который наследует нестандартную модель PID от уровня эмуляции POSIX Cygwin: каждый процесс MSYS2 имеет обычный PID Windows, и, кроме того, он имеет PID MSYS2 (который соответствует теневому процессу, который эмулирует Обработка сигналов в стиле Unix).
При обновлении до среды выполнения MSYS2 v3.x к этому теневому процессу больше нельзя получить доступ OpenProcess()
, и поэтому t6500 неправильно подумал, что процесс, на который ссылаются gc.pid
(который на самом деле не является реальным gc
процессом в этом контексте, но текущей оболочкой), больше не существуют.
Давайте исправим это, убедившись, что PID Windows записан
gc.pid
в этом тестовом сценарии, чтобы git.exe
можно было понять, что этот процесс действительно все еще существует.