如何列出除markdown文件以外的所有内容?我已经尝试过,如下面的代码所示,使用--exclude标志运行ls-files,但排除的文件仍显示在输出中。
我的git版本是2.6.4(Apple Git-63)
$ git ls-files
ChromeExt/read-coffee
Node/README.md
Node/web-scraping
README.md
$ git ls-files --exclude *.md
ChromeExt/read-coffee
Node/README.md
Node/web-scraping
README.md
答案 0 :(得分:11)
Git有自己的扩展glob模式的方法,其中包括一种排除匹配一个模式但不匹配另一个模式的文件的方法。例如,以下内容将列出所有不以.md结尾的路径:
git ls-files -- . ':!:*.md'
引用模式很重要,因为您希望git解析它而不是shell。
并匹配所有以.js
结尾的文件,以.min.js
结尾的文件除外:
git ls-files -- '*.js' ':!:*.min.js'
您还可以将其与其他命令一起使用,例如git grep:
git grep -w funcname -- '*.js' ':!:*.min.js'
此语法在pathspec in gitglossary(或git help glossary
或man gitglossary
)下进行解释
答案 1 :(得分:6)
您不需要使用--exclude参数 因为此密钥仅用于跳过未跟踪的文件:
$ man git-ls-files
-x <pattern>, --exclude=<pattern>
Skip untracked files matching pattern. Note that pattern is a shell wildcard pattern. See EXCLUDE PATTERNS below for more information.
您应该只为所需文件使用掩码
在您的情况下(不包括* .md文件):
$ git ls-files
example1.txt
example2.pdf
readme.md
$ git ls-files *[^.md]
example1.txt
example2.pdf
答案 2 :(得分:5)
手册页中没有任何迹象表明-x不适用于-c。
因此增加:
由于b5227d8,
-x/--exclude
不适用于缓存文件 除非您阅读EXCLUDE PATTERNS
部分中的讨论,否则很容易错过。澄清该选项适用于未跟踪文件并将读者引导至EXCLUDE PATTERNS
。
-x <pattern>
--exclude=<pattern>
跳过匹配模式的未跟踪文件
如果跟踪了Readme.md
,则排除模式不会适用。
答案 3 :(得分:1)
如何使用grep反向匹配-v
?
git ls-files | grep -v -E "\.md$"