.gitignore忽略白名单文件夹

时间:2014-07-28 20:07:43

标签: git gitignore

我有一个不应该被我的.gitignore忽略的文件夹,但是git仍然忽略它。我找不到任何其他.gitignore文件或git配置,建议忽略此文件夹,git check-ignore不打印任何内容。

我的.gitignore组织得像白名单一样:

*
!.gitignore
!NotIgnoredFolder/
!SomeOtherFolderInRoot

我有一个NotIgnoredFolder / subfolder / js的文件夹,git忽略了。根据它的位置和我的.gitignore,这条路显然不应该被忽略。当我尝试使用git add NotIgnoredFolder/subfolder/js添加它时,我得到了

The following paths are ignored by one of your .gitignore files:
NotIgnoredFolder/subfolder/js

我搜索了我的整个C:驱动器.gitignore和.gitignore_global文件可能会干扰,没有运气。我还检查了我的.git / config和我的.git / info / exclude。此外,当我尝试git check-ignore NotIgnoredFolder/subfolder/js时,Git会打印一个空行。

有没有办法看到.gitignore文件导致忽略?或者这可能是我设置我的gitignore的结果?

我尝试过的解决方案没有成功:

Git is ignoring files that aren't in gitignore

Git is ignoring .idea folder, but that isn't in gitignore

which gitignore rule is ignoring my file

2 个答案:

答案 0 :(得分:7)

Git跟踪文件,而不是目录,但gitignore规则可以匹配文件和目录。试试这个:

# Ignore by default
*
!.gitignore
# Whitelist the folder
!NotIgnoredFolder/
# Recursively whitelist its contents
!NotIgnoredFolder/**

如果您没有将目录列入白名单,git就不会进入该目录,但如果您不将**(或*内容列入白名单,特别是DON&#T; T想要递归白名单),它会忽略目录中的文件。

人们可以执行其他操作:/*而不是*在顶部,默认情况下只排除顶级项目,或!*/将所有目录列入白名单(但不一定是文件)他们内心)。具体而言,!*/会使行!NotIgnoredFolder/变得不必要,因为它允许下降到任何目录。

但我相信上述情况对您的情况最为具体。

答案 1 :(得分:1)

感谢杰森指出我正确的方向,我找到了满足我需求的配置:

/*
!.gitignore
!RootDirectory/
!OtherRootDirectory/

.DS_Store
*.bak
*.orig
*.class

这实际上只是与原版不同,因为我们在初始星号之前放了一个斜杠,但它更改了逻辑,以便最初忽略每个特定路径,然后尝试从其中一些路径中退回,它将明确地忽略只有顶级目录(但扩展名也是其内容)。但是,这使得白名单文件夹更易于管理,因为我们不必使用!NotIgnoredFolder/**递归地将内容列入白名单。

我会给Jason的答案,因为他的工作也是如此,但我注意到这种格式的一个缺点是覆盖.git/info/exclude中的任何内容,因为它具有深远的影响。这种格式允许贡献者仍然为自己制定自定义忽略规则。