2

我正在开发一个 HTML 和 Javascript 应用程序,它将采用 git 树并将提交和合并显示为有向图(如 git log --graph)。我已经阅读了一些关于 Reingold-Tilford 整洁算法的内容,但它似乎不适用于具有共享父子节点的图。所需输出的示例(作为文本,但我正在查看 d3js 和 Raphael 等图形库):

*   - 1 day ago
|
*   - 2 days ago
|\
| * - 3 days ago
|/
*   - 4 days ago
|
*   - 5 days ago

是否有任何图书馆已经处理了这个问题?有没有这样的渲染图的例子(任何语言)?作为最后的手段,我想我会尝试从 git 本身(https://github.com/git/git/blob/master/graph.c)重现图形,尽管它有点密集。

谢谢您的帮助。

4

2 回答 2

1

首先,查看 ruby​​gem Git:http ://rubygems.org/gems/git 这将为您节省很多工作。

其次,我尝试使用 d3.js,发现它非常复杂和强大。您打算创建的图表可以很好地使用它,甚至还有一个 d3_rails gem: http ://rubygems.org/gems/d3_rails

但是请记住,如果您只需要对几个形状进行简单的图形表示以显示最小的复杂性(没有向下钻取等),您可能会考虑使用 HTML5 的画布。非常易于使用,但缺乏 d3.js 的强大功能。

于 2012-09-28T16:26:57.667 回答
1

在实现了我自己的相当糟糕的图表一段时间后,我听说了GitLab和他们的开源 GitHub 实现。他们有来自 GitHub 的“网络”图的类似实现,可以在他们的存储库中找到。

一些有问题的文件:

  • lib/gitlab/graph/commit.rb
  • lib/gitlab/graph/json_builder.rb
  • 供应商/资产/javascripts/branch-graph.js

通过一些修改,我能够弄清楚他们如何实现他们的网络图,并使用他们的代码版本取得了巨大的成功。

于 2012-11-06T17:53:09.703 回答