2015-09-19 131 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