2011-01-15 11 views
64

बाइनरी फाइलों के साथ अच्छा है?बाइनरी फाइलों के साथ अच्छा है?

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

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

+0

बाइनरी के साथ बहुत अच्छा - मैं इसे अपने आप को – tekknolagi

+0

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

+0

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

उत्तर

2

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

4

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

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

+1

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

+2

हाँ, यह है कि जब आप कचरा संग्रह करने के लिए 'git gc' चलाते हैं। उसी पृष्ठ से: "चूंकि गिट एक अलग ऑब्जेक्ट के रूप में प्रत्येक फ़ाइल के प्रत्येक संस्करण को स्टोर करता है, इसलिए यह बहुत अक्षम हो सकता है। कल्पना करें कि फाइल को कई हज़ार लाइनें लंबी और एक लाइन बदल रही हैं। गिट दूसरी फाइल को पूरी तरह से स्टोर करेगा, जो कि अंतरिक्ष का एक बड़ा बड़ा अपशिष्ट है। " – coreyward

+2

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

28

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

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

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

+14

मुझे यह इंगित करना होगा कि द्विआधारी फ़ाइलों में परिवर्तन कोई समस्या नहीं है, कई स्थानों में परिवर्तन कर रहा है और फिर उन्हें मर्ज करने का प्रयास कर रहा है। –

+10

गिट सार्थक diffs उत्पन्न कर सकते हैं। 'गिट diff --binary' के साथ बनाया गया एक अंतर बाइनरी फ़ाइलों को पैच करने में सक्षम होगा। –

34

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

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

    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)[email protected]{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`[email protected] 
    [email protected]=fAo=hV3$-MIWu9%vGSr>mdKI;RB2CICA_GnfDX 
    
  • आप textconvgitattribute उपयोग कर सकते हैं git diff शो मानव पठनीय बाइनरी फ़ाइलें, या बाइनरी फ़ाइलों के कुछ हिस्सों के लिए diff है। उदाहरण के लिए * .jpg फ़ाइलों के लिए यह पीडीएफ फाइलों के लिए EXIF ​​जानकारी में अंतर हो सकता है, यह उनके टेक्स्ट प्रस्तुति (पीडीएफ 2 टेक्स्ट या उस तरह कुछ) के बीच अंतर हो सकता है।

एचटीएच।

+3

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

11

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

+2

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

+0

उस लड़के की तरह कहा: गिट-एनेक्स अद्भुत है! – dotancohen

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

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