0

我想在指定分支的基目录中查找所有降价文件。git ls-files向我建议,但文档没有提到指定一个分支。我希望能够在不检查该分支的情况下做到这一点。这可以做到吗?

4

2 回答 2

3

如果您正在使用git ls-tree,您可能需要自己过滤输出,以 grep 您需要的内容。

正如2012 年在这个线程中提到的:

那里的“模式”有两种用法,前者可能还可以,但后者确实具有误导性。

回到我们写这个命令的时候,有两个不同的“pathspec”家族,属于一个ls-tree只有“引导路径模式”的“”家族(另一个来自“ ”和“ ”家族允许通配符) . 从来不支持为“ / ”系列中的命令提供通配符。diffls-filesgrepls-treediff

如果您更改ls-tree为使用其路径参数作为路径规范,您将破坏向后兼容性。

于 2019-04-06T05:02:44.500 回答
3

git ls-files检查索引工作树(或两者)中的文件。由于当前索引和工作树内容通常反映从当前分支的尖端提取的当前提交,因此它不会以这种方式工作。但是有一个解决方法。

正如VonC 所指出的,git ls-tree检查对象,例如存储在提交中的对象。但是,git ls-tree不接受 pathspec 参数,例如**/*.md.

解决方法是将感兴趣的提交读入临时索引。要干净地做到这一点,请使用mktemp创建一个临时文件,然后删除临时文件并使用git read-tree重新创建该文件作为有效的临时索引,其中包含您要检查的提交的图像,然后您可以使用git ls-files. 例如:

$ cd git
$ sh -c 'export GIT_INDEX_FILE=$(mktemp); rm $GIT_INDEX_FILE; git read-tree e83c5163316f89bfbde7d9ab23ca2e25604af290; git ls-files -- "*.h" "**/*.h"; rm $GIT_INDEX_FILE'
cache.h
$ sh -c 'export GIT_INDEX_FILE=$(mktemp); rm $GIT_INDEX_FILE; git read-tree origin/master; git ls-files -- "*.md"; rm $GIT_INDEX_FILE'
.github/CONTRIBUTING.md
.github/PULL_REQUEST_TEMPLATE.md
README.md
contrib/vscode/README.md
于 2019-04-06T06:11:24.553 回答