Msys, msys2 ve msysgit birbirleriyle nasıl ilişkilidir?


162

Etrafta arama yaptım, ancak MSYS'nin bu 3 sürümünde neler olup bittiğine dair ayrıntılı bir açıklama bulamıyorum. (Ne arayacağımı bilmiyorum tamamen mümkündür.) MSYS'nin MinGW kullanarak gelişimi desteklemek için minimal bir Linux araçları limanı olduğunu anlıyorum, ancak üçü veya onları geliştiren / koruyan ekipler.

Ele alınması gereken hususlar:

  • Hangileri aktif olarak geliştiriliyor? (Özellikle, MSYS ölü ve MSYS2 aktif midir?)
  • Onları koruyan gruplar arasındaki ilişki nedir? (Özellikle, MSYS ekibi MSYS2'yi yarattı mı?)
  • Msysgit sadece diğerlerinden birini mi kullanıyor yoksa kendi MSYS şubelerine mi sahip?
  • Bunlardan herhangi biri birbiriyle uyumlu mu?
  • Bunlardan herhangi biri için Windows'un belirli sürümleriyle uyumluluk sorunları var mı?
  • Biri diğerine göre önemli özellikler sunuyor mu?

8
@JamesJohnston Bu soruyu yazmadan önce, MSYS ve MinGW'nin Cygwin'e rakip olarak yaratıldığı (ve benim) anlayışımdı çünkü Cygwin (en azından daha önce; şu anki durumundan emin değilim) herhangi bir yeni kodu geçmeye zorladı Windows API'larını doğrudan çağırmak yerine oldukça performanssız bir uyumluluk katmanı. Bu nedenle, MSYS ve akrabalarını her zaman Cygwin'den daha hafif bir ağırlık sistemi olarak gördüm, bu yüzden Cygwin'in mevcut durumu ile ilgilenmedim. Eğer ilgileniyorsanız, bu iyi bir takip sorusu olabilir; konuyla ilgili olarak ifade edip edemeyeceğinizi sormaktan çekinmeyin.
jpmc26

4
Dün örtülerin altına kazmaya başlayana kadar bu izlenimin içindeydim. @Ray Donnelly'nin belirttiği gibi, MSYS'nin üç versiyonunun hepsi Cygwin çatallarıdır. Yani bu anlamda hepsi "Cygwin" dir - ve bu soru gerçekten Cygwin ve çatalları hakkındadır. Ray'ın belirttiği gibi, MSYS'nin mahkum olduğu anlaşılıyor. MSYS kodunu kendim inceledim; umutsuzca eskimiş ve paylaşılan bellek üzerinde temel senkronizasyondan bile yoksun. Koruyucular yukarı akışa ayak uyduramadı ve Cygwin'in yukarı akışındaki paylaşılan bellek için hiçbir zaman düzeltmeler yapmadı.
James Johnston

9
@JamesJohnston Sanırım yanlış anladın. Demek istediğim Cygwin, uyumluluk katmanı olmadan yeni ikili dosyalar oluşturmayı desteklemiyor (desteklemiyor mu?). MSYS ve akrabaları, MinGW aracılığıyla yaparlar. Bu nedenle, hepsinin kökleri Cygwin'de olduğundan haberdar olmasına rağmen, Cygwin ile ilgilenmiyorum. Cygwin'le ilgilenmediğim için, bunu sormak mantıklı değildi. Bu soru ayrıca öncelikle çatalın kendisinin tarihine ve bunun nedenlerine ve bunun bazı temel sonuçlarına odaklanmaktadır . MSYS'nin farklı sürümleri arasında seçim yapmaya çalışırken, Cygwin'in tarihi gerçekten alakalı değil.
jpmc26

1
Anlamadığım şey, MSYS2 geliştiricileri ve Cygwin geliştiricilerinin neden bu aptal çatallara sahip olmayı bırakabilmemiz için şartlara girip kavgadan çıkamamasıdır. Cygwin olduğu gibi çok az ilgi görüyor, ancak en azından üzerinde çalışan ücretli Red Hat çalışanları var; çatallar bunu anlamıyor bile. Geçen yıl Cygwin posta listesinde MSYS2 sadece Cygwin için bir kanca DLL olması hakkında tartışma bulundu, böylece MSYS2 tüm Cygwin DLL çatal zorunda değildi; Görünüşe göre bu tartışmalar fazla ileri gitmedi. MSYS2 şu anda enerjiye sahip olsa da, MSYS2 gönüllüleri güncellemeyi durdurursa / kapatırsa MSYS gibi durgunlaştığını tahmin ediyorum
James Johnston

1
@ JamesJohnston Bence IRC kanalı Ray ile ilgili sorularınıza daha iyi cevaplar alabilirsiniz. Bu yorum zinciri oldukça uzuyor ve konudan uzaklaşıyor.
jpmc26

Yanıtlar:


178

Feragatname: Ben bir MSYS2 geliştiricisiyim

MSYS ölmediği halde, çok da sağlıklı görünmediğini söyleyebilirim. MinGW ekibi tarafından yıllar önce Cygwin'e hiç dayanmayan bir Cygwin çatalı olarak başlatılan bir projedir .

msysgit, bazı özel yamalar, Bash ve Perl'in eski sürümleri ve Git'in yerel bir bağlantı noktası ile MSYS'nin biraz daha eski bir sürümünün çatalıdır .

MSYS2 olarak (MinGW-w64 toolchain için resmi paketçilerinin vardır) mingw-kurar takımın Alexey Pavlov tarafından başlatılmış bir projedir Cygwin son çatal yakından yüzden güncel sona etmediğini son Cygwin izler. Alexey ileriye doğru eski MSYS yamalarını taşıdı ve bazılarını da ekledi.

Yerel yazılımı derlemek için gerekli Unix araçlarını sağlamanın yanı sıra MSYS'nin belirtilen hedefi - Pac Linux paket yöneticisini Arch Linux'tan taşıdık . Pacman, ikili paketleri yönetmekten daha fazlasıdır (bunu çok iyi yapıyor olsa da). Bina yazılımı için tariflerin (PKGBUILD ve yama dosyaları) oluşturulmasına izin veren makepkg adı verilen bir yazılım oluşturma altyapısına sahiptir.

IMHO, Pacman'ın benimsenmesi, Windows'ta açık kaynak geliştirme için işleri önemli ölçüde değiştiriyor. Herkesin bir podge podge, uyumsuz bir şekilde yazılım oluşturmak için kendi ısmarlama kabuk komut dosyalarına hacklemek yerine, paketler artık diğer paketlere ve PKGBUILD dosyalarına bağlı olabilir ve ilgili yamalar yeni PKGBUILD'lerin oluşturulması için referans olarak kullanılabilir. Bir Linux sistemine (yerel) bir Windows (özellikle Arch Linux) alabileceği kadar yakındır ve kurulu tüm paketlerin basit bir şekilde güncellenmesine izin verir.

Windows XP SP3'ü minimum olarak hedefliyoruz ve hem 32 bit hem de 64 bit Windows'u destekliyoruz. MSYS2'yi asla msys veya msysgit ile karıştırmamanızı isteriz. Pacman tüm sistemi yönetmek için kullanılır ve bu nedenle diğer sistemlerden gelen dosyalar çakışmaya neden olur.

Ayrıca, yaptığımız projelere yamalarımızı yukarı akmaya çalışıyoruz ve diğer açık kaynak projelerinden aktif olarak katkı talep ediyoruz. Başkalarının bizimle çalışmayı kolay bulacağını umuyoruz.

Ana web sitemiz SourceForge'da ve PKGBUILD veri havuzlarımıza bağlantılar içeriyor. Ayrıca GitHub'da daha kullanıcı dostu bir yükleyici sitemiz var .

Daha fazla bilgi için IRC (oftc # msys2) adresinden bize ulaşabilirsiniz.


6
Msys2 git'i oluşturmak ve çalıştırmak için kullanılabilir (yani msysgit yerine kullanılabilir).
eckes

10
MSYS2'nin bir git paketi var. Yerel bir sürümün aksine bir MSYS2 sürümüdür. Git: pacman -S git .. 'i kurmak için, MINGW paketleri depomuzda msysgit'in devam eden bir portu var.
Ray Donnelly

16
Hayır, MSYS2 git tam özellikli ve hacksizdir. Diğer paketlerin geliştirilmesinde yaygın olarak kullanıyoruz. MSYS2'nin (Cygwin'in bir çatalı olduğu gibi) dosya işlemlerine ek yük eklediğine dair bir endişe var ve git dosya çalışması açısından ağır olduğundan yerel bir git'in daha hızlı olacağı yönünde. Bunu kanıtlamanın veya çürütmenin yolu, ikisine birden sahip olmak ve onları karşılaştırmaktır, bu yüzden yapacağız. Burada terimlere dikkat etmeliyim, çünkü msysgit'e yaptığım referanslar iki farklı şeydir, yerel Windows git ile msys-fork ve ayrıca yerel Windows git. Burada ikincisine atıfta bulunuyorum!
Ray Donnelly

7
@eckes Sadece birkaç aydır git için MSYS2 kullandığımı söylemek istiyorum. MSYS2'nin birkaç pürüzlü alanı var (hangi yazılım yok?), Ancak kullanmaktan çok mutlu oldum. Hiçbiri git'in kendisi ile ilgili değildi.
jpmc26

7
Msys2 vaadi beklentilerimi karşılıyor. İyi çalışmaya devam edin, @RayDonnelly
bvj

73

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-getpiyasaya 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 yumya apt-getda 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 -rtemeldeki 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.pidgerçek bir gcişlem değil, geçerli kabuk değil) artık yanlış olduğunu düşündü bulunmaktadır.

