2014-11-21 4 views
10

पर नई रिक्त रेखा इसलिए add -ing फाइलों और commit से पहले git diff --check चलाकर उन्हें दो-दो विशिष्ट फाइलों पर path/filename:linenumber: new blank line at EOF मिलती है। अगर मैं उन फ़ाइलों में आखिरी खाली रेखा को हटा देता हूं, तो मुझे कोई संदेश नहीं मिलता है, लेकिन मुझे लगता है कि मेरी फाइलों को एक नई लाइन के साथ समाप्त करने के लिए अच्छी शैली है। आश्चर्यजनक रूप से पर्याप्त, अन्य फाइलें जो मुझे लगता है कि बिल्कुल वही अंत हैं, कोई संदेश न दें। ओएस एक्स योसमेट पर गिट 2.0.1 का उपयोग करके मैं गिट करने के लिए नया हूं। मैं अपने संपादक के रूप में vim का उपयोग करें।गिट: ईओएफ

मैं अपने फ़ाइलों न्यू लाइन के साथ समाप्त करते हुए इस संदेश से परहेज हो सकता है? क्या मुझे इसे अनदेखा करना चाहिए?

उत्तर

16

यहां दो मुद्दे हैं। एक

ए 'नई लाइन "एक वास्तविक खाली पंक्ति (केवल एक" न्यू लाइन "वर्ण है) और एक" न्यू लाइन "है:

  • आप" न्यू लाइन "के बारे में उलझन में हैं बनाम" नई लाइन " वर्तमान लाइन के अंत को चिह्नित करने के लिए विशेष चरित्र का उपयोग किया जाता है।

    सबसे compilers, दुभाषियों और यूनिक्स उपकरण एक न्यू लाइन के साथ समाप्त करने के लिए अपने पाठ फ़ाइलों अस्पष्टता से बचने के लिए जब, नहीं एक "नई लाइन" एक से अधिक फ़ाइलों के साथ काम कर सकता है।

    अधिकांश संपादकों, विम शामिल है, हर पंक्ति के अंत में है कि आवश्यक चरित्र जोड़ने के लिए, अंतिम पंक्ति शामिल है, इसलिए तुम्हारी तरफ करने के लिए सुनिश्चित करना है कि आवश्यकता पूरी की जाती है कुछ भी नहीं है।

    विशेष रूप से EOF पर एक "नई लाइन" जोड़कर नहीं।

  • आप शायद बुरा व्यवहार किया जाता है:

    "न्यू लाइन" चरित्र पारंपरिक रूप से एक "लाइन टर्मिनेटर" यूनिक्स उपकरण, सबसे संकलनकर्ता और विम द्वारा के रूप में व्याख्या की है। इसका मतलब है कि उस चरित्र के बाद जो कुछ भी आता है उसे दूसरी पंक्ति पर माना जाता है। चूंकि वह चरित्र फ़ाइल में आखिरी वाला है, इसलिए उस लाइन को दिखाने का कोई कारण नहीं है जो उपयोगकर्ता के पास नहीं है।

    अलास, अधिकांश जीयूआई संपादक इसे "लाइन विभाजक" के रूप में समझते हैं, जिसका अर्थ है कि यह दो पंक्तियों के बीच अलगाव को चिह्नित करता है और उन संपादकों आमतौर पर उस व्याख्या को पूरा करने के लिए आपकी फ़ाइल के अंत में एक गैर-मौजूदा रेखा दिखाते हैं।

    मैं शायद बहुत अधिक मान रहा हूं, लेकिन ऐसा लगता है कि आप उस गलत व्यवहार के लिए उपयोग किए जाते हैं और अपनी फ़ाइलों के अंत में पूरी तरह से अनावश्यक "नई लाइन" जोड़कर इसकी नकल करने का प्रयास करते हैं।

या तो आप अपनी स्रोत फ़ाइल के तल पर "नई लाइनों" जोड़कर रखने के लिए, विचार है कि त्रुटि संदेश के रूप में उन Git संदेशों पर विचार करना बंद कर स्वरूपण किसी प्रकार का और कोडिंग दिशानिर्देश के रूप में और।

या आप उन बेकार "नई लाइनों" जोड़कर बंद करो।

मैं दूसरा विकल्प के साथ जाना होगा।

+1

वास्तव में, मुझे अब एहसास है कि मैं "नई लाइन" के साथ "नई लाइन" को भ्रमित कर रहा हूं। समस्या की जड़ के लिए इंगित करने के लिए धन्यवाद! –

+1

