Как заставить 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
5 ответов:
ОП добавил в своем вопросе:
файлы, извлеченные с помощью msysgit, используют
CR+LFи я хочу подделать msysgit, чтобы получить их сLFпервый простой шаг все равно будет в
.gitattributesfile:*.txt -crlf, чтобы избежать любого преобразования crlf для файлов с правильным eol.
посмотреть лучшие практики для кросс-платформенной конфигурации git?
но на секунду больше мощный шаг включает в себя драйвер фильтра gitattribute и добавить шаг размазать
всякий раз, когда вы будете обновлять свое рабочее дерево, скрипт может, только для файлов, которые вы указали в
.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, но я уверен, что любой хороший, скорее всего, поддержит это.
контекст
если вы
- хотите заставить всех пользователей иметь LF-окончания строк для текстовых файлов и
- вы не можете гарантировать, что все пользователи изменят свою конфигурацию 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