У меня была проблема, когда конфликты слияния приводили к конфликту всего файла. Это закончилось тем, что все новые строки локального файла стали новыми строками в стиле unix (LF) во время слияния (до слияния и разработка, и функциональная ветвь имели новые строки CRLF при извлечении).
Если бы я побежал
git rm --cached -r .
git add -A
никакие изменения не будут отображаться со статусом git. Но когда я удалил файл .gitattributes
и сделал еще одно удаление всего / добавление всего, это привело к тому, что некоторые файлы были обновлены разными новыми строками. Например, для файла из 100 строк будет указано, что 100 строк удалено, 100 добавлено. После этого для обеих ветвей слияния прошли нормально.
.gitconfig autocrlf = true
был установлен, а файл .gitattributes содержал только эти строки. Я думаю, что приведенные ниже строки повлияют только на стратегию слияния.
*.csproj -text merge=union
*.sln -text merge=union
Почему этот атрибут .gitattributes может изменить способ фиксации новых строк?
Кроме того, если для autocrlf установлено значение true, я не уверен, почему слияние будет сравнивать LF и CRLF, если, возможно, что-то в .gitattributes не переопределяет его.
Из https://help.github.com/articles/dealing-with-line-endings
При желании вы можете настроить способ, которым Git управляет окончаниями строк для каждого репозитория, настроив специальный файл .gitattributes. Этот файл фиксируется в репозитории и переопределяет индивидуальную настройку core.autocrlf, обеспечивая согласованное поведение для всех пользователей, независимо от их настроек Git. Преимущество файла .gitattributes в том, что ваши конфигурации строк связаны с вашим репозиторием.
Это дает понять, что .gitattributes способен переопределять autocrlf, но в нем нет настроек, которые говорят ему выполнять какое-либо преобразование eol. Возможно, есть какое-то значение по умолчанию, которое неявно используется.