2015-09-19 94 views
3

如果你有一个文件结构?.gitignore如何忽略目录中的第一级文件而不是子文件?

foo 
├── bar 
│   ├── file1.coffee 
│   ├── file2.coffee 
│   └── file3.coffee 
├── file1.js 
├── file2.js 
└── file3.js 

如何忽略foo目录第一级的文件(file1.jsfile2.jsfile3.js),但不忽略bar目录一切(file1.coffeefile2.coffeefile3.coffee

提供了结构保持不变/类似,但是文件名和扩展名当然是不同的。

是否有可能做到这一点,而不是每个目录有它自己的.gitignore和白名单?文档似乎没有提到如何实现这一点。

回答

5

使用*作为第一个规则将忽略文件夹,以及,:

It is not possible to re-include a file if a parent directory of that file is excluded.*
*:除非某些条件,在Git中2.?+相遇,见下文)

所以你需要白名单文件夹后忽略第一级。
然后你白名单都低于白名单文件夹:

* 
!*/ 
!*/** 

或者,使用Sven Marnach的变化,使用/*其只针对文件和第一级的文件夹:

/* 
!*/ 

请注意,使用git 2.9.x/2.10(2016年中期?),如果排除该文件的父目录,则可能会重新包含文件if there is no wildcard in the path re-included

Nguyễn Thái Ngọc Duy (pclouds)正在努力增加这个功能:

然而,由于病情的一种重新列入为:

在目录部分再包括规则必须是文字(即无通配符)

那倒没有在这里工作,除非我们只是在谈论foo和bar文件夹:

foo/ 
!foo/bar 
+1

您也可以在第一行使用'/ *',最后一行不加思索。 –

+0

@SvenMarnach好点。为了提高可见性,我在答案中加入了这个变体。 – VonC