Glob / minimatch:如何gulp.src()的一切,然后排除文件夹,但保留一个文件

我有这样一个项目:

root |-incl1 |-incl2 |- ... |-excl1 |-excl2 |- .gitignore <-- keep this one |- (other files) <-- exclude them 

我需要编写gulp.src() ,它将包含除excl1excl2之外的所有文件夹, 保留.gitignore文件。

这是我的代码不起作用:

 gulp.src([ baseDir + '/**', '!' + baseDir + '/{excl1, excl1/**}' '!' + baseDir + '/excl2/{**, !.gitignore}' // <-- doesn't work ], {dot: true}) 

这似乎工作:

 gulp.src([ baseDir + '/**', // Include all '!' + baseDir + '/excl1{,/**}', // Exclude excl1 dir '!' + baseDir + '/excl2/**/!(.gitignore)', // Exclude excl2 dir, except .gitignore ], { dot: true }); 

从glob匹配中排除单个文件是棘手的,因为minimatch文档中没有类似的示例。

https://github.com/isaacs/minimatch

“如果模式以!字符开始,则它被否定”。