git文件一直提示modified之解决

问题

在使用git时,有时会遇到明明没有修改某个文件,但git status一直提示其处于modified状态,使用git restore 或git reset均不能消除modified,尤其是使用windows时更易遇到此问题,如果使用git svn功能也很容易遇到此问题

这种情况就是我们遇到了git的换行符问题了。

相关设置

在安装git时有一个换行符设置
git文件一直提示modified之解决_第1张图片三个选项代表

  • 在checkout时自动转换LF为CRLF,commit时CRLF自动全转为LF (windows上的默认选项)
  • 在checkout时不做转换,commit时CRLF自动全转为LF
  • 在checkout时commit时均不做任何换行符转换

情况一 某文件中有混用的LF和CRLF

基本上搜索到的都是在说这种情况
在checkout后由于有自动转换,CRLF变为了LF,则产生modified状态

这时你可以使用git config --global --core.autocrlf false来关闭这个自动转换
或者手动将该文件中的换行修正为统一的LF或CRLF

情况二 .gitattributes在搞鬼

重点来了这也是今天遇到的情况
项目中使用了一些第三方代码,这些代码中有些包含.gitattributes 大致如下

# default behavior is to always use unix style line endings
* text eol=lf #这一行提示git文件中的换行符使用LF
*.png binary
*.pdn binary
*.jpg binary
*.sln binary
*.suo binary
*.vcproj binary
*.patch binary
*.dll binary
*.lib binary

第三方代码在经过我们在windows上编辑编译后,提交到服务器时可能使用了CRLF,这时下载代码下来,文件本身是CRLF的,但是.gitattributes指定了LF,git就会认为modified

解决办法

  • 将第三方代码再修改为LF
  • 删除第三方代码中的.gitattibutes 或注释掉其中的text eol=lf
  • 临时解决 也可删除第三方.gitattibutes中的text eol=lf,随后discard .gitattibutes的变化,这时git也会回到clean状态,只是不知何时它还会发现这个问题

ps:如果项目中有这样的情况,git并不会立刻提示modified,而是不知道什么时候就触发了,很是奇怪

总结

遇到git一直提示某文件modified

  1. 先考虑是否有文件LF与CRLF混用(设置core.autocrlf为false解决)
  2. 考虑是否项目中有其它的.gitattributes文件,其中指定了不同的换行符

你可能感兴趣的:(git,c++,c语言,开发语言)