考虑到我的.gitignore
和.gitattributes
中都有*.pdf
文件,git在这两者之间的行为和优先级如何?它是忽略pdf文件还是将其存储为LFS?
.gitignore
告诉git,默认情况下,它不应该关注给定路径上的未跟踪文件。
.gitattributes
告诉git修改它如何对给定路径上的文件执行某些操作(如果/当它执行所述操作时)。为了让git尝试执行这些操作,通常情况下,至少必须尝试开始跟踪文件——LFS使用的属性就是这样。
在这两种情况下,"在给定的路径上"也可以意味着"匹配给定的模式"。因此,不存在冲突或优先级;我们只需要注意每一个都意味着什么。如果将*.pdf
放在.gitignore
中,并使用.gitattributes
设置具有LFS跟踪属性的*.pdf
,则:
-
默认情况下,git将忽略未跟踪的PDF文件。
-
要将新的PDF文件添加到索引中,您需要使用
git add -f
覆盖忽略规则 -
一旦PDF文件存在于特定路径,该路径就不再受忽略规则的控制
-
您所添加的任何PDF文件都将由LFS根据
.gitattributes
进行管理 -
任何已经在repo中的PDF文件(不受忽略规则的影响)都应该由LFS管理,但如果它是在
.gitattributes
条目之前提交的,则可能不是。
因此,在这个设置中,LFS充当了一个安全网,即使有人重写了忽略规则,也可以防止PDF文件破坏您的回购数据库。也许这意味着"我们确实跟踪了一两个PDF文件;但其他PDF文件可能会出现在工作树中,我们通常不想要它们。">
.gitignore
忽略未跟踪的文件——那些尚未添加git add
的文件;.gitattributes
用于跟踪文件。也就是说,一个PDF文件可以用.gitattributes
处理,另外两个可以忽略(只是一个例子)。