问题:Git在本地保存文件更改后将整个C文件解释为已修改。这表示行结尾已更改,即使它们已签出为CRLF结尾并用CRLF行结尾本地保存。
我的工作是从事一个有多个贡献者的Visual Studio项目。我正在使用Visual Studio 2012。在过去的两天里,我和另一位同事在从我们的公司库存站点克隆回购协议后,经历了上述问题。我们无法提交更改,因为Git指示整个文件已更改,并且我们的某些文件有数千行长。以下是关于症状的更多背景:
问题只出现在某些文件中,而不是全部文件中。
该问题不特定于Visual Studio。我用intellij和notepad++编辑了这个文件,遇到了同样的问题。
修改文件后,我很难放弃更改并从repo中签出文件。我尝试执行了几个命令,这些命令应该重置我的本地repo。有时它们工作,而我与源站保持一致,有时它们不工作。唯一一致的解决方案是签出一个新分支,在那里提交更改,然后切换回目标分支。我尝试了以下方法来放弃更改:
git checkout --
git reset --hard
git reset HEAD
git stash
以下是我为解决此问题所采取的步骤:
行结束标准化,如文件所示here
将我的Git配置更改为
autocrlf=true
和autocrlf=false.
这是有记录的here。两种设置下的问题仍然存在更改项目中的.gitattributes设置。以下是我的当前设置,符合上面链接中给出的示例
* text=auto
*.cs text
卸载和重新安装Git(两次)
到目前为止,我所做的一切都没有解决这个问题。我的直觉是它与.gitattributes文件中的设置相关。但是,在克隆repo时,没有其他人(包括项目的主要开发人员)遇到过这些问题。如果有任何建议,我将不胜感激。谢谢!
最佳答案
我也有同样的问题,把这句话说了出来。
* text=auto
在.gitattributes中。
这解决了我的问题。希望这能帮助你或其他有同样问题的人。
据我所知,
* text=auto
行应该有助于行尾,但出于某种原因,运行Windows的许多人似乎对此有问题。