【问题标题】:How do I build a version tree for a Git repository using LibGit2(Sharp)如何使用 LibGit2(Sharp) 为 Git 存储库构建版本树
【发布时间】:2013-02-18 16:13:32
【问题描述】:

一些背景:

我正在研究使用 Git 作为数据存储层的可能性。基本上我需要保留一些描述应用程序状态的 XML 文件的所有版本。用户需要一个“时间机器”才能恢复到以前的状态,以及分支以前的状态等。这将隐藏在服务层后面,但我正在考虑在后端使用 Git。

我需要展示应用程序状态随时间的演变,所以我想构建一个网络图来显示变化、分支等。

为此,我需要直观地构建版本树。基本上,我想这样做:

git log --oneline --graph --decorate --all

我正在使用 LibGit2Sharp。我已经浏览了 API,但没有立即看到任何有用的东西。我对 Git 也很了解,但这并没有帮助。

【问题讨论】:

  • 这更像是一个数据可视化问题,看看.NET库进行图形可视化(git历史是直接无环图)

标签: git graph-visualization libgit2 libgit2sharp


【解决方案1】:

libgit2 是关于底层 Git 概念的。如果要显示图表,则需要查看提交以及它们之间的关系。然后你可以用你喜欢的任何图形库来绘制图形。

如果您想要的是该命令的输出,那么运行该命令是最简单的方法。

【讨论】:

    【解决方案2】:

    使用 LibGit2Sharp,您可以通过枚举 Commits 来模拟 git log 命令。您还可以过滤提交列表,或指定一些排序选项(例如让列表按拓扑顺序排序)。更多信息可以在与 git log 相关的 LibGit2Sharp wiki page 上找到。

    使用像 QuickGraph 这样的图形库(但还有其他的,可以在另一个 SO question 上找到),您可以像这样构建图形:

    var graph = new AdjacencyGraph<Commit, Edge<Commit>>();
    
    using (var repo = new Repository(path_to_your_repo))
    {
        foreach (var c in repo.Commits.Take(20))
        {
            graph.AddVerticesAndEdgeRange(c.Parents.Select(p => new Edge<Commit>(c, p)));
        }
    }
    

    然后,您可以将此图表输出为多种可视化格式(graphML、Glee、graphviz)。以 graphviz (.dot) 格式输出:

    var graphviz = new GraphvizAlgorithm<Commit,Edge<Commit>>(graph);
    graphviz.FormatVertex +=
        (o, e) =>
            {
                e.VertexFormatter.Label = string.Format("{0} {1}", e.Vertex.Id.ToString(7),
                                                        e.Vertex.MessageShort.Replace("\"", "\\\""));
            };
    
    graphviz.Generate(new FileDotEngine(), @"d:\graph");
    

    【讨论】:

    • 请。你能给我更具体的信息吗?我可以获得 Commit List (repo.Commits),但我无法为每个 Commit 导入 Graph 信息。我迫切需要一个提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多