Gitignore 双星模式不起作用

标签 git bash file gitignore

我试图使用以下 .gitignore 配置排除除我需要的文件之外的所有文件:

*.* # Ignore all files
*~  # Ignore temp files
\#* # Ignore temp files

!.gitignore
!*.conf
!**/*.conf

但是,当我执行git status时,文件./postgresql/9.3/warm-standby/postgresql.conf没有显示。如何修复我的 .gitignore

Git 版本是 2.1.4

最佳答案

首先:感谢 @EtanReisner 仔细研究了这一点,并感谢 @RetoAebersold 提供了正确的 link

问题是,使用以下语句(不是您的 .gitignore 的一部分),您将文件和目录列入黑名单:

*

现在,如果您像以前一样使用 *.*,这通常不是问题,因为大多数目录不包含点 (.)。然而你的却是:

*           .*
postgresql/9.3

所以发生的情况是所有目录都被列入黑名单。为了能够在目录中添加文件,您首先需要将这些目录列入白名单。您可以使用 oneliner 执行此操作:

!*.*/

换句话说,将以斜杠结尾的所有内容都列入白名单。

现在您也可以将文件列入白名单:

!*.conf

请注意,白名单 !**/*.conf 是不必要的(甚至可能不允许,特别是因为两个连续的星号 ** 仅在 git 中启用1.8.*)。

更好的配置文件如下:

*.* # Ignore all files
*~  # Ignore temp files
\#* # Ignore temp files
!*/
!*.*/

!.gitignore
!*.conf

关于Gitignore 双星模式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30332759/

相关文章:

linux - 制作 bash 脚本以接受来自文件的输入或管道输出

java - File.getClass().getMethod() : how to get . 类和方法

git - 一切都是最新的(一切都不是)

linux - 如何 'grep'连续流?

linux - 为什么我的 Dockerfile CMD 不起作用?

C++计算文件中单词的出现次数并写入另一个文件

c - 如何从文本文件中提取特定编号的行? (C)

security - GIT 支持基于分支的用户授权——最佳实践还是工具?

git - 如何获得 `git diff origin/master` 的相反方向

git:如何在不禁用 safecrlf 的情况下摆脱 "warning: CRLF will be replaced by LF"?