Git fetch 挂在 git-upload-pack 上

问题描述 投票:0回答:4

看似随机,我们的本地存储库无法再从 Bonobo 服务器获取。当我们尝试在本地获取数据时,在不同时间向不同的人提供最大的远程存储库(大约 4GB)时,就会发生这种情况。起初只是每隔几个月发生一次,但现在频率越来越高,并且今天在同一时间发生在很多本地仓库上。现在我们通过移动工作的

.git
文件夹来解决这个问题。

它会快速打印一些

POST git-upload-pack (gzip X to Y bytes)
,然后挂起半小时到一个小时。

如果我从对象目录中删除一个包文件,它会抱怨缺少东西,然后开始正确获取,但仅限于此

git-upload-pack

我尝试了各种方法

repack
gc
,但没有效果。我尝试将服务器和客户端上的 git 从 1.8.4 升级到 1.9。

clone
ing 也有同样的问题,但是升级 Bonobo 解决了这个问题,尽管它是相同版本的 git。昨天新克隆的存储库可以正常工作,但今天却出现了同样的问题。

有趣的是我们里面有很多 dll 和 pdb。它已经使用一年了,是使用 git-svn 从 SVN 存储库导入的。

这就是痕迹

$ GIT_TRACE=1 git fetch -v
trace: built-in: git 'fetch' '-v'
trace: run_command: 'git-remote-https' 'origin' 'https://xxx
/yyy.git'
trace: run_command: '"C:/Program Files (x86)/GitExtensions/GitCredentialWinStore
/git-credential-winstore.exe" get'
trace: run_command: '"C:/Program Files (x86)/GitExtensions/GitCredentialWinStore
/git-credential-winstore.exe" store'
trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'
trace: run_command: 'fetch-pack' '--stateless-rpc' '--stdin' '--lock-pack' '--in
clude-tag' '--thin' 'https://xxx/yyy.git/'
trace: built-in: git 'fetch-pack' '--stateless-rpc' '--stdin' '--lock-pack' '--i
nclude-tag' '--thin' 'https://xxx/yyy.git/'
POST git-upload-pack (gzip 2057 to 1096 bytes)
POST git-upload-pack (gzip 2307 to 1222 bytes)
POST git-upload-pack (gzip 3657 to 1914 bytes)
POST git-upload-pack (gzip 6207 to 3192 bytes)
POST git-upload-pack (gzip 12607 to 6374 bytes)

谷歌搜索显示有些人遇到了这个问题,但没有提到任何内容(升级倭黑猩猩等)。

git post freeze git-fetch bonobo
4个回答
11
投票

git 在内部使用curl,因此使用以下配置设置进行调试:

客户端配置

git config --global http.postBuffer 524288000

客户端环境变量:

  • GIT_CURL_VERBOSE=1
  • GIT_HTTP_MAX_REQUESTS=16

服务器配置

  • <requestLimits maxAllowedContentLength=
    中增加
    >
    [所需尺寸]
    web.config
    ;大小可能是 1073741824
  • <httpRuntime maxRequestLength=
    中增加
    >
    [所需尺寸]
    web.config
    ;尝试值 1024000

此外,以下设置可以自动中止慢速传输:

  • GIT_HTTP_LOW_SPEED_TIME
  • GIT_HTTP_LOW_SPEED_LIMIT

如果 HTTP 传输速度低于 GIT_HTTP_LOW_SPEED_LIMIT 的时间超过 GIT_HTTP_LOW_SPEED_TIME,则传输将中止。

参考文献


3
投票

我知道这是一个旧问题,但我也遇到了类似的问题,想分享我的经验。我从来没有真正找到原因,但是在更新到最新的 Git(在服务器上 - 尽管 bonobo 附带了自己的版本)之后,检查权限、诸如

git fsck
升级 Bonobo 之类的命令,甚至向代码,这就是为我做的。

Bonobo 在服务器上创建了一个裸存储库,我可以在服务器上直接从它成功克隆,并且可以获取/拉取等。这促使我尝试复制该存储库并将其替换为副本。因此,在临时文件夹中:

git clone [path_to_Bonobo repo] temp_repo

然后将 Bonobo git 存储库移出存储库根文件夹,进入 Bonobo 根文件夹并:

git clone --mirror [path_to_temp_repo] [original_repo_name]

我也做了一个:

git fetch --prune

git push --prune [path_to_temp_repo] +refs/remotes/origin/*:refs/heads/* +refs/tags/*:refs/tags/*

此后,Bonobo 高兴地再次开始拉、推。


1
投票

就我而言,我在 Bitbucket 服务器上遇到了这个问题。结果问题是:我的 ssh 密钥上有一个密码,由于某种未知的原因,没有出现提示要求它。


删除密码解决了问题。

我只是发布此内容,以防它可以帮助另一个灵魂。


0
投票
https://github.com/jakubgarfield/Bonobo-Git-Server/issues/852

当 upload-pack 的响应大于 4k 时,会发生这种情况。 控制台应用程序的输出(和输入)缓冲区最大为 4 k。 当输出缓冲区已满时,git 停止处理输入缓冲区。因此进程挂起。

有两个 PR 可以解决这个问题:
https://github.com/jakubgarfield/Bonobo-Git-Server/pulls?q=is%3Apr+is%3Aopen+hang

© www.soinside.com 2019 - 2024. All rights reserved.