Форсировать окончания строки LF с использованием .gitattributes без потери автоматического текстового/двоичного вывода?

Я хотел бы использовать eol=LF в моем файле .gitattributes, но я бы хотел, чтобы он применим только к файлам, Git автоматически определяет, что это текстовые файлы.

Лучшее, что я могу найти, это определить конкретные расширения/глобусы файлов как текстовые, так и двоичные. Это не идеально, так как список может быть огромным. Я пробовал * text=auto eol=LF, но часть eol=LF, похоже, переопределит часть auto.

Могу ли я принудительно завершать окончания строки LF без каких-либо конкретных настроек git config и без потери автоматического текстового/двоичного вывода?

Ответ 1

Обновление: после комментария @romkyns. Я проверил все и нашел, что мое решение немного неверно. Правильно будет .gitattributes файл со следующим содержимым:

* text=auto

Согласно документации, это гарантирует, что все файлы, которые Git считает текстом, будут иметь нормализованные (LF) окончания строки в репозиторий.


Исходный ответ:

То, что вы хотите записать в .gitattributes, так же просто:

* text=auto
* text eol=lf

Первая строка сообщает Git автоопределять типы файлов (двоичные или текстовые, что по умолчанию является поведением Git в любом случае и, следовательно, может быть опущено), вторая строка рассматривает окончания строк всех обнаруженных текстовых файлов (и только те ) с концом линии LF.

Я тестировал этот параметр с некоторым смешанным двоичным содержимым и некоторыми текстовыми файлами с завершением CRLF и получил ожидаемое преобразование в конец LF.

Ответ 2

Я предлагаю три решения:

МЕТОД 1
Я предполагаю, что большинство ваших файлов рабочего каталога являются текстовыми файлами. Следовательно, он тратит много времени, чтобы добавить определенную строку для каждого типа текстового файла.

Вы можете unset text атрибут для binary файлов в файле .gitattributes. Поскольку существует только несколько типов файлов binary, это не утомительно.

МЕТОД 2
Я думаю, что ваша главная задача - отключить глобальные настройки eol=lf. В соответствии с приоритетом .gitattributes вы можете настроить text=auto в $GIT_DIR/info/attributes с наивысшим приоритетом. Между тем, это влияет только на рабочее дерево.

МЕТОД 3 Полностью удалите .gitattributes из рабочего дерева. Зависит от вашего редактора файлов для окончательного перевода. Я рекомендую Notepad ++, который удобен для преобразования EOL между Unix-стилем и стилем Windows.

Ответ 3

Уровни репозитория git: (Где я должен разместить свой глобальный файл gitattributes?)

-создайте в файле файл .git/info/attributes: * текст = авто

- Для каждого измененного файла при выполнении git add * вы должны быть предупреждены "файл будет иметь свои исходные окончания строки в вашем рабочем каталоге"