Git содержит код для определения , является ли файл текстовым или двоичным.
Если в файле много нулевых (ASCII NUL) байтов, то этофайл считается двоичным.То же самое относится и к некоторым другим двоичным шаблонам.
Git использует этот код по умолчанию, чтобы решить, показывать ли вам diff, когда git diff
обнаруживает некоторые изменения в каком-либо файле.Если файл выглядит как двоичный, Git говорит, что «двоичные файлы отличаются» (по умолчанию - вы можете сделать так, чтобы он печатал используемую разницу, и, например, git format-patch
вызывает такое поведение).В противном случае файл выглядит как текстовый, так что вы получите обычный diff.
Git и использует этот код для text=auto
в .gitattributes
, но не дляtext
-without- =auto
.Итак:
* text=auto eol=<whatever>
сообщает Git: Каждый раз, когда вы извлекаете файл из индекса в рабочее дерево, применяйте к нему код обнаружения.Если код обнаружения утверждает, что файл представляет собой текстовый файл, примените преобразования конца строки, повторно гидратировав высушенную сублимацией копию файла из индекса в пригодную для использования форму в рабочем дереве.Если код обнаружения утверждает, что файл является двоичным, оставьте его в покое. 1
В отличие от этого, * text eol=<whatever>
говорит Git: Каждый раз, когда вы повторно заполняете файл вдерево работы, примените преобразования конца строки. Ошибка в Git до версии 2.10 заключалась в том, что * text=auto
случайно означало * text
вместо * text=auto
.
1 Поскольку при обнаружении текста иногда, хотя и не так часто, происходит сбой (например, .jpg
файлов изображений), не имеет смысла зависеть от text=auto
.Но это работает большинство времени.