SVN:
La primera vez que agregar o importar un archivo en Subversion, el archivo es examinado para determinar si se trata de un archivo binario. Actualmente, Subversion solo mira los primeros 1024 bytes del archivo; si alguno de los bytes es cero, o si más del 15% no son caracteres de impresión ASCII, Subversion llama al archivo binario. Sin embargo, esta heurística podría mejorarse en el futuro.
http://subversion.apache.org/faq.html#binary-files
Git funciona de una manera similar. Por lo general, Git adivina correctamente si un blob contiene texto o datos binarios al examinar el comienzo del contenido. Comprueba si se produce un byte cero (NUL "carácter") en los primeros 8000 bytes.
http://git-scm.com/docs/gitattributes
Y a partir de Git fuente:
#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
Y @tonfa hace un buen punto de que "también en cuenta que el único lugar en el que se preocupa por ser un archivo de texto vs. .binary es para mostrar diff, y para hacer fusiones. El formato de almacenamiento no se preocupa por eso ".
Tanto Git como Mercurial son de código abierto, puedes mirar el código y descubrir exactamente lo que hacen. –
http://mercurial.selenic.com/wiki/BinaryFiles – crowne
posible duplicado del http://stackoverflow.com/questions/6855712/git-treats-text-file-as-a-binary demasiado localizado para la parte de Git (sin etiquetar) –