builtin_diff()
1 вызовы diff_filespec_is_binary()
, который вызывает buffer_is_binary()
, который проверяет любое вхождение нулевого байта (NUL «символ») в первых 8000 байтах (или всей длине, если короче).
Я не вижу, чтобы этот тест «является ли он двоичным?» Явно представлен в любой команде.
git merge-file
напрямую использует buffer_is_binary()
, поэтому вы можете использовать его:
git merge-file /dev/null /dev/null file-to-test
Похоже, что выдает сообщение об ошибке типа error: Cannot merge binary files: file-to-test
и выдает состояние выхода 255, когдадан бинарный файл.Я не уверен, что хотел бы полагаться на это поведение.
Возможно, git diff --numstat
будет более надежным:
isBinary() {
p=$(printf '%s\t-\t' -)
t=$(git diff --no-index --numstat /dev/null "$1")
case "$t" in "$p"*) return 0 ;; esac
return 1
}
isBinary file-to-test && echo binary || echo not binary
Для двоичных файлов вывод --numstat
должен начинаться с-
TAB -
TAB, поэтому мы просто проверяем это.
1 builtin_diff()
имеет строки типа Binary files %s and %s differ
, которые должны быть знакомы.