2013-11-14 11 views
9

मेरे पास वीएस प्रोजेक्ट के साथ विंडोज मशीन है और मैं सिटविन पर्यावरण से गिट सहित विजुअल स्टूडियो और टूल्स दोनों का उपयोग करता हूं। कभी-कभी मुझे संपादन के बाद फ़ाइलों में अलग-अलग पंक्ति समाप्ति मिलती है। मैं रेपो पर जाने से पहले फाइलों की लाइन अंतहीनता की जांच करने के लिए सरल समाधान चाहता हूं। गिट का core.safecrlf मुझे लगता है कि सही बात है। निम्नलिखित मानकों के साथगिट core.safecrlf समान लाइन समाप्ति वाली फ़ाइलों पर विभिन्न व्यवहार

फ़ाइलें A और B: अब मैं एक अजीब व्यवहार है

$file A 
A: HTML document, UTF-8 Unicode text, with CRLF line terminators 
$file B 
B: HTML document, UTF-8 Unicode (with BOM) text, with CRLF line terminators 

फ़ाइल एक पहले से ही रेपो में है, फ़ाइल बी नया एक है। नोट, दोनों में सीआरएलएफ लाइन अंत है। अब उन्हें चरणबद्ध करने का प्रयास करें, core.safecrlftrue है।

$git add A # ok 
$git add B # fails 
fatal: CRLF would be replaced by LF in B. 

Am core.safecrlf सही ढंग से उपयोग? या शायद मुझे फाइलों की जांच करने के लिए हुक लिखना होगा?

नोट्स:

  • अलग फ़ाइल एन्कोडिंग (साथ और बीओएम के बिना) के साथ की कोशिश की, कोई फर्क नहीं।
  • वहाँ Git में core.autocrlf सुविधा से संबंधित है, टैग में जोड़ा (Cygwin के तहत स्रोतों से संकलित)
  • Git संस्करण 1.8.5.rc1.17.g0ecd94d

संपादित करें (Stackoverflow core.safecrlf के लिए कोई टैग है) # 1: core.autocrlf की जांच की - यह input था। false में बदल गया, अब मैं दोनों फाइलें जोड़ सकता हूं। क्यूं कर?

उत्तर

23

आपके बाद के संपादन के अनुसार core.autocrlf = input मूल सेटिंग थी। इस सेटिंग के साथ CRLF को रिपॉजिटरी में चेक किए जाने पर LF में परिवर्तित किया गया है और चेक आउट होने पर को रखा जाता है। इसका मतलब यह है कि गैर यूनिक्स लाइन एंडिंग्स नोटपैड जैसे नोटपैड फ़ाइल के चेक आउट संस्करण की उपस्थिति को गड़बड़ कर देगा। यह एक विशाल लंबी लाइन होगी।

FWIW core.autocrlf = input यूनिक्स सिस्टम पर पसंदीदा सेटिंग है और डिफ़ॉल्ट cygwin बिल्डिंग का उपयोग शायद इसे इस तरह से सेट करें। Windows में अनुशंसित सेटिंग core.autocrlf = true जो है msysgit क्या सिफारिश की गई है

core.safecrlf = true फ़ाइल में जानने के लिए बदल गया है और संभवतः क्षतिग्रस्त फ़ाइल जो मामले हो सकता है अगर नोटपैड संपादक थे में परिणाम होगा अगर एक फ़ाइल के रूपांतरण को रोकता है। यही कारण है कि फ़ाइल बी को निरस्त कर दिया गया था क्योंकि यह नोटपैड जैसे संपादक में गड़बड़ हो जाएगा। core.SAFEcrlf और core.AUTOcrlf के बीच का अंतर ध्यान दिया जाना चाहिए।यह में से एक है git लाइन समाप्ति

core.autocrlf = false परवाह नहीं है। यह फाइलों की जांच करेगा और फाइलों की जांच करेगा, यही कारण है कि अब काम करता है। यह बहुत स्मार्ट नहीं है और इसकी अनुशंसा नहीं की जाती है क्योंकि यह विंडोज़ और यूनिक्स सिस्टम दोनों पर संपादित किए जाने पर समस्याएं उत्पन्न करती है और यदि अन्य उपयोगकर्ता core.autocrlf सेटिंग्स अलग-अलग हैं और फ़ाइल समाप्ति को बदलते हैं।

मेरा अपना वरीयता विंडोज पर input को core.autocrlf स्थापित करने के लिए है अगर सभी विंडोज परियोजना पर संपादकों और अन्य पाठ फ़ाइल प्रसंस्करण उपकरण, के बारे में पता न खत्म होने वाली यूनिक्स लाइन कर रहे हैं अन्यथा विंडोज के लिए core.autocrlf = true और यूनिक्स के लिए core.autocrlf = input पर सेट करें। किसी भी मामले में यह दृष्टिकोण .gitattributes फ़ाइल की श्रेष्ठ विधि से बाहर हो गया है।

.gitattributes फ़ाइल विधि फ़ाइल नाम के आधार पर फ़ाइलों को संसाधित करती है और सभी उपयोगकर्ताओं के वातावरण में रखी जाती है क्योंकि इसे .gitignore जैसी कार्यशील निर्देशिका में चेक किया जाता है। आपके प्रोजेक्ट के लिए प्रासंगिक फ़ाइल नामों और प्रकारों के लिए सेटिंग्स को .gitattributes में जोड़ा जाना चाहिए। यदि आपका नाम .gitattributes में मेल नहीं खाता है तो आपकी कॉन्फ़िगरेशन स्थानीय कोर.autocrlf और core.safecrlf सेटिंग्स पर वापस आती है। .gitattributes के शीर्ष पर * text=auto जोड़ना git का कारण होगा जो फ़ाइल नामों पर सबसे अच्छा अनुमान लगाने के लिए बाद में .gitattributes सेटिंग्स से मेल नहीं खाता है।

यह वेब पेज, Mind the End of Your Line मुझे इस मुद्दे को बेहतर ढंग से समझने में मदद करता है। आप इस मुद्दे पर अधिक पृष्ठभूमि के लिए पढ़ सकते हैं।

1

सीआर एलएफ लाइन समाप्ति विकल्प समझने में आसान नहीं हैं। विवरण के लिए दो स्थान हैं जिनमें यह गिट-एट्रिब्यूट्स और गिट-कॉन्फ़िगरेशन मैनुअल दोनों में शामिल है।

प्रारंभ में ऑटोक्राल्फ़ सेटिंग्स थीं, और फिर ऐसे नए संस्करण थे जिनमें कुछ संभावित असंगतताएं थीं (यानी अप्रत्याशित चीजें जो आप इंगित करते हैं)।

मैं ईओएल = एलएफ सेट करता हूं, जो सभी टेक्स्ट फ़ाइलों को एलएफ लाइन एंडिंग के रूप में प्रतिबद्ध करता है (आप गुणों को सेट कर सकते हैं कि किस फाइल को टेक्स्ट माना जाता है) और फिर राउंड ट्रिप चेक करने के लिए सुरक्षितक्रैल्फ जोड़ें।

संबंधित मुद्दे