hello/ 忽略我的文件夹结构中任何位置名为"hello"的所有文件夹
hello/* 只忽略顶层的文件夹"hello".
为什么是这样?请指出http://git-scm.com/docs/gitignore中解释此行为的段落.
Pau*_*per 15
这可能看起来很困难,但这允许我们以多种方式匹配目录:任何地方的文件或目录,任何地方的目录或顶层的目录.这种多功能性非常有用,可以防止杂乱无章.gitignore.
(仅供参考,如果你有Git 1.8.2+,你可以git check-ignore用来帮助调试它.)
如果你放foo,它将匹配所有名为的文件和目录foo.
如果你放foo/,它只会匹配名为的目录foo.
如果模式以斜杠结尾,则为了以下描述的目的将其删除,但它只会找到与目录的匹配项.换句话说,foo /将匹配目录foo和它下面的路径,但是不匹配常规文件或符号链接foo(这与pathpec在Git中的工作方式一致).
如果你添加*,就像在foo/*,它被视为文件glob(相对于.gitignore).
否则,Git将模式视为适合fnmatch(3)使用FNM_PATHNAME标志消耗的shell glob:模式中的通配符与路径名中的/不匹配.例如,"Documentation/*.html"匹配"Documentation/git.html",但不匹配"Documentation/ppc/ppc.html"或"tools/perf/Documentation/perf.html".
因此foo/*,Git将忽略顶级目录中的所有文件和目录foo.它将忽略foo/dir,foo/file.txt等等.(从技术上讲,这不会忽略foo它自己,但它会忽略它的子节点.但是,由于Git不跟踪目录,它具有相同的效果.)
仅供参考,foo/**会有同样的行为.
我的建议:
如果你想忽略foo顶级目录,IMO最明显的是使用这个规则:
前导斜杠与路径名的开头匹配.例如,"/*.c"匹配"cat-file.c"但不匹配"mozilla-sha1/sha1.c".
所以你可以写/foo/,它会忽略foo顶层的目录,但不管其他地方.
相关段落是:
Git将模式视为适合消费的shell glob
fnmatch,具有:
*'为顶级文件**里面的一切,无限的深度fnmatch是一个函数,它检查字符串参数是否与模式参数匹配,后者是一个shell通配符模式.
这从一个忽略不计的规则时,子文件夹是非常有用的,因为我在"提到如何将lib内部文件[/Libs/x64/Release]的Git仓库文件夹 "
Libs/**/*
!Libs/x64/Release/
Run Code Online (Sandbox Code Playgroud)
忽略除Libs/x64/Release文件夹之外的所有内容.
在任何情况下,该命令git check-ignore -v对于检查哪个.gitignore规则适用于任何特定文件非常有用.
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |