在
.gitignore
中,我有一条排除路径的规则 settings.php
但是,必须忽略该规则(该文件必须包含在 git 中),但由于特殊原因(
.gitignore
文件经常从外部重置为默认值),我不想更改 .gitignore
本身,但是而不是通过在 core.excludesfile 文件中设置反规则来覆盖它。
因此,在相关的 core.excludesfile 文件中,我输入:
!settings.php
来覆盖上述规则。
但它不起作用。我怀疑.gitignore
中的规则优先于全局文件中排除的规则(这就是我的理解https://www.kernel.org/pub/software/scm/git/docs/gitignore.html ).
有什么方法可以通过 core.excludesfile 或其他地方的规则覆盖 .gitignore 中设置的规则吗?
是的!事实证明,当将文件添加到存储库时,您可以强制它覆盖 .gitignore:
git add -f <filename>
or
git add --force <filename>
来源:https://www.kernel.org/pub/software/scm/git/docs/git-add.html
有一种简单的方法可以覆盖 .gitignore 文件中的规则——只需在更深层次上创建一个新的 .gitignore 文件即可。例如。就我而言,我可以通过将“!settings.php”添加到与settings.php所在文件夹相同的新.gitignore文件中来使git忽略我的settings.php文件。
参考:https://git-scm.com/docs/gitignore
可选前缀“!”这否定了模式;先前模式排除的任何匹配文件将再次包含在内。如果排除某个文件的父目录,则无法重新包含该文件。出于性能原因,Git 不会列出排除的目录,因此包含文件上的任何模式都无效,无论它们是在哪里定义的。在第一个“!”前面放置一个反斜杠(“\”)对于以文字“!”开头的模式,例如“!important!.txt”。
对于那些不介意修改
.gitignore
文件的人,您可以通过在文件名或文件夹前面添加 !
来覆盖规则。使用 *
选择文件夹中的文件,使用 **
递归选择子文件夹中的文件。
覆盖特定文件的忽略:
!file.js
覆盖目录中文件的忽略:
!assets/*
覆盖目录及其子目录中文件的忽略:
!assets/**