gitignore的类似正则表达式的shell glob模式

roi*_*oim 9 git glob gitignore

当我编译我的C++项目时,许多共享对象文件都是使用扩展名创建的

.so
.so.0
.so.7
.so.0.7
Run Code Online (Sandbox Code Playgroud)

我需要将所有这些添加到我的.gitignore文件中.如果这是一个正则表达式,我可以使用

\.so[\.0-9]*
Run Code Online (Sandbox Code Playgroud)

但是,文档说明了这一点.gitignore

将模式视为适合fnmatch(3)使用FNM_PATHNAME标志的shell glob

我找不到用fnmatch我发现的文件做我想做的事情.真的没办法做到这一点吗?

mu *_*u 無 13

虽然@SpeakEasy的答案可以.so在一个步骤中忽略文件*.so*,对于您忽略指定格式的文件的用例,您可以在您.gitignore的更具体的忽略规则中使用两个条目

*.so
*.so.[0-9]*
Run Code Online (Sandbox Code Playgroud)

来自gitignore手册页

gitignore文件中的每一行都指定一个模式.

Git将模式视为适合消费的shell glob fnmatch

需要注意的重要一点是,模式与正则表达式不同.

Python有一个名为fnmatch的模块,您可以使用它来验证特定文件名是否与模式匹配.

示例示例:

import fnmatch
pattern = "*.so.[0-9]*"
filenames = ["a.so", "b.so.0", "b.so.11", "b.so.1.0", "b.so.1.0.12"]

for filename in filenames:
    print filename, fnmatch.fnmatch(filename, pattern)

>>> a.so False
    b.so.0 True
    b.so.11 True
    b.so.1.0 True
    b.so.1.0.12 True
Run Code Online (Sandbox Code Playgroud)


小智 5

添加线路*.so*不起作用吗?或者你需要更好的控制?

  • 为了安全,我想要更好的控制.我总是"发现"新的扩展. (2认同)