#git #newline #gitattributes #core.autocrlf
#git #новая строка #gitattributes #core.autocrlf
Вопрос:
Я пытаюсь внести свой вклад в проект git, исходные файлы которого имеют окончания строк CRLF. При клонировании проекта git немедленно помечает все исходные файлы как измененные. Моя конфигурация:
$ git config --list
push.default=simple
user.email=xxxx.xxxx@xxxx.xxx
user.name=xxxx
merge.defaulttoupstream=true
merge.tool=kdiff3
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.autocrlf=false
remote.origin.url=xxxx.git
remote.origin.fetch= refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
Как показано выше, значение autocrlf равно false, что должно указывать git игнорировать окончания строк.
В проекте есть .gitattributes
файл, который выглядит следующим образом:
# Sources
*.c text eol=crlf
*.cc text eol=crlf
*.cxx text eol=crlf
*.cpp text eol=crlf
*.CPP text eol=crlf
*.c text eol=crlf
*.hpp text eol=crlf
*.HPP text eol=crlf
*.h text eol=crlf
*.H text eol=crlf
*.h text eol=crlf
*.hh text eol=crlf
# Project files
*.sln text eol=crlf
*.sdf binary
*.opensdf binary
*.suo binary
*.vcxproj text eol=crlf
*.vcxproj.filters text eol=crlf
*.vcxproj.user text eol=crlf
# Compiled Object files
*.slo binary
*.lo binary
*.o binary
*.obj binary
# Precompiled Headers
*.gch binary
*.pch binary
# Compiled Dynamic libraries
*.so binary
*.dylib binary
*.dll binary
# Compiled Static libraries
*.lai binary
*.la binary
*.a binary
*.lib binary
# Executables
*.exe binary
*.out binary
*.app binary
После клонирования проекта файлы имеют окончания строк CRLF, как и должны:
$ file src/charbuf.cpp
src/charbuf.cpp: C source, Non-ISO extended-ASCII text, with CRLF line terminators
Есть идеи, почему git по-прежнему помечает их как измененные?
Комментарии:
1. Нет ответов? Вам нужна дополнительная информация?
2.
git diff
Показывает ли a, что окончания строк изменились? Есть ли у васsmudge
фильтр, действующий на файлы при их извлечении?3.
git diff
показывает различия для всех файлов, но в выходных данных отсутствуют типичные^M
символы, поэтому обе версии выглядят одинаково. Что такое фильтр размытия?4. Фильтры размытия описаны здесь: git-scm.com/book/en/v2/Customizing-Git-Git-Attributes (Поиск
These are called “clean” and “smudge” filters
)5. Кроме того, каков результат
git config --list --show-origin | grep -i autocr
? (Это должно показать все настройки autocrlf и файлы конфигурации, которые являются источником каждой из этих записей)