gpt4 book ai didi

git - 为什么 eol=crlf 在 .gitattributes 中不被尊重

转载 作者:太空狗 更新时间:2023-10-29 13:35:11 24 4
gpt4 key购买 nike

所以我决定将我们的 git 存储库中所有具有 windows 风格行尾的文件转换为具有 unix 风格行尾。

我按照 http://www.git-scm.com/docs/gitattributes#_end_of_line_conversion 中的说明进行操作:

echo "* text=auto" >>.gitattributes
rm .git/index # Remove the index to force Git to
git reset # re-scan the working directory
git status # Show files that will be normalized
git add -u
git add .gitattributes
git commit -m "Introduce end-of-line normalization"

我后来意识到这也改变了本应保留为 CRLF 的 *.bat 文件。我使用以下 .gitattributes 文件再次尝试了整个过程:

# Default 
* text=auto eol=lf

# Windows-only files
*.bat text eol=crlf

这似乎并没有改变 git status 的输出,批处理文件仍然被标记为“已更改”,即使它们在我的工作副本和 .gitattributes 中是 CRLF将它们设置为完全相同。似乎 git 会简单地忽略带有 *.bat 的行。 git show --raw 还向我展示了文件现在是用 LF 而不是 CRLF 存储的。

最佳答案

经过数小时的尝试(但都失败了)以找到有关 .gitattributes 格式的良好规范后,我决定尝试以下方法(请注意,这不是解决问题的正确方法):

*.bat     -text

而且,你瞧,批处理文件从 git status 中消失了,表明文件的语法没有问题,正如我最初假设的那样。虽然我不想将批处理文件视为二进制文件,但这使我得出了我现在认为是正确的结论:

我误解了 git 在使用 text 属性标记文件时的实际作用。它始终在内部存储带有 LF 行结尾的文件,并且仅在 checkout 时转换为 CRLF。所以我最初的步骤是完全正确的,它们只是产生了让我感到困惑的输出,以为出了什么问题。文件实际上已经改变;以前它们以 CRLF 存储,但现在它们将仅以 LF 行结尾存储,这将在 checkout 时更正。

关于git - 为什么 eol=crlf 在 .gitattributes 中不被尊重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35316053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com