V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FaiChou
V2EX  ›  程序员

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

  •  
  •   FaiChou ·
    FaiChou · 2018-05-10 15:47:44 +08:00 · 3362 次点击
    这是一个创建于 2169 天前的主题,其中的信息可能已经有所发展或是发生改变。

    官网中说明了:

    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
    

    g

    是我理解有问题吗?

    13 条回复    2018-05-11 08:52:43 +08:00
    qiqico
        1
    qiqico  
       2018-05-10 15:51:52 +08:00
    试试 **/*.txt
    FaiChou
        2
    FaiChou  
    OP
       2018-05-10 15:52:54 +08:00
    @qiqico 这个我知道是可以的, 我只是不明白为何 * 能匹配 /
    ynyounuo
        3
    ynyounuo  
       2018-05-10 15:58:11 +08:00
    FaiChou
        4
    FaiChou  
    OP
       2018-05-10 16:09:14 +08:00


    当我使用 python 的 fnmatch 匹配缺又能匹配上.. 怪!
    VDimos
        5
    VDimos  
       2018-05-10 16:20:54 +08:00 via Android
    可能是用的正则匹配的吧,楼主试试建个文件是 a.json.txt ,看看能不能匹配
    ynyounuo
        6
    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
        7
    FaiChou  
    OP
       2018-05-10 16:29:05 +08:00
    @VDimos

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

    FaiChou
        8
    FaiChou  
    OP
       2018-05-10 16:30:21 +08:00
    @ynyounuo 谢谢 这么说挺合理的
    ynyounuo
        9
    ynyounuo  
       2018-05-10 16:38:20 +08:00
    @FaiChou
    其实我也很混乱,在你发这个主题前如果要忽略所有文件夹下的固定后缀我一直都写 **/*.ext
    所以 `**/.*txt` 和 `*.txt` 是等价的么?
    FaiChou
        10
    FaiChou  
    OP
       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
        11
    FaiChou  
    OP
       2018-05-10 16:46:07 +08:00
    p.xcodeproj 是个工程文件包
    FaiChou
        12
    FaiChou  
    OP
       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
        13
    jasonyang9  
       2018-05-11 08:52:43 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3781 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:28 · PVG 12:28 · LAX 21:28 · JFK 00:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.