SVN:
Khi lần đầu tiên bạn thêm hoặc nhập tệp vào Subversion, tệp được kiểm tra để xác định đó có phải là tệp nhị phân hay không. Hiện tại, Subversion chỉ xem xét 1024 byte đầu tiên của tệp; nếu bất kỳ byte nào bằng 0 hoặc nếu nhiều hơn 15% không phải là ký tự in ASCII, thì Subversion gọi tệp nhị phân. Điều này có thể được cải thiện trong tương lai, tuy nhiên.
http://subversion.apache.org/faq.html#binary-files
Git hoạt động theo cách tương tự. Git thường đoán chính xác liệu một blob có chứa dữ liệu văn bản hoặc nhị phân hay không bằng cách kiểm tra phần đầu của nội dung - Nó kiểm tra bất kỳ sự xuất hiện nào của byte không (NUL "ký tự") trong 8000 byte đầu tiên.
http://git-scm.com/docs/gitattributes
Và từ Git nguồn:
#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
Và @tonfa làm cho một điểm tốt mà "Cũng lưu ý rằng nơi duy nhất nó quan tâm đến một tập tin văn bản được vs nhị phân là dành cho sự khác biệt về ngoại giao, và để thực hiện việc hợp nhất. Định dạng lưu trữ không quan tâm đến nó. "
Cả Git lẫn Mercurial đều là nguồn mở, bạn có thể xem mã và tìm hiểu chính xác những gì họ làm. –
http://mercurial.selenic.com/wiki/BinaryFiles – crowne
bản sao có thể có của http://stackoverflow.com/questions/6855712/git-treats-text-file-as-a-binary được địa phương hóa quá mức cho phần Git (không được gắn thẻ) –