如何使用JGit遍历Git存储库并绘制图形

时间:2012-09-11 15:44:05

标签: java scala jgit

我需要使用JGit从Git存储库中绘制图形。

我一直在考虑不同的方法来遍历提交。我需要能够从分支/提交中绘制图形/图形,并且我还需要能够在任意范围内执行它,比如说从第200次提交到第250次提交(跳过最近提交的200次提交)

我应该如何遍历存储库?使用RevWalk?我希望保持足够的性能,我想知道是否有一种明确的方法可以做到这一点。

更新:基本上我正在考虑制作类似git log --graph -n 50 --skip 200的内容,其中显示了创建顺序中200-250次提交之间的存储库图。现在我只想自己做。 :)

更新2:如果我还可以迭代那些悬空的(没有引用),并以灰色绘制它们,那将是很好的。

2 个答案:

答案 0 :(得分:2)

是的,我同意你的观点,你应该使用RevWalk。 JGit提供的瓷器API类似于日志调用,但它在下层提供了有趣的入口点。

它可能比使用瓷器API或任何基于Git的方法更有效。

我真的没有看到未引用的提交是什么意思。那些不在分支中的人?

另一件事是我不确定你可以一次查询所有提交,我的意思是你应该查询每个分支,但我猜你已经想到了它。我总是想知道是否有比查询每个分支更快的方法(如果它们很短并且有一个巨大的共同历史,这是一个很大的时间损失)

答案 1 :(得分:0)

我还没有答案,但是我一直在重新讨论这个话题,因为我以前有一种算法对于JGit 2.1.0(2012-09-19)来说还算可以几个月前,我升级到了JGit 5.5.1(2019-10-02),这些图开始显得古怪而破碎。

我一直在研究JGit的源代码以寻找线索和信息,这条冗长而详细的提交消息似乎在描述新算法时深入人心,我只是还没有掌握。

https://github.com/eclipse/jgit/commit/7d6dcd4b34fef87d73d7137b2cf66b3e15216a2f

如果这样做,我将尝试使用更具体的内容来更新此答案。