Git 2.8 (2016 Mart) çok detaylı bir yeni için msys2 önemini açıklar taahhüt içeren git-için-pencerelerde 2015 yılının başlarında msysgit yerini .
Bakınız Johannes Schindelin ( ) tarafından df5218b (13 Ocak 2016 ) . (Göre Birleştirilmiş - Junio Cı Hamano - içinde 116a866 tamamlama 2016, 29 Ara)dscho
gitster
Windows için Git uzun süredir Git'in 2.x sürümlerinin gerisinde kalmıştır, çünkü Windows için Git geliştiricileri bu büyük sıçramanın MSys'den MSys2'ye iyi bir sıçrama ile çakışmasına izin vermek istemiştir.
Bunun neden bu kadar büyük bir sorun olduğunu anlamak için Git'in birçok bölümünün taşınabilir C ile yazılmadığı, bunun yerine Git'in kullanılabilir olması için bir POSIX kabuğuna ve Perl'e bağlı olduğu unutulmamalıdır .
Komut dosyalarını desteklemek için Git for Windows, Bash ve Perl atılmış en az POSIX öykünme katmanı göndermelidir ve Windows için Git çalışması Ağustos 2007'de başladığında, bu geliştirici Cygwin'in soyulmuş bir sürümü olan MSys kullanmaya karar verdi .
Sonuç olarak, projenin orijinal adı "msysGit" idi (bu, ne yazık ki, çok fazla karışıklığa neden oldu, çünkü birkaç Windows kullanıcısı MSys hakkında bilgi sahibi ve daha az bakım).
Windows için Git'in C kodunu derlemek için MSys de kullanıldı: GNU C Derleyicisinin iki sürümünü spor yapıyor:
- POSIX öykünme katmanına örtülü olarak bağlanan bir katman,
- ve düz Win32 API'yi hedefleyen başka bir tane (birkaç kullanışlı işlevle atılmış).
Windows için Git'in yürütülebilir dosyaları, ikincisi kullanılarak oluşturulmuştur ve bu nedenle gerçekten sadece Win32 programlarıdır. POSIX öykünme katmanı gerektiren yürütülebilir dosyaları, olmayanlardan ayırt etmek için, öncekilere MSys yürütülebilirleri denendiğinde, ikincisine MinGW (Windows için Minimal GNU) denir .
Bununla birlikte, MSys'e olan bu güven de zorluklara neden oldu:
- MSys çalışma zamanındaki bazı değişiklikler - Windows için Git'i daha iyi desteklemek için gerekli - yukarı yönde kabul edilmedi, bu yüzden kendi çatalımızı korumak zorundaydık.
- Ayrıca, MSys çalışma zamanı, örneğin UTF-8 veya 64 bit'i desteklemek için daha da geliştirilmemiştir ve çok daha sonraya (
mingw-get
piyasaya sürüldüğünde) kadar bir paket yönetim sisteminden yoksun olmak dışında , MSys / MinGW projesi tarafından sağlanan birçok paket, ilgili paketin gerisinde kalmıştır. kaynak kodu sürümleri, özellikle Bash ve OpenSSL.
Bir süre için Windows için Git projesi, bu paketlerin daha yeni sürümlerini oluşturmaya çalışarak durumu düzeltmeye çalıştı, ancak durum, özellikle Git için geliştirme yapmakla ilgisi olmayan hızlı eylem gerektiren Heartbleed hatası gibi sorunlarla hızlı bir şekilde savunulamaz hale geldi. Windows daha da ileri.
Ne mutlu ki, bu arada MSys2 projesi ( https://msys2.github.io/ ) ortaya çıktı ve Windows 2.x için Git'in temeli olarak seçildi.
Tıpkı MSys gibi, MSys2 de Cygwin'in soyulmuş bir versiyonudur, ancak Cygwin'in kaynak koduyla aktif olarak güncel tutulur .
Böylece, zaten Unicode'u dahili olarak destekliyor ve ayrıca Git için Windows projesinin başlangıcından beri özlem duyduğumuz 64 bit desteği de sunuyor.
MSys2 ayrıca Arch Linux'tan Pacman paket yönetim sistemini taşıdı ve yoğun bir şekilde kullanıyor . Bu, Linux kullanıcılarının alışkın olduğu yum
ya apt-get
da MacOSX kullanıcılarının Homebrew veya MacPorts veya Ports sisteminden BSD kullanıcılarından alışkın oldukları rahatlığı MSys2'ye getirir: basit bir pacman -Syu
şekilde kurulu tüm paketler en yeni sürümlere güncellenir Şu anda mevcut.
MSys2 de çok etkindir ve genellikle haftada birkaç kez paket güncellemeleri sağlar.
Her şeyi Git'in test paketinin geçtiği bir duruma getirmek için iki aylık bir çaba gerekiyordu, Windows 2.x için ilk resmi Git serbest bırakılıncaya kadar aylar geçti ve hala birkaç yukarı yama ilgili yukarı akış projelerine sunulmasını bekliyor. . Yine de MSys2 olmasaydı, Windows için Git'in modernizasyonu olmazdı .
Bu taahhüt, MSys2 tabanlı Git yapılarını desteklemeye zemin hazırlar.
Yorumlarda , soru Ocak 2016'da soruldu:
Windows için Git zaten MSYS2'yi temel aldığından, öykünme katmanına bağlı olmayan ikili dosyalar MSYS2 paketi olarak kullanılabilir mi?
Ray Donnelly o zaman cevapladı:
Henüz tam olarak birleşmedik, hayır. Yine de üzerinde çalışıyoruz.
Ama ... madz Puan erken 2017 sırasında, o çaba başarmak vermedi.
Görmek:
Sorun şu ki, yeni bir msys2-runtime ile sonuçlanacak değişikliklere zamanında katkıda bulunamam.
Ancak büyük bir sorun değil: Git için Windows çatalının süresiz olarak çalışmasını sağlayacağım.
Wiki bundan böyle bahsediyor (2018):
Windows için Git, yukarı doğru gönderilmemiş msys2-runtime için bazı yamalar oluşturdu. (Bu planlanmıştı, ancak # 284
numaralı makalede büyük olasılıkla olmayacağı belirlendi.) Bu, MSYS2 içinde tamamen çalışan bir git için Windows için Git özelleştirilmiş msys2-runtime'ı yüklemeniz gerektiği anlamına gelir.
Aeb582a9 (Git 2.22, Q2 2019) komutundan bu yana , Windows için Git projesinin Cygwin v3.x tabanlı bir MSYS2 çalışma zamanı sürümüne yükseltme işlemini başlattığını unutmayın.
mingw
: MSYS2 çalışma zamanı v3.x ile oluşturmaya izin ver
Son zamanlarda Windows için Git projesi, Cygwin v3.x tabanlı bir MSYS2 çalışma zamanı sürümüne yükseltme işlemini başlattı.
Bunun $(uname -r)
artık "2" ile başlayan bir sürümü değil, "3" ile bir sürümü bildirmesinin çok önemli bir sonucu vardır .
Df5218b ( config.mak.uname
: destek MSys2, 2016-01-13, Git v2.8.0-rc0) olarak derlememizi bozan, raporlanan sürümün uname -r
temeldeki Cygwin sürümüne bağlı olmasını beklemiyordu: bildirilen sürümün " 2 "içinde" MSYS2 ".
Yani için teste bu test durumda invert yapalım başka bir şey (msys için) "1" ile başlayan bir sürümüne göre.
Cygwin 314.272.65536 gibi sürümleri yayınlasa bile bu bizi gelecek için korumalı.
Git 2.22 (2.Çeyrek 2019), MSYS2 çalışma zamanı v3.x serisine yönelik bir güncellemeye karşı gelecekteki bir testi doğrulayacaktır.
Bakınız Johannes Schindelin ( ) tarafından c871fbe (07 Mayıs 2019 ) . (Göre Birleştirilmiş Junio Cı Hamano - - içinde b20b8fe tamamlama 2019 19 Mayıs)dscho
gitster
t6500(mingw)
: kabuğun Windows PID'sini kullanın
Windows için Git'te, Cygwin'in POSIX öykünme katmanından standart olmayan bir PID modelini devralan MSYS2 Bash kullanıyoruz: her MSYS2 işleminin düzenli bir Windows PID'si var ve buna ek olarak bir MSYS2 PID'si (taklit eden bir gölge işlemine karşılık gelir) Unix tarzı sinyal işleme).
MSYS2 çalışma zamanı v3.x'e yükseltme ile, bu gölge işleme OpenProcess()
artık erişilemiyor ve bu nedenle t6500 yanlış bir şekilde başvurulan işlemin (bu bağlamda gc.pid
gerçek bir gc
işlem değil, geçerli kabuk değil) artık yanlış olduğunu düşündü bulunmaktadır.
Windows PID'nin gc.pid
bu test komut dosyasına yazıldığından emin olarak düzeltelim,
böylece git.exe
bu sürecin gerçekten var olduğunu anlayabilelim.