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

Windows Git Bash与Ubuntu Git的Fetch行为差异求助

Git 2.44.0在Windows Git Bash与Ubuntu环境下Fetch行为差异的排查思路

问题现象

从Bitbucket拉取代码时,使用相同版本(2.44.0)的Git,Windows Git Bash与Ubuntu环境下执行相同fetch命令的行为存在显著差异:

Windows端执行命令及输出

每次fetch后仓库包大小无增长:

$ git fetch --tags --force --progress --depth=1 -- ssh://git@domain:7999/mob/solution.git +refs/heads/*:refs/remotes/origin/*

remote: Enumerating objects: 587, done.
remote: Counting objects: 100% (247/247), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 67 (delta 26), reused 36 (delta 3), pack-reused 0
Unpacking objects: 100% (67/67), 10.38 KiB | 379.00 KiB/s, done.

Ubuntu端执行命令及输出

每次fetch后仓库包大小持续增长:

$ git fetch --tags --force --progress --depth=1 -- ssh://git@domain:7999/mob/solution.git +refs/heads/*:refs/remotes/origin/*

remote: Enumerating objects: 364276, done.
remote: Counting objects: 100% (263794/263794), done.
remote: Compressing objects: 100% (86510/86510), done.
remote: Total 225273 (delta 170121), reused 168580 (delta 124035), pack-reused 0
Receiving objects: 100% (225273/225273), 1.69 GiB | 26.58 MiB/s, done.
Resolving deltas: 100% (170121/170121), completed with 12471 local objects.

已尝试更换不同Git版本,问题仍未解决,以下是具体排查思路:

  • 对比两端Git核心配置差异:分别执行git config --list,重点检查fetch.unpackLimit、core.compression、transfer.fsckObjects、fetch.prune这些参数,确认是否因配置不同导致fetch行为差异。比如fetch.unpackLimit设置过低可能限制解压对象数量;未开启fetch.prune可能导致本地保留已删除的远程分支引用,重复拉取无关对象。
  • 检查本地远程引用状态:在两端分别执行git remote show origin,对比远程分支的跟踪状态、HEAD指向是否一致;再执行git rev-parse origin/[目标分支名],确认两端本地存储的远程分支commit hash是否相同。如果Ubuntu端的远程分支引用未正确更新,可能导致每次fetch都重新拉取全量对象。
  • 验证标签拉取的影响:去掉命令中的--tags参数,分别在两端执行fetch,观察差异是否消失。如果Ubuntu端不再拉取大量对象,说明问题源于标签拉取逻辑的差异——可能Windows端已缓存所有标签,而Ubuntu端每次都重新拉取全量标签。
  • 检查仓库浅克隆状态:分别在两端执行git log --oneline --graph --decorate,确认本地是否仅保留最新的commit节点。如果Ubuntu端本地存在历史commit,可能是之前的非浅克隆操作导致后续fetch行为异常。
  • 对比客户端请求差异:使用GIT_TRACE=1 git fetch [命令参数]在两端开启Git跟踪日志,查看发送给Bitbucket的请求细节(如请求头、refspec解析结果),确认是否因客户端请求不同导致服务器返回的对象集差异。
  • 测试单个分支拉取:在两端使用git fetch --depth=1 origin main(替换为实际分支名)直接拉取单个分支,排除refspec通配符+refs/heads/*:refs/remotes/origin/*的解析问题。

内容的提问来源于stack exchange,提问作者JumpingKangaroo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:02:04