Git 2.8 (Maret 2016) menyertakan komit yang sangat terperinci yang menjelaskan pentingnya msys2 untuk git-for-windows baru yang menggantikan msysgit pada awal 2015 .
Lihat komit df5218b (13 Jan 2016) oleh Johannes Schindelin ( dscho
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 116a866 , 29 Jan 2016)
Untuk waktu yang lama, Git untuk Windows tertinggal di belakang rilis Git 2.x karena pengembang Git untuk Windows ingin membiarkan lompatan besar itu bertepatan dengan lompatan yang diperlukan jauh dari MSys ke MSys2.
Untuk memahami mengapa ini merupakan masalah besar, perlu dicatat bahwa banyak bagian dari Git tidak ditulis dalam portable C, tetapi Git bergantung pada shell POSIX dan Perl yang akan tersedia .
Untuk mendukung skrip, Git untuk Windows harus mengirimkan lapisan emulasi POSIX minimal dengan Bash dan Perl dilemparkan , dan ketika upaya Git untuk Windows dimulai pada Agustus 2007, pengembang ini memutuskan untuk menggunakan MSys, versi Cygwin yang dipreteli .
Akibatnya, nama asli proyek itu adalah "msysGit" (yang, sayangnya, menyebabkan banyak kebingungan karena hanya sedikit pengguna Windows yang tahu tentang MSys, dan bahkan kurang peduli).
Untuk mengkompilasi kode C dari Git untuk Windows, MSys juga digunakan: ia menggunakan dua versi GNU C Compiler:
- yang menghubungkan secara implisit ke lapisan emulasi POSIX,
- dan satu lagi yang menargetkan API Win32 biasa (dengan beberapa fungsi kenyamanan dilemparkan ke dalam).
File executable Git untuk Windows dibuat dengan menggunakan yang terakhir, dan oleh karena itu mereka hanyalah program Win32. Untuk membedakan executable yang membutuhkan lapisan emulasi POSIX dari yang tidak, yang terakhir disebut MinGW (Minimal GNU untuk Windows) ketika yang pertama disebut MSys executable .
Ketergantungan pada MSys ini menimbulkan tantangan juga, meskipun:
- beberapa perubahan kami pada runtime MSys - yang diperlukan untuk mendukung Git untuk Windows lebih baik - tidak diterima di hulu, jadi kami harus mempertahankan garpu kami sendiri.
- Juga, runtime MSys tidak dikembangkan lebih lanjut untuk mendukung misalnya UTF-8 atau 64-bit, dan selain dari kekurangan sistem manajemen paket sampai jauh kemudian (ketika
mingw-get
diperkenalkan), banyak paket yang disediakan oleh proyek MSys / MinGW tertinggal di belakang masing-masing versi kode sumber, khususnya Bash dan OpenSSL.
Untuk sementara, proyek Git untuk Windows mencoba untuk memperbaiki situasi dengan mencoba membangun versi yang lebih baru dari paket-paket itu, tetapi situasi dengan cepat menjadi tidak bisa dipertahankan, terutama dengan masalah seperti bug Heartbleed yang memerlukan tindakan cepat yang tidak ada hubungannya dengan pengembangan Git untuk Windows lebih jauh.
Untungnya, sementara itu proyek MSys2 ( https://msys2.github.io/ ) muncul, dan terpilih sebagai basis Git untuk Windows 2.x.
Sama seperti MSys, MSys2 adalah versi Cygwin yang dilucuti, tetapi secara aktif terus diperbarui dengan kode sumber Cygwin .
Dengan demikian, sudah mendukung Unicode secara internal, dan juga menawarkan dukungan 64-bit yang kami dambakan sejak awal proyek Git untuk Windows.
MSys2 juga mem-porting sistem manajemen paket Pacman dari Arch Linux dan sangat menggunakannya . Ini membawa kenyamanan yang sama dengan yang digunakan pengguna Linux dari yum
atau apt-get
, dan yang digunakan pengguna MacOSX dari Homebrew atau MacPorts, atau pengguna BSD dari sistem Ports, ke MSys2: sederhana pacman -Syu
akan memperbarui semua paket yang diinstal ke versi terbaru tersedia saat ini.
MSys2 juga sangat aktif, biasanya menyediakan pembaruan paket beberapa kali per minggu.
Masih diperlukan upaya dua bulan untuk membawa semuanya ke keadaan di mana test suite Git lewat, beberapa bulan lagi sampai Git resmi pertama untuk Windows 2.x dirilis, dan beberapa patch masih menunggu pengajuan mereka ke proyek-proyek hulu masing-masing . Namun tanpa MSys2, modernisasi Git untuk Windows tidak akan terjadi .
Komitmen ini menjadi dasar untuk mendukung pembangunan Git berbasis MSys2.
Dalam komentar , pertanyaan diajukan pada Januari 2016:
Karena Git untuk Windows sudah berbasis pada MSYS2, apakah binari yang tidak bergantung pada lapisan emulasi telah tersedia sebagai paket MSYS2?
Ray Donnelly menjawab pada saat itu:
Kami belum sepenuhnya bergabung, tidak. Kami sedang mengusahakannya.
Tapi ... madz menunjukkan bahwa selama awal 2017, upaya itu tidak berhasil.
Lihat:
Masalahnya adalah bahwa saya tidak dapat berkontribusi perubahan yang akan menghasilkan msys2-runtime baru secara tepat waktu.
Bukan masalah besar, meskipun: Saya hanya akan menjaga garpu Git untuk Windows berjalan tanpa batas.
Wiki karena itu menyebutkan sekarang (2018):
Git untuk Windows membuat beberapa tambalan untuk msys2-runtime yang belum dikirim ke hulu. (Ini telah direncanakan, tetapi telah ditentukan dalam edisi # 284 bahwa itu mungkin tidak akan terjadi.)
Ini berarti Anda harus menginstal Git untuk Windows msys2-runtime yang disesuaikan untuk memiliki git yang berfungsi penuh di dalam MSYS2.
Perhatikan bahwa, sejak melakukan aeb582a9 (Git 2.22, Q2 2019), proyek Git untuk Windows memulai proses pemutakhiran ke versi runtime MSYS2 berdasarkan Cygwin v3.x.
mingw
: izinkan bangunan dengan runtime MSYS2 v3.x
Baru-baru ini proyek Git untuk Windows memulai proses pemutakhiran ke versi runtime MSYS2 berdasarkan Cygwin v3.x.
Ini memiliki konsekuensi yang sangat penting yaitu $(uname -r)
tidak lagi melaporkan versi yang dimulai dengan "2", tetapi versi dengan "3".
Itu merusak build kami, seperti df5218b ( config.mak.uname
: mendukung MSys2, 2016-01-13, Git v2.8.0-rc0) tidak mengharapkan versi yang dilaporkan uname -r
bergantung pada versi Cygwin yang mendasarinya: ia mengharapkan versi yang dilaporkan sesuai dengan " 2 "dalam" MSYS2 ".
Jadi mari kita membalikkan test case untuk menguji apa pun selain versi yang dimulai dengan "1" (untuk MSys).
Itu harus melindungi kita untuk masa depan, bahkan jika Cygwin akhirnya merilis versi seperti 314.272.65536.
Git 2.22 (Q2 2019) akan menjadi bukti di masa depan terhadap pembaruan untuk MSYS2 runtime v3.x series.
Lihat commit c871fbe (07 Mei 2019) oleh Johannes Schindelin ( dscho
) .
(Digabung oleh Junio C Hamano - gitster
- dalam commit b20b8fe , 19 Mei 2019)
t6500(mingw)
: gunakan PID Windows dari shell
Di Git untuk Windows, kami menggunakan MSYS2 Bash yang mewarisi model PID non-standar dari lapisan emulasi POSIX Cygwin: setiap proses MSYS2 memiliki PID Windows biasa, dan selain itu memiliki PID MSYS2 (yang sesuai dengan proses bayangan yang mengemulasi Penanganan sinyal gaya unix).
Dengan pemutakhiran ke runtime MSYS2 v3.x, proses bayangan ini tidak dapat diakses melalui OpenProcess()
lebih lama, dan karena itu t6500 berpikir secara tidak benar bahwa proses yang dirujuk gc.pid
(yang sebenarnya bukan gc
proses nyata dalam konteks ini, tetapi shell saat ini) tidak lagi ada
Mari kita perbaiki ini dengan memastikan bahwa Windows PID ditulis dalam
gc.pid
skrip pengujian ini sehingga git.exe
dapat memahami bahwa proses itu memang masih ada.