Windows上的Git pull(git smc客户端)不尊重.gitattributes的eol = lf

问题描述 投票:1回答: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 /)
  • git add --renormalize。 ->所有.sh文件都显示为已修改(按照上述配置从分支中重新获取文件后仅为1)
  • git diff --ignore-all-space不显示任何内容
  • [od path/file.sh显示文件的二进制版本(在设置上面的配置之前,实际上是文本)

我如何使git尊重eol=of文件的.sh值?


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

也(供参考):没尝试-core.autocrlf为false

git line-endings lf
1个回答
0
投票

关于eol转换:

  1. 确保将core.autocrlf设置为false(那样,只有[.gitattributes指令] 1将在起作用)
  2. 使用text eol=lf
  3. 后跟git add --renormalize .以强制应用.gitattributes指令。 (since Git 2.16,2018年第一季度)

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

这就是git add --renormalize .应该模拟的。

© www.soinside.com 2019 - 2024. All rights reserved.