我遇到的问题是合并冲突导致整个文件发生冲突。这最终导致本地文件的换行符在合并时变为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转换。也许隐含使用了一些默认值。
答案 0 :(得分:1)
我意识到这是一个老问题,但答案可能对有相关问题的人有用。
gitattributes文件指定" -text"对于* .csproj和* .sln文件。这意味着对于那些文件,不应该进行EOL转换。
另一方面,您还使用了配置" autocrlf = true"。此设置意味着:将具有LF行结尾的文件存储在Git存储库中,并将具有本机行结尾的文件存储在工作目录中。
所以:在添加gitattributes文件之前,由于autocrlf设置,* .csproj和* .sln文件与Git仓库中的LF行结尾一起存储。添加gitattributes文件并在工作目录中检出这些文件后,不会进行EOL转换,这些文件最终会在工作目录中以LF行结尾。