如何覆盖 .gitignore 中设置的规则

问题描述 投票:0回答:3

.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 中设置的规则吗?

git gitignore
3个回答
61
投票

是的!事实证明,当将文件添加到存储库时,您可以强制它覆盖 .gitignore:

git add -f <filename>

or

git add --force <filename>

来源:https://www.kernel.org/pub/software/scm/git/docs/git-add.html


45
投票

有一种简单的方法可以覆盖 .gitignore 文件中的规则——只需在更深层次上创建一个新的 .gitignore 文件即可。例如。就我而言,我可以通过将“!settings.php”添加到与settings.php所在文件夹相同的新.gitignore文件中来使git忽略我的settings.php文件。

参考:https://git-scm.com/docs/gitignore

可选前缀“!”这否定了模式;先前模式排除的任何匹配文件将再次包含在内。如果排除某个文件的父目录,则无法重新包含该文件。出于性能原因,Git 不会列出排除的目录,因此包含文件上的任何模式都无效,无论它们是在哪里定义的。在第一个“!”前面放置一个反斜杠(“\”)对于以文字“!”开头的模式,例如“!important!.txt”。


30
投票

对于那些不介意修改

.gitignore
文件的人,您可以通过在文件名或文件夹前面添加
!
来覆盖规则。使用
*
选择文件夹中的文件,使用
**
递归选择子文件夹中的文件。

覆盖特定文件的忽略:

!file.js

覆盖目录中文件的忽略:

!assets/*

覆盖目录及其子目录中文件的忽略:

!assets/**
© www.soinside.com 2019 - 2024. All rights reserved.