Как заставить git использовать LF вместо CR+LF под windows?



Я хочу заставить git проверять файлы под Windows, используя только LF не CR+LF. Я проверил два варианта конфигурации, но я не смог найти правильную комбинацию настроек.



Я хочу, чтобы преобразовать все файлы LF и сохранить LF на файлы.



Примечание: я использовал autocrlf = input но это просто восстанавливает файлы, когда вы их фиксируете. Я хочу заставить его получить их с помощью LF.



вероятно, я не был так ясен: репозиторий уже использует LF но файлы, извлеченные с помощью msysgit, используют CR+LF и я хочу заставить msysgit получить их с LF:форсирование окончаний строк Unix.



>git config --list | grep crlf
core.autocrlf=input
941   5  

5 ответов:

ОП добавил в своем вопросе:

файлы, извлеченные с помощью msysgit, используют CR+LF и я хочу подделать msysgit, чтобы получить их с LF

первый простой шаг все равно будет в .gitattributes file:

*.txt -crlf

, чтобы избежать любого преобразования crlf для файлов с правильным eol.

посмотреть лучшие практики для кросс-платформенной конфигурации git?


но на секунду больше мощный шаг включает в себя драйвер фильтра gitattribute и добавить шаг размазать

filter driver

всякий раз, когда вы будете обновлять свое рабочее дерево, скрипт может, только для файлов, которые вы указали в .gitattributes силу LF eol и любой другой параметр форматирования, который вы хотите применить.
Если "clear" скрипт ничего не делает, вы будете иметь (после фиксации) преобразованные файлы, применяя именно тот формат, который вам нужно, чтобы они следовали.

правильный способ получить концовки LF в Windows-это сначала установить core.autocrlf до false:

git config --global core.autocrlf false

вы должны сделать это, если вы используете msysgit, потому что он устанавливает его в true в настройках системы.

теперь git не будет делать нормализацию конца строки. Если вы хотите, чтобы файлы, которые вы регистрируете, были нормализованы, сделайте это: Set text=auto в своем .gitattributes для всех файлы:

* text=auto

и set core.eol до lf:

git config --global core.eol lf

теперь вы можете также переключатель один РЕПО для возврата каретки и перевода строки (в рабочем каталоге!) под управлением

git config core.eol crlf

после того, как вы сделали конфигурацию, вы можете захотеть, чтобы git нормализовал все файлы в РЕПО. Для этого заходим в корень вашего РЕПО и выполните следующие команды:

git rm --cached -rf .
git diff --cached --name-only -z | xargs -n 50 -0 git add -f

если вы теперь хотите, чтобы git также нормализовал файлы в вашем рабочий каталог выполните следующие команды:

git ls-files -z | xargs -0 rm
git checkout .

я вернусь к этому ответу довольно часто, хотя ни один из них не совсем правильно для меня. Тем не менее, правильный ответ для меня-это смесь других.

то, что я нахожу работает следующее:

 git config --global core.eol lf
 git config --global core.autocrlf input

для репо, которые были извлечены после установки этих глобальных настроек, все будет проверено как то, что есть в репо-надеюсь LF (\n). Любой CRLF будет преобразован в просто LF на регистрацию.

С существующее РЕПО, которое вы уже проверили – которое имеет правильные окончания строк в РЕПО, но не вашу рабочую копию – вы можете запустить следующие команды, чтобы исправить это:

git rm -rf --cached .
git reset --hard HEAD

этого удалить (rm) рекурсивно (r) без приглашения (-f), все файлы, кроме тех, которые вы редактировали (--cached), из текущего каталога (.). Элемент reset затем возвращает все эти файлы в состояние, в котором они имеют свои истинные окончания строк (соответствующие тому, что находится в РЕПО).

Если вам нужно исправить окончания строк файлов в репо, я рекомендую захватить редактор, который позволит вам сделать это навалом, как IntelliJ или Sublime Text, но я уверен, что любой хороший, скорее всего, поддержит это.

контекст

если вы

  1. хотите заставить всех пользователей иметь LF-окончания строк для текстовых файлов и
  2. вы не можете гарантировать, что все пользователи изменят свою конфигурацию git,

вы можете сделать это начиная с Git 2.10. 2.10 или более поздней версии, потому что 2.10 исправлено поведение text=auto вместе с eol=lf. источник.

решение

поставить .gitattributes файл в корне ваш репозиторий git имеет следующее содержимое:

* text=auto eol=lf

совершить его.

дополнительные настройки

вы также можете добавить .editorconfig в корне вашего репозитория, чтобы гарантировать, что современный инструмент создает новые файлы с нужными окончаниями строк.

# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

core.autocrlf=input правый настройки, что вы хотите, но вы могли бы сделать git update-index --refresh и/или git reset --hard чтобы изменения вступили в силу.

С core.autocrlf значение input, git не будет применять преобразование новой строки при выписке (поэтому, если у вас есть LF в репо, вы получите LF), но он будет уверен, что в случае, если вы испортите и введете некоторые CRLFs в рабочую копию каким-то образом, они не попадут в репо.

Comments

    Ничего не найдено.