我真的需要在.gitattributes中指定所有二进制文件吗

e3bfsja2  于 2023-01-07  发布在  Git
关注(0)|答案(2)|浏览(129)

我读过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
yzuktlbb

yzuktlbb1#

Git会检查文件的前8,000个字节是否包含NUL字符,如果包含,则认为文件是二进制文件。
来自git的源代码:

#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个字节很可能包含至少一个示例。
在大多数情况下,你不需要显式地声明一个文件的类型(我想我从来没有这样做过),实际上,如果你遇到问题,只需要声明一个特定的文件。

n3h0vuf2

n3h0vuf22#

一般来说,Git很擅长检测文件是文本文件还是二进制文件,所以你可能不需要显式地设置任何东西。正如你所指出的,无论如何,设置默认值* text=auto都是一个好主意。
但是,如果您或任何项目工作人员正在处理UTF-16格式的文件,最好显式设置这些文件的text属性以及working-tree-encoding属性,因为Git会注意到其中的NUL字节并将其视为二进制。
你还应该指定任何你认为可能被误检测为文本的二进制文件类型。例如,如果你有一些图像格式或文件只包含可打印的ASCII字节,Git可能会误检测为文本。你需要明确地指定这些文件以避免混淆。只有你知道你的仓库中哪些文件可能会遇到这个问题。

相关问题