Как заставить 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
первый простой шаг все равно будет в :
*.txt -crlf
, чтобы избежать любого преобразования crlf для файлов с правильным eol.
посмотреть рекомендации по кросс-платформенной конфигурации git?
но еще секунда мощный шаг включает в себя драйвер фильтра gitattribute и добавьте шаг smudge
всякий раз, когда вы будете обновлять свое рабочее дерево, скрипт может, только для файлов, указанных в .gitattributes
силу LF eol
и любой другой параметр форматирования, который вы хотите применить.
Если "clear
" скрипт ничего не делает, у вас будет (после фиксации) преобразованы ваши файлы, применяя именно тот формат, который вам нужно, чтобы они следовали.
правильный способ получить LF-окончания в Windows-это сначала установить core.autocrlf
to false
:
git config --global core.autocrlf false
вы должны сделать это, если вы используете msysgit, потому что он устанавливает его в true
в настройках системы.
теперь git не будет делать нормализации окончания строки. Если вы хотите, чтобы файлы, которые вы регистрируете, были нормализованы, сделайте следующее: Set text=auto
в своем .gitattributes
для всех файлы:
* text=auto
и set core.eol
to lf
:
git config --global core.eol lf
теперь вы можете также переключите одиночные РЕПО на crlf (в рабочем каталоге!) путем бега
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
будет преобразован в just LF
на регистрацию.
С существующее РЕПО, которое вы уже проверили – которое имеет правильные окончания строк в РЕПО, но не вашу рабочую копию – вы можете запустить следующие команды, чтобы исправить это:
git rm -rf --cached .
git reset --hard HEAD
этого удалить (rm
) рекурсивно (r
) без приглашения (-f
), все файлы, кроме тех, которые вы редактировали (--cached
), из текущего каталога (.
). The 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 в рабочую копию, они не будут пробираться в репо.