除非一个回购包含几个独立的项目,否则在回购.gitignore的根部只有一个文件比在整个过程中只有一个文件是最简单的.当在一种方法比另一种方法更好时,是否有关于此或在线分析的标准最佳实践?
Jak*_*ski 223
我可以想到至少有两种情况,你想要.gitignore在不同的(子)目录中有多个文件.
不同的目录有不同类型的文件要忽略.例如,.gitignore项目的顶级目录中忽略生成的程序,而Documentation/.gitignore忽略生成的文档.
忽略指定的文件只能在给定的(子)目录(可以使用/sub/foo的.gitignore,虽然).
请记住,.gitignore文件中的模式递归地应用于文件所在的(子)目录及其所有子目录,除非模式包含'/'(因此,例如,模式name适用于name在给定目录及其所有子目录中命名的任何文件,同时/name最适用于文件仅在给定目录中使用此名称).
Ari*_*zis 88
作为一个相关的注释,一个具有多个.gitignore文件的能力非常有用的情况是,如果您想在工作副本中创建一个您从未打算提交的额外目录.只需.gitignore在该目录中放一个1字节(只包含一个星号),它就不会出现在git status等等中.
Von*_*onC 51
您可以拥有多个.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规则忽略了我的文件? "
Pau*_*per 15
亲单
容易找到.
如果我在回购中的多个级别拥有多个gitignore,那么查找排除规则可能会非常困难.
对于多个文件,您通常也会遇到相当多的重复.
亲倍多
将"知识"范围扩展到需要它的文件树部分.
由于Git只跟踪文件,因此空的.gitignore是提交"空"目录的唯一方法.
(和Git 1.8之前,要排除的模式类似的唯一方法my/**.example是创建my/.gitignore与图案**.foo,这理由现在不适用,因为你可以做/my/**/*.example.)
我更喜欢单个文件,在那里我可以找到所有排除项.我从来没有错过每个目录.svn,我也不会错过每个目录.gitignore.
也就是说,多个gitignores很常见.如果你确实使用它们,至少要保持一致,以使它们合理使用.例如,您可以将它们放在仅与根目录相同的目录中.
有些情况下,你要提交的目录到你的Git回购,但没有在它的文件中许多场景,例如logs,cache,uploads目录等.
所以我一直在做的是.gitignore在这些目录中添加一个文件,其中包含以下内容:
*
!.gitignore
Run Code Online (Sandbox Code Playgroud)
使用此.gitignore文件,Git将不会跟踪这些目录中的任何文件,但仍然允许我将.gitignore文件添加到repo中,因此目录本身也是如此.
子文件夹中的另一个用例.gitignore是在 monorepos 中,其中每个存储库指定应忽略哪些文件可能更合适,而不是将它们全部移动到单个大型文件中.gitignore,然后再深入到每个项目中。
示例:我们有一个基于nx构建系统的 monorepo。在它里面我们有一个tools文件夹,其中包含各种实用程序,其中一些本身就是小型独立项目。在这种情况下,每个工具(package.json例如有自己的工具)也有一个单独的.gitignore. 它更容易维护,并且开发人员更容易了解正在发生的事情。