如何从git ls-files中排除文件?

时间:2016-04-20 19:38:42

标签: git bash

如何列出除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

4 个答案:

答案 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 glossaryman 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)

那是already discussed in 2010

  

手册页中没有任何迹象表明-x不适用于-c。

因此增加:

  

由于b5227d8-x/--exclude不适用于缓存文件   除非您阅读EXCLUDE PATTERNS部分中的讨论,否则很容易错过。澄清该选项适用于未跟踪文件并将读者引导至EXCLUDE PATTERNS

git ls-files man page确实提及:

-x <pattern>
--exclude=<pattern>
  

跳过匹配模式的未跟踪文件

如果跟踪了Readme.md,则排除模式不会适用。

答案 3 :(得分:1)

如何使用grep反向匹配-v

git ls-files | grep -v -E "\.md$"