cod*_*eim 9 svn git version-control mercurial
寻找有关不同源控制系统如何区分(或检测)文件类型(二进制文本与文本)的文章,文档或直接知识.特别感兴趣的是Git如何与Mercurial合作.
他们看看:文件扩展名?文件签名或内容(即这个文件是UTF8)?各种各样的东西?
SVN:
首次向Subversion添加或导入文件时,将检查该文件以确定它是否为二进制文件.目前,Subversion只查看文件的前1024个字节; 如果任何字节为零,或者如果超过15%不是ASCII打印字符,则Subversion调用文件二进制文件.然而,这种启发式方法在未来可能会有所改进.
http://subversion.apache.org/faq.html#binary-files
Git以类似的方式工作.Git通常通过检查内容的开头来正确猜测blob是否包含文本或二进制数据 - 它检查前8000字节中是否出现零字节(NUL"字符").
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);
}
Run Code Online (Sandbox Code Playgroud)
并且@tonfa提出了一个很好的观点,"还要注意,它关注文件与文本与二进制文件的唯一关系是用于diplaying diff,以及进行合并.存储格式并不关心它."
归档时间: |
|
查看次数: |
990 次 |
最近记录: |