SVN:
La prima volta che aggiungere o importare un file in Subversion, il file viene esaminato per determinare se si tratta di un file binario. Attualmente, Subversion guarda solo i primi 1024 byte del file; se uno qualsiasi dei byte è zero, o se più del 15% non sono caratteri di stampa ASCII, allora Subversion chiama il file binario. Questa euristica potrebbe essere migliorata in futuro, comunque.
http://subversion.apache.org/faq.html#binary-files
Git funziona in modo simile. Git di solito indovina correttamente se un blob contiene dati di testo o binari esaminando l'inizio del contenuto - Controlla ogni occorrenza di un byte zero (NUL "carattere") nei primi 8000 byte.
http://git-scm.com/docs/gitattributes
E da Git fonte:
#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
E @tonfa rende un buon punto che "Si noti inoltre che l'unico posto dove si prende cura di un file di testo di essere vs .binary è per la visualizzazione di diff e per l'unione, il formato di archiviazione non gli interessa ".
Sia Git che Mercurial sono open source, puoi guardare il codice e scoprire esattamente cosa fanno. –
http://mercurial.selenic.com/wiki/BinaryFiles – crowne
possibile duplicato di http://stackoverflow.com/questions/6855712/git-treats-text-file-as-a-binary per la parte Git (senza tag) –