Regex-like shell glob patterns for gitignore

可紊 提交于 2019-11-29 09:53:24

While the answer by @SpeakEasy can ignore .so files in a single step using *.so*, for your use case of ignoring files in formats specified, you can use two entries in your .gitignore for more specific ignore rule

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

From gitignore man page

Each line in a gitignore file specifies a pattern.

Git treats the pattern as a shell glob suitable for consumption by fnmatch

The important thing to note is that the pattern is not the same as regular expressions.

Python has a module named fnmatch, you can use that to verify whether a particular filename matches the pattern or not.

Sample example:

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

Does adding the line *.so* not work? Or do you need more fine control?

I think you can accomplish it in two lines:

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

From torek's comment:

Use multiple lines:

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

etc.

I don't know if there is a better way...

Python has a module named fnmatch, you can use that to verify whether a particular filename matches the pattern or not.

Not exactly correct like @mu 無 said.

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

For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".

But I tried in 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

fnmatch not match cat-file.c but .gitignore support.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!