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

时间:2013-10-15 21:21:39

标签: git gitignore glob

编译C ++项目时,许多共享对象文件都是使用

等扩展名创建的
.so
.so.0
.so.7
.so.0.7

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

\.so[\.0-9]*

但是,the documentation表示.gitignore

  

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

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

5 个答案:

答案 0 :(得分:13)

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

.gitignore

来自gitignore man page

  

gitignore文件中的每一行都指定了一种模式。

     

Git将模式视为适合fnmatch

消费的shell glob

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

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

示例示例:

*.so
*.so.[0-9]*

答案 1 :(得分:5)

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

答案 2 :(得分:1)

我认为你可以用两行来完成它:

.so
.so.[0-9]*

答案 3 :(得分:0)

来自torek's comment

  

使用多行:

*.so
*.so.[0-9]
*.so.[0-9].[0-9]
     

我不知道是否有更好的方法...

答案 4 :(得分:0)

  

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

不像@mu无那样完全正确。

https://git-scm.com/docs/gitignore

  

例如,“/ *。c。”匹配“cat-file.c”但不匹配“mozilla-sha1 / sha1.c”。

但我尝试了fnmatch:

_throw

fnmatch与>>> p = "/*.c" >>> f = "cat-file.c" >>> fnmatch(f, p) False >>> f2 = "abc/def/cat-file.c" >>> fnmatch(f2, p) False >>> p2 = "*.c" >>> fnmatch(f, p2) True >>> fnmatch(f2, p2) True 不匹配,但.gitignore支持。