Преобразования EOL, отключенные в .gitattributes, применяются только к новым файлам

#git #eol #gitattributes

#git #eol #gitattributes

Вопрос:

Я отключил автоматическое преобразование EOL, нажав следующие атрибуты .gitattributes в master:

    # disable automatic eol conversions
   * text=false
 

После этого я загрузил некоторые файлы в Linux и перенес изменения с компьютера Windows только для того, чтобы обнаружить, что окончания строк файлов, которые не были изменены, были преобразованы из n в r n.

Я пытался:

  • удаление репозитория и выполнение клонирования git (в Windows)
  • запускаем следующее в Linux и нажимаем снова:
         git rm --cached -r .
        git add -A
     
  • редактирование всех файлов и их отправка

Замена .gitattributes невозможна, потому что, когда репозиторий клонируется действиями GitHub, окончания строк также должны быть оставлены нетронутыми.

Комментарии:

1. Я не уверен, что вы подразумеваете под «окончаниями строк файлов, которые не были изменены, были [изменены]». Но обратите внимание, что эти правила никогда не затрагивают ни один существующий коммит ; преобразования EOL происходят только при (а) извлечении существующего коммита (Git будет подчиняться любым переопределенным правилам, например, из .git/info/attributes , в это время) или (б) git add редактировании файлов при подготовке к новому коммиту (Git снова подчинитсяправила, действующие во время добавления). Сложность здесь в том, что файлы, которые вы видите и с которыми работаете в своем рабочем дереве, могут быть скорректированы во время шага (a).

2. Я имею в виду, что даже после того, как я удалил и клонировал репозиторий, преобразования EOL все еще выполнялись для файлов, которые не изменились после того, как я зафиксировал .gitignore .

Ответ №1:

Мне удалось отключить преобразования EOL для всех файлов, добавив следующую строку в .gitignore:

 * binary
 

Я все еще не понимаю, почему * text=false этого было недостаточно, но, по крайней мере, сейчас это работает.

Комментарии:

1. text=false Настройка такая же, как если бы вообще ничего не устанавливалось. Чтобы объявить, что файл не является текстовым, вам нужно -text . (Мне не нравится это конкретное усложнение .gitattributes значений — я просто изначально ошибся, это -text не !text так.) binary Макрос эквивалентен -text -diff -merge .