3

いくつかの背景:

Gitをデータストレージレイヤーとして使用する可能性を検討しています。基本的に、アプリケーションの状態を記述するいくつかのXMLファイルのすべてのバージョンを保持する必要があります。ユーザーは、以前の状態に戻したり、以前の状態から分岐したりできるようにするために「Time Machine」が必要です。これはサービスレイヤーの背後に隠されますが、私はバックエンドでGitを使用することを検討しています。

時間の経過に伴うアプリケーションの状態の変化を提示する必要があるため、変更やブランチなどを示すネットワーク図を作成したいと思います。

これを行うには、バージョンツリーを視覚的に作成する必要があります。基本的に、私はこれをしたいです:

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

私はLibGit2Sharpを使用しています。APIをざっと見てみましたが、すぐに役立つものは何も見つかりません。私もGitをよく知っていますが、それは役に立ちません。

4

2 に答える 2

4

LibGit2Sharp を使用すると、 をgit log列挙するだけでコマンドをシミュレートできますCommits。コミットのリストをフィルタリングしたり、いくつかの並べ替えオプションを指定したりすることもできます (リストをトポロジー順に並べ替えるなど)。詳細については、に関連するLibGit2Sharp wiki ページgit logを参照してください。

QuickGraphのようなグラフ ライブラリを使用すると(ただし、この他のSO の質問にあるように他にもあります)、次のようにグラフを作成できます。

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");
于 2013-03-05T13:50:46.127 に答える
1

libgit2基礎となる Git の概念に関するものです。グラフを表示したい場合は、コミットとそれらが互いにどのように関連しているかを確認する必要があります。次に、好みのグラフィック ライブラリを使用してグラフを描画できます。

そのコマンドの出力が必要な場合は、そのコマンドを実行するのが最も簡単な方法です。

于 2013-03-05T13:31:27.327 に答える