Git 2.8 (березень 2016 р.) Включає дуже детальну комісію, яка пояснює важливість msys2 для нового git-for-windows, який замінив msysgit на початку 2015 року .
Див. Комісію df5218b (13 січня 2016) Йоганнеса Шинделіна ( dscho
) .
(Об’єднав Хуніо С Хамано - gitster
- у комітеті 116a866 , 29 січня 2016 р.)
Тривалий час Git для Windows відставав від версії 2.x від Git, оскільки розробники Git для Windows хотіли, щоб цей великий стрибок збігався з необхідним стрибком від MSys до MSys2.
Щоб зрозуміти, чому це така велика проблема, потрібно зазначити, що багато частин Git написані не на портативному C, а натомість Git покладається на оболонку POSIX, а Perl буде доступний .
Для підтримки сценаріїв, Git для Windows повинен поставити мінімальний емуляційний шар POSIX з викинутими Bash та Perl , і коли зусилля Git для Windows розпочалися в серпні 2007 року, цей розробник вирішив використовувати MSys, зняту версію Cygwin .
Отже, початкова назва проекту була "msysGit" (що, на жаль, викликало багато плутанини, оскільки мало хто з користувачів Windows знає про MSys, а тим більше турбот).
Для компіляції коду C Git для Windows також використовувався MSys: він містить дві версії компілятора GNU C:
- той, який неявно посилається на емуляційний шар POSIX,
- та інший, який націлений на звичайний API Win32 (з кількома зручними функціями).
Git для виконуваних файлів Windows будується за допомогою останнього, тому вони справді просто програми Win32. Для розрізнення виконуваних файлів, які потребують емуляційного рівня POSIX, від тих, що їх немає, останні називаються MinGW (Мінімальний GNU для Windows), коли перші називаються виконуваними файлами MSys .
Однак, покладаючись на MSys, також виникли проблеми:
- деякі наші зміни в режимі виконання MSys - необхідні для того, щоб краще підтримати Git для Windows - не були прийняті вгору за течією, тому нам довелося підтримувати власну вилку.
- Крім того, час роботи MSys не був розроблений для підтримки, наприклад, UTF-8 або 64-розрядної версії, і крім відсутності системи управління пакунками значно пізніше (коли
mingw-get
було введено), багато пакетів, наданих проектом MSys / MinGW, відстають від відповідних версії вихідного коду, зокрема Bash та OpenSSL.
Деякий час проект Git для Windows намагався виправити ситуацію, намагаючись створити новіші версії цих пакетів, але ситуація швидко стала неможливою, особливо з такими проблемами, як помилка Heartbleed, що вимагає швидких дій, що не має нічого спільного з розробкою Git для Windows далі.
На щастя, тим часом з'явився проект 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 з системи Ports, до MSys2: проста pacman -Syu
оновить усі встановлені пакети до новіших версій На даний момент доступні.
MSys2 також дуже активний, зазвичай забезпечує оновлення пакунків кілька разів на тиждень.
Ще потрібно двомісячні зусилля, щоб довести все до стану, коли проходить тестовий набір Git, ще багато місяців до виходу першого офіційного Git для Windows 2.x, і ще кілька патчів чекають їх подання у відповідні проекти за течією . Однак без MSys2 модернізація Git для Windows просто не відбулася б .
Це зобов'язання покладає основні роботи щодо підтримки побудови на базі MSys2.
У коментарях питання було задано у січні 2016 року:
Оскільки Git для Windows вже базується на MSYS2, чи двійкові файли, які не залежать від рівня емуляції, стали доступними як пакет MSYS2?
Рей Доннеллі в той час відповів:
Ми ще не повністю злилися, ні. Ми над цим працюємо.
Але ... madz вказує, що на початку 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 часу виконання v3.x
Нещодавно проект Git для Windows розпочав процес оновлення до версії MSYS2, виконаної на базі Cygwin v3.x.
Це має дуже помітний наслідок, що $(uname -r)
вже не повідомляється про версію, що починається з "2", а версія з "3".
Це порушує нашу збірку, оскільки df5218b ( config.mak.uname
: підтримка 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 для версії v3.x.
Див. Комісію c871fbe (07 травня 2019 р.) Йоганнеса Шинделіна ( dscho
) .
(Об’єднав Хуніо С Хамано - gitster
- в комітеті b20b8fe , 19 травня 2019 р.)
t6500(mingw)
: використовувати Windows PID оболонки
У Git для Windows ми використовуємо MSYS2 Bash, який успадковує нестандартну модель PID від рівня емуляції POSG Cygwin: кожен процес MSYS2 має звичайний PID для Windows, а крім того, він має MSYS2 PID (що відповідає тіньовому процесу, який емулює Обробка сигналу в стилі Unix).
З оновленням до MSYS2 виконуваної версії v3.x, до цього тіньового процесу неможливо отримати доступ OpenProcess()
більше, і тому t6500 неправильно вважав, що процес, на який посилається gc.pid
(який насправді не є реальним gc
процесом у цьому контексті, але поточною оболонкою), вже не є існує.
Давайте виправимо це, переконавшись, що gc.pid
в цьому тестовому сценарії записано PID Windows,
щоб git.exe
він міг зрозуміти, що цей процес все ще існує.