2013-11-25 3 views
2

나는 REPO에 연결하려고 해요 :libgit2를 사용하여 GitHub 저장소에 연결하는 방법은 무엇입니까?

using(var Git = new Repository(
    Repository.Clone("https://github.com/wikimedia/mediawiki-core", "tmp") 
)){ 
    foreach(var Commit in Git.Commits) 
    { 
     MessageBox.Show(Commit.Author.Name); 
    } 
} 

그것은 (필자는 URL 내가 예상 예외가를 변경하는 경우에서와 같이) 확인을 연결하는,하지만 MessageBox ES가 표시되지 않습니다 - 그 이유는 무엇입니까? 이것은 간단해야합니다.

+0

저장소가 마지막으로 복제되어 출력? 디버거를 사용하고 코드를 디버깅하면 어떻게됩니까? – zerkms

+0

@zerkms * tmp * 폴더는 생성되었지만 비어 있습니다. 나는 실제로 단지 1 개의 특정 파일을 원한다. –

+0

코드 조각에서 완전히 관련없는 두 가지 작업을 수행하고 있습니다. 클론이 먼저 작동하는지 확인하십시오. 만약 그렇다면 실제로 저장소를로드하고 있는지 확인하십시오. GitHub에서 하나의 파일 만 원하는 경우 저장소를 다운로드하는 대신 정확하게 할 수있는 API를 사용해야합니다. –

답변

7

몇 가지 질문에 대해 고려해야 할

  • 한 원격 저장소에 "연결"동적으로 자식 프로토콜을 통해 하나 개의 파일을 검색 할 수 없습니다. 대개 로컬 복사본을 검색 (Repository.Clone() 통해) 한 다음 로컬 리포지토리에 대한 작업을 수행해야합니다.
  • Mediawiki-core은 꽤 큰 저장소입니다. 여기에는 10000 개 이상의 커밋이 포함됩니다. 따라서 복제하는 데 꽤 많은 시간이 걸릴 수 있습니다. Clone() 메소드에 전송 진행 핸들러를 제공하여 복제 진행 상황에 대한 통찰력을 얻을 수 있습니다.
  • @ CarlosMartínNieto가 옳습니다. 필요한 모든 파일이 하나의 파일 (저장소의 전체 기록이 아닌) 인 경우 GitHub API에 의존하는 것이 실제로 더 효율적입니다. 그러나이 API의 사용은 예상되는 사용법에 따라 고려해야 할 일부 rate limitations을 통해 관리됩니다.

(크게 자신의 코드에서 영감) 아래의 코드는 콘솔에 현재 복제 진행 상황을 출력, 원격 저장소를 클론 및 HEAD에서 연결할 수 커밋을 열거합니다.

LibGit2Sharp v0.14.1 NuGet 패키지에 대해 성공적으로 테스트되었습니다. 실행중인 경우

public void CloneAndEnumerateCommitsFromHead() 
{ 
    var tmp = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); 

    string path = Repository.Clone(
     "https://github.com/nulltoken/TestGitRepository", 
     tmp, 
     onTransferProgress: ProgressHandler); 

    using (var Git = new Repository(path)) 
    { 
     foreach (var Commit in Git.Commits) 
     { 
      Console.WriteLine("{0} by {1}", 
       Commit.Id.ToString(7), 
       Commit.Author.Name); 
     } 
    } 
} 

private int ProgressHandler(TransferProgress progress) 
{ 
    Console.WriteLine("{0}/{1}", progress.IndexedObjects, progress.TotalObjects); 
    return 0; 
} 

, 다음

0/70 
1/70 
2/70 
2/70 
...snipped for brevity... 
68/70 
69/70 
70/70 
70/70 
49322bb by A U Thor 
d0114ab by A U Thor 
f73b956 by A U Thor 
6e14752 by A U Thor 
1203b03 by A U Thor 
bab66b4 by A U Thor 
83834a7 by A U Thor 
6462e7d by A U Thor 
42e4e7c by A U Thor 
7f82283 by A U Thor 
59706a1 by A U Thor 
c070ad8 by A U Thor 
d31f5a6 by A U Thor 
83d2f04 by A U Thor 
6db9c2e by A U Thor 
d86a2aa by A U Thor 
0966a43 by A U Thor 
2c34933 by A U Thor 
ac7e7e4 by A U Thor 
58be465 by A U Thor 
6c8b137 by A U Thor 
+0

환상적인 답변, 통찰력을위한 많은 감사합니다! 저는 SVN에 익숙합니다. SVN은 먼저 전체 repo를 복제하는 대신 단일 파일의 복사본을 가져갈 수 있습니다. –

관련 문제