Подтвердить что ты не робот

Отключить 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.

4b9b3361

Ответ 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 и правильной настройке | снятие атрибута текста считается более надежным способом