атрибуты .gitattributes не работают должным образом на Mac и Windows

#windows #git #macos #gitattributes #end-of-line

#Windows #git #macos #gitattributes #конец строки

Вопрос:

В моем проекте я использую компьютеры с разными ОС, один — Mac, второй — с Windows. Когда я использую git, каждое изменение отображается как изменение всего документа. Причина в разном конце строки в этих двух ОС. Я прочитал это https://help.github.com/articles/dealing-with-line-endings / и создал .gitattributes файл в корневой папке, но проблема все еще существует. Это мой .gitattributes файл:

 # Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.

*.css text
*.html text
*.js text

# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
  

Я понятия не имею, почему это не работает, потому что раньше я пробовал много конфигураций этого файла.

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

1. Вы пробовали этот git config core.autocrlf вариант? AFAIK это предпочтительнее. У вас есть какие-либо проблемы с этим?

2. Да, я пробую это на обоих компьютерах, но это не работает.

Ответ №1:

Файл .gitattributes должен быть добавлен при первом коммите. Если вы добавите в него несколько коммитов, вам нужно явно нормализовать все существующие файлы.

 $ rm .git/index     # Remove the index to force Git to
$ git reset         # re-scan the working directory
$ git status        # Show files that will be normalized
$ git add -u
$ git commit -m "Introduce end-of-line normalization"
  

См . https://git-scm.com/docs/gitattributes

Ответ №2:

Если файл .gitattributes не был добавлен при первом коммите, для локального применения атрибутов необходимо выполнить следующее:

  1. Перейдите в корень репозитория

  2. Проверьте статус:

    состояние git

  3. Если он говорит «ничего не фиксировать, рабочее дерево чистое», выполните:

    git rm —cached -r .

    сброс git —жесткий

Ответ основан на https://dev.to/deadlybyte/please-add-gitattributes-to-your-git-repository-1jld

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

1. Интересно… После запуска git add --renormalize . файлы с измененным EOL были перечислены git status , и я мог зафиксировать изменение, но на самом деле у них все еще был исходный EOL (проверенный шестнадцатеричным представлением). Команды в п. 3. были необходимы для того, чтобы EOL действительно изменились на настройки, указанные в .gitattributes . Спасибо!