如何防止 Git/Gitlab 修改 EOL 字符?

How to keep Git/Gitlab from modifying EOL character?

我有一个实用程序可以在 Windows 和 Linux 上 运行。但是,当我通过 Windows 将代码检入 GitLab 时,它会将“cr”添加到 EOL 字符,使其成为“crlf”。

我尝试将“.gitattributes”添加到存储库分支的根目录,条目如下:

*.sh 二进制文件

*.sh 文本 eol=lf

然而,当我在不同的位置检查分支时,“crlf”仍然存在。

我一直在使用这些 URL 作为参考:

https://docs.github.com/en/get-started/getting-started-with-git/configuring-git-to-handle-line-endings

How do I make Git treat a file as binary?

有什么想法吗?

Git 的推荐方法是使用以下内容:

*.sh text eol=lf

这意味着该文件是一个文本文件,它应该始终使用 LF 字符,这正是 shell 文件所需要的。但是,当您这样做时,您需要执行 git add --renormalize . 然后提交更改和 .gitattributes 文件。否则,如果您已经签入了以 CRLF 结尾的文件,则不会发生任何变化。

如果你真的有二进制文件,比如小图片,你可以这样做:

*.jpg binary

但是,如果你在这种情况下这样做,因为存储库已经包含 CRLF 结尾,文件不会被修改,所以你仍然会以 CRLF 结尾。对于真正的二进制文件,如图像,这就是您想要的,但对于 shell 脚本,这将是不可取的。

请注意,如果您的存储库中还有其他文本文件,您也可以这样做:

*.c text

这将启用自动行结束转换,或者如果您只想自动猜测所有剩余的文件类型,您可以这样做:

* text=auto

这将根据文件的前几千字节内是否包含 NUL 字节来猜测文件是文本文件还是二进制文件。请注意,您仍然需要执行 git add --renormalize . 并提交结果更改和 .gitattributes 才能生效。

如果在 运行 git add --renormalize . 并提交后您仍然看到本地工作树中的变化,请尝试使用 git grep -lP '\r' HEAD:FILE(替换 FILE)查看文件是否有HEAD 修订版末尾的 CRLF。如果不是,那你做对了。