Git 2.8 (มีนาคม 2016) รวมถึงรายละเอียดมากกระทำซึ่งจะอธิบายความสำคัญของการ msys2 สำหรับใหม่คอมไพล์สำหรับหน้าต่างซึ่งแทนที่ msysgit ในต้นปี 2015
ดูกระทำ df5218b (13 มกราคม 2016) โดยโยฮันเน Schindelin (dscho
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 116a866 , 29 มกราคม 2016)
เป็นเวลานาน Git สำหรับ Windows ล้าหลังรุ่น 2.x ของ Git เนื่องจากนักพัฒนา Git สำหรับ Windows ต้องการให้การกระโดดครั้งใหญ่นั้นเกิดขึ้นพร้อมกับการกระโดดที่จำเป็นจาก MSys ไปยัง MSys2
เพื่อให้เข้าใจว่าทำไมเรื่องนี้จึงเป็นปัญหาใหญ่จึงจำเป็นต้องสังเกตว่าส่วนต่าง ๆ ของ Git ไม่ได้เขียนในอุปกรณ์พกพา แต่ Git นั้นใช้ POSIX shell และ Perlแทน
เพื่อสนับสนุนสคริปต์ Git สำหรับ Windows มีการจัดส่งชั้นจำลอง POSIX น้อยที่สุดกับทุบตีและ Perl โยนในและเมื่อ Git สำหรับ Windows พยายามเริ่มต้นในเดือนสิงหาคม 2007 นักพัฒนาซอฟต์แวร์นี้ตัดสินเกี่ยวกับการใช้MSYS, รุ่นปล้นลงของ Cygwin
ดังนั้นชื่อดั้งเดิมของโครงการคือ "msysGit" (ซึ่งน่าเศร้าทำให้เกิดความสับสนมากเพราะผู้ใช้ Windows ไม่กี่คนที่รู้เกี่ยวกับ MSys และแม้แต่ความใส่ใจน้อยกว่า)
ในการรวบรวมรหัส C ของ Git สำหรับ Windows นั้น MSys ก็ถูกใช้เช่นกัน: มันรองรับ GNU C Compiler สองรุ่น:
- ชั้นที่เชื่อมโยงกับเลเยอร์การจำลอง POSIX โดยปริยาย
- และอีกอันหนึ่งที่มีเป้าหมาย Win32 API แบบธรรมดา (ที่มีฟังก์ชั่นความสะดวกสบายเล็กน้อยโยนเข้ามา)
ไฟล์ประมวลผลของ Git for Windows นั้นสร้างขึ้นโดยใช้โปรแกรมหลังและดังนั้นจึงเป็นเพียงโปรแกรม Win32 เท่านั้น เพื่อ executables มองเห็นกำหนดชั้นจำลอง POSIX จากคนที่ไม่ได้หลังถูกเรียกว่า MinGW (GNU น้อยที่สุดสำหรับ Windows) เมื่ออดีตจะเรียกว่า MSYS executables
การพึ่งพา MSys นี้ก็เป็นสิ่งที่ท้าทายเช่นกัน:
- การเปลี่ยนแปลงบางอย่างของเราในการรันไทม์ของ MSys ซึ่งจำเป็นต่อการรองรับ Git สำหรับ Windows ดีกว่านั้นไม่ได้รับการยอมรับในขั้นต้นดังนั้นเราจึงต้องรักษาทางเลือกของเราเอง
- นอกจากนี้รันไทม์ของ MSys ยังไม่ได้รับการพัฒนาเพิ่มเติมเพื่อรองรับเช่น UTF-8 หรือ 64- บิตและนอกเหนือจากการขาดระบบการจัดการแพ็กเกจจนกระทั่งภายหลังมาก (เมื่อ
mingw-get
ได้รับการแนะนำ) แพ็คเกจจำนวนมากที่โครงการ MSys / MinGW ล้าหลัง ซอร์สโค้ดเวอร์ชันโดยเฉพาะอย่างยิ่ง Bash และ OpenSSL
ในขณะที่โครงการ Git for Windows พยายามแก้ไขสถานการณ์โดยพยายามสร้างแพ็คเกจรุ่นใหม่ แต่สถานการณ์ไม่สามารถแก้ไขได้อย่างรวดเร็วโดยเฉพาะอย่างยิ่งปัญหาเช่น Heartbleed bug ที่ต้องการการกระทำที่รวดเร็วซึ่งไม่เกี่ยวข้องกับการพัฒนา Git สำหรับ Windows เพิ่มเติม
อย่างมีความสุขในระหว่างนี้โครงการ MSys2 ( https://msys2.github.io/ ) ก็ปรากฏตัวขึ้นและได้รับเลือกให้เป็นฐานของ Git สำหรับ Windows 2.x
เช่นเดียวกับ MSYS, MSys2 เป็นรุ่นปล้นลงของ Cygwin แต่มันจะถูกเก็บไว้อย่างแข็งขัน up-to-date กับรหัสที่มาของ
ดังนั้นมันรองรับ Unicode ภายในแล้วและยังรองรับ 64- บิตที่เราปรารถนาตั้งแต่เริ่มต้นโครงการ Git สำหรับ Windows
MSys2 รังเพลิงยังระบบการจัดการแพคเกจ Pacman จาก Arch Linux และใช้มันอย่างหนัก สิ่งนี้นำมาซึ่งความสะดวกสบายแบบเดียวกันกับที่ผู้ใช้ Linux ใช้ในการyum
หรือจากapt-get
และผู้ใช้ MacOSX ที่ใช้จาก Homebrew หรือ MacPorts หรือผู้ใช้ BSD จากระบบพอร์ตเป็น MSys2: ง่าย ๆpacman -Syu
จะอัปเดตแพ็คเกจที่ติดตั้งทั้งหมดเป็นเวอร์ชั่นล่าสุด สามารถใช้งานได้.
MSys2 นั้นยังทำงานอยู่มากโดยปกติแล้วจะมีการอัพเดทแพ็คเกจหลายครั้งต่อสัปดาห์
ยังคงต้องใช้ความพยายามสองเดือนเพื่อนำทุกอย่างเข้าสู่สถานะที่ชุดทดสอบของ Git ผ่านไปอีกหลายเดือนจนกระทั่ง Git อย่างเป็นทางการชุดแรกสำหรับ Windows 2.x ได้รับการเผยแพร่และแพทช์สองแผ่นยังรอการส่งของโครงการต้นน้ำตามลำดับ . แต่โดยไม่ต้อง MSys2 ทันสมัยของ Git สำหรับ Windows จะเพียงแค่ไม่ได้เกิดขึ้น
การกระทำนี้เป็นการวางรากฐานของการทำงานเพื่อสนับสนุนการสร้าง Git ที่ใช้ MSys2
ในความคิดเห็นคำถามถูกถามในเดือนมกราคม 2559:
เนื่องจาก Git สำหรับ Windows ใช้ MSYS2 อยู่แล้วไบนารีที่ไม่ได้ขึ้นอยู่กับเลเยอร์การจำลองนั้นมีให้เป็นแพ็คเกจ MSYS2 หรือไม่
เรย์ Donnellyตอบในเวลา:
เรายังไม่ได้รวมอย่างเต็มที่เลย เรากำลังดำเนินการอยู่
แต่ ... madz ชี้ให้เห็นว่าในช่วงต้นปี 2017 ความพยายามดังกล่าวไม่ได้เลื่อนออกไป
ดู:
ปัญหาคือฉันไม่สามารถมีส่วนร่วมการเปลี่ยนแปลงที่จะทำให้ msys2-runtime ใหม่ในเวลาที่เหมาะสม
ไม่ใช่ปัญหาใหญ่ แต่ฉันจะคอย Git for Windows ทำงานต่อไปเรื่อย ๆ
วิกิกล่าวถึงตอนนี้ (2018):
Git สำหรับ Windows สร้างแพทช์บางตัวสำหรับ msys2-runtime ที่ยังไม่ได้ส่งอัปสตรีม (สิ่งนี้ได้ถูกวางแผนไว้ แต่ถูกกำหนดในปัญหา # 284 ซึ่งอาจไม่เกิดขึ้น)
ซึ่งหมายความว่าคุณต้องติดตั้ง Git สำหรับ Windows msys2-runtime เองเพื่อให้มีคอมไพล์ทำงานได้อย่างสมบูรณ์ภายใน MSYS2
โปรดทราบว่าตั้งแต่คอมมิชชัน aeb582a9 (Git 2.22, Q2 2019) โครงการ Git for Windows เริ่มกระบวนการอัปเกรดเป็นเวอร์ชันรันไทม์ MSYS2 โดยยึดตาม Cygwin v3.x
mingw
: อนุญาตการสร้างด้วยรันไทม์ MSYS2 v3.x
เมื่อเร็ว ๆ นี้โครงการ Git for 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 (7 พฤษภาคม 2019) โดยโยฮันเน Schindelin (dscho
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ b20b8fe , 19 พฤษภาคม 2019)
t6500(mingw)
: ใช้ Windows PID ของเชลล์
ใน Git สำหรับ Windows เราใช้ MSYS2 Bash ซึ่งสืบทอดโมเดล PID ที่ไม่ได้มาตรฐานจากเลเยอร์การจำลอง POSIX ของ Cygwin: กระบวนการ MSYS2 ทุกกระบวนการมี Windows PID ปกติและนอกจากนี้ยังมี MSYS2 PID (ซึ่งสอดคล้องกับกระบวนการเงาที่เลียนแบบ การจัดการสัญญาณแบบ Unix)
ด้วยการอัปเกรดเป็น MSYS2 runtime v3.x กระบวนการเงานี้ไม่สามารถเข้าถึงได้OpenProcess()
อีกต่อไปดังนั้น t6500 จึงคิดอย่างไม่ถูกต้องว่ากระบวนการอ้างอิงในgc.pid
(ซึ่งจริงๆแล้วไม่ใช่gc
กระบวนการจริงในบริบทนี้ แต่เชลล์ปัจจุบัน) ไม่ได้อีกต่อไป ที่มีอยู่
มาแก้ไขกันด้วยการทำให้แน่ใจว่า Windows PID นั้นเขียนไว้
gc.pid
ในสคริปต์ทดสอบนี้เพื่อให้git.exe
สามารถเข้าใจได้ว่ากระบวนการนั้นยังคงมีอยู่จริง