我有一个不应该被我的.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
答案 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
中的任何内容,因为它具有深远的影响。这种格式允许贡献者仍然为自己制定自定义忽略规则。