我正在尝试使用 jGit 来获取存储库中的所有提交,不仅仅是我可以通过头或标签访问的提交,而是所有尚未被垃圾收集的提交。有没有办法用 jGit 以有效的方式做到这一点?
更新以更好地描述实际用例
我正在开发一个基于 FUSE 的文件系统,它提供了 Git 历史的文件系统视图,请参阅https://github.com/centic9/JGitFS/第一个版本(仅限 Linux/Mac)。
有了这个,我为提交提供“虚拟”子目录,即我正在创建一个目录结构,如下所示
/commit
00
abcd..
bcde..
ae
bdas..
在 commit-id 下方,虚拟文件系统提供了该提交的“原样”源文件。
Refs/Tags 以符号链接的形式提供,指向该 ref/tag 的实际提交 HEAD:
/branch
master -> ../commit/00/abcd...
bugfix -> ../commit/ae/bdas...
/tag
version_1 -> ../commit/00/bcde...
为了使这个文件系统更快,我需要一种方法来快速迭代存储库中的所有提交。像我现在这样分别查看每个标签和 ref 是次优的,因为如果 ref 共享一个共同的历史(他们几乎总是这样做!),我会多次查看相同的提交。
最好我想得到一个所有仍然可用的提交的简单列表,而不仅仅是那些属于分支的提交,这样你甚至可以查看 refs/tags 不再可以访问的版本。