gitignore 中*.json 为何能递归匹配所有文件夹下 json 文件?

2018-05-10 15:47:44 +08:00
 FaiChou

官网中说明了:

Otherwise, Git treats the pattern as a shell glob: "*" matches anything except "/",

我记得 glob 表达式中*能匹配a.js , x.y , abc , abc/但不能匹配a/b.js, 这是正常的.

但是我刚才新建了一个 git 仓库试了下, .gitignore:

*.txt

能够排除:

a.txt
b.txt
c.txt
f1/f1a.txt
f1/f1b.txt
f1/a.bd/bd.txt
f2/a.txt
ios/.../*.txt

是我理解有问题吗?

3380 次点击
所在节点    程序员
13 条回复
qiqico
2018-05-10 15:51:52 +08:00
试试 **/*.txt
FaiChou
2018-05-10 15:52:54 +08:00
@qiqico 这个我知道是可以的, 我只是不明白为何 * 能匹配 /
ynyounuo
2018-05-10 15:58:11 +08:00
FaiChou
2018-05-10 16:09:14 +08:00


当我使用 python 的 fnmatch 匹配缺又能匹配上.. 怪!
VDimos
2018-05-10 16:20:54 +08:00
可能是用的正则匹配的吧,楼主试试建个文件是 a.json.txt ,看看能不能匹配
ynyounuo
2018-05-10 16:27:37 +08:00
@FaiChou
看 doc 这一句

> A leading slash matches the beginning of the pathname. For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".

反过来说就是,没有 leading slash 就 matches recursively
FaiChou
2018-05-10 16:29:05 +08:00
@VDimos

不是正则匹配. glop 是最早 unix 下的简单匹配

FaiChou
2018-05-10 16:30:21 +08:00
@ynyounuo 谢谢 这么说挺合理的
ynyounuo
2018-05-10 16:38:20 +08:00
@FaiChou
其实我也很混乱,在你发这个主题前如果要忽略所有文件夹下的固定后缀我一直都写 **/*.ext
所以 `**/.*txt` 和 `*.txt` 是等价的么?
FaiChou
2018-05-10 16:44:49 +08:00
@ynyounuo

我有这样需求:
忽略很多`project.xcodeproj`下的`xcuserdata/`文件夹,

比如
ios/a/b/c/p.xcodeproj/xcuserdata/userfile
ios/a/b/d/p.xcodeproj/xcuserdata/userfile

如果写 *.xcodeproj/xcuserdata/ 会失败.
只好写 ios/**/*.xcodeproj/xcuserdata/ 这样才能成功.
FaiChou
2018-05-10 16:46:07 +08:00
p.xcodeproj 是个工程文件包
FaiChou
2018-05-10 17:08:47 +08:00



官网说 "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".

可是我用 python3 的 fnmatch, 发现"/*.c"并不匹配"cat-file.c" .

所以说也不能全用 fnmatch 来检测.

@ynyounuo
jasonyang9
2018-05-11 08:52:43 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/453798

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX