git
полагается на buffer_is_binary
в своем файле xdiff-interface.c , чтобы определить, является ли файл двоичным или текстовым. Эта функция вызывается из кода слияния Git, среди других мест. Логика проста - файл является двоичным, если в его первых 8000
байтах есть 0
байт. Код:
#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);
}
Таким образом, у вас могут быть очень простые файлы, обнаруживаемые как двоичные, если они закодированы в UTF-16, что является распространенной причиной того, что Git рассматривает файлы как двоичные. Текстовый файл, содержащий
a b
будет обнаружен как двоичный файл, если он будет сохранен в UTF-16, потому что его вывод hexdump
имеет конец файла LF:
0000000 6100 2000 6200 0a00
Например, пробел (0x20
в ASCII или UTF-8) кодируется как 0x0020
в UTF-16, поэтому Git рассматривает двоичный файл.
Так что «подробный» режим не очень поможет, так как вам нужно найти 0
байт. grep
может сделать это в режиме Perl-regex, например grep -obaUP "\x00" filename
, для печати смещений байтов 0
-значных байтов.