Git 2.8 (Tháng 3 năm 2016) bao gồm một cam kết rất chi tiết giải thích tầm quan trọng của msys2 đối với git-for-windows mới thay thế msysgit vào đầu năm 2015 .
Xem cam kết df5218b (ngày 13 tháng 1 năm 2016) của tác giả Julian Schindelin ( dscho
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 116a866 , ngày 29 tháng 1 năm 2016)
Trong một thời gian dài, Git cho Windows tụt lại phía sau các bản phát hành 2.x của Git vì các nhà phát triển Git cho Windows muốn để bước nhảy lớn đó trùng khớp với một bước nhảy rất cần thiết từ MSys sang MSys2.
Để hiểu lý do tại sao đây là một vấn đề lớn như vậy, cần lưu ý rằng nhiều phần của Git không được viết bằng C di động, mà thay vào đó Git dựa vào vỏ POSIX và Perl có sẵn .
Để hỗ trợ các tập lệnh, Git cho Windows phải gửi một lớp mô phỏng POSIX tối thiểu với Bash và Perl được ném vào , và khi nỗ lực Git cho Windows bắt đầu vào tháng 8 năm 2007, nhà phát triển này đã quyết định sử dụng MSys, một phiên bản rút gọn của Cygwin .
Do đó, tên ban đầu của dự án là "msysGit" (đáng buồn thay, gây ra nhiều nhầm lẫn vì ít người dùng Windows biết về MSys và thậm chí ít quan tâm hơn).
Để biên dịch mã C của Git cho Windows, MSys cũng được sử dụng: nó có hai phiên bản Trình biên dịch GNU C:
- một liên kết ngầm với lớp mô phỏng POSIX,
- và một cái khác nhắm vào API Win32 đơn giản (với một vài chức năng tiện lợi được đưa vào).
Các tệp thực thi Git cho Windows được xây dựng bằng cách sử dụng thứ hai và do đó chúng thực sự chỉ là các chương trình Win32. Để phân biệt các tệp thực thi yêu cầu lớp mô phỏng POSIX từ các lớp không có, lớp thứ hai được gọi là MinGW (GNU tối thiểu cho Windows) khi lớp trước được gọi là tệp thực thi MSys .
Điều này cũng phụ thuộc vào MSys phát sinh những thách thức:
- một số thay đổi của chúng tôi đối với thời gian chạy MSys - cần thiết để hỗ trợ Git cho Windows tốt hơn - không được chấp nhận ngược dòng, vì vậy chúng tôi phải duy trì ngã ba của chính mình.
- Ngoài ra, thời gian chạy MSys không được phát triển thêm để hỗ trợ, ví dụ UTF-8 hoặc 64 bit, và ngoài việc thiếu hệ thống quản lý gói cho đến sau này (khi
mingw-get
được giới thiệu), nhiều gói được cung cấp bởi dự án MSys / MinGW bị tụt hậu phiên bản mã nguồn, đặc biệt là Bash và OpenSSL.
Trong một thời gian, dự án Git cho Windows đã cố gắng khắc phục tình trạng này bằng cách cố gắng xây dựng các phiên bản mới hơn của các gói đó, nhưng tình huống nhanh chóng trở nên khó lường, đặc biệt là với các vấn đề như lỗi Heartbleed yêu cầu hành động nhanh chóng không liên quan đến việc phát triển Git cho Windows hơn nữa.
Hạnh phúc thay, trong thời gian đó, dự án MSys2 ( https://msys2.github.io/ ) đã xuất hiện và được chọn làm cơ sở của Git cho Windows 2.x.
Giống như MSys, MSys2 là phiên bản rút gọn của Cygwin, nhưng nó được tích cực cập nhật với mã nguồn của Cygwin .
Do đó, nó đã hỗ trợ Unicode trong nội bộ và nó cũng cung cấp hỗ trợ 64 bit mà chúng tôi mong đợi kể từ khi bắt đầu dự án Git cho Windows.
MSys2 cũng đã chuyển hệ thống quản lý gói Pacman từ Arch Linux và sử dụng nó rất nhiều . Điều này mang lại sự thuận tiện tương tự cho người dùng Linux được sử dụng từ yum
hoặc apt-get
, và người dùng MacOSX được sử dụng từ Homebrew hoặc MacPorts hoặc người dùng BSD từ hệ thống Cổng, sang MSys2: đơn giản pacman -Syu
sẽ cập nhật tất cả các gói đã cài đặt lên các phiên bản mới nhất hiện đang có sẵn.
MSys2 cũng rất tích cực, thường cung cấp các bản cập nhật gói nhiều lần mỗi tuần.
Vẫn cần một nỗ lực hai tháng để đưa mọi thứ đến trạng thái nơi bộ thử nghiệm của Git đi qua, nhiều tháng nữa cho đến khi Git chính thức đầu tiên cho Windows 2.x được phát hành, và một vài bản vá vẫn đang chờ đệ trình của họ cho các dự án ngược dòng tương ứng . Nhưng nếu không có MSys2, việc hiện đại hóa Git cho Windows sẽ không xảy ra .
Cam kết này đặt công việc cơ bản để hỗ trợ các bản dựng Git dựa trên MSys2.
Trong các ý kiến , câu hỏi đã được hỏi vào tháng 1 năm 2016:
Vì Git cho Windows đã dựa trên MSYS2, nên các nhị phân không phụ thuộc vào lớp mô phỏng đã được cung cấp dưới dạng gói MSYS2 chưa?
Ray Donnelly đã trả lời vào thời điểm đó:
Chúng tôi chưa hợp nhất hoàn toàn, không. Chúng tôi đang làm việc trên đó mặc dù.
Nhưng ... madz chỉ ra rằng vào đầu năm 2017, nỗ lực đó đã không thành công.
Xem:
Vấn đề là tôi không thể đóng góp các thay đổi sẽ dẫn đến thời gian chạy msys2 mới một cách kịp thời.
Tuy nhiên, không phải là vấn đề lớn: Tôi sẽ giữ cho Git cho Windows chạy vô thời hạn.
Do đó wiki đề cập đến bây giờ (2018):
Git cho Windows đã tạo một số bản vá cho msys2-runtime chưa được gửi ngược dòng. (Điều này đã được lên kế hoạch, nhưng đã được xác định trong vấn đề # 284 rằng điều đó có thể sẽ không xảy ra.)
Điều này có nghĩa là bạn phải cài đặt Git cho Windows msys2-runtime tùy chỉnh để có một git hoạt động hoàn toàn trong MSYS2.
Lưu ý rằng, kể từ khi cam kết aeb582a9 (Git 2.22, Q2 2019), dự án Git cho Windows đã bắt đầu quá trình nâng cấp lên phiên bản thời gian chạy MSYS2 dựa trên Cygwin v3.x.
mingw
: cho phép xây dựng với thời gian chạy MSYS2 v3.x
Gần đây, dự án Git cho Windows đã bắt đầu quá trình nâng cấp lên phiên bản thời gian chạy MSYS2 dựa trên Cygwin v3.x.
Điều này có một hậu quả rất đáng chú ý là $(uname -r)
không còn báo cáo phiên bản bắt đầu bằng "2", mà là phiên bản có "3".
Điều đó phá vỡ bản dựng của chúng tôi, vì df5218b ( config.mak.uname
: hỗ trợ MSys2, 2016-01-13, Git v2.8.0-rc0) đơn giản là không mong đợi phiên bản được báo cáo uname -r
phụ thuộc vào phiên bản Cygwin cơ bản: dự kiến phiên bản được báo cáo phù hợp với " 2 "trong" MSYS2 ".
Vì vậy, hãy đảo ngược trường hợp thử nghiệm đó để kiểm tra bất kỳ thứ gì khác ngoài phiên bản bắt đầu bằng "1" (đối với MSys).
Điều đó sẽ bảo vệ chúng ta trong tương lai, ngay cả khi Cygwin kết thúc việc phát hành các phiên bản như 314.272.65536.
Git 2.22 (quý 2 năm 2019) sẽ chứng minh một thử nghiệm trong tương lai đối với bản cập nhật cho dòng MSYS2 runtime v3.x.
Xem cam kết c871fbe (07 tháng 5 năm 2019) của Johannes Schindelin ( dscho
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết b20b8fe , ngày 19 tháng 5 năm 2019)
t6500(mingw)
: sử dụng Windows PID của trình bao
Trong Git cho Windows, chúng tôi sử dụng MSYS2 Bash kế thừa mô hình PID không chuẩn từ lớp mô phỏng POSIX của Cygwin: mọi quy trình MSYS2 đều có Windows PID thông thường và ngoài ra, nó còn có MSYS2 PID (tương ứng với quy trình bóng tối mô phỏng Xử lý tín hiệu theo kiểu Unix).
Với việc nâng cấp lên MSYS2 runtime v3.x, quá trình bóng này không thể được truy cập qua OpenProcess()
nữa, và do đó t6500 đã nghĩ không chính xác rằng quá trình được tham chiếu trong gc.pid
(không thực sự là một gc
quá trình thực trong ngữ cảnh này, nhưng trình bao hiện tại) không còn nữa tồn tại
Chúng ta hãy khắc phục điều này bằng cách đảm bảo rằng Windows PID được ghi vào
gc.pid
tập lệnh kiểm tra này để git.exe
có thể hiểu rằng quá trình đó thực sự vẫn tồn tại.