Windows PID'nin gc.pidbu test komut dosyasına yazıldığından emin olarak düzeltelim, böylece git.exebu sürecin gerçekten var olduğunu anlayabilelim.


1
Bu çok ilginç bir soru ortaya çıkarıyor: Git for Windows zaten MSYS2'yi temel aldığından, öykünme katmanına bağlı olmayan ikili dosyalar MSYS2 paketi olarak kullanılabilir mi? @RayDonnelly, MSYS2 ekibinin, ne tür bir performans farkı yaptığını görmek için bu tür ikili dosyalar oluşturmaya ilgi duyduğundan bahsediyor.
16:18

4
Henüz tam olarak birleşmedik, hayır. Yine de üzerinde çalışıyoruz.
Ray Donnelly

4
Bunu genişletmek için .. Henüz değil, şimdilik, MSYS2'nin git paketi hala msys-2.0.dll'ye bağlanıyor, MSYS2'yi Windows için Git ile birleştirmek için devam eden bir süreç var 've bu tamamlandığında git paketimizi bırakmayı umuyoruz tamamen yerel olanları için çünkü msys-2.0.dll bağlantılı paketler yerli yazılım oluşturmayı desteklemek için var ve kendi başlarına bir amaç değil.
Ray Donnelly

1
@RayDonnelly Şu andaki durum nedir? Windows için Git'i MSYS2 (paket yönetimi!) İle değiştirirseniz, herhangi bir dezavantajı var mı?
Brecht Machiels


