मैं Git को बाइनरी के रूप में एक फ़ाइल का इलाज कैसे करूँ?


104

एक मध्यम आकार की परियोजना के साथ समस्या होने पर जहां दृश्य स्टूडियो परियोजना फाइलों को पाठ और विलय के रूप में व्यवहार करने के कारण समस्याएँ होती हैं। मैं फ़ाइल को केवल बाइनरी के रूप में सेट करना चाहता हूं ताकि गिट कभी भी इन फ़ाइलों को ऑटो मर्ज न करें।

क्या इसे करने का कोई तरीका है?


2
लेकिन विजुअल स्टूडियो प्रोजेक्ट फाइलें टेक्स्ट फाइलें हैं और उन्हें मर्ज किए जाने की आवश्यकता है?
सीबी बेली

1
@CharlesBailey वे समय-समय पर सबसे खराब तरीके से विलय कर सकते हैं, अपने सभी बिल्डिंग्स को खराब कर देंगे। मैं XML के साथ फील नहीं करना चाहता, मैं चाहता हूं कि वह मुझसे मैन्युअल रूप से नई फाइलें जोड़ने के लिए कहे या संभवतः एक XML-diffing टूल भी चलाएं जो जानता है कि कैसे ठीक से संभालना है।
michael.bartnett

1
@ michael.bartnett: केवल अगर आप मर्ज को गड़बड़ करते हैं, तो निश्चित रूप से?
सीबी बेली

1
@CharlesBailey बेशक अगर मैं मैन्युअल रूप से विलय कर रहा हूं तो यह कोई समस्या नहीं है। लेकिन यह कुछ ऐसा नहीं है जिसे मुझे मैन्युअल रूप से मर्ज करना चाहिए। यह आमतौर पर एक बिल्ड आइटम ऐड / रिमूव / एडिट होता है ... जो कि पूरी तरह से ऑटो-मेरिनेट है, लेकिन सामान्य रूप से प्रति लाइन विधि से नहीं। की जाँच करें इस प्रस्तुति धारणा के बारे में अधिक के लिए।
michael.bartnett

@ michael.bartnett: एक बेहतर मर्ज ड्राइवर सेट करें, फिर। जो बिंदु मैं बना रहा था (10 महीने पहले) वह था कि परियोजना फाइलों को विलय किया जा सकता है। व्यक्तिगत रूप से, मैं एक उचित मशीन प्रयास को पूरी तरह से हाथ से करने की तुलना में ठीक करना पसंद करता हूं, जो अनावश्यक काम की तरह लगता है।
सीबी बेली

जवाबों:


135

हाँ, विशेषताओं का उपयोग करते हुए । अपनी .gitattributesफ़ाइल में कुछ ऐसा डालें (यदि यह मौजूद नहीं है तो उसे बनाएं):

*.sln binary
*.suo binary
*.vcxproj binary

यहाँ binaryवास्तव में एक पूर्वनिर्धारित मैक्रो है , जिसके समकक्ष -diff -merge -text

यदि आप अभी भी अंतर देखने में सक्षम हैं, तो आप उपयोग कर सकते हैं:

*.sln -merge -text

इस तरह, *.slnफ़ाइलों को विलय नहीं किया जाएगा, ईओएल को सामान्यीकृत नहीं किया गया है, लेकिन इस बीच अंतर-सक्षम है।


1
यह फ़ाइल कहाँ है
नीव

@ हर जगह एक gitignore फ़ाइल दी जा सकती है, दिए गए जवाब में लिंक द्वारा दिए गए प्रलेखन के अनुसार।
माइकल वाइल्ड

4
@ स्नेव्स: आपको अपने रेपो में या स्थानीय स्तर पर एक बनाने के लिए मिला, जैसे कि ~/.gitattributesऔर फिर चल रहा है git config --global core.attributesfile ~/.gitattributesदेखें stackoverflow.com/questions/28026767/…
jan-glx

यदि वे स्वचालित रूप से मर्ज नहीं किए जाते हैं तो इन फ़ाइलों का क्या होता है? क्या एक संस्करण उठाया गया है या क्या आपको मैन्युअल रूप से मर्ज करना है?
क्लाईड.गॉस्ट

1
@ClydeTheGhost आपको एक चुनना होगा।
माइकल वाइल्ड

6

आपको अपनी .gitattributesफ़ाइल में बाइनरी फ़ाइल विशेषताओं को परिभाषित करना चाहिए (इसे बनाएं यदि यह मौजूद नहीं है) इन पंक्तियों को इसमें डालकर, इसे रोकने के लिए इसे पाठ भिन्न फ़ाइल के रूप में संभालने के लिए:

# Define binary file attributes.
# - Do not treat them as text.
# - Include binary diff in patches instead of "binary files differ."
*.sln     -text diff
*.suo     -text diff
*.vcxproj -text diff
*.gif     -text diff
*.gz      -text diff
*.ico     -text diff
*.jpeg    -text diff   
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.