git文件一直提示modified之解决

问题

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

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

相关设置

在安装git时有一个换行符设置
git设置三个选项代表

  • 在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文件,其中指定了不同的换行符
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nwao7890

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值