我已经读过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
答案 0 :(得分:3)
Git将检查文件的前8,000个字节以查看其是否包含NUL字符。如果是这样,则假定该文件为二进制文件。
#define FIRST_FEW_BYTES 8000
int buffer_is_binary(const char *ptr, unsigned long size)
{
if (FIRST_FEW_BYTES < size)
size = FIRST_FEW_BYTES;
return !!memchr(ptr, 0, size);
}
对于文本文件,除非您出于某种原因有意插入NUL字符,否则将正确猜出它们。对于二进制文件,前8,000个字节很有可能至少包含一个实例。
在大多数情况下,您不需要显式声明文件的类型(我认为我从来没有)。实际上,如果遇到问题,只需声明一个特定文件。
答案 1 :(得分:2)
通常,Git可以很好地检测文件是文本文件还是二进制文件,因此您可能不需要明确设置任何内容。如您所指出的,将默认设置为* text=auto
是个好主意。
但是,如果您或从事此项目的任何人正在使用UTF-16中的文件,则最好在这些文件上显式设置text
属性以及working-tree-encoding
属性,因为Git会注意到其中的NUL字节并将其视为二进制。
您还应该将任何文件类型指定为二进制文件,您认为它可能会被误检测为文本。例如,如果您的图像格式或文件仅包含可打印的ASCII字节,则Git可能会将其误检测为文本。您需要明确指定这些文件,以避免混淆。只有您知道存储库中的哪些文件可能会遇到该问题。