Может ли git.gitattributes обрабатывать все файлы как двоичные, за исключением нескольких исключений?

У меня есть особая потребность в git для обработки большинства расширений файлов как двоичных, за исключением нескольких расширений.

Я хотел бы обрабатывать все расширения файлов как двоичные,.pdf.doc.xls и т.д., за исключением текстовых файлов, таких как .txt.rb.py и т.д.

Я попытался настроить .gitattributes, как показано ниже, чтобы узнать, как это может работать:

# cat .gitattributes 
* binary
*.txt text

Я думал, что, возможно, порядок в файле конфигурации имеет значение, но он не выглядит. В приведенной выше конфигурации все файлы по-прежнему рассматриваются как двоичные.

Есть ли способ настроить .gitattributes или git любой другой способ обработки всех файлов одним способом, как двоичный, за исключением нескольких исключений?

Обновление 1:

Я попробовал .gitattributes, описанные ниже. Он работает!

# cat .gitattributes 
*.txt crlf diff
* binary


# git diff
diff --git a/file b/file
index d929b94..bee5cb1 100644
Binary files a/file and b/file differ

diff --git a/file.txt b/file.txt
index 632ae98..93d22b0 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1,3 @@
 Hey this is a .txt file
+Adding another line
+A new line

Обновление 2:

Я считаю, что crlf и текст одинаковы, то есть две следующие конфигурации для .gitattributes одинаковы:

# cat .gitattributes 
*.txt crlf diff
* binary

# cat .gitattributes 
*.txt text diff
* binary

Ответ 1

binary - макрос, устанавливающий атрибут crlf и diff (на самом деле здесь их не удается)
См. " ИСПОЛЬЗОВАНИЕ МАКРОМ АТРИБУТОВ" из .gitattribute man page.

Как только атрибут установлен или отменен, если его нельзя изменить с помощью следующего правила.

Итак, вы можете попробовать:

* binary
*.txt crlf diff

Таким образом, crlf и diff устанавливаются для файлов *.txt, они не будут отменены двоичным макросом для тех же файлов *.txt, в то время как они будут отменены для всех других файлов.

Из 2009 commit b9d14ff эти правила должны идти:

  • из более общих
  • к более конкретным.
    ( "более поздняя строка переопределяет более раннюю строку" )

Ответ 2

git не имеет понятия "двоичных" и "текстовых" файлов. Все это определяется как набор атрибутов, которые определяют, как мы должны делать слияния, разности, преобразования CR/LF, обрабатывать пробелы, применять фильтры и циллионы других вещей.

binary и синтаксис, подобный

*.o binary
на самом деле является макро-основанной, т.е. binary является макросом, который расширяется до целого множества различных атрибутов, которые определяют слияние, различение, обработку CR/LF и т.д.

Нет макроса text, насколько я вижу. binary расширяется до -crlf -diff, поэтому отключить двоичный код и вернуться к обработке текстового стиля, как представляется, crlf diff.