我应该始终排除 git LFS 文件的文本属性吗?

Should I always exclude text attribute for git LFS files?

网上有很多文章说将二进制文件放在 LFS 下是一个很好的做法。因此,.gitattributes 文件将如下所示:

## Fonts
*.otf filter=lfs diff=lfs merge=lfs -text
*.OTF filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.TTF filter=lfs diff=lfs merge=lfs -text

请注意,所有条目都包含 -text,这告诉 git 不要将这些文件视为文本文件,而是将它们视为二进制文件。

现在,假设我想跟踪一些扩展名为 *.yaml 的文本文件作为 LFS,因为它们非常大但仍然基于文本。我应该以与二进制条目相同的方式创建条目还是应该像这样省略 -text

*.yaml filter=lfs diff=lfs merge=lfs
*.YAML filter=lfs diff=lfs merge=lfs

是的,您总是希望使用 Git LFS 排除文件的 text 属性。原因是您不希望存储在存储库中的指针文件受到行尾转换或编码更改的影响,因为这会使它们无效,您也不希望对大文件进行这样的操作,因为这会使散列更改,因此底层指针文件也会更改。 text 属性控制这些方面,因此应该禁用它。

FYI -text 表示取消设置文本属性,即

# Treat *.otf as **not** text
*.otf filter=lfs diff=lfs merge=lfs -text
# Treat *.otf as text
*.otf filter=lfs diff=lfs merge=lfs text

离开 -text 将使用您在 .gitattributes 文件中设置的默认值。所以最好离开 -text imo

https://git-scm.com/docs/gitattributes#_end_of_line_conversion