如何覆盖 .gitignore 规则?

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

.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
4个回答
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”。


31
投票

对于那些不介意修改

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

覆盖特定文件的忽略:

!file.js

覆盖目录中文件的忽略:

!assets/*

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

!assets/**

0
投票

gitignore 不够复杂,无法处理您试图通过重置

.gitignore
文件并排除某些忽略文件等来解决的用例。对于您使用
settings.php
的用例,更典型的方法是提交模板化版本
settings.php.example
并使用
make
等工具或其他模板语言在构建时生成
settings.php
。本示例中的设置值将存储在其他一些配置文件或环境变量中,出于安全原因,这些配置文件不会提交给 git。
请参阅12factor.net/config

[直接引用@Wade_Williams评论https://stackoverflow.com/questions/24844782/how-to-override-a-rule-set-in-gitignore#comment93792098_24844782到其他答案之一]

© www.soinside.com 2019 - 2024. All rights reserved.