如何用LibGit2Sharp克隆1GB+公开Git仓库并获取进度?
在LibGit2Sharp中获取大仓库克隆进度的方法
默认的Repository.Clone("url")是简化版调用,没有进度回调能力。要获取克隆进度,你需要通过CloneOptions配置进度监听事件,具体实现如下:
核心实现代码
using LibGit2Sharp; // 克隆目标本地路径 string targetPath = @"C:\Your\Local\Repo\Path"; // 公开仓库URL string repoUrl = "https://your-public-git-repo-url.git"; var cloneOptions = new CloneOptions { FetchOptions = new FetchOptions { // 监听传输进度(对象数量、字节数统计) OnTransferProgress = progress => { // 基于对象数计算进度百分比 int objectProgress = (int)((double)progress.ReceivedObjects / progress.TotalObjects * 100); // 基于字节数计算进度百分比 int byteProgress = (int)((double)progress.ReceivedBytes / progress.TotalBytes * 100); Console.WriteLine($"克隆进度:{objectProgress}%(已接收{progress.ReceivedObjects}/{progress.TotalObjects}个对象,{progress.ReceivedBytes}/{progress.TotalBytes}字节)"); // 返回true继续克隆,返回false终止克隆流程 return true; }, // 监听文本形式的进度消息(如Git命令行输出的"Receiving objects: 50% (1234/2468)") OnProgress = progressMessage => { if (!string.IsNullOrWhiteSpace(progressMessage)) { Console.WriteLine(progressMessage); } return true; } }, // 如需递归克隆子模块,可开启以下配置 // RecurseSubmodules = true }; // 执行带进度监听的克隆 Repository.Clone(repoUrl, targetPath, cloneOptions);
关键说明
OnTransferProgress:每次有对象传输完成时触发,TransferProgress参数提供了已接收/总对象数、已接收/总字节数等精确进度数据,适合做自定义进度条或精确统计。OnProgress:返回Git原生的文本进度消息,适合直接展示给用户。- 两个事件都需要返回
true以维持克隆流程,返回false会立即终止克隆。
内容的提问来源于stack exchange,提问作者Fahad Zulfiqar
相关产品推荐
相关产品推荐

