Может ли 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
.