这是我获取存储库中所有blob的SHA和文件名列表的方法:
$ git rev-list --objects --all | git cat-file --batch-check='%(objectname) %(objecttype) %(rest)' | grep '^[^ ]* blob' | cut -d" " -f1,3-
Run Code Online (Sandbox Code Playgroud)
笔记:
%(rest)格式字符串中的atom将对象的SHA后面的其余输入行附加到输出.在这种情况下,这个休息恰好是路径名(对于树和blob对象).
该grep模式仅用于匹配实际的blob,而不是恰好匹配blob路径名中某处字符串的树对象.
首先,您几乎不可能通过列出 blob 来实现此目的。Blob 只是原始数据;它不知道它属于哪个文件。真正的答案在一定程度上取决于您到底想要实现什么目标。例如,您是否需要搜索属于提交一部分的 Blob,而这些 Blob 甚至无法从提交历史记录中访问?如果您不这样做,这里有一些想法。
也许镐搜索git-log会做你想要的:
-S<string>查找引入或删除 的实例的差异<string>。请注意,这与仅出现在 diff 输出中的字符串不同;有关更多详细信息,请参阅 gitdiffcore(7) 中的镐条目。
根据您的最终目标,这可能比您建议的要好得多 - 您实际上会看到如何添加或删除字符串。当然,如果您愿意,您可以使用获得的信息来捕获整个文件。
或者也许您想列出其提供的树(提交)的修订git-log和使用?git-grep