git大仓库拉取卡顿问题排查与解决方法

Written by

in

文章目录
  • 不要干等,先让 Git 告诉你它在干什么。在命令前加上环境变量开启详细输出: 如果是 HTTPS 链接: GIT_TRACE=1 GIT_CURL_VERBOSE=1 git fetch origin master -v 如果是 SSH 链接: GIT_TRACE=1 GIT_SSH_COMMAND=”ssh -v” git fetch origin master -v 根据输出的日志,你可以清楚地看到是卡在连接服务器(网络问题)、卡在鉴权(密码/密钥问题)、还是卡在下载对象(仓库太大)。
  • 如果日志显示已经连上服务器,但卡在 Receiving objects 或长时间无响应,说明仓库太大,可以尝试以下方法: 1. 增大 Git 的通信缓冲区(最常见的解决方法) 大仓库拉取时很容易因为超出默认缓存大小而断开或假死。将缓冲区调大到 500MB 或 1GB: git config –global http.postBuffer 524288000 # 如果还不行,可以尝试设为 1GB (1048576000) 2. 浅克隆/浅拉取(只拉取最新代码) 如果你不需要全部的历史记录,只想要最新的代码,可以限制深度: git fetch origin master –depth 1 3. 无 Blob 拉取(Partial Clone) 这是 Git 较新的特性,特别适合大仓库。它会拉取所有的提交历史,但不下载具体的文件内容(Blob),只有在你 checkout 到具体文件时才按需下载: git fetch origin master –filter=blob:none 4. 关闭/调整压缩(缓解 CPU 和内存压力) 如果你的电脑在处理巨型压缩包时卡死,可以尝试降低压缩率: git config –global core.compression 0
  • 如果日志显示卡在 Connecting to…,那就是网络问题。 1. 设置代理(如果访问的是 GitHub ) 如果你本地开启了科学上网工具,Git 默认是不会走代理的,需要手动设置(假设你的代理端口是 7890): # HTTPS 协议设置代理 git config –global http.proxy http://127.0.0.1:7890 git config –global https.proxy http://127.0.0.1:7890 # 取消代理的命令(备用) # git config –global –unset http.proxy # git config –global –unset https.proxy 2. 切换传输协议(SSH vs HTTPS) 如果你用的是 HTTPS (https://github.com/…) 卡住,尝试换成 SSH 协议 (git@github.com:…)。 反之亦然。有时候公司网络或运营商会限制某一种协议。 修改方法:git remote set-url origin <新的SSH或HTTPS地址>
  • 有时候 Git 是在等待你输入密码或确认 SSH 密钥,但提示框没弹出来或者被隐藏了。 测试 SSH 连接:如果你用的是 SSH,单独测一下能不能连通: ssh -T git@github.com # 如果是 GitLab 或 Gitee,替换为对应的域名 如果这里卡住,说明是 SSH 密钥配置错误或端口被封。 凭据管理器卡死:如果你用的是 Windows,Windows Credential Manager 有时会弹窗失败导致后台挂起。尝试在任务管理器中强制结束 git-credential-manager.exe 或 ssh-agent.exe,然后重试。
  • 先跑 GIT_TRACE=1 git fetch origin master -v 看日志。 如果是网络不通,配置代理或切换 SSH/HTTPS。 如果是仓库太大拉不动,依次执行:改大 Buffer -> 加入 –filter=blob:none 参数 -> 加入 –depth 1 参数。 到此这篇关于git大仓库拉取卡顿问题排查与解决方法的文章就介绍到这了,更多相关git大仓库拉取卡顿解决内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: idea提交git版本由于中文文件名卡死不动 git push时卡住的解决方法(长时间不报错也不自动退出) git fetch和git pull的区别解析 git fetch与git pull的区别详解 解决因文件权限导致git fetch命令执行失败的问题 Git pull命令与fetch命令的区别 Git fetch和pull的详解及区别
  • 目录
    • 第一步:开启调试模式(找出卡在哪)
    • 第二步:针对大仓库的专项优化
    • 第三步:排查网络与连接问题
    • 第四步:排查认证卡死问题
    • 总结建议操作顺序

    在大仓库中执行 git fetchgit pull 迟迟没有反应,通常是由网络问题数据量过大导致内存/缓冲区溢出、或认证卡死引起的。

    (注:git pull 本质上是 git fetch + git merge,所以解决 fetch 的问题就能解决 pull 的问题。排查时建议先用 git fetch)。

    你可以按照以下步骤逐步排查和解决:

    不要干等,先让 Git 告诉你它在干什么。在命令前加上环境变量开启详细输出:

    如果是 HTTPS 链接:

    GIT_TRACE=1 GIT_CURL_VERBOSE=1 git fetch origin master -v

    如果是 SSH 链接:

    GIT_TRACE=1 GIT_SSH_COMMAND="ssh -v" git fetch origin master -v
    

    根据输出的日志,你可以清楚地看到是卡在连接服务器(网络问题)、卡在鉴权(密码/密钥问题)、还是卡在下载对象(仓库太大)。

    如果日志显示已经连上服务器,但卡在 Receiving objects 或长时间无响应,说明仓库太大,可以尝试以下方法:

    1. 增大 Git 的通信缓冲区(最常见的解决方法)

    大仓库拉取时很容易因为超出默认缓存大小而断开或假死。将缓冲区调大到 500MB 或 1GB:

    git config --global http.postBuffer 524288000
    # 如果还不行,可以尝试设为 1GB (1048576000)
    

    2. 浅克隆/浅拉取(只拉取最新代码)

    如果你不需要全部的历史记录,只想要最新的代码,可以限制深度:

    git fetch origin master --depth 1
    

    3. 无 Blob 拉取(Partial Clone)

    这是 Git 较新的特性,特别适合大仓库。它会拉取所有的提交历史,但不下载具体的文件内容(Blob),只有在你 checkout 到具体文件时才按需下载:

    git fetch origin master --filter=blob:none
    

    4. 关闭/调整压缩(缓解 CPU 和内存压力)

    如果你的电脑在处理巨型压缩包时卡死,可以尝试降低压缩率:

    git config --global core.compression 0
    

    如果日志显示卡在 Connecting to...,那就是网络问题。

    1. 设置代理(如果访问的是 GitHub )

    如果你本地开启了科学上网工具,Git 默认是不会走代理的,需要手动设置(假设你的代理端口是 7890):

    # HTTPS 协议设置代理
    git config --global http.proxy http://127.0.0.1:7890
    git config --global https.proxy http://127.0.0.1:7890
    
    # 取消代理的命令(备用)
    # git config --global --unset http.proxy
    # git config --global --unset https.proxy
    

    2. 切换传输协议(SSH vs HTTPS)

    • 如果你用的是 HTTPS (https://github.com/...) 卡住,尝试换成 SSH 协议 (git@github.com:...)。
    • 反之亦然。有时候公司网络或运营商会限制某一种协议。
    • 修改方法:git remote set-url origin <新的SSH或HTTPS地址>

    有时候 Git 是在等待你输入密码或确认 SSH 密钥,但提示框没弹出来或者被隐藏了。

    测试 SSH 连接:如果你用的是 SSH,单独测一下能不能连通:

    ssh -T git@github.com  # 如果是 GitLab 或 Gitee,替换为对应的域名
    

    如果这里卡住,说明是 SSH 密钥配置错误或端口被封。

    凭据管理器卡死:如果你用的是 Windows,Windows Credential Manager 有时会弹窗失败导致后台挂起。尝试在任务管理器中强制结束 git-credential-manager.exessh-agent.exe,然后重试。

    1. 先跑 GIT_TRACE=1 git fetch origin master -v 看日志。
    2. 如果是网络不通,配置代理切换 SSH/HTTPS
    3. 如果是仓库太大拉不动,依次执行:改大 Buffer -> 加入 --filter=blob:none 参数 -> 加入 --depth 1 参数。

    到此这篇关于git大仓库拉取卡顿问题排查与解决方法的文章就介绍到这了,更多相关git大仓库拉取卡顿解决内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • idea提交git版本由于中文文件名卡死不动
    • git push时卡住的解决方法(长时间不报错也不自动退出)
    • git fetch和git pull的区别解析
    • git fetch与git pull的区别详解
    • 解决因文件权限导致git fetch命令执行失败的问题
    • Git pull命令与fetch命令的区别
    • Git fetch和pull的详解及区别

    站内搜索