क्या द्विआधारी फ़ाइलों के साथ अच्छा है?


99

क्या द्विआधारी फ़ाइलों के साथ अच्छा है?

अगर मेरे पास बहुत सी असम्पीडित फ़ाइलें संशोधित की जा रही हैं, और कई संपीड़ित फ़ाइलें कभी (या लगभग कभी भी) संशोधित नहीं हुई हैं, तो क्या यह अच्छी तरह से संभाल पाएगी? उदाहरण के लिए, यदि मैं मध्य को सम्मिलित करता हूं या हटाता हूं और अंत के पास डेटा सम्मिलित करता हूं तो वह इसे नोट कर लेगा जैसा कि वह पाठ के साथ करता है?

अगर git बाइनरी फ़ाइलों के साथ अच्छा नहीं है, तो मैं किस टूल पर विचार कर सकता हूं?


1
द्विआधारी के साथ बहुत अच्छा है - मैं इसे खुद का उपयोग करता हूं
टेकनकोलागी

यह थोड़े सत्य है। आप अपना / घर गिट संशोधन के तहत रख सकते हैं और यह बहुत अच्छी तरह से काम करना चाहिए।
Lo11c Faure-Lacroix

1
यह उस सवाल की भावना में नहीं है, जो स्पष्ट रूप से इस बात पर चिंतित था कि क्या बाइनरी फाइलें उनके (शायद रिपॉजिटरी ब्लोट और प्रदर्शन कारणों के लिए) अलग-अलग थीं। हालाँकि, मैंने इसे डाउनवोट नहीं किया (और यह प्रतीत होता है कि जिसने भी इसे हटाया है)।
कोरीवर्ड

1
नोट: आपके पास अब अपने बायनेरिज़ को स्टोर करने के लिए git-lts है: stackoverflow.com/a/29530784/6309
VonC

1
यह .गित फ़ोल्डर को फुलाता है?
निखिल

जवाबों:


48

बॉक्स से बाहर, git आसानी से बाइनरी फ़ाइलों को अपने सूचकांक में जोड़ सकता है, और उन्हें एक कुशल तरीके से संग्रहीत भी कर सकता है जब तक कि आप बड़ी असंपीड़ित फ़ाइलों पर लगातार अपडेट नहीं करते हैं।

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

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


26
मुझे यह बताना होगा कि बाइनरी फ़ाइलें परिवर्तन एक समस्या नहीं हैं, कई स्थानों पर परिवर्तन कर रहे हैं और फिर उन्हें मर्ज करने की कोशिश कर रहे हैं।
विंस्टन इर्वर्ट

15
git अर्थपूर्ण अंतर उत्पन्न कर सकता है। के साथ बनाया गया एक अंतर git diff --binaryबाइनरी फ़ाइलों को पैच करने में सक्षम होगा।
सीबी बेली

46

