假设我有这样的文件夹结构:
├── a
│ ├── b
│ │ ├── c.xml
│ │ └── d.c
│ ├── v
│ ├── e.class
│ └── g.c
|
├── m
│ ├── p
│ │ ├── w.out
│ │ └── x.c
│ ├── q
│ │ ├── y.mp3
│ │ └── z.c
我只想不要忽视*.c
。
我试过
*
!*.c
.gitignore
中的,但这似乎只适用于当前级别。
我想要的是设置!*/*/*.c
之类的东西,因为稍后可能会有其他目录添加到git repo中,我无法对.gitignore
文件进行硬编码。
答案 0 :(得分:5)
将!*/
添加到.gitignore
以允许目录:
*
!*/
!*.c
来自gitignore man page(强调我的):
可选前缀"!"否定了这种模式;之前模式排除的任何匹配文件将再次包含在内。 如果排除该文件的父目录,则无法重新包含文件。由于性能原因,Git不会列出排除的目录,因此所包含文件的任何模式都不起作用,无论他们在哪里定义。在第一个"!"前面放一个反斜杠(" \")对于以文字"!"开头的模式,例如"!important!.txt"。
这就是你必须排除目录的原因。
答案 1 :(得分:1)
来自GITIGNORE(5)
:
可选前缀"!"否定了这种模式;之前模式排除的任何匹配文件将再次包含在内。如果排除该文件的父目录,则无法重新包含文件。
所以这里发生的事情是/example.c
变得不合情理,但/a/b/d.c
仍被忽略,因为忽略了/a
和/a/b
。
解决方案是通过将所有目录放入.gitignore
:
*
!*/
!*.c