我的目标是编写一个.gitignore文件,该文件将忽略向下任何级别的所有内容,除了:
*.xxx
*.yyy
在当前目录(.gitignore所在的位置)和
*.xxx
下面树中任何位置的任何地方。
换句话说,我想将git *.xxx
保持在任何级别,并将*.yyy
保持在'root'级别。其他什么都应该忽略。
子文件夹的名称未知,因此我无法在gitignore文件中引用它们。
我尝试了许多替代方法,但到目前为止都没有成功: 例如:
#ignore everything in any subdirectory
*
*/**
#expect some files:
!*.yyy
!*/**/*.xxx
我认为我正在达到限制:
“如果文件的父目录不能重新包含该文件 文件被排除”
git忽略文档...是否有解决此问题的方法??
答案 0 :(得分:3)
问题确实在于,首先在所有子目录中将其列入黑名单,然后再尝试将这些目录中的某些内容重新包括在内。
解决方案是在尝试重新包含文件之前,再次将子目录列入白名单:
# blacklist everything
*
# whitelist all content ending with slash (directories)
!/**/
# finally whitelist all files with valid extension in the entire repo
!*.xxx
!*.yyy
# ignoring the ones that are only allowed within the repo root
*/**/*.yyy