當你告訴它忽略*
,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
難道你還需要有'在子DIR自己的'.gitignore'文件.gitignore'按順序列出了忽略文件本身被跟蹤Git的? – beporter 2014-05-19 15:13:03
@beporter:我通常只是用'git add -f .gitignore'手動跟蹤它(當它被跟蹤時,它是否會被忽略並不重要)。但是,如果你不想採取這種一次性的「強制」步驟,那麼你可以添加額外的條目(或者,也許更好的話,'!/。gitignore'只會取消第一級'.gitignore')。 – 2014-05-19 17:42:52