如何在Git中获取存储库中所有blob的列表

时间:2009-10-20 15:51:54

标签: git

如何列出git存储库中所有文件的所有版本?

(例如,列出所有包含某个字符串的文件)

此列表可用于捕获文件。

3 个答案:

答案 0 :(得分:9)

这是我获取存储库中所有blob的SHA和文件名列表的方法:

$ git rev-list --objects --all | git cat-file --batch-check='%(objectname) %(objecttype) %(rest)' | grep '^[^ ]* blob' | cut -d" " -f1,3-

注意:

  1. 格式字符串中的%(rest)原子将对象的SHA后面的其余输入行附加到输出。在这种情况下,这个休息恰好是路径名(对于树和blob对象)。

  2. grep模式仅用于匹配实际blob,而不匹配恰好在其路径名中某处包含字符串blob的树对象。

答案 1 :(得分:3)

首先,通过列出blob来实现这一目标的可能性很小。 blob只是原始数据;它不知道它是什么文件。真正的答案取决于你究竟想要完成什么。例如,您是否需要搜索属于提交的blob,这些提交甚至无法从提交历史记录中访问?如果你不这样做,这里有几个想法。

也许git-log的镐搜索会做你想要的:

  

-S<string>   查找引入或删除<string>实例的差异。请注意,这与简单地出现在diff输出中的字符串不同;有关更多详细信息,请参阅gitdiffcore(7)中的pickaxe条目。

根据您的最终目标,这可能比您建议的更好 - 您实际上会看到如何添加或删除字符串。如果您愿意,您当然可以使用您获取的信息来捕获整个文件。

或许你想列出git-log的修订版并在它提供的树(提交)上使用git-grep

答案 2 :(得分:0)

据我从手册中了解,以下列出了所有对象及其信息

git cat-file --batch-all-objects --batch-check