В чем разница между "* text = auto eol = lf" и "* text eol = lf" в .gitattributes? - PullRequest
0 голосов
/ 02 июля 2019

Это очень похоже на этот вопрос: В чем разница между `* text = auto` и` * text eol = lf` в .gitattributes?

Но я специально спрашиваю, почему я должен использовать * text=auto eol=lf вместо * text eol=lf или наоборот?

Насколько я понимаю, eol отменяет настройку text, так какой смысл использовать первую? Есть ли разница? Если так - как?

Я читаю очень много веб-сайтов и вопросов / ответов о переполнении стека, но я все еще в замешательстве. Особенно, когда я вижу это изменение: https://github.com/git/git/blob/master/Documentation/RelNotes/2.10.0.txt#L248

Я нахожу формулировку изменения настолько трудной для чтения, что теперь я не самый мудрый. Может кто-нибудь пролить свет на это?

1 Ответ

1 голос
/ 02 июля 2019

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.Но это работает большинство времени.

...