如何覆盖.gitignore中的规则集

Vac*_*ndo 10 git

在.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中的规则集?

Sam*_*ham 14

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

git add -f <filename>

or

git add --force <filename>
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,这是一个有用的答案,但在 git add 期间必须手动覆盖 .gitignore 似乎有点不切实际。我仍然希望有一种方法可以更一般地覆盖它。或者这是不可能的? (2认同)
  • 将文件添加到存储库后,无需在每次修改文件时都对其添加-f。 (2认同)
  • 如果 1) 未跟踪和 2) 未在 `.gitignore` 或其他类似配置中列出,则基本上文件将被忽略。将文件添加到存储库将有效地防止它再次被忽略(直到你`git rm`它) (2认同)

Vac*_*ndo 9

有一种简单的方法可以覆盖.gitignore文件中的规则-只需在更深的级别上制作一个新的.gitignore文件。例如,在我的情况下,通过将“!settings.php”添加到settings.php所在文件夹中的新.gitignore文件中,我能够使git忽略我的settings.php文件。


Sur*_*gch 9

对于那些不介意修改.gitignore文件的人,您可以通过!在文件名或文件夹前面添加来覆盖规则。使用*选择一个文件夹中的文件,并**在递归子文件夹选择文件。

覆盖特定文件的忽略:

!file.js
Run Code Online (Sandbox Code Playgroud)

覆盖对目录中文件的忽略:

!assets/*
Run Code Online (Sandbox Code Playgroud)

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

!assets/**
Run Code Online (Sandbox Code Playgroud)