我正在做一个最初在Unix环境中开发的项目。
此类项目有一个 .gitattributes 文件,该文件强制 eol=lf 通过标准 crlf-lf 转换
*.sh text eol=lf
我的理解是告诉 git"保留原始的 LF 行结尾"。
当我克隆这个存储库时,在拉取完成的那一刻,如果我git status
,有些文件被标记为已经更改(特别是.sh文件(
git diff
演出
-FileContent
+FileContent
其中文件内容是文件中的所有文本。
我尝试:
- git reset --hard
- git update-index --asassumptione-unchanged
- git config --global core.autocrlf false
- git config --global core.eol lf
dos2unix
单个文件- 使用我的编辑器将特定文件的行尾更改为 (Phpstorm(
没有一个对这个问题产生影响。
我也试过:
- git rm --cached -rf . ->这删除了项目中的很多文件
- 重新获取特定分支('git fetch; git checkout HEAD path/(
- git add --renormalize . -> 所有.sh文件都显示为已修改(按照上述配置从分支重新获取文件后仅为 1 (
- git diff --忽略所有空间不显示任何内容
od path/file.sh
显示了文件的二进制版本(在设置上述配置之前实际上是文本(
如何使 git 尊重.sh
文件的eol=of
值?
编辑:通过rm .git/index
删除索引并执行git reset --hard HEAD
后,问题消失了
另外(供参考(:没有尝试 - core.autocrlf to false
关于 eol 转换:
- 确保 core.autocrlf 设置为 false(这样,只有
[.gitattributes
个指令]1 在起作用( - 使用
text eol=lf
- 后面是强制应用 .gitattributes 指令的
git add --renormalize .
。(自 Git 2.16 起,2018 年第 1 季度(
通过
rm .git/index
删除索引并执行git reset --hard HEAD
后,问题消失了
这是git add --renormalize .
应该效仿的。