如何覆盖.gitignore中的规则集
在.gitignore中,我有一个排除路径settings.php的规则 但是,必须忽略该规则。该文件必须包含在git中,但由于特殊原因,.gitignore文件经常从外部重置为默认值。我不希望更改.gitignore本身,而是通过在core.excludesfile文件中设置计数器规则来覆盖它 所以在相关的core.excludesfile文件中,我放了:!settings.php以覆盖上述规则。 但它不起作用。我怀疑.gitignore中的规则比全局文件中带有排除项的规则具有优先级,这就是我的理解如何覆盖.gitignore中的规则集,git,Git,在.gitignore中,我有一个排除路径settings.php的规则 但是,必须忽略该规则。该文件必须包含在git中,但由于特殊原因,.gitignore文件经常从外部重置为默认值。我不希望更改.gitignore本身,而是通过在core.excludesfile文件中设置计数器规则来覆盖它 所以在相关的core.excludesfile文件中,我放了:!settings.php以覆盖上述规则。 但它不起作用。我怀疑.gitignore中的规则比全局文件中带有排除项的规则具有优先级,这就是我
是否有任何方法可以通过core.excludesfile或其他地方的规则覆盖.gitignore中的规则集?是!事实证明,将文件添加到存储库时,可以强制其重写。gitignore:
git add -f <filename>
or
git add --force <filename>
来源:有一种简单的方法可以覆盖.gitignore文件中的规则-只需在更深层次上创建一个新的.gitignore文件。例如,在我的例子中,我可以通过添加!将settings.php导入settings.php所在文件夹中的新.gitignore文件 参考: 可选前缀!这否定了这种模式;先前模式排除的任何匹配文件都将再次包含。如果文件的父目录被排除,则无法重新包含该文件。出于性能原因,Git不会列出排除的目录,因此包含的文件上的任何模式都不会产生任何影响,无论它们定义在何处。将反斜杠\放在第一个前面!对于以文字开头的模式!,例如重要的txt
对于那些不介意修改.gitignore文件的人,您可以通过添加!在文件名或文件夹前面。使用*选择文件夹中的文件,使用**递归选择子文件夹中的文件 覆盖特定文件的忽略:
!file.js
覆盖目录中文件的忽略:
!assets/*
覆盖目录及其子目录中文件的忽略:
!assets/**
是的,这是一个有用的答案,但在git添加过程中手动重写.gitignore似乎有点不切实际。我仍然希望有一种方法可以更普遍地覆盖它。或者这是不可能的?一旦你将一个文件添加到存储库中,你就不需要在每次修改它时再添加-f它了。基本上,如果1个未跟踪,2个未在.gitignore或其他类似配置中列出,文件将被忽略。将该文件添加到存储库将有效地防止再次忽略该文件,直到您将其添加到git rm itit。应添加该文件,以确保该文件不会覆盖.git/info/exclude中的规则,该imho是好的和预期的,尽管如此,documentedgitignore似乎还不够成熟,无法通过重置gitignore文件并排除某些ignore文件等方式处理您试图解决的用例。对于使用settings.php的用例,更典型的方法是提交模板化版本,并使用make或其他模板语言等工具在构建时生成settings.php。本例中的设置值将存储在其他一些配置文件或环境变量中,出于安全原因,这些配置文件或环境变量不会提交给git。