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

Nat*_*ate 14 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
Run Code Online (Sandbox Code Playgroud)

gei*_*rha 18

Git有自己的扩展glob模式的方法,其中包括一种排除匹配一种模式而不是另一种模式的文件的方法.例如,以下将列出所有不以.md结尾的路径:

git ls-files -- . ':!:*.md'
Run Code Online (Sandbox Code Playgroud)

引用模式很重要,因为你希望git解析它,而不是shell.

并匹配所有以.结尾的文件.js,但结尾的文件除外.min.js:

git ls-files -- '*.js' ':!:*.min.js'
Run Code Online (Sandbox Code Playgroud)

您也可以将其与其他命令一起使用,例如git grep:

git grep -w funcname -- '*.js' ':!:*.min.js'
Run Code Online (Sandbox Code Playgroud)

这个语法在gitglossary(或git help glossaryor man gitglossary)中的pathspec下解释

  • 要忽略两种文件类型,请执行以下操作:`git ls-files -- 。':!:*.md' 。':!:*.css'`,虽然它可能不是最短的方法。 (3认同)
  • @alper当然,忽略测试目录中的任何文件: `':!:test/*' ':!:*/test/*'` (2认同)

Von*_*onC 7

在2010已经讨论过了:

手册页中没有指示-x不适用于-c.

因此增加:

b5227d8开始,-x/--exclude不适用于缓存文件.
除非您阅读本EXCLUDE PATTERNS节中的讨论,否则很容易错过.澄清该选项适用于未跟踪的文件并指导读者EXCLUDE PATTERNS.

git ls-files手册页确实提到:

-x <pattern>
--exclude=<pattern>
Run Code Online (Sandbox Code Playgroud)

跳过与图案匹配的未跟踪文件

如果您Readme.md被跟踪,则排除模式将不适用.


Bat*_*aev 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.
Run Code Online (Sandbox Code Playgroud)

您应该只为所需文件使用掩码

在您的情况下(不包括*.md文件):

$ git ls-files
example1.txt
example2.pdf
readme.md

$ git ls-files *[^.md]
example1.txt
example2.pdf
Run Code Online (Sandbox Code Playgroud)

  • 哪里可以找到有关此蒙版功能的文档? (3认同)
  • `*[^.md]` 匹配不以 `.`、`m` 和 `d` 结尾的文件。所以排除 `readme.md` 是因为它以 `d` 结尾,而不是因为它以 `.md` 结尾。 (2认同)