如何用 Git.. 忽略除某些 files/directories 以外的所有内容?

How to ignore all but certain files/directories with Git..?

我看到了类似的问题,但出于某种原因,我没有找到任何可以满足我的要求的东西。

我有一个我维护的 CodeIgniter PHP 库,所以我的项目是包含我的库的完整 CI 安装。我试图忽略除构成我的库的文件之外的所有内容。

我觉得我已经阅读了执行此操作的语法,但我在目录中得到了意想不到的结果。

首先,我从这个开始:

*
!.gitignore
!README.rst
!instructions.html

你可以在这里看到除了站点根目录下的那 3 个文件之外的所有内容都是灰色的(忽略),这意味着这些文件不再被忽略......这正是我目前想要的。

当我继续尝试取消忽略位于目录中的其余库文件时,它根本不起作用。例如,如果我添加...

!application/controllers/paypal

可以看到里面的目录和文件还是灰色的(忽略),当然我运行git命令的时候确实是忽略了。

如能提供有关我需要做什么才能使这项工作正常进行的任何信息,我们将不胜感激。

只需先将文件夹列入白名单即可。

然后就可以开始白名单了files

*
!**/
!.gitignore
!README.rst
!instructions.html
!application/controllers/paypal/**

和往常一样(我在“How do I add files without dots in them (all extension-less files) to the gitignore file?”中提到过,主要有一条规则需要记住.gitignore

It is not possible to re-include a file if a parent directory of that file is excluded.

这意味着,当您排除所有内容时 ('*'),您必须先将文件夹列入白名单,然后才能将文件列入白名单。

检查这是否与 git check-ignore -v -- afile 一起工作以查看它是否被忽略(以及根据哪个规则)。