अन्य उत्तरों के अलावा।

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

    diff --git a/gitweb/git-favicon.png b/gitweb/git-favicon.png
    index de637c0608090162a6ce6b51d5f9bfe512cf8bcf..aae35a70e70351fe6dcb3e905e2e388cf0cb0ac3 100
    GIT binary patch
    delta 85
    zcmZ3&SUf?+pEJNG#Pt9J149GD|NsBH{?u>)*{Yr{jv*Y^lOtGJcy4sCvGS>LGzvuT
    nGSco!%*slUXkjQ0+{(x>@rZKt$^5c~Kn)C@u6{1-oD!M<s|Fj6
    
    delta 135
    zcmXS3!Z<;to+rR3#Pt9J149GDe=s<ftM(tr<t*@sEM{Qf76xHPhFNnYfP!|OE{-7;
    zjI0MY3OYE5upapO?DR{I1pyyR7cx(jY7y^{FfMCvb5IaiQM`NJfeQjFwttKJyJNq@
    hveI=@x=fAo=hV3$-MIWu9%vGSr>mdKI;RB2CICA_GnfDX
    
  • आप बाइनरी फ़ाइलों, या बाइनरी फ़ाइलों के कुछ हिस्सों के लिए मानव-पठनीय भिन्नता दिखाने के लिए टेक्स्टकॉनव गिट्टवर्ट का उपयोग कर सकते हैं git diff। उदाहरण के लिए * .jpg फाइलों में यह EXIF ​​जानकारी में अंतर हो सकता है, पीडीएफ फाइलों के लिए यह उनके पाठ प्रतिनिधित्व (PDF2text या ऐसा कुछ) के बीच अंतर हो सकता है।

HTH।


5
मुझे gitattributes के बारे में सिखाने के लिए भारी धन्यवाद! संभावनाओं की एक पूरी नई दुनिया खोलता है।
हरमनलोज

15

यदि आपको वास्तव में बड़ी बाइनरी फाइलें मिली हैं, तो आप रिपॉजिटरी के बाहर डेटा स्टोर करने के लिए गिट-एनेक्स का उपयोग कर सकते हैं। बाहर की जाँच करें: http://git-annex.branchable.com/


6
गिट-एनेक्स काफी अद्भुत है, लेकिन शायद उन फ़ाइलों के लिए बेहतर अनुकूल है जो अक्सर बदलते नहीं हैं , उदाहरण के लिए, संगीत फ़ाइलों, चित्रों, पीडीएफ का एक संग्रह, ...
sr_

@sr_ बिल्कुल, इसलिए Git LFS करता है। ऐसा लगता है कि इस प्रकार के उपयोग-मामलों के लिए उपयुक्त कोई संस्करण नियंत्रण प्रणाली नहीं है, जबकि एक वितरित प्रणाली को आधार के रूप में (जैसे गिट)।
मार्क जे। श्मिट

5

मैं ऐसे किसी भी उपकरण के बारे में नहीं जानता जो संस्करण नियंत्रण के लिए बाइनरी फ़ाइलों को अलग करने की कोशिश करता है, लेकिन यह ध्यान देने योग्य है कि Git पाठ फ़ाइलों के लिए भी ऐसा नहीं करता है। Git फ़ाइलों को ब्लब्स के रूप में संग्रहीत करता है, और जब जरूरत होती है तो यह उनके बीच अंतर करता है।

यदि आप फ़ोटोशॉप / इलस्ट्रेटर दस्तावेज़ों जैसे कुछ पर संस्करण नियंत्रण करना चाहते हैं, तो GridIron Flow आपके लिए ट्रिक कर सकता है। यदि आप उन्हें मशीनों के बीच सिंक में रखने की कोशिश कर रहे हैं, तो ड्रॉपबॉक्स या रुपीक्स इसे संभाल सकते हैं, लेकिन वे बुद्धिमान अंतर-आईएनजी नहीं करेंगे।


1
Git कम्युनिटी बुक ( book.git-scm.com/7_how_git_stores_objects.html ) से: "उस स्थान को बचाने के लिए, Git पैकफाइल का उपयोग करता है। यह एक ऐसा प्रारूप है जहां Git केवल उस हिस्से को बचाएगा जो दूसरी फ़ाइल में बदल गया है। , फ़ाइल के लिए एक सूचक के समान है। "
वेन कॉनराड

2
हाँ, यह है कि अगर / जब आप git gcकचरा संग्रह करने के लिए दौड़ते हैं । उसी पृष्ठ से: "चूंकि Git प्रत्येक फ़ाइल के प्रत्येक संस्करण को एक अलग वस्तु के रूप में संग्रहीत करता है, इसलिए यह काफी अक्षम हो सकता है। एक फ़ाइल की कई हज़ार रेखाएँ होने और एक पंक्ति को बदलने की कल्पना करें। Git दूसरी फ़ाइल को संपूर्णता में संग्रहीत करेगा। अंतरिक्ष का एक बड़ा कचरा है। ”
कोरीवर्ड

2
फेयर 'नफ। git स्वचालित रूप से अभी और उसके बाद gc करता है, कम से कम जिस प्रोजेक्ट के लिए मैं इसका उपयोग करता हूं। मुझे नहीं पता कि इसे चलाने के लिए यह तय करने के लिए क्या मीट्रिक का उपयोग किया जाता है - शायद ऐसे पेड़ हैं जो कभी नहीं (या शायद ही कभी) जीसी ट्रिगर करते हैं।
वेन कॉनराड

1
के मैन पेज से git gc: "उपयोगकर्ताओं को अच्छा डिस्क स्थान उपयोग और अच्छा ऑपरेटिंग प्रदर्शन बनाए रखने के लिए प्रत्येक रिपॉजिटरी के भीतर एक नियमित आधार पर इस कार्य को चलाने के लिए प्रोत्साहित किया जाता है। कुछ git कमांड स्वचालित रूप से git gc चला सकते हैं; विवरण के लिए नीचे -auto ध्वज देखें । "
याकूब अककरबूम

1
@KennyEvitt अब एक टन हैं। सार एक है, और कैक्टस एक और है जो पर्दे के पीछे गिट का उपयोग करता है।
कोरीवर्ड

4

अच्छी तरह से बायनेरिज़ के साथ अच्छा है। लेकिन यह बायनेरिज़ को टेक्स्ट फाइल्स की तरह हैंडल नहीं करेगा। यह ऐसा है जैसे आप बाइनरी फ़ाइलों को मर्ज करना चाहते हैं। मेरा मतलब है, एक jpeg पर एक अंतर आपको कुछ भी कभी नहीं लौटाएगा। Git पाठ फ़ाइल के साथ बहुत अच्छी तरह से काम करता है और शायद बाइनरी फ़ाइलों के साथ हर दूसरे समाधान के रूप में बुरा है!


2

यदि आप संस्करण के लिए एक समाधान चाहते हैं तो आप git-lfs पर विचार कर सकते हैं जो आपकी फ़ाइल के लिए हल्का सूचक है।

इसका मतलब है कि जब आप अपने रेपो को क्लोन करते हैं तो यह सभी संस्करणों को डाउनलोड नहीं करता है, लेकिन केवल एक ही जिसे चेक-आउट किया जाता है।

यहाँ इसका उपयोग करने का एक अच्छा ट्यूटोरियल है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.