संभावित कारण # 1 - सामान्यीकरण की समाप्ति रेखा
एक स्थिति जिसमें ऐसा हो सकता है जब प्रश्न में फाइल को लाइन एंडिंग के लिए सही कॉन्फ़िगरेशन के बिना रिपॉजिटरी में चेक किया गया था (1) जिसके परिणामस्वरूप रिपॉजिटरी में फाइल गलत लाइन एंडिंग या मिश्रित लाइन एंडिंग के साथ होती है। पुष्टि करने के लिए, सत्यापित करें कि git diff
केवल लाइन एंडिंग में परिवर्तन दिखाता है (ये डिफ़ॉल्ट रूप से दिखाई नहीं दे सकते हैं, git diff | cat -v
गाड़ी के रिटर्न को शाब्दिक ^M
वर्ण के रूप में देखने का प्रयास करें )।
इसके बाद, किसी ने शायद लाइन एंडिंग (2) को सामान्य करने के लिए सेटिंग को जोड़ा .gitattributes
या संशोधित किया core.autocrlf
। .gitattributes
या वैश्विक कॉन्फ़िगरेशन के आधार पर , Git ने आपकी कार्य प्रतिलिपि में स्थानीय परिवर्तन लागू किए हैं जो अनुरोध किए गए सामान्यीकरण को समाप्त करने वाली रेखा को लागू करते हैं। दुर्भाग्य से, किसी कारण से git reset --hard
ये रेखा सामान्यीकरण में परिवर्तन नहीं करती है।
उपाय
वर्कअराउंड जिसमें लोकल लाइन एंडिंग्स को रीसेट किया जाता है वह समस्या का समाधान नहीं करेगा। हर बार फाइल को "git" द्वारा देखा जाता है, यह सामान्यीकरण की कोशिश करेगा और फिर से करेगा, जिसके परिणामस्वरूप एक ही मुद्दा होगा।
सबसे अच्छा विकल्प यह है कि गिट को सामान्य मिलान लागू करने के लिए इसे रेपो में सभी लाइन एंडिंग को सामान्य करके .gitattributes
, और उन परिवर्तनों को करने के लिए लागू किया जाए - देखें कि फ़िल्टर-शाखा के साथ लाइन-एंडिंग को ठीक करने की कोशिश की जा रही है, लेकिन कोई भाग्य नहीं है ।
यदि आप वास्तव में फ़ाइल में परिवर्तनों को मैन्युअल रूप से आज़माना चाहते हैं, तो सबसे आसान समाधान संशोधित फ़ाइलों को मिटाना है, और फिर उन्हें पुनर्स्थापित करने के लिए गिट को बताना है, हालांकि मैं ध्यान देता हूं कि यह समाधान लगातार 100% काम नहीं करता है समय ( चेतावनी: यदि आपकी संशोधित फ़ाइलों में लाइन एंडिंग के अलावा अन्य परिवर्तन नहीं हैं तो इसे न चलाएं !!)
git status --porcelain | grep "^ M" | cut -c4- | xargs rm
git checkout -- .
ध्यान दें, जब तक आप किसी बिंदु पर रिपॉजिटरी में लाइन एंडिंग्स को सामान्य नहीं करते हैं, तब तक आप इस मुद्दे को जारी रखेंगे।
संभावित कारण # 2 - केस असंवेदनशीलता
दूसरा संभावित कारण विंडोज या मैक ओएस / एक्स पर असंवेदनशीलता है। उदाहरण के लिए, यह कहें कि रिपॉजिटरी में निम्नलिखित की तरह एक पथ मौजूद है:
/foo/bar
अब लिनक्स पर कोई भी फाइल बनाता है /foo/Bar
(शायद एक बिल्ड टूल या उस डायरेक्टरी को बनाने के कारण) और धक्का देता है। लिनक्स पर, यह वास्तव में अब दो अलग-अलग निर्देशिकाएं हैं:
/foo/bar/fileA
/foo/Bar/fileA
इस रेपो विंडोज या मैक पर बाहर की जाँच के संशोधित में हो सकता है fileA
विंडोज चेक पर कि रीसेट नहीं किया जा सकता है, क्योंकि प्रत्येक रीसेट पर, Git बाहर /foo/bar/fileA
, और फिर क्योंकि Windows मामले असंवेदनशील है, की सामग्री को अधिलेखित कर देता है fileA
के साथ /foo/Bar/fileA
उन्हें में जिसके परिणामस्वरूप की जा रही "संशोधित",।
एक अन्य मामला एक व्यक्तिगत फाइल (एस) हो सकता है जो रेपो में मौजूद होता है, जब एक असंवेदनशील फाइल सिस्टम पर जांच की जाती है, तो वह ओवरलैप हो जाएगा। उदाहरण के लिए:
/foo/bar/fileA
/foo/bar/filea
ऐसी ही अन्य स्थितियां भी हो सकती हैं, जो इस तरह की समस्याएं पैदा कर सकती हैं।
केस असंवेदनशील फाइलसिस्टम पर git को वास्तव में इस स्थिति का पता लगाना चाहिए और एक उपयोगी चेतावनी संदेश दिखाना चाहिए, लेकिन यह वर्तमान में नहीं है (यह भविष्य में बदल सकता है - इस चर्चा और संबंधित प्रस्तावित पैच git.it मेलिंग सूची पर देखें)।
उपाय
इसका समाधान गिट सूचकांक में फाइलों के मामले और विंडोज फाइलसिस्टम पर केस को संरेखण में लाना है। यह या तो लिनक्स पर किया जा सकता है जो चीजों की सही स्थिति दिखाएगा, या विंडोज पर बहुत उपयोगी ओपन सोर्स यूटिलिटी गिट-यूनाइट के साथ । Git-Unite git इंडेक्स में आवश्यक केस परिवर्तन लागू करेगा, जो बाद में रेपो के लिए प्रतिबद्ध हो सकता है।
(1) यह किसी व्यक्ति द्वारा विंडोज का उपयोग करने की सबसे अधिक संभावना थी, बिना किसी .gitattributes
फाइल की परिभाषा के, और डिफ़ॉल्ट वैश्विक सेटिंग का उपयोग करना core.autocrlf
जिसके लिए है false
(देखें (2))।
(२) http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/
.
वर्तमान निर्देशिका के लिए है न कि रूट डायरेक्टरी