Отключить git конверсии EOL
Изменить: полностью переписано для релевантности
Я пытаюсь получить git, чтобы не менять никаких окончаний строк для любой операции. К сожалению, похоже, что это не имеет значения. Я сократил его до следующего тестового примера, в котором так много разных механизмов для отключения такого поведения, как я мог найти. Изменить: добавлено большинство точных команд.
- Начните с двух компьютеров (компьютер Windows = A, Linux computer = 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
- Commit:
git add -A
, затем git commit -m "<something>"
- Обратите внимание, что A
document.txt
все еще содержит CRLF (и удаление его и сброс с помощью --hard
возвращает версию с CRLF)
- SCP весь каталог для компьютера B
- Добавить новый файл
new file
, содержащий CRLF
- Commit:
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.
Ответы
Ответ 1
Я понял это. Кажется, что программа SCP конвертировала окончания строк. Я заметил это, когда я попытался сделать файл с окончанием LF, а затем заметил, что он появился как CRLF при загрузке.
Поскольку это было для меня решением, я принимаю этот ответ, но люди будущего также должны ссылаться на другие ответы для более общего решения.
Ответ 2
Внутри вашего проекта должен быть файл .gitattributes. В большинстве случаев это должно выглядеть так:
![введите описание изображения здесь]()
Изменить * text = авто в * текст = ложь.
Вот так:
![введите описание изображения здесь]()
Если ваш проект не имеет файла .gitattributes, то окончание строки задается конфигурациями git. Чтобы изменить конфигурацию git, выполните следующие действия:
Перейдите в конфигурационный файл в этом каталоге:
1) C:\ProgramData\ Git\config
2) Откройте файл конфигурации в Notepad ++ (или любом текстовом редакторе, который вы предпочитаете)
3) Измените "autocrlf =" на false.
![введите описание изображения здесь]()
Ответ 3
Одно из простых решений:
- убедитесь, что для all repos установлено значение core.autocrlf равным false:
git config --global core.autocrlf false
- повторите клонирование вашего репо и убедитесь, что не выполнено преобразование EOL.
Если происходит автоматическое преобразование, это означает, что в репо есть .gitattributes
core.eol
директива.
Ответ 4
Из gitattributes (5) Страница руководства Тема "Эффекты"
text
Этот атрибут включает и контролирует нормализацию конца строки. Когда текстовый файл нормализуется, его окончания строки преобразуются в LF в репозиторий. Чтобы контролировать, какой стиль окончания строки используется в рабочем, используйте атрибут eol
для одного файла, а core.eol
для всех текстовых файлов.
Set
Установка текстового атрибута в пути позволяет завершить нормализацию строки и отмечает путь как текстовый файл. Происходит конвертация в конце строки не догадываясь о типе содержимого.
Unset
Отмена текстового атрибута на пути сообщает Git не попробуйте любое преобразование конца строки после регистрации или проверки.
core.autocrlf
в новом (1.7.2+) Git не используется, core.eol
и правильной настройке | снятие атрибута текста считается более надежным способом