2014-09-03 2 views
0

У меня возникла проблема, когда конфликты слияния приводили к тому, что весь файл был конфликтом. Это закончилось тем, что новые строки в локальном файле стали моделями нового стиля (LF) во время слияния (перед тем как объединить как ветку разработки, так и функции, были отмечены строки CRLF при извлечении).Git совершает неправильные символы новой строки при использовании .gitattributes

Если я побежал

git rm --cached -r . 
git add -A 

никаких изменений не будет отображаться со статусом мерзавца. Но когда я удалил файл .gitattributes и сделал еще один файл all/add, все это привело к обновлению некоторых файлов различными новыми строками. Например, для 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. Может быть, есть некоторая по умолчанию, которая неявно используется.

ответ

1

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

Файл gitattributes указывает «-text» для файлов * .csproj и * .sln. Это означает, что для этих файлов не нужно преобразовывать EOL.

С другой стороны, вы также использовали конфигурацию «autocrlf = true». Этот параметр означает: хранить файлы с окончанием строки LF в репозитории Git и хранить файлы с собственными окончаниями строк в рабочем каталоге.

Итак: перед добавлением файла gitattributes файлы * .csproj и * .sln сохраняются в конце строки LF в репозитории Git из-за установки autocrlf. После добавления файла gitattributes и проверки этих файлов в рабочем каталоге преобразование EOL не выполняется, и эти файлы заканчиваются концами LF в рабочем каталоге.

Смежные вопросы