我想在指定分支的基本目录中找到所有markdown文件。向我建议了git ls-files
,但是文档中没有提到指定分支。我希望能够执行此操作而无需签出该分支。能做到吗?
答案 0 :(得分:3)
git ls-files
检查 index 或工作树(或两者)中的文件。由于当前索引和工作树内容通常反映从当前分支的尖端提取的当前提交,因此它将无法以这种方式工作。但是有一种解决方法。
与VonC notes一样,git ls-tree
检查 tree 对象,例如存储在提交中的对象。但是,git ls-tree
不接受路径规范参数,例如**/*.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
答案 1 :(得分:2)
如果您使用的是git ls-tree
,则可能需要自己过滤输出,以grep您所需的内容。
正如in this thread在2012年提到的:
那里有“模式”的两种用法,前者可能还可以,但是 后者确实具有误导性。
当我们编写此命令时,有两个不同的“ pathspec”族,
ls-tree
属于一个带有“diff
”族的家族,它们没有但使用“领先路径模式”(“ls-files
”和“grep
”系列中的另一个允许使用通配符)。从未支持在“ls-tree
/diff
”系列中为该命令提供通配符。如果您将
ls-tree
更改为使用其path参数作为pathspec,则将 破坏向后兼容性。