Недавно я наткнулся на следующую запись в файле .gitattributes:
"* text=auto !eol"
Что делает !eol
?
Недавно я наткнулся на следующую запись в файле .gitattributes:
"* text=auto !eol"
Что делает !eol
?
Git имеет 2 атрибута, которые относятся к концам строк:
Документация гласит:
Этот атрибут включает и контролирует нормализацию конца строки. Когда текстовый файл нормализуется, его окончания строки преобразуются в LF в репозитории
Это фактически означает, что, когда вы передаете репо, он преобразует линейные окончания в LF
Документация гласит:
Этот атрибут устанавливает определенный стиль окончания строки, который будет использоваться в рабочем каталоге. Он обеспечивает нормализацию конца строки без проверки содержимого, эффективно устанавливая текстовый атрибут.
Итак, в то время как текстовый атрибут влияет на то, как будет выглядеть файл IN REPO, eol
влияет на то, как выглядит файл в рабочем каталоге.
Теперь атрибут может иметь 4 состояния:
установить без значения
Пример: * text
снята с охраны
Пример: * -text
с определенным значением
Пример: * text=auto
неопределенные
Пример: * !text
Итак, * text=auto !eol
означает следующее:
Все файлы имеют атрибут text, установленный в auto, и атрибут eol неуказанный. Читая документацию, мы обнаруживаем, что text = auto означает, что вы разрешаете git решать, является ли файл текстовым, и если он его нормализует (установите ограничения строк в репо на LF).
!eol
означает, что атрибут eol установлен явно неопределенным. В этом случае это то же самое, что вообще не указывать его, инструктируя git посмотреть на настройку конфигурации core.eol, чтобы посмотреть, как справляться с концами строк в рабочем каталоге. Обратите внимание:
Переменная конфигурации core.eol контролирует, какие окончания строк git будут использоваться для нормализованных файлов в вашем рабочем каталоге; по умолчанию используется внутренняя строка, заканчивающаяся для вашей платформы, или CRLF, если установлен core.autocrlf.
Но вы бы использовали! eol в ситуации, подобной следующей:
* text=auto eol=CRLF
test.txt !eol
в основном переопределяя атрибут eol из CRLF до неуказанного для test.txt. Это означает, что для всех файлов, кроме test.txt, git будет конвертировать на EOL ELE в CRLF, но ничего не сделает для test.txt.
* text=auto !eol
означает:
В основном это отключает eol
в соответствии с документацией:
Иногда вам нужно переопределить параметр атрибута для путь к состоянию Unspecified. Это можно сделать, указав имя атрибут с префиксом восклицательного знака!.
eol
выполняет следующие действия:
Этот атрибут устанавливает определенный стиль окончания строки, который будет использоваться в за работой каталог. Он позволяет нормализовать окончание строки без какого-либо контента проверяет, эффективно устанавливает текстовый атрибут.
Краткая версия:
Если Git решает, что содержимое является текстом, его окончание строки нормируется на LF при регистрации. Отмените любую явную настройку eol в каком-то вложенном файле .gitattributes.
См. man gitattributes
:
Each line in gitattributes file is of form:
pattern attr1 attr2 ...
Sometimes you would need to override an setting of an attribute for a path to
Unspecified state. This can be done by listing the name of the attribute
prefixed with an exclamation point !.
text
This attribute enables and controls end-of-line normalization. When a text
file is normalized, its line endings are converted to LF in the
repository. To control what line ending style is used in the working
directory, use the eol attribute for a single file and the core.eol
configuration variable for all text files.
Set to string value "auto"
When text is set to "auto", the path is marked for automatic
end-of-line normalization. If Git decides that the content is text,
its line endings are normalized to LF on checkin.
eol
This attribute sets a specific line-ending style to be used in the working
directory. It enables end-of-line normalization without any content
checks, effectively setting the text attribute.