2011-08-25 15 views
11

मैंने अपना रेपो autocrlf=true के साथ बनाया और फिर कुछ चेकआउट बनाए और autocrlf=false के साथ काम करता है। फिर autocrlf=true (ओएस विन) पर वापस स्विच किया गया। सब कुछ ठीक लग रहा था, जब तक कि मैंने शाखाओं के बीच कुछ विलय शुरू नहीं किया। कई मर्ज विवाद उठ गए, जहां eols बदलने के कारण पूरी फ़ाइल को बदल दिया गया था (मुझे लगता है कि यह उन फाइलें थीं, जिन्हें चेक किया गया था और autocrlf=false के साथ काम किया गया था)।मर्ज विवादों से बचने के लिए जीआईटी भंडार में सीआरएलएफ की मरम्मत कैसे करें

कुछ इतिहास है, जो मेरे लिए लायक है, इसलिए मैं कुछ रेपो बनाने और नए जीवन को शुरू करने के बजाय परिवर्तित रूपांतरण eols के साथ काम करना पसंद करता हूं।

यह मैं कैसे समझते हैं autocrlf (ओएस विन):

मामले यदि autocrlf=true

WorkingTree -> commit -> GITRepository 
CRLF   CRLF to LF  LF 
LF   no conv.  LF 
WorkingTree <- checkout <- GITRepository 
CRLF   LF to CRLF  LF 

मामले यदि autocrlf=false

WorkingTree -> commit -> GITRepository 
CRLF   no conv.  CRLF 
LF   no conv.  LF 
WorkingTree <- checkout <- GITRepository 
CRLF   no conv.  CRLF 
LF   no conv.  LF 

अब मैं autocrlf=false साथ GIT उपयोग करना चाहते हैं, तो मैंने प्रत्येक शाखा को चेकआउट करने का निर्णय लिया, उपयोगिता EOL converter और कॉम के साथ स्रोत फ़ाइलों के eols की मरम्मत सीआरएलएफ के साथ वापस मिलें। मैंने ऐसा किया, लेकिन समय के बाद, अभी भी कुछ फाइलें हैं, जिन्हें मैंने autocrlf से false (या इन फ़ाइलों को पुरानी तय तय करने से विलय करने के लिए नहीं आया था) के बाद शायद चेक आउट नहीं किया गया था? रूपांतरण के दौरान मैंने मास्क * .filetype का उपयोग किया सभी एलएफ को सीआरएलएफ में स्वचालित रूप से संसाधित करना ताकि मेरे लिए ऐसी स्थिति के लिए कोई अन्य स्पष्टीकरण न हो)। मैंने उन सभी को फिर से प्रतिबद्ध करने के लिए touch फ़ाइलों को भी आजमाने की कोशिश की (जैसा कि मैंने यहां कहीं स्टैक ओवरफ्लो में देखा था) लेकिन दिनांक परिवर्तन जीआईटी AFAIK के लिए प्रासंगिक नहीं है। मैंने How to undo the damage of autocrlf भी पढ़ा है, लेकिन यह सुनिश्चित नहीं है कि यह मेरा मामला है, और विज़ार्ड की चाल को भी समझ में नहीं आता है।

मैं इस गड़बड़ी से कैसे दूर हो सकता हूं, कृपया?

+0

क्या आपने 'autocrlf = input' की कोशिश की है? यदि आपका रेपो सार्वजनिक रूप से उपलब्ध नहीं कराया गया था तो आप अपने इतिहास में लाइन एंडिंग को साफ करने के लिए उस और 'फ़िल्टर-शाखा-इंडेक्स-फ़िल्टर' का उपयोग कर सकते हैं – knittl

+1

@knittl: यदि मैं समझता हूं, तो यह एलएफ के साथ इतिहास में सभी कामों को फिर से लिख देगा। क्या मैं सही हू? फिर मुझे चेकआउट (ओएस विन) के बाद 'सीआरएलएफ' प्राप्त करने के लिए शायद 'autocrlf = true' चालू करना होगा। क्या रेपो को सीधे 'सीआरएलएफ' में परिवर्तित करने का विकल्प है और उसके बाद 'autocrlf = false' छोड़ दें? – Andik

+0

एक बार भंडार को सीआरएलएफ में परिवर्तित करने के बाद आपको 'autocrlf = false' प्राप्त करने में सक्षम होना चाहिए, इस प्रकार कोई लाइन समाप्ति परिवर्तित नहीं हो जाती है और फ़ाइल – knittl

उत्तर

1

"रिकर्सिव" रणनीति के लिए गिट मर्ज विकल्प "अनदेखा-स्थान-परिवर्तन" या "अनदेखा-ऑल-स्पेस" का उपयोग करें। यह विकल्प कम से कम 1.7.4.1 में है।

-2

आसान उत्तर: जब तक आप गैर-विंडोज़ के साथ एक्स-प्लेटफार्म देव नहीं कर रहे हैं, तो इसे गलत पर सेट करें। आपके स्रोत नियंत्रण को आपके लिए अपनी फ़ाइलों को बेस्टर्ड करने की आवश्यकता नहीं है। किसी भी शेष मुद्दों को ठीक करने के बाद आपको उड़ान भरनी चाहिए। सुनिश्चित करें कि आपके साथ काम करने वाले अन्य लोगों ने भी इसे झूठा कर दिया है।

+2

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

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