git - 列出当前 git 分支历史记录中任意位置的子目录中的文件
问题描述
要在特定提交中列出子目录中存在的所有文件,我可以签出该提交并查看文件。有没有办法列出在任何时候(即在当前提交的祖先中的任何提交中)存在于子目录中的所有文件?
解决方案
是:git ls-tree
接受所谓的“tree-ish”和可选路径(如果未指定,则默认为存储库根目录)。
树形是可以解析为树的任何东西——一个在记录的提交中存储有关单个“目录”信息的对象。
一个提交总是引用一个单一的树对象,一个树对象可能引用零个或多个其他树对象——代表“子目录”。
因此,提交始终是一个空洞的“树状”。
TL;博士
获取前缀下的文件列表/foo/bar
三个提交回调调用
git ls-tree HEAD~2 foo/bar
更新以反映对原始问题的澄清
但我想要所有提交中的文件,即 HEAD、HEAD~、HEAD~2、HEAD~3、HEAD~4,…… 回到整个历史记录。也许我的问题不清楚?
可以使用一些 shell 脚本来滚动:
git rev-list HEAD | while read sha; do
git ls-tree -r "$sha" prefix/of/interest;
done
…它基本上遍历 DAG 中可访问的所有提交,并使用提交名称和感兴趣的前缀(目录名称)对HEAD
每个提交进行调用。git ls-tree
请注意,如果特定提交中不存在前缀的树对象,git ls-tree
则以非零退出代码退出,因此如果要在 下运行此代码set -e
,则应确认并进行补偿。
这种方法可能会以许多有趣的方式进行升级。
例如,人们可能不只是获取文件列表或调用类似的东西git show --name-status $sha
等等。
推荐阅读
- css - 使用 CSS 的 PrimeNg 自定义验证
- node.js - 无法连接到 MongoDB 服务器
- ktor - 在 http 异常的情况下,responsePipeline 在 requestPipeline 中捕获该异常后无异常执行
- javascript - 您好,在理解 TypeERROR 时遇到了一点问题:“无法读取未定义的属性 'map'”
- python - 如何编写正则表达式以接受以字符串结尾的字符串
- mutability - Zig 中的全局“comptime var”
- javascript - 使php脚本等到ajax请求完成
- sql-server - 似乎 BULK INSERT 的默认值是制表符分隔的输入数据?
- java - 如何使用 Java 查找主题中存在的消息数、主题中存在的分区数?
- android - 获取手机中正在运行的应用程序列表