我想找到指定分支的基目录中的所有 markdown 文件。git ls-files有人向我建议,但文档没有提到指定分支。我希望能够在不检查该分支的情况下执行此操作。这可以做到吗?
git ls-files检查索引或工作树(或两者)中的文件。由于当前索引和工作树内容通常反映从当前分支的尖端提取的当前提交,因此它不会以这种方式工作。但有一个解决方法。
正如VonC 所指出的,git ls-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
Run Code Online (Sandbox Code Playgroud)
(注意:这sh -c 'export ...; cmd1; cmd2; cmd3'都是必需的,尽管如果您已经使用 POSIX 兼容的 shell,则可以sh -c用括号替换子 shell。我们需要环境变量GIT_INDEX_FILE为这些命令保留设置。如果您mktemp有-u,请考虑使用它第一个rm。另请参阅mktemp(1) 的可移植性如何?)
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |