Попытка зафиксировать файлы Git, но получение:: fatal: LF будет заменено на CRLF в <некоторый файл в репо>
Когда я пытаюсь зафиксировать некоторые измененные файлы, я получаю следующее сообщение об ошибке с TortoiseGit
fatal: LF would be replaced by CRLF in <some file in the repo>
Теперь, прежде чем я получу обычный LF vs CRLF
ответы, я знаю и понимаю, о чем спор. Во-вторых, я также установил свои глобальные настройки на:
core.autocrlf true
В-третьих, у меня есть .gitattributes
файл
Поэтому я хочу убедиться, что файлы должны иметь CRLF
,
Я не понимаю, что это говорит FATAL
и блокирует меня от продолжения. Предупреждение? Конечно! Знаю ли я, что я пытаюсь сделать? Я делаю!
Я просто хочу, чтобы он молча конвертировал и STFU.
Кроме того, если он вынужден заблокировать меня, есть ли способ обновить все файлы в репо, чтобы CRLF
Значит, это предупреждение может потеряться?
Эти репозитории являются частными, поэтому они никогда не будут разрабатываться вне Windows + Visual Studio.
Может кто-нибудь, пожалуйста, помогите без клеветы этой темы в autocrlf TRUE
против autocrlf FALSE
религиозная война.
6 ответов
Вы можете установить core.safecrlf
"предупреждать", если вы хотите только предупреждение, а не фатальную ошибку.
От " git config
"страница управления:
core.safecrlf
Если true, делает git проверку, является ли преобразование CRLF обратимым, когда активно преобразование конца строки. Git проверит, изменяет ли команда файл в рабочем дереве прямо или косвенно.
Например, фиксация файла с последующей проверкой того же файла должна привести к получению исходного файла в рабочем дереве. Если это не относится к текущим настройкам core.autocrlf, git отклонит файл.
Переменная может быть установлена в "warn", и в этом случае git будет только предупреждать о необратимом преобразовании, но продолжит работу.Преобразование CRLF имеет небольшую вероятность повреждения данных.
Когда он включен, git преобразует CRLF в LF во время фиксации и LF в CRLF во время извлечения.
Файл, содержащий смесь LF и CRLF перед фиксацией, не может быть воссоздан git.
Для текстовых файлов это правильно: он исправляет окончания строк так, что в хранилище есть только LF-окончания строк.
Но для двоичных файлов, которые случайно классифицированы как текст, преобразование может повредить данные.Если вы обнаружили такое повреждение на ранней стадии, вы можете легко исправить его, явно указав тип преобразования в
.gitattributes
,
Сразу после фиксации у вас все еще есть исходный файл в вашем рабочем дереве, и этот файл еще не поврежден. Вы можете явно указать git, что этот файл является двоичным, и git будет обрабатывать файл соответствующим образом.К сожалению, желаемый эффект очистки текстовых файлов со смешанными окончаниями строк и нежелательный эффект искажения двоичных файлов невозможно различить.
В обоих случаях CRLF удаляются необратимым образом. Для текстовых файлов это правильно, потому что CRLF являются окончаниями строк, а для двоичных файлов преобразование CRLF портит данные.
Я предпочитаю определять точные файлы или типы файлов, с которыми я хочу заставить eol .gitattributes
только файлы (с core.eol
настройки, которые у вас есть), и оставить autocrlf
ложно.
В случае текстовых полей со смешанным eol, этот пост в блоге предлагает, например:
Если на вашем компьютере установлен Notepad++, просто выполните следующие действия.
- Откройте файл с фатальной проблемой.
- Нажмите
Edit -> EOL Conversion
затем выберите "Формат Windows" или любой другой, который у вас возникла проблема.
Предупреждение, если у вас Git 2.17 или 2.18: регрессия введена в 8462ff4 (" convert_to_git()
: safe_crlf/checksafe
становится int conv_flags
", 2018-01-13, Git 2.17.0) назад в цикле Git 2.17 вызвано autocrlf
переписывает, чтобы выдать предупреждение, несмотря на настройку safecrlf=false
,
Смотрите коммит 6cb0912 (04 июня 2018 г.) Энтони Соттиля ( asottile
)
(Объединено Юнио С Хамано - gitster
- в комитете 8063ff9, 28 июня 2018 г.)
Это отключит crlf фатальное предупреждение.
git config core.autocrlf false
git config core.safecrlf false
Так как ваш репо является частным, вы можете установить git-config
как это:
git config --global core.autocrlf false
Это решит вашу проблему. Если у вас возникнут дополнительные вопросы, вы можете прочитать "Pro git":
Если вы программист Windows, выполняющий проект только для Windows, вы можете отключить эту функцию, записав возврат каретки в хранилище, установив для параметра конфигурации значение false:
$ git config --global core.autocrlf false
Но когда вы сотрудничаете, вам лучше сделать это ниже:
- добавлять
.gitattributes
Github help-Работа с окончаниями строк будет полезна. git config --global core.safecrlf true
- окна:
git config --global core.autocrlf true
- Mac или Linux:
git config --global core.autocrlf input
- окна:
Вы можете прочитать конфигурацию Git docs-git для получения дополнительной информации.
git config --global core.autocrlf false
будет проверять файлы с CRLF, который не используется для.
Я заметил на Windows, что с core.autocrlf true
Git не любит файлы с LF и core.autocrlf input
не любит CRLF.
Итак: передайте CRLF файлы с core.autocrlf true
и LF файлы с core.autocrlf input
(или конвертировать их в CRLF).
Обычно файлы с LF автоматически генерируются генераторами кода (например, https://start.spring.io/ или http://yeoman.io/).
С файлом.gitattributes используйте
*.h text=auto
*.cpp text=auto
*.txt text=auto
как описано в https://git-scm.com/docs/gitattributes.