除非存储库由几个独立的项目组成,否则似乎.gitignore
在存储库的根目录中只有一个文件比在整个仓库中存储多个文件要简单得多。是否有标准的最佳实践或在线分析其中一种方法优于另一种方法?
除非存储库由几个独立的项目组成,否则似乎.gitignore
在存储库的根目录中只有一个文件比在整个仓库中存储多个文件要简单得多。是否有标准的最佳实践或在线分析其中一种方法优于另一种方法?
Answers:
我可以想到至少两种情况,其中您希望.gitignore
在不同的(子)目录中有多个文件。
不同的目录具有不同类型的文件,可以忽略。例如,.gitignore
项目顶部目录中的会忽略生成的程序,而Documentation/.gitignore
忽略生成的文档。
仅忽略给定(子)目录中的给定文件(不过,您可以/sub/foo
在中使用.gitignore
)。
请记住,.gitignore
文件中的模式会递归地应用于文件所在的(子)目录及其所有子目录,除非pattern包含'/'(例如,pattern name
应用于给name
定目录及其所有子目录中命名的任何文件,而/name
适用于file仅在给定目录中使用此名称)。
Documentation/**/*.html
(请注意,任何斜杠均会锚定该模式;该斜杠/foo
用于直接在目录中锚定文件)
切记,拥有多个.gitignore
文件的功能非常有用的一种情况是,如果您想要在工作副本中增加一个您不想提交的目录。只需.gitignore
在该目录中放入一个1字节(仅包含一个星号),它就永远不会显示在git status
等等中。
printf \* > .gitignore
(删除目录时自动清除)。我敢肯定,在某些情况下.git/info/exclude
,更合适的选择是,但并不很多。
您可以有多个.gitignore
,当然每个都在自己的目录中。
要检查哪个gitignore规则负责忽略文件,请使用git check-ignore
:git check-ignore -v -- afile
。
.gitignore
每个分支可以有不同版本的文件:我已经看过这种配置,可以确保一个分支忽略一个文件,而另一个分支则不会:例如,请参见此问题。
如果您的仓库包含多个独立项目,则最好将它们作为子模块引用。
那将是实际的最佳做法,允许每个项目被独立克隆(带有各自的.gitignore
文件),同时被全局父项目中的特定修订版本引用。
有关更多信息,请参见子模块的本质。
请注意,自git 1.8.2(2013年3月)以来,您可以执行一次操作git check-ignore -v -- yourfile
,以查看将哪个gitignore运行(来自哪个.gitignore
文件)应用于“ yourfile
”,并更好地理解为什么忽略了该文件。
请参阅“ 哪个gitignore
规则忽略了我的文件? ”
专业单身
容易找到。
如果我在仓库中有多个级别的多个gitignore,则寻找排除规则可能会非常困难。
使用多个文件时,通常还会出现相当多的重复。
专业版
将“知识”范围扩展到文件树中需要它的部分。
由于Git仅跟踪文件,因此,空.gitignore是提交“空”目录的唯一方法。
(和Git 1.8之前,只有这样,才能排除格式,如:my/**.example
是建立my/.gitignore
在与图案**.foo
,这理由现在不适用,因为你可以做/my/**/*.example
。)
我更喜欢一个文件,可以在其中找到所有排除项。我从未错过过每目录.svn,也不会错过每目录.gitignore。
也就是说,多个gitignores很常见。如果确实使用它们,则至少在使用它们时要保持一致,以使其合理使用。例如,您可以将它们放在根目录下仅一级的目录中。
empty
为此命名的文件)更为常见。