2013-03-04 4 views
3

일부 배경 : 나는 데이터 저장 층으로 힘내 사용의 가능성을 찾고 있어요내가 LibGit2 (샤프)를 사용하여 Git 저장소에 대한 버전 트리를 구축하려면 어떻게

. 기본적으로 응용 프로그램 상태를 설명하는 일부 XML 파일의 모든 버전을 유지해야합니다. 사용자는 이전 상태로 되돌릴 수있을뿐만 아니라 이전 상태로 되돌릴 수 있도록 "Time Machine"이 필요합니다. 이는 서비스 계층 뒤에 숨겨 지지만 백 엔드에서 힘내 사용을 고려하고 있습니다.

내가 시간이 지남에 따라 응용 프로그램의 상태의 진화를 제시해야, 그래서 변화를 보여주는 네트워크 다이어그램을 구축하고자,

이 작업을 수행하려면 등 가지 나는 시각적 버전 트리를 구축 할 필요가있다. 기본적으로 다음과 같이하고 싶습니다.

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

저는 LibGit2Sharp를 사용하고 있습니다. API를 둘러 보았지만 즉시 도움이되는 것은 없습니다. 나는 힘내에게도 꽤 잘 알고 있는데 도움이 안된다.

+0

이것은 데이터 시각화 질문입니다. 그래프 라이브러리를 보면 그래프 시각화가 가능합니다 (git 히스토리는 직접 비순환 그래프입니다) – CharlesB

답변

1

libgit2은 근본적인 힘내 개념에 관한 것입니다. 그래프를 표시하려면 커밋과 그 커밋을 서로 연관시켜야합니다. 그런 다음 원하는 그래픽 라이브러리로 그래프를 그릴 수 있습니다.

원하는 경우 해당 명령의 출력, 다음 명령을 실행하는 가장 간단한 방법입니다.

3

LibGit2Sharp를 사용하면 Commits을 열거하여 git log 명령을 시뮬레이트 할 수 있습니다. 또한 커밋 목록을 필터링하거나 일부 토폴로지 순서로 정렬 된 목록 정렬 옵션을 지정할 수 있습니다. 자세한 내용은 git log과 관련된 LibGit2Sharp wiki page에서 확인할 수 있습니다.

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))); 
    } 
} 

할 수 있습니다 다음 출력이 그래프 여러 가지로 : 당신은 그냥이 같은 그래프를 구축 할 수 있습니다 (이 다른 SO question에서 발견 될 수 있지만, 다른 사람이있다) QuickGraph 같은 그래프 라이브러리를 사용하여

시각화 형식 (graphML, Glee, graphwiz). 그래프 위젯 (.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");