我读过Git documentation,它显示我可以显式地将某些文件设置为文本,这样它们的行尾会自动更改,或者设置为二进制以确保它们不被修改。
然而,我也读到过Git在检测二进制文件方面做得很好,这让我觉得这是不必要的。所以我的问题是,我真的需要为仓库中的每个文件扩展名指定这些显式设置吗?我看到过一些针对所有图像文件扩展名的建议。
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
2条答案
按热度按时间yzuktlbb1#
Git会检查文件的前8,000个字节是否包含NUL字符,如果包含,则认为文件是二进制文件。
来自git的源代码:
对于文本文件,除非你出于某种原因故意插入一个NUL字符,否则它们将被正确地猜测出来;对于二进制文件,前8,000个字节很可能包含至少一个示例。
在大多数情况下,你不需要显式地声明一个文件的类型(我想我从来没有这样做过),实际上,如果你遇到问题,只需要声明一个特定的文件。
n3h0vuf22#
一般来说,Git很擅长检测文件是文本文件还是二进制文件,所以你可能不需要显式地设置任何东西。正如你所指出的,无论如何,设置默认值
* text=auto
都是一个好主意。但是,如果您或任何项目工作人员正在处理UTF-16格式的文件,最好显式设置这些文件的
text
属性以及working-tree-encoding
属性,因为Git会注意到其中的NUL字节并将其视为二进制。你还应该指定任何你认为可能被误检测为文本的二进制文件类型。例如,如果你有一些图像格式或文件只包含可打印的ASCII字节,Git可能会误检测为文本。你需要明确地指定这些文件以避免混淆。只有你知道你的仓库中哪些文件可能会遇到这个问题。