몇 가지 질문에 대해 고려해야 할
- 한 원격 저장소에 "연결"동적으로 자식 프로토콜을 통해 하나 개의 파일을 검색 할 수 없습니다. 대개 로컬 복사본을 검색 (
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
저장소가 마지막으로 복제되어 출력? 디버거를 사용하고 코드를 디버깅하면 어떻게됩니까? – zerkms
@zerkms * tmp * 폴더는 생성되었지만 비어 있습니다. 나는 실제로 단지 1 개의 특정 파일을 원한다. –
코드 조각에서 완전히 관련없는 두 가지 작업을 수행하고 있습니다. 클론이 먼저 작동하는지 확인하십시오. 만약 그렇다면 실제로 저장소를로드하고 있는지 확인하십시오. GitHub에서 하나의 파일 만 원하는 경우 저장소를 다운로드하는 대신 정확하게 할 수있는 API를 사용해야합니다. –