2010-10-06 96 views

回答

7

當你告訴它忽略*,Git會不會遞歸到任何子目錄(即使你有一個「屏蔽」模式的可能匹配裏面的目錄一個東西)。

雖然有一點gitignore模式語言可能有幫助。尾部斜線強制該模式僅適用於目錄。所以,你應該能夠使用:

# .gitignore 
* 
!.keep 
!*/ 

在演示下面我用上面的.gitignore並有一個額外的文件(名爲do-not-keep)並排.keep文件。您可以看到它適用於多級子目錄,並且不顯示其他文件。你將不得不通過一些獨立的方法安排每個目錄擁有自己的.keep(或其他)。

% git status --short -uall 
?? a/.keep 
?? a/b/.keep 
?? a/b/c/.keep 
?? a/b/c/d/.keep 
?? e/.keep 
?? e/f/.keep 
?? e/f/g/.keep 
?? h/.keep 
?? h/i/.keep 
?? j/.keep 

這是用Git 1.7.3.1完成的,但我希望它也可以用於其他版本。

演示設置:

% git init 
% mkdir -p a/b/c/d e/f/g h/i j 
% zargs -i.. -- **/*(/) -- touch ../.keep ../do-not-keep 
% tree -aI .git .          
. 
|-- .gitignore 
|-- a 
| |-- .keep 
| |-- b 
| | |-- .keep 
| | |-- c 
| | | |-- .keep 
| | | |-- d 
| | | | |-- .keep 
| | | | `-- do-not-keep 
| | | `-- do-not-keep 
| | `-- do-not-keep 
| `-- do-not-keep 
|-- e 
| |-- .keep 
| |-- do-not-keep 
| `-- f 
|  |-- .keep 
|  |-- do-not-keep 
|  `-- g 
|   |-- .keep 
|   `-- do-not-keep 
|-- h 
| |-- .keep 
| |-- do-not-keep 
| `-- i 
|  |-- .keep 
|  `-- do-not-keep 
`-- j 
    |-- .keep 
    `-- do-not-keep 

10 directories, 21 files 
+0

難道你還需要有'在子DIR自己的'.gitignore'文件.gitignore'按順序列出了忽略文件本身被跟蹤Git的? – beporter 2014-05-19 15:13:03

+0

@beporter:我通常只是用'git add -f .gitignore'手動跟蹤它(當它被跟蹤時,它是否會被忽略並不重要)。但是,如果你不想採取這種一次性的「強制」步驟,那麼你可以添加額外的條目(或者,也許更好的話,'!/。gitignore'只會取消第一級'.gitignore')。 – 2014-05-19 17:42:52

相關問題