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


person Deric    schedule 18.02.2021    source источник
comment
Я не уверен, что вы подразумеваете под окончаниями строк файлов, которые не были изменены, были [изменены]. Но обратите внимание, что эти правила никогда не затрагивают существующий коммит; преобразования EOL происходят только тогда, когда (a) извлекается существующий коммит (Git будет подчиняться любым правилам переопределения, например, из .git/info/attributes, в это время) или (b) git add-ing файлы при подготовке к < i>new commit (Git снова будет подчиняться правилам, действующим во время добавления). Сложность здесь заключается в том, что файлы, которые вы видите и с которыми работаете, в вашем рабочем дереве, можно настроить на шаге (а).   -  person torek    schedule 18.02.2021
comment
Я имею в виду, что даже после того, как я удалил и клонировал репозиторий, преобразования EOL все еще выполнялись для файлов, которые не изменились после того, как я зафиксировал .gitignore.   -  person Deric    schedule 18.02.2021


Ответы (1)


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

* binary

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

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