You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:45:39