2013-08-07 3 views
7

एक दोस्त और मैं एक ही समय में एक ही .cs फ़ाइल पर काम कर रहा था और जब विलय विवाद गिट पॉइंट होता है तो वहां एक संघर्ष होता है लेकिन फ़ाइल लोड नहीं होती है सामान्य "HEAD" ">> "सामान क्योंकि .cs फ़ाइलें बाइनरी फ़ाइलें थीं। इसलिए हमने कई चीजें (* .cs टेक्स्ट और इतनी पर) जोड़ दी - हमारे .gitattributes फ़ाइल में गिट बनाने के लिए इसे एक टेक्स्ट फ़ाइल के रूप में माना जाता है जो काम नहीं करता है।गिट कैंट diff या utf-16 एन्कोडिंग में .cs फ़ाइल मर्ज करें

Thats जब हमें एहसास हुआ कि गिट अन्य .cs फ़ाइलों को अलग कर सकता है और सिर्फ यह नहीं। इसका कारण यह है क्योंकि यह यूनिकोड एन्कोडिंग में है क्योंकि इसमें कुछ चीनी वर्ण हैं।

तो हम गिट diff कैसे बनाते हैं या utf-16 या utf-8 प्रारूप में फ़ाइलों को मर्ज करते हैं?

फुरस्ट्रेटिंग चीज यह है कि अगर मैं धक्का देता हूं, तो गिटलैब बिल्कुल दिखाता है कि क्या अलग है। इसलिए मुझे नहीं पता कि गिट सर्वर पर कैसे भिन्न हो सकता है लेकिन बैश के साथ नहीं।

+1

मुझे विश्वास है कि निम्नलिखित प्रश्न एक ही मुद्दे पर चर्चा कर रहे हैं: http://stackoverflow.com/questions/777949/can-i-make-git-recognize-a-utf-16-file-as-text –

+0

हां, मैंने कोशिश की। हालांकि diff इस "@@@@@@@" की तरह प्रदर्शित करता है, इसलिए इसकी बहुत मदद नहीं है और यह – user1879789

+0

विलय नहीं करेगा एक अलग-अलग diff/विलय टूल का उपयोग करने के लिए एक कार्य-आसपास हो सकता है। क्या आपने कोशिश की है? –

उत्तर

4

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

इस तरह सब कुछ गिट जैसे भिन्नता, विलय या जो कुछ भी बिना किसी समस्या के utf8 पाठ पर काम करेगा, लेकिन आपकी कार्यशील प्रति में utf16 होगा, जो दृश्य स्टूडियो को खुश रखेगा।

इस कॉन्फ़िगर करने के लिए आपको लगता है कि उपलब्ध iconv है Git के एक संस्करण का उपयोग कर रहे यह सुनिश्चित कर लें (msysgit के नवीनतम संस्करणों करते हैं) और जोड़ने के अपने ~/.gitconfig फ़ाइल में निम्नलिखित:

[filter "utf16"] 
    clean = iconv -f utf-16le -t utf-8 
    smudge = iconv -f utf-8 -t utf-16le 
    required 

फिर अपने .gitattributes फ़ाइल जोड़ने में:

*.rc filter=utf16 
resource.h filter=utf16 

आप पहले से ही द्विआधारी के रूप में जमा UTF16 में मौजूदा फ़ाइलों है, तो आप उन्हें रिपोजिटरी से हटा दें और फिर से जोड़ उन्हें जरूरत है।

git rm --cached <names-of-utf16-files> 
git commit -am "removed utf16 files" 
git add <names-of-utf16-files> 
git commit -am "added utf16 files as utf8" 

और अब सब कुछ काम करना चाहिए।

+3

इस समाधान से सावधान रहें - .gitconfig 100% उपयोगकर्ता-निर्भर है। मैं इसे * फ़िल्टर * का उपयोग करने की सलाह देता हूं * क्या _you_ देखें और नहीं * * बदलें * क्या संग्रहीत किया जाता है। जैसा कि, अगर कोई और इसे जांचता है (या यदि आप एक या दो साल में करते हैं) इसके बिना .gitconfig लाइन - * आपका कोड संकलित नहीं होगा *। फिल्टर से भिन्न [diff "utf16"] का उपयोग करना बेहतर है, क्योंकि .rc * को भंडार में यूटीएफ -16 के रूप में संग्रहीत किया जाना चाहिए। –

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