在git存储库中,如果我想通过将其添加到.gitignore
来忽略子目录(以及它下面的所有内容),那么
mysubdir
mysubdir/
mysubdir/*
?他们似乎和我一样。感谢。
答案 0 :(得分:1)
“最正确的”是:
mysubdir/
列表中的第一个(mysubdir
)将忽略该名称下的目录和文件;可能不是问题,但可能。最后一个只忽略目录下的文件,它具有相同的最终结果,因为默认情况下在Git中忽略空目录。
如果查看gitignore files provided by GitHub,您会看到他们总是按directory/
语法忽略目录。
答案 1 :(得分:1)
存在一些差异,但它们很微妙。
使用:
mysubdir
忽略名为mysubdir
的任何文件或目录。例如,如果它位于顶级.gitignore
,并且您将目录A和B布局为:
A/
file
mysubdir <-- a file, not a directory!
B/
file
mysubdir/ <-- an actual directory
file
然后此.gitignore
将忽略A/mysubdir
(文件)和B/mysubdir
(目录)。通过忽略第二个,它也会切断 B/mysubdir/
中的所有文件。
使用:
mysubdir/
仅忽略名为mysubdir
的目录。在这种情况下,A/mysubdir
不被忽略,因为它是文件。但B/mysubdir
是一个目录,因此会被忽略。
使用:
mysubdir/*
告诉Git它应该忽略mysubdir
中的所有文件和目录。为此,mysubdir
必须 一个目录(如果不是,它不能包含文件和更多目录)。乍一看,这似乎与mysubdir/
相同。但事实并非如此!
使用mysubdir/*
时,强制Git 读取目录本身,列出其中的所有文件。然后,它会根据.gitignore
文件中的模式检查每个文件。这意味着您可以向.gitignore
文件添加覆盖:
!mysubdir/precious
由于前导!
字符,此文件或目录未被忽略。但是对于Git来找到文件,Git必须首先读取目录。如果你列出mysubdir/
而不是mysubdir/*
,Git会让无法阅读目录,也不会发现mysubdir/precious
的存在。
当然,强制Git读取目录有一个(轻微的)惩罚:Git必须花费任何时间来读取该目录。只有当惩罚给你带来某些东西时才应该这样做,例如不忽略在目录中的某个文件或子目录。