我正在从事最初在 Unix 环境中开发的项目。
这样的项目有一个 .gitattributes 文件,强制 eol=lf 超过标准 crlf-lf 转换
*.sh text eol=lf
我的理解是告诉 git“保留原来的 LF 行结尾”。
当我克隆这个存储库时,在拉取完成的那一刻,如果我这样做git status
了,一些文件被标记为已更改(特别是 .sh 文件)
git diff
节目
-FileContent
+FileContent
其中 FileContent 是文件中的所有文本。
我尝试过了:
- git reset --hard
- git update-index --assume-unchanged
- git config --global core.autocrlf false
- git config --global core.eol lf
dos2unix
在单个文件上- 使用我的编辑器将特定文件的行尾更改为 \n (Phpstorm)
没有人对这个问题产生影响。
我也试过:
- git rm --cached -rf 。-> 这删除了项目中的很多文件
- 重新获取特定分支(`git fetch; git checkout HEAD path/)
- 混帐添加 --renormalize 。-> 所有 .sh 文件都显示为已修改(按照上述配置从分支重新获取文件后只有 1 个)
- git diff --ignore-all-space 什么都不显示
od path/file.sh
显示文件的二进制版本(在设置上述配置之前实际上是文本)
如何让 git 尊重文件的eol=of
价值.sh
?
编辑:通过删除索引rm .git/index
并执行git reset --hard HEAD
后,问题就消失了
另外(供参考):没有尝试 - core.autocrlf 为 false