我正在尝试编写.gitignore规则来排除具有多个子目录级别的特定目录中的某些文件.
文件夹结构如下所示:
out
??a
? ??source
? ? ??.keepme
? ? ??183597.txt
? ? ??271129.txt
? ? ??288833.txt
? ??parsed
? ??.keepme
? ??183597.csv
? ??271129.csv
? ??288833.csv
??b
? ??(...)
(etc.)
Run Code Online (Sandbox Code Playgroud)
我想保留.keepme文件(以便Git保存目录结构),所以我想我会写一个规则来匹配out与模式匹配的任何东西?*.*:
out/**/?*.*
Run Code Online (Sandbox Code Playgroud)
但是,这与任何文件都不匹配.
我认为这**将匹配任意数量的子目录; 为什么这不起作用?
我在Fedora 18 VM上运行Bash 4.2中的Git 1.8.
首先,请确保您使用的是Git 1.8.2或更高版本,因为这是在**引入支持时.
听起来你正试图.keepme通过匹配来排除文件*.*.但是,由于*匹配零个或多个字符,它匹配句点前面的空字符串.keepme,包括此文件.
也许你打算像它一样工作 out/**/?*.*
如果你想匹配所有非dotfiles,你可以使用out/**/[!.]*哪些也包括没有句号的文件名,比如Makefile.