ग्रेट उत्तर। गिट ने हमेशा शिकायत की है जब मैं ज्यादातर संपादकों का उपयोग करके अंत में एक खाली रेखा नहीं डालता हूं। विम का उपयोग करते समय, यह शिकायत करता है कि मेरे पास अंत में उस खाली रेखा है! यह जानना अच्छा लगता है कि यह सिर्फ इसलिए है क्योंकि संपादक स्वयं लाइनों को अलग-अलग प्रस्तुत करते हैं। –

+1

बाइनरी स्तर पर क्या अंतर है? मेरे लिए "नई लाइन" और "न्यूलाइन" दोनों दिखती हैं "} \ n" – kirilloid

11

git diff documentation से:

--check

चेतावनी दें यदि परिवर्तन खाली स्थान के त्रुटियों परिचय।माना जाता है कि व्हाइटस्पेस त्रुटियों को core.whitespace कॉन्फ़िगरेशन द्वारा नियंत्रित किया जाता है। डिफ़ॉल्ट रूप से, पीछे की जगहों का पीछा करना (लाइनों सहित जो पूरी तरह से सफेद जगहों से युक्त होते हैं) और एक स्पेस कैरेक्टर जिसे तुरंत लाइन के प्रारंभिक इंडेंट के अंदर एक टैब वर्ण के बाद किया जाता है, को व्हाइटस्पेस त्रुटियों के रूप में माना जाता है। यदि समस्याएं मिलती हैं तो शून्य-शून्य स्थिति के साथ बाहर निकलें। --exit-code के साथ संगत नहीं है।

तदनुसार

, git config documentation:

core.whitespace

अल्पविराम सूचना के लिए आम खाली स्थान के समस्याओं की सूची अलग कर दिया। गिट diff color.diff.whitespace का उपयोग उन्हें हाइलाइट करने के लिए करेगा, और गिट लागू --witespace = त्रुटि उन्हें त्रुटियों के रूप में मानेंगे। आप उनमें से किसी को (जैसे -trailing-space) को निष्क्रिय करने के - उपसर्ग कर सकते हैं:

  • blank-at-eol व्यवहार करता है (डिफ़ॉल्ट रूप से सक्षम) एक त्रुटि के रूप में पंक्ति के अंत में व्हाइटस्पेस अनुगामी।

  • space-before-tab एक स्पेस कैरेक्टर का इलाज करता है जो लाइन के प्रारंभिक इंडेंट भाग में डिफ़ॉल्ट रूप से एक त्रुटि (डिफ़ॉल्ट रूप से सक्षम) के रूप में दिखाई देता है।

  • indent-with-non-tab एक रेखा के रूप में समकक्ष टैब के बजाय अंतरिक्ष वर्णों के साथ इंडेंट किया गया है जो डिफ़ॉल्ट रूप से सक्षम नहीं है (डिफ़ॉल्ट रूप से सक्षम नहीं है)।

  • tab-in-indent लाइन के शुरुआती इंडेंट हिस्से में एक त्रुटि के रूप में एक टैब वर्ण का व्यवहार करता है (डिफ़ॉल्ट रूप से सक्षम नहीं)।

  • blank-at-eof फ़ाइल के अंत में एक त्रुटि (डिफ़ॉल्ट रूप से सक्षम) के रूप में जोड़े गए खाली रेखाओं का इलाज करता है।

  • trailing-spaceblank-at-eol और blank-at-eof दोनों को कवर करने के लिए एक छोटा सा हाथ है।

  • cr-at-eol व्यवहार करता है लाइन टर्मिनेटर, यानी इसके साथ के हिस्से के रूप पंक्ति के अंत में एक गाड़ी-रिटर्न, अनुगामी अंतरिक्ष ट्रिगर नहीं करता है, तो इस तरह के एक कैरिज-वापसी से पहले चरित्र एक खाली स्थान के (से सक्षम नहीं नहीं है चूक)।

  • tabwidth=<n> बताती है कि कितने चरित्र की स्थिति एक टैब पर है; यह इंडेंट-टू-गैर-टैब के लिए प्रासंगिक है और जब गिट टैब-इन-इंडेंट त्रुटियों को हल करता है। डिफ़ॉल्ट टैब चौड़ाई 8. अनुमत मान 1 63. करने के लिए


आप देख सकते हैं, blank-at-eof डिफ़ॉल्ट रूप से सक्षम हैं। आप को core.whitespace कॉन्फ़िगरेशन में या वैकल्पिक रूप से अपने core.whitespace कॉन्फ़िगरेशन का उपयोग करके इसे अक्षम कर सकते हैं।

+0

यह वास्तव में समस्या हल करता है लेकिन दूसरा जवाब समस्या की वास्तविक जड़ को इंगित करता है। अच्छा जवाब हालांकि! –

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