2008-10-28 23 views
9

मेरे पास मध्यम आकार जावा फ़ाइल है। हर बार जब मैं अपनी फाइलों में से एक में बदलाव करता हूं, BuildTable.java, गिट इसे बड़े बदलाव के रूप में रिपोर्ट करता है, भले ही केवल एक पंक्ति या दो हो। BuildTable.java लगभग 200 लाइनें हैं और इस प्रतिबद्धता में बदलाव ने केवल एक पंक्ति बदल दी है।गिट सोचता है कि जब भी मैं एक छोटा बदलाव करता हूं तो मैं अपनी फ़ाइलों में से एक को फिर से लिख रहा हूं

Git-diff ouputs इस:

--- a/src/BuildTable.java 
+++ b/src/BuildTable.java 
@@ -1 +1 @@ 
-import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport 
\ No newline at end of file 
+import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport 
\ No newline at end of file 

एक करने के बाद Git-लिखें -एक

Created commit fe43985: better error notifications 
3 files changed, 54 insertions(+), 50 deletions(-) 
rewrite src/BuildTable.java (78%) 

Git इस फाइल बाइनरी या कुछ और के रूप में देख रहा है? क्या ये एक दिक्कत है? यदि यह है, तो मैं इसे कैसे ठीक करूं?

उत्तर

20

इसे ठीक करने के लिए, मुझे कोर गिट सेटिंग्स में से किसी एक को बदलने की आवश्यकता नहीं थी, क्योंकि डिफॉल्ट लाइन एंडिंग जेनरेट की गई थी, यह ठीक था कि यह विशेष फ़ाइल उलझ गई थी। इसे ठीक करने के लिए मैं vim खोला और निम्न आदेश

:%s/^M/\r/g 

ध्यान दें कि टाइप करने के लिए मार डाला "^ एम" आप Ctrl-V और फिर Ctrl-M टाइप करने के लिए की है।

+0

मैं दिनों की खोज कर रहा हूं, और आपने मेरी समस्या हल की है। धन्यवाद। – Jared

+0

'sed -i's # \ r # \ n # g'' भी काम करता है –

27

स्पष्ट रूप से, गिट आपके मैक-स्टाइल लाइन एंडिंग (सीआर केवल) पसंद नहीं करता है। इसका diff एल्गोरिदम एलएफ का उपयोग लाइन विभाजक के रूप में करता है।

विंडोज़-शैली (सीआर एलएफ) या यूनिक्स (केवल एलएफ) लाइन अंतराल रखने के लिए अपनी फ़ाइलों को ठीक करें।

+2

ओएस एक्स यूनिक्स की हर दूसरी शैली की तरह एलएफ एंडिंग का उपयोग करता है। –

+8

इसलिए मैक पर 9 "मैक-स्टाइल" लाइन एंडिंग मैक पर मानक थे और केवल मैकोज़ पर। – ddaa

+7

यह बहुत दुखद है कि यह जवाब चार बार घट गया था, जबकि निदान सही था, क्योंकि प्रश्न लेखक ने अपने जवाब में उल्लेख किया था। – ddaa

5

core.autocrlf और core.safecrlfgit-config के साथ सेट करें। ऑब्जेक्ट स्टोर से/स्थानांतरित करते समय यह गिट को स्वचालित रूप से पंक्ति समाप्ति को परिवर्तित करने का कारण बन जाएगा। आपको "नए" अंतराल को स्टोर करने के लिए प्रतिबद्धता की आवश्यकता हो सकती है।

अपने चिपकाया उदाहरण से परखने के बाद, आप भी "पुरानी शैली मैक लाइन अंत" से पीड़ित हो सकता है (संकेत के लिए ddaa और Charles Bailey करने के लिए धन्यवाद) है, जो किसी भी LF बिना ही नंगे CR रों हैं, एक मामले द्वारा नियंत्रित नहीं Git। यदि यह सत्य है (हेक्स संपादक के साथ जांचें), इस कचरे को 21 वीं शताब्दी प्रारूप में अनुवाद करने के लिए recode जैसे टूल का उपयोग करें, जैसे उचित LF - केवल यूनिक्स लाइन समाप्ति।

+1

core.autocrlf इस मामले में मदद नहीं करेगा (पुरानी शैली मैक लाइन समाप्ति)। वर्तमान गिट स्रोत को उद्धृत करने के लिए: "हम वर्तमान में ऐसे सामानों को बदलने की कोशिश नहीं कर रहे हैं जिनमें नंगे सीआर वर्ण हैं। क्या कोई उस पागल सामान करता है?" –

0
git diff -b 

उपेक्षा पंक्ति के अंत बदल जाता है जब आप मतभेद दिखा।

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

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