Я пытаюсь заставить git не изменять окончание строки для любой операции. К сожалению, кажется, что это не так. Я сократил его до следующего тестового примера, в котором есть столько различных механизмов для отключения этого поведения, сколько я смог найти.
- Начните с двух машин (компьютер Windows = A, компьютер Linux = B)
- На обеих машинах:
git config --global core.autocrlf false
- На обеих машинах:
git config --global core.eol crlf
(на всякий случай)
- Создайте новый репозиторий на A. Из пустой папки:
git init --shared
(затем отобразите созданный.git
каталог)- Сделайте новый файл
.gitignore
в репозитории - Создайте новый файл
.gitattributes
в репозитории с единственной строкой:* -text
git add .
, затемgit commit -m "initial commit"
обойти, например, this .git branch master_recv
- Добавить пульты
- Создайте новый файл
document.txt
в репозитории, содержащий CRLF - Фиксация:,
git add -A
затемgit commit -m "<something>"
- Обратите внимание, что A по-
document.txt
прежнему содержит CRLF (и удаление его и сброс с помощью--hard
возвращает версию, все еще с CRLF)
- Подключите весь каталог к компьютеру B
- Добавить новый файл,
new file
содержащий CRLF - Фиксация:,
git add -A
затемgit commit -m "<something>"
- Обратите внимание, что B
document.txt
и B всеnew file
еще содержат CRLF
- Потяните мастера B к A:
git pull <remote> master:master_recv
- A
document.txt
изменилось на LF. Добавленный файлnew file
также содержит LF.
Проблема не возникает, если B - машина Windows.
core.autocrlf
всегда был ложным? Похоже,\n
в вашем репозитории уже есть окончания строк? В вашем репозитории нет настроек для изменения в вашем рабочем каталоге.\n
\r\n
Ответы:
Внутри вашего проекта должен быть
.gitattributes
файл. В большинстве случаев это должно выглядеть, как показано ниже (или на этом снимке экрана ):Измените
* text=auto
на,* text=false
чтобы отключить автоматическую обработку (см. Снимок экрана ).Как это:
Если в вашем проекте нет файла .gitattributes, то окончания строк задаются настройками git. Чтобы изменить настройки git, сделайте следующее:
Перейдите в файл конфигурации в этом каталоге:
1) C: \ ProgramData \ Git \ config
2) Откройте файл конфигурации в Notepad ++ (или в любом другом текстовом редакторе, который вам больше нравится).
3) Измените "autocrlf =" на false.
источник
* text=false
не сбрасывает текст: оно оставляет текст, установленный на строковое значение false. Это имеет тот же эффект, что и оставление текста без указания (а не с определенным значением). Использование* -text
дает ему особую неустановленную настройку. Снятие атрибута text на пути указывает git не предпринимать попытки преобразования конца строки при возврате или оформлении заказа.* text=false
не имеет эффекта. Исправьте, пожалуйста, ответ!Одно простое решение:
git config --global core.autocrlf false
git add --renormalize .
Если преобразования выполняются автоматически, это означает , что в репо есть
.gitattributes
core.eol
директива .В Git 2.8+ (март 2016 г.) проверьте, сохраняется ли преобразование eol с помощью:
источник
autocrlf
СЕГОДНЯ! unsettedautocrlf
эквивалентноfalse
. Вы отстали от модных движений в Git1.8.5.2
.git config core.autocrlf false
упомянув об этом, потому что обычно autocrlf должен бытьtrue
для Windows иinput
для других, но иногда вам нужно что-то особенное для странных крайних случаев. В моем случае я загрузил несколько файлов и хочу записать внесенные мной изменения, чтобы помнить, что я сделал (в отличие от отслеживания изменений кода). Я не знаю, важны ли окончания строк (и хочу, чтобы различия имели смысл по сравнению с «реальным» материалом), поэтому я отключил autocrlf.Я понял. Похоже, что программа SCP преобразовывала окончания строк. Я заметил это, когда попытался намеренно создать файл с окончанием LF, а затем заметил, что при загрузке он отображается как CRLF.
Поскольку это было решение для меня, я принимаю этот ответ, но люди будущего также должны ссылаться на другие ответы для более общего решения.
источник
Из раздела gitattributes (5) Страница руководства "Эффекты"
core.autocrlf
в новом (1.7.2+) Git не используется,core.eol
а правильная установка | отключение текстового атрибута считается более надежным способомисточник
.gitattributes
файле я явно отключил все как текст, верно? Кроме того, я не вижу в нем возможность отключить преобразование (хотя этоcrlf
может не иметь никакого эффекта)?text
и предотвратить любое преобразование, вы должны установить .gitattributes в,* -text
а не в* text=false
.false
не является допустимым значением дляtext
атрибута - git не распознает его и вместо этого вернется к настройке autocrlf по умолчанию. Кроме того, после измененияtext
значения вы должны сделать резервную копию всех файлов из вашего локального репо, выполнить фиксацию, затем восстановить файлы с правильным концом строк по мере необходимости и зафиксировать их обратно. Тогда ваш конец строк больше не будет изменен git.