2011-08-18 9 views
9

फ़ाइल के प्रकार (बाइनरी बनाम टेक्स्ट) को अलग-अलग स्रोत नियंत्रण प्रणाली अलग-अलग (या पहचान) के लेख, दस्तावेज़ीकरण या सीधे सिर ज्ञान की तलाश में है। विशेष रुचि यह है कि गिट यह बनाम Mercurial कैसे करता है।लोकप्रिय स्रोत नियंत्रण प्रणाली टेक्स्ट फ़ाइलों से बाइनरी फ़ाइलों को अलग कैसे करती हैं

क्या वे देखते हैं: फ़ाइल एक्सटेंशन? फ़ाइल हस्ताक्षर या सामग्री (यानी यह फ़ाइल यूटीएफ 8 है)? चीजों का मिश्रण?

+0

दोनों गिट और मर्कुरियल ओपन सोर्स हैं, आप कोड देख सकते हैं और पता लगा सकते हैं कि वे क्या करते हैं। –

+2

http://mercurial.selenic.com/wiki/BinaryFiles – crowne

+0

गिट भाग के लिए अत्यधिक स्थानीयकृत http://stackoverflow.com/questions/6855712/git-treats-text-file-as-a-binary के संभावित डुप्लिकेट (untagged) –

उत्तर

9

SVN:

जब आप पहली बार जोड़ सकते हैं या सबवर्सन में कोई फ़ाइल आयात फ़ाइल अगर यह एक बाइनरी फ़ाइल है निर्धारित करने के लिए जांच की जाती है। वर्तमान में, सबवर्सन फ़ाइल के पहले 1024 बाइट्स को देखता है; यदि बाइट्स में से कोई भी शून्य है, या 15% से अधिक ASCII प्रिंटिंग वर्ण नहीं हैं, तो सबवर्जन फ़ाइल बाइनरी को कॉल करता है। हालांकि, भविष्य में इस ह्युरिस्टिक में सुधार किया जा सकता है।

http://subversion.apache.org/faq.html#binary-files

Git एक समान तरीके से काम करता है। गिट आमतौर पर अनुमान लगाता है कि क्या ब्लॉब में सामग्री की शुरुआत की जांच करके टेक्स्ट या बाइनरी डेटा होता है - यह पहले 8000 बाइट्स में शून्य बाइट (एनयूएल "कैरेक्टर") की किसी भी घटना के लिए जांच करता है।

http://git-scm.com/docs/gitattributes

और Git स्रोत से:

#define FIRST_FEW_BYTES 8000 
int buffer_is_binary(const char *ptr, unsigned long size) 
{ 
     if (FIRST_FEW_BYTES < size) 
       size = FIRST_FEW_BYTES; 
     return !!memchr(ptr, 0, size); 
} 

http://git.kernel.org/?p=git/git.git;a=blob;f=xdiff-interface.c;h=0e2c169227ad29b5bf546c6c1b97e1a1d8ed7409;hb=HEAD

और @tonfa है कि "यह भी ध्यान रखें एक अच्छा बिंदु बनाता है कि केवल जगह है जहाँ यह एक फ़ाइल पाठ बनाम होने के बारे में परवाह है बाइनरी difplaying diffing के लिए है, और विलय करने के लिए। भंडारण प्रारूप इसके बारे में परवाह नहीं है। "

+0

+1 –

+0

ग्रेट उत्तर, धन्यवाद। – codenheim

+3

गिट टेक्स्ट और बाइनरी के बीच एक अंतर बनाता है जब यह सीआरएलएफ और एलएफ (autocrlf) के बीच लाइन अंतराल का अनुवाद करता है। कोड थोड़ा अलग है: एनयूएल बाइट वाली फ़ाइलें द्विआधारी हैं। इसके अतिरिक्त, 1 प्रतिशत से अधिक ASCII नियंत्रण बाइट वाली फ़ाइलें बाइनरी भी मानी जाती हैं। Http://git.kernel.org/?p=git/git.git;a=blob;f=convert.c;hb=HEAD देखें, function 'int is_binary' है। –

4

Mercurial फ़ाइल की सामग्री में शून्य चरित्र (\ 0) के कुछ अवसरों के लिए दिखता है। यदि कोई है, तो फ़ाइल को बाइनरी माना जाता है। अन्यथा इसे स्पष्ट रूप से उल्लेख किए जाने तक पाठ के रूप में माना जाता है।

मुझे लगता है कि गिट एक ही दृष्टिकोण का उपयोग करता है।

+2

यह भी ध्यान रखें कि एकमात्र जगह जहां यह टेक्स्ट बनाम बाइनरी होने वाली फ़ाइल के बारे में परवाह करती है, वह डिप्लेइंग डिफ्लिंग के लिए है, और विलय करने के लिए है। भंडारण प्रारूप इसकी परवाह नहीं करता है। गिट ब्लोब निकालने के लिए – tonfa

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

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