忽略除了某一类型文件以外的所有文件,不论其在哪个级别

3

我的目标是编写一个.gitignore文件,它将忽略所有层次结构下的内容,除了:

*.xxx
*.yyy

在当前目录(.gitignore所在的目录)中

*.xxx

在树的任何层次中,我希望保留git中的 *.xxx 文件以及 'root' 层次中的 *.yyy 文件。其他内容应该被忽略。

子文件夹的名称未知,因此我无法在 gitignore 文件中引用它们。

我已尝试过许多替代方案,但目前还没有成功:

#ignore everything in any subdirectory
*
*/**
#expect some files:
!*.yyy
!*/**/*.xxx

我想我遇到了限制:

"如果排除了文件的父目录,则无法重新包含该文件"

在 git ignore 文档中... 是否有一种解决方法呢?

1个回答

4
问题确实在于一开始将所有子目录列入黑名单,然后再尝试重新包含这些目录中的某些内容。
解决方法是在尝试重新包含文件之前再次将子目录列入白名单:
# 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

1
确实似乎可以工作,谢谢...你能评论一下达到那里的逻辑吗? - user1159290
当然,答案已更新。如果您需要更详细的解释,请告诉我! - Roger Rapid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接