18

Aralarındaki bağlantılar hakkındaki anlayışım

  • Cygwin , pencerelerin üstünde POSIX emülasyonu sunar
  • msys Cygwin'i basitleştirmeye çalıştı ancak 2010'dan beri kullanılmıyor
  • msysGit - msys'in eski bir sürümüne dayanarak Windows'ta Git'e izin verildi ( Windows-1.X için git- denilebilir).
  • msys2 - basitleştirilmiş bir Cygwin, ondan çatallanmış, msys'den değişikliklerle ve Pacman ile entegre Cygwin'in özellikleriyle senkronize halde tutuldu
  • MinGW - ilk MinGW, 2010'dan terk edildi
  • MinGW-w64 - POSIX olmadan pencerelerle daha hızlı ve daha iyi entegrasyon
  • git-for-windows-2.x - Windows için 2.X'ten Git'i MinGW-64 , MinGW-32 kullanarak ve mümkün olmadığında msys2'ye bir geri dönüş ile sunar

Karşılaştırma Cygwin, msys, msys2, MinGW, windows için git, msysGit

Deniz kızı tam grafik tanımı ile keman .


1
Güzel grafikler. +1. "Windows 1.0 için Git" gerçekten en iyi çaba temelinde yapılmıştır: stackoverflow.com/a/1704687/6309 ( stackoverflow.com/a/50555740/6309
VonC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.