寻找有关不同源代码控制系统如何区分(或检测)文件类型(二进制与文本)的文章、文档或直观知识。特别令人感兴趣的是 Git 与 Mercurial 相比是如何做到这一点的。
他们是否看:
文件扩展名?
文件签名或内容(即该文件是否为 UTF8)?
各种东西的混合?
SVN:
当您第一次将文件添加或导入到 Subversion 中时,系统会检查该文件以确定它是否是二进制文件。目前,Subversion 只查看文件的前 1024 个字节;如果任何字节为零,或者超过 15% 不是 ASCII 打印字符,则 Subversion 将该文件称为二进制文件。然而,这种启发式将来可能会得到改进。
http://subversion.apache.org/faq.html#binary-files http://subversion.apache.org/faq.html#binary-files
Git 以类似的方式工作。 Git 通常通过检查内容的开头来正确猜测 blob 是否包含文本或二进制数据 - 它检查前 8000 字节中是否出现零字节(NUL“字符”)。
http://git-scm.com/docs/gitattributes 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 http://git.kernel.org/?p=git/git.git;a=blob;f=xdiff-interface.c;h=0e2c169227ad29b5bf546c6c1b97e1a1d8ed7409;hb=HEAD
@tonfa 提出了一个很好的观点:“另请注意,它关心文件是文本还是二进制的唯一地方是用于显示差异和进行合并。存储格式不关心它。”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)