1

我正在从事最初在 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

4

1 回答 1

1

关于eol转换:

  1. 确保 core.autocrlf 设置为 false (这样,只有[.gitattributes指令] 1会起作用)
  2. 利用text eol=lf
  3. git add --renormalize .随后强制应用 .gitattributes 指令。(从 Git 2.16 开始,2018 年第一季度)

通过删除索引rm .git/index并执行git reset --hard HEAD后,问题就消失了

这就是git add --renormalize .应该效仿的。

于 2020-06-14T01:04:25.463 回答