Я хочу , чтобы заставить ублюдка к проверке файлов в Windows , используя только LF
не CR+LF
. Я проверил два варианта конфигурации, но мне не удалось найти правильную комбинацию настроек.
Я хочу, чтобы он конвертировал все файлы LF
и сохранял LF
их.
Примечание: я использовал, autocrlf = input
но это просто восстанавливает файлы, когда вы их фиксируете. Я хочу заставить его использовать их LF
.
Возможно, я не был так ясен: репозиторий уже используется, LF
но файлы, извлеченные с помощью msysgit, используют, CR+LF
и я хочу заставить msysgit получить их LF
: форсировать окончания строк Unix .
>git config --list | grep crlf
core.autocrlf=input
autocrlf=input
это правильный вариант. Конечно, это не защитит вас от файлов, которые действительно естьcr+lf
в хранилище, или от создания файловcr+lf
в другом инструменте перед добавлением их в git. Какие у вас проблемы, что это не работает?LF
но когда я получаю их под Windows, msysgit преобразует их вCR+LF
.autocrlf
установленномinput
значении git оставляетlf
переводы строк в покое. Можете ли вы опубликовать выводgit config
?Ответы:
ОП добавил в своем вопросе:
Первый простой шаг все равно будет в
.gitattributes
файле:(как отмечено в комментариях по внуке , ссылаясь на
.gitattributes
Конец линии конверсии ), чтобы избежать каких - либоCRLF
преобразований для файлов с правильнымeol
.И я всегда рекомендовал
git config --global core.autocrlf false
отключить любое преобразование (которое будет применяться ко всем версионным файлам)Смотрите лучшие практики для кросс-платформенного git config?
Начиная с Git 2.16 (Q1 2018), вы можете сразу же
git add --renormalize .
применить эти.gitattributes
настройки.Но второй более мощный шаг включает в себя драйвер фильтра gitattribute и добавляет шаг smudge.
Всякий раз, когда вы обновляете свое рабочее дерево, сценарий может, только для файлов, которые вы указали в
.gitattributes
, принудительно использоватьLF eol
любой другой параметр форматирования, который вы хотите применить.Если
clear
скрипт " " ничего не делает, вы будете (после фиксации) преобразовывать свои файлы, применяя именно тот формат, который вам нужен.источник
.txt
расширением. Желательно сначала установить это и протестировать в определенной группе, а затем обобщить до * и добавить отрицательное правило,!*.xyz ...
чтобы исключить несколько файлов из этого правила..gitattributes
строки должны выглядеть следующим образом :*.txt text eol=lf
согласно git-scm.com/docs/gitattributes.gitattributes
мы должны сделатьgit add --renormalize .
Правильный способ получить LF окончаний в Windows , это первый набор
core.autocrlf
наfalse
:Вы должны сделать это, если вы используете msysgit, потому что он устанавливает его
true
в своих системных настройках.Теперь git не будет выполнять нормализацию конца строки. Если вы хотите , чтобы файлы вы проверяете в нормированном, сделать это: Установить
text=auto
в вашем.gitattributes
для всех файлов:И установить
core.eol
дляlf
:Теперь вы также можете переключить отдельные репозитории в crlf (в рабочем каталоге!), Запустив
После того, как вы выполните настройку, вы можете захотеть, чтобы git нормализовал все файлы в репозитории . Для этого перейдите в корень вашего репозитория и выполните следующие команды:
Если вы хотите, чтобы git также нормализовал файлы в вашем рабочем каталоге , выполните следующие команды:
источник
git diff --cached --name-only -z | xargs -0 git add
git diff --cached --name-only
?git clone --config core.autocrlf=false <repo path>
.Я возвращаюсь к этому ответу довольно часто, хотя ни один из них не подходит мне. Тем не менее, правильный ответ для меня является смесью других.
То, что я нахожу работы следующие:
Для репо, которые были извлечены после того, как были установлены эти глобальные настройки, все будет проверено как все, что есть в репо - надеюсь
LF
(\n
). ЛюбойCRLF
будет преобразован в толькоLF
при регистрации.В существующем репо, который вы уже выписали - у него правильные окончания строк в репо, но нет рабочей копии - вы можете выполнить следующие команды, чтобы исправить это:
Это приведет к удалению (
rm
) рекурсивно (r
) без prompt (-f
) всех файлов, кроме тех, которые вы редактировали (--cached
), из текущего каталога (.
). Затемreset
он возвращает все эти файлы в состояние, в котором они имеют свои истинные окончания строк (в соответствии с тем, что в репо).Если вам нужно исправить окончание строк файлов в репо, я рекомендую взять редактор, который позволит вам сделать это оптом, например IntelliJ или Sublime Text, но я уверен, что любой хороший, вероятно, поддержит это.
источник
Notepad++
также показывает окончание строки текущего открытого файла в правом нижнем углу. Щелчок правой кнопкой мыши по этому полю позволит вам изменить окончания строк.core.autocrlf input
Опция отменяетcore.eol
настройку, поэтому установка и является излишним. (См. Git-scm.com/docs/git-config )контекст
если ты
Вы можете сделать это, начиная с git 2.10. Требуется 2.10 или более поздняя версия, потому что 2.10 исправило поведение text = auto вместе с eol = lf . Источник .
Решение
Поместите
.gitattributes
файл в корень вашего git-репозитория, имеющий следующее содержимое:Передай это.
Опциональные настройки
Вы также можете добавить
.editorconfig
в корень своего хранилища, чтобы современные инструменты создавали новые файлы с нужными окончаниями строк.источник
core.autocrlf=input
это правильная настройка для того, что вы хотите, но вам, возможно, придется сделать agit update-index --refresh
и / или a,git reset --hard
чтобы изменения вступили в силу.Если
core.autocrlf
установлено значениеinput
git, git не будет применять преобразование новой строки при извлечении (поэтому, если у вас есть LF в репо, вы получите LF), но оно будет следить за тем, чтобы в случае, если вы все испортили и внедрили некоторые CRLF в рабочий копировать как-то, они не попадут в репо.источник
Вы можете найти решение этой проблемы по адресу: https://help.github.com/en/github/using-git/configuring-git-to-handle-line-endings
Упрощенное описание того, как вы можете решить эту проблему в Windows:
Глобальные настройки для концов строк Команда git config core.autocrlf используется для изменения способа обработки концов строк в Git. Требуется один аргумент.
В Windows вы просто передаете true в конфигурацию. Например: C:> git config --global core.autocrlf true
Удачи, надеюсь, я помог.
источник