В основном .gitattributes
файл имеет * text=auto
. Какова цель text=auto
этого файла?
источник
В основном .gitattributes
файл имеет * text=auto
. Какова цель text=auto
этого файла?
Из документов :
Каждая строка в
.gitattributes
(или.git/info/attributes
) файле имеет форму:pattern attr1 attr2 ...
Итак, здесь шаблон - *
это все файлы, а атрибут - text=auto
.
Что text=auto
делать? Из документации:
Если для текста установлено значение «авто», путь помечается для автоматической нормализации конца строки. Если Git решает, что контент является текстом, его окончания строки нормализуются до LF при возврате.
Каково поведение по умолчанию, если оно не включено?
Неопределенные
Если текстовый атрибут не указан, Git использует переменную конфигурации core.autocrlf, чтобы определить, следует ли преобразовать файл.
Что core.autocrlf
делать? Из документов:
core.autocrlf
Установка для этой переменной значения «истина» почти то же самое, что установка для текстового атрибута значения «авто» для всех файлов, за исключением того, что нормализация текстовых файлов не гарантируется: файлы, содержащие CRLF в репозитории, не будут затронуты. Используйте этот параметр, если вы хотите, чтобы в рабочем каталоге были окончания строк CRLF, даже если в репозитории нет нормализованных окончаний строк. Эта переменная может быть установлена на вход, и в этом случае преобразование вывода не выполняется.
Если вы думаете, что все это ясно, как грязь, вы не одиноки.
Вот что * text=auto
делает в моих словах: когда кто-то фиксирует файл, Git угадывает, является ли этот файл текстовым или нет, и если это так, он фиксирует версию файла, в которой все байты CR + LF заменяются байтами LF. Это не влияет напрямую на то, как файлы выглядят в рабочем дереве, есть другие настройки, которые преобразуют байты LF в байты CR + LF при извлечении файла.
Я бы не рекомендовал класть * text=auto
в .gitattributes
файл. Вместо этого я бы порекомендовал что-то вроде этого:
*.txt text
*.html text
*.css text
*.js text
Это явно указывает, какие файлы являются текстовыми файлами, которые преобразуют CRLF в LF в базе данных объектов (но не обязательно в рабочем дереве). У нас было репо * text=auto
, и Git неправильно угадал для файла изображения, что это текстовый файл, что привело к его повреждению, поскольку он заменил байты CR + LF байтами LF в базе данных объектов. Это было неинтересно отлаживать.
Если вы должны использовать * text=auto
, поместите его как первую строку .gitattributes
, чтобы последующие строки могли переопределить его. Кажется, это становится все более популярной практикой.
everyone
наgit-scm
это, вероятно, потому, что они разрабатывают пакет * nix, и поэтому использование символа новой строки * nix является нормальным .git-scm
из * nix. MacOS использует LF. Только Windows (учитывая только ОС основного потока) использует CRLF. Это усложняет разработчикам, использующим инструменты * nix в Windows, и всем при обмене файлами. См. Также Почему CRLF .*.txt text=auto
и,*.txt text
пожалуйста? Я думал, что все 4 строки в приведенном выше примере должны были бытьtext=auto
, а не толькоtext
после расширения файла. Файлы посадочных мест KiCad, например (расширение ".kicad_mod"), нормализуются с помощью этой строки в их файле gitattributes:*.kicad_mod text=auto
( kicad-pcb.org/libraries/klc/G1.7 ).Это обеспечивает нормализацию окончаний строк. Источник: Kernel.org
источник
When a text file is normalized, its line endings are converted to LF in the repository.
LF
, даже в окнах?Эта конфигурация относится к тому, как обрабатываются окончания строк. Если этот параметр включен, все окончания строк в репозитории преобразуются в LF. Есть и другие флаги, которые определяют, как концы строк преобразуются в вашем рабочем каталоге. Полная информация по проблеме здесь: https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
источник