2013-05-11 4 views

답변

2

외부 프로세스를 시작하는 것이 LibGit2Sharp의 책임이라고 생각하지 않습니다. LibGit2Sharp의 목표는 git 저장소를 쉽게 조작 할 수있는 방법을 제공하는 것입니다. WORKDIR에서 파일 (색인) 이전 버전과의 DIFF를 가져옵니다

  • :

    그것은 당신이 그것을 사용할 수 있다는 것을 의미한다. 이를 수행하려면 Repository.Diff.Compare(IEnumerable<string> paths, bool includeUntracked, ExplicitPathsOptions explicitPathsOptions) 오버로드를 사용하면 TreeChanges 오브젝트를 리턴합니다. 거기에서 TreeEntryChanges 개체를 treeChanges의 인덱서를 통해 가져올 수 있습니다.이 파일은 .Patch 속성을 사용하여 패치의 실제 내용을 가져 오는 데 사용됩니다. 합니다 (Get() 메소드에 의해 반환되는 값이 경우에는 DIFF 도구는 사용자가 구성되지 않은 null의 경우, 당신은 또한 확인해야하지만, 예컨대 : repo.Config.Get<string>("diff.tool").Value)

  • Repository.Config 네임 스페이스를 사용하여 구성은 diff 도구를 가져옵니다. 그렇게하면 직접 diff 도구를 시작할 수 있습니다.

추가 리소스 (v0.11.0) :


참고 : 어느 시점에서 선이 변경되었는지 여부를 알아야합니다. 나는 수동으로 패치 내용을 파싱하는 것 외에는 지금 당장 할 수있는 쉬운 방법이 없다고 생각한다. 그러나 LibGit2Sharp issue tracker에서 문제를 열면 해당 문제에 대한 토론이 시작될 수 있습니다. 어떤 API를 사용하고 싶습니까?


편집 : 외부은 diff 도구를 실행하기 전에 임시 폴더에있는 인덱스에있는 파일의 내용을 복사해야합니다. 다음과 같이하여 색인에서 파일의 얼룩을 찾을 수 있습니다.

  • var indexEntry = repo.Index [fileName];
  • var blob = repo.Lookup (indexEntry.Id);

그러나 블롭 내용을 가져올 때 현재 필터가 적용되지 않으므로 비교하면 크기 차이로 인해 오탐 (false positive)이 발생할 수 있습니다. 현재 필터 적용을 허용하는 API를 제안하기 위해 libgit2에 열린 issue이 있습니다.

+0

감사합니다. yorah! 그동안 Repository.Config에 대해 알아 냈고 자세한 내용을 살펴볼 것입니다! 라인 변경에 관해서는 이미 diff를 구문 분석하는 것이 있지만이 변경을 기다리고 있습니다. https://github.com/libgit2/libgit2sharp/pull/423 –