Git 2.8 (मार्च 2016) में एक बहुत विस्तृत कमिट शामिल है जो नई git-for-windows के लिए msys2 के महत्व को बताती है जिसने 2015 की शुरुआत में msysgit को बदल दिया था ।
देखें df5218b प्रतिबद्ध द्वारा (13 जनवरी 2016) जोहानिस Schindelin ( dscho
) ।
(द्वारा विलय Junio सी Hamano - gitster
- में प्रतिबद्ध 116a866 , 29 जनवरी 2016)
एक लंबे समय के लिए, विंडोज के लिए Git, Git के 2.x रिलीज के पीछे पिछड़ गया क्योंकि Windows डेवलपर्स के लिए Git यह चाहता था कि बड़ा छलांग एक अच्छी तरह से आवश्यक कूद के साथ MSys2 से MSys2 तक दूर हो।
यह समझने के लिए कि यह इतना बड़ा मुद्दा क्यों है, यह ध्यान देने की जरूरत है कि Git के कई हिस्से पोर्टेबल C में नहीं लिखे गए हैं, लेकिन इसके बजाय Git एक POSIX शेल पर निर्भर है और पर्ल उपलब्ध होने के लिए ।
स्क्रिप्ट का समर्थन करने के लिए, Git for Windows को बैश और पर्ल के साथ कम से कम POSIX इम्यूलेशन लेयर को शिप करना पड़ता है , और जब अगस्त 2007 में Git for Windows प्रयास शुरू हुआ, तो यह डेवलपर MSys का उपयोग करके व्यवस्थित हो गया, जो Cygwin के एक स्ट्रिप्ड डाउन वर्जन का उपयोग करता है ।
नतीजतन, परियोजना का मूल नाम "msysGit" था (जो दुख की बात है, बहुत भ्रम का कारण बना क्योंकि कुछ विंडोज उपयोगकर्ताओं को एमएसआई के बारे में पता है, और यहां तक कि कम देखभाल भी)।
Windows के लिए Git के C कोड को संकलित करने के लिए, MSys का उपयोग किया गया था: यह GNU C कंपाइलर के दो संस्करणों को स्पोर्ट करता है:
- POSIX इम्यूलेशन लेयर से जुड़ा एक लिंक
- और एक अन्य जो सादे Win32 API को लक्षित करता है (फेंके गए कुछ सुविधा कार्यों के साथ)।
विंडोज के निष्पादन के लिए Git उत्तरार्द्ध का उपयोग करके बनाया गया है, और इसलिए वे वास्तव में सिर्फ Win32 प्रोग्राम हैं। जो नहीं करते हैं, उनमें से POSIX एमुलेशन लेयर की आवश्यकता को निष्पादित करने के लिए, बाद वाले को MSGW कहा जाता है जब पूर्व MSys निष्पादनयोग्य कहा जाता है ।
MSys पर यह निर्भरता चुनौतियों का सामना करती है, हालांकि:
- MSys रनटाइम के लिए हमारे कुछ बदलाव - विंडोज के लिए Git का बेहतर समर्थन करने के लिए आवश्यक - अपस्ट्रीम को स्वीकार नहीं किया गया था, इसलिए हमें अपना कांटा बनाए रखना था।
- इसके अलावा, MSys रनटाइम का समर्थन करने के लिए आगे विकसित नहीं किया गया था जैसे कि UTF-8 या 64-बिट, और इसके अलावा एक पैकेज प्रबंधन प्रणाली की कमी के अलावा बहुत बाद में (जब
mingw-get
पेश किया गया था), MSys / MinGW परियोजना द्वारा प्रदान किए गए कई पैकेज संबंधित से पिछड़ गए स्रोत कोड संस्करण, विशेष रूप से बैश और ओपनएसएसएल में।
थोड़ी देर के लिए, विंडोज प्रोजेक्ट के लिए Git ने उन पैकेजों के नए संस्करणों को बनाने की कोशिश करके स्थिति को मापने की कोशिश की, लेकिन स्थिति जल्दी से अस्थिर हो गई, विशेष रूप से समस्याओं के साथ जैसे हार्टबल बग को तेजी से कार्रवाई की आवश्यकता होती है जिसका विकासशील के साथ कोई लेना-देना नहीं है। आगे विंडोज।
खुशी से, इस बीच में MSys2 प्रोजेक्ट ( https://msys2.github.io/ ) उभरा, और विंडोज 2.x के लिए Git का आधार चुना गया।
MSys की तरह, MSys2 Cygwin का एक स्ट्रिप्ड डाउन वर्जन है, लेकिन इसे Cygwin के सोर्स कोड के साथ सक्रिय रूप से अपडेट रखा जाता है ।
इस प्रकार, यह पहले से ही यूनिकोड का आंतरिक रूप से समर्थन करता है, और यह 64-बिट समर्थन भी प्रदान करता है, जिसे हमने विंडोज प्रोजेक्ट के लिए गिट की शुरुआत के बाद से शुरू किया था।
MSys2 ने Arch Linux से Pacman पैकेज प्रबंधन प्रणाली को भी पोर्ट किया और इसका भारी उपयोग किया । यह वही सुविधा लाता है जिसके लिए लिनक्स उपयोगकर्ताओं का उपयोग yum
या से किया जाता है apt-get
, और जिसके लिए MacOSX उपयोगकर्ताओं का उपयोग Homebrew या MacPorts, या BSD उपयोगकर्ताओं से पोर्ट्स सिस्टम से MSys2 तक किया जाता है: एक साधारण pacman -Syu
सभी नवीनतम संकुल को नवीनतम संस्करणों में अद्यतन करेगा। वर्तमान में उपलब्ध।
MSys2 भी बहुत सक्रिय है, आमतौर पर प्रति सप्ताह कई बार पैकेज अपडेट प्रदान करता है।
यह अभी भी एक राज्य में सब कुछ लाने के लिए दो महीने के प्रयास की आवश्यकता थी जहां जीआईटी का परीक्षण सूट गुजरता है, कई और महीने तक विंडोज 2.x के लिए पहला आधिकारिक गिट जारी किया गया था, और पैच के एक जोड़े को अभी भी संबंधित अपस्ट्रीम परियोजनाओं के लिए उनके प्रस्तुत होने का इंतजार है । MSys2 के बिना, विंडोज के लिए Git का आधुनिकीकरण बस नहीं हुआ होगा ।
यह प्रतिबद्ध MSys2- आधारित गिट बिल्ड का समर्थन करने के लिए जमीन का काम देता है।
टिप्पणियों में , सवाल जनवरी 2016 में पूछा गया था:
चूँकि विंडोज के लिए Git पहले से ही MSYS2 पर आधारित है, इसलिए उन बायनेरिज़ को जो MSYS2 पैकेज के रूप में उपलब्ध नहीं हैं, अनुकरण परत पर निर्भर करते हैं?
रे डोनली ने उस समय जवाब दिया:
हम अभी तक पूरी तरह से विलय नहीं हुए हैं, नहीं। हम हालांकि इस पर काम कर रहे हैं।
लेकिन ... मैडज़ बताते हैं कि 2017 की शुरुआत में, यह प्रयास सफल नहीं हुआ।
देख:
समस्या यह है कि मैं उन बदलावों में योगदान नहीं कर सकता जिनके परिणामस्वरूप एक नया msys2-runtime समयबद्ध तरीके से होगा।
हालांकि यह एक बड़ी समस्या नहीं है: मैं सिर्फ अनिश्चित काल के लिए विंडोज चलाने के लिए गिट का कांटा रखूंगा।
विकी का उल्लेख अब (2018):
Windows के लिए Git ने msys2-runtime के लिए कुछ पैच बनाए हैं जिन्हें अपस्ट्रीम नहीं भेजा गया है। (यह योजना बनाई गई थी, लेकिन यह # 284 के अंक में निर्धारित किया गया था कि यह शायद नहीं हो रहा होगा।)
इसका मतलब है कि आपको MSYS2 के अंदर पूरी तरह से काम करने वाले गिट्स के लिए विंडोज अनुकूलित एमएसआईएस 2-रनटाइम के लिए गिट स्थापित करना होगा।
ध्यान दें कि, aeb582a9 (Git 2.22, Q2 2019) के बाद से, विंडोज प्रोजेक्ट के लिए Git ने Cygwin v3.x पर आधारित MSYS2 रनटाइम संस्करण में अपग्रेड प्रक्रिया शुरू की।
mingw
: MSYS2 रनटाइम v3.x के साथ निर्माण की अनुमति दें
हाल ही में विंडोज प्रोजेक्ट के लिए Git ने Cygwin v3.x पर आधारित MSYS2 रनटाइम संस्करण में अपग्रेड प्रक्रिया शुरू की।
इसका बहुत उल्लेखनीय परिणाम है कि $(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 प्रतिबद्ध द्वारा (07 मई 2019) जोहानिस Schindelin ( dscho
) ।
(द्वारा विलय Junio सी Hamano - gitster
- में b20b8fe प्रतिबद्ध , 19 मई 2019)
t6500(mingw)
: शेल के विंडोज पीआईडी का उपयोग करें
विंडोज के लिए Git में, हम MSYS2 बैश का उपयोग करते हैं जो Cygwin के POSIX इम्यूलेशन लेयर से एक गैर-मानक PID मॉडल को वारिस करता है: प्रत्येक MSYS2 प्रक्रिया में एक नियमित Windows PID होता है, और इसके अलावा इसमें MSYS2 PID (जो एक छाया प्रक्रिया से मेल खाती है, जो अनुकरण करता है) यूनिक्स-शैली सिग्नल हैंडलिंग)।
MSYS2 रनटाइम v3.x के उन्नयन के साथ, इस छाया प्रक्रिया को OpenProcess()
किसी भी माध्यम से एक्सेस नहीं किया जा सकता है , और इसलिए t6500 ने गलत तरीके से सोचा कि इस प्रक्रिया को संदर्भित किया गया है gc.pid
(जो वास्तव gc
में इस संदर्भ में वास्तविक प्रक्रिया नहीं है, लेकिन वर्तमान शेल अब नहीं है मौजूद।
चलो यह सुनिश्चित करके कि विंडोज पीआईडी को gc.pid
इस परीक्षण स्क्रिप्ट में लिखा गया
है ताकि यह git.exe
समझने में सक्षम हो कि यह प्रक्रिया वास्तव में अभी भी मौजूद है।