Git fetch挂在git-upload-pack上

时间:2014-12-12 10:57:12

标签: git post hang git-fetch bonobo

看似随机,我们的本地回购无法再从我们的Bonobo服务器获取。当我们尝试在本地获取时,它会发生在我们最大的远程仓库(大约4GB)给不同的人和不同的时间。起初它只是每隔几个月,但现在它的频率在增加,并且在今天的同一时间发生在很多当地的回购。现在我们通过移动一个工作.git文件夹来解决它。

它会快速打印一些POST git-upload-pack (gzip X to Y bytes),然后挂起半小时到一个小时。

如果我从对象dir中删除了一个包文件,它会抱怨丢失的内容然后开始正确获取,但仅限于git-upload-pack

我以各种方式尝试repackgc无效。我尝试将服务器和客户端上的git从1.8.4升级到1.9。

clone有同样的问题,但升级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)

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

3 个答案:

答案 0 :(得分:5)

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,则传输将中止。

<强>参考

答案 1 :(得分:1)

我知道这是一个古老的问题,但是我遇到了类似的问题,并想分享自己的经验。我从不真正了解原因,但是在更新到最新的Git(在服务器上-即使bonobo附带了自己的版本)之后,检查了权限,诸如git fsck的命令升级了Bonobo甚至添加了大量的额外日志记录代码,这就是我的工作。

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

git clone [path_to_Bonobo repo] temp_repo

然后将Bonobo git repo从存储库根文件夹移出,进入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/*

此后,Bo黑猩猩开始高兴地再次获取拉力和推力。

答案 2 :(得分:0)

在我的情况下,我在git-upload-pack的位桶式服务器上挂起了这个挂起。原来的问题是:我的ssh密钥上有一个密码短语,并且由于某种原因,没有任何提示出现。

删除密码短语可以解决此问题。

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