假如我在我的 .gitignore
和 .gitattributes
文件里都有 *.pdf
,Git 会如何行动并优先考虑哪一个?它会忽略 PDF 文件还是将其存储为 LFS?
假如我在我的 .gitignore
和 .gitattributes
文件里都有 *.pdf
,Git 会如何行动并优先考虑哪一个?它会忽略 PDF 文件还是将其存储为 LFS?
.gitignore
告诉 git 在特定路径下默认不关注未跟踪的文件。
.gitattributes
告诉 git 修改如何对于特定路径下的文件执行某些操作(如果/当执行该操作时)。为了使 git 尝试执行这些操作,通常您至少需要尝试开始跟踪该文件 - 当然,在 LFS 使用属性的情况下是这样的。
在这两种情况下,“在给定路径”也可以意味着“匹配给定模式”。因此不存在冲突或优先级的问题;我们只需要注意每个问题的含义。如果将 *.pdf
放入 .gitignore
中,并使用 .gitattributes
为 LFS 跟踪设置 *.pdf
属性,则:
默认情况下,未跟踪的 PDF 文件将被 Git 忽略。
要将新的 PDF 文件添加到索引中,您需要使用 git add -f
覆盖忽略规则
一旦一个 PDF 文件存在于特定路径中,该路径就不再受忽略规则的控制
您添加的任何 PDF 文件都将根据 .gitattributes
进行 LFS 管理
已在仓库中的任何 PDF 文件(不受忽略规则影响)应该由 LFS 管理,尽管如果在 .gitattributes
条目之前提交,则可能不会。
因此,在这种设置中,即使有人覆盖了忽略规则,LFS 也是保护措施,以防止 PDF 文件使您的仓库数据库爆炸。也许这意味着“有一两个 PDF 文件我们确实要跟踪;但其他 PDF 文件可能出现在工作树中,我们通常不想要它们。”
.gitignore
是忽略那些没有使用 git add
添加的 未跟踪 文件的文件;.gitattributes
则是用于已跟踪的文件。也就是说,一个 PDF 文件可以通过 .gitattributes
进行处理,而另外两个则可以被忽略(这只是一个例子)。
filter
属性控制文件如何进入索引 - 包括当您首次尝试添加它们时。因此,说属性是用于跟踪的文件有点误导人。更准确地说,属性影响 git 如何处理给定路径下的文件,如果它们被处理;如果文件被忽略和未跟踪,则默认情况下 git 首先不会尝试处理它。 - Mark Adelsbergergit add
在添加文件时(在此期间它遵守输入端的“干净”过滤器),该文件同时被跟踪,而过滤器正在运行。我想这取决于你是否将“将已清理版本添加到索引”视为“先清理,然后添加”还是“在清理时添加”。 :-) - torek
lfs
不是用于 Git 大文件存储的。 - crashmstr.gitignore
而被忽略的文件是否仍然会被 git LFS(根据.gitattributes
文件)考虑。简而言之,答案是否定的,但我认为这个问题不应该被关闭! - Jonathan H