.gitignore如何忽略目录中的第一级文件但不忽略子文件?

Ali*_*cia 3 git gitignore

如果你有一个类似的文件结构?

foo
??? bar
?   ??? file1.coffee
?   ??? file2.coffee
?   ??? file3.coffee
??? file1.js
??? file2.js
??? file3.js
Run Code Online (Sandbox Code Playgroud)

如何忽略第一级文件的foo目录(file1.js,file2.js,file3.js),但不能忽略的一切bar目录(file1.coffee,file2.coffee,file3.coffee)

提供结构保持相同/相似,但文件名和扩展名当然会有所不同.

是否有可能在没有每个目录拥有自己的.gitignore和白名单的情况下执行此操作?文档似乎没有提到如何实现这一点.

Von*_*onC 5

使用*作为第一个规则也会忽略文件夹,并且:

如果排除该文件的父目录,则无法重新包含文件.(*)
(*:除非在git 2.?+中满足某些条件,见下文)

所以你需要在忽略第一级后列出文件夹.
然后,您将列出白名单文件夹下的所有内容列入白名单:

*
!*/
!*/**
Run Code Online (Sandbox Code Playgroud)

或者,使用Sven Marnach的变体,使用/*哪个目标仅限于第一级的文件和文件夹:

/*
!*/
Run Code Online (Sandbox Code Playgroud)

请注意,使用git 2.9.x/2.10(2016年中期?),如果重新包含的路径中没有通配符,则可以重新包含该文件(如果排除该文件的父目录).

NguyễnTháiNgọcDuy(pclouds)正在尝试添加此功能:

但是,由于重新纳入的条件之一是:

重新包含规则中的目录部分必须是文字(即没有通配符)

除非我们只谈论foo和bar文件夹,否则无论如何都不会在这里工作:

foo/
!foo/bar
Run Code Online (Sandbox Code Playgroud)