4

在我的 ubuntu 笔记本电脑上,当 git pull 进入 rev-list 命令时会冻结,请参见下面的输出:

GIT_TRACE=1 GIT_CURL_VERBOSE=1 git pull --verbose
trace: exec: 'git-pull' '--verbose'
trace: run_command: 'git-pull' '--verbose'
trace: built-in: git 'rev-parse' '--git-dir'
trace: built-in: git 'rev-parse' '--is-bare-repository'
trace: built-in: git 'rev-parse' '--show-toplevel'
trace: built-in: git 'ls-files' '-u'
trace: built-in: git 'symbolic-ref' '-q' 'HEAD'
trace: built-in: git 'config' '--bool' 'branch.upgrade-to-rails3.rebase'
trace: built-in: git 'config' '--bool' 'pull.rebase'
trace: built-in: git 'rev-parse' '-q' '--verify' 'HEAD'
trace: built-in: git 'fetch' '-v' '--update-head-ok'
trace: run_command: 'ssh' 'my_repo@mydomain.com' 'git-upload-pack '\''/home/mana/git/chc.git'\'''
trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'

同一网络上的其他计算机(windows 和 mac)可以从同一个 repo(位于私有服务器上)中提取。然后我把我的笔记本电脑带到了另一个网络,并且工作正常!

我尝试过的事情:

  • 将 eth0 上的 MTU 设置为 1492(正如我所见,对于某些人来说,默认值 1500 会导致问题)。
  • 确认我可以成功 ssh 到服务器。
  • 从以前的挂起尝试中清除挂起的 sshd 进程。
  • 远程服务器上的 git gc

那么,在一个网络的路由器中,结合我的特定版本的 ubuntu 可能会导致这种情况,我该如何调试它?

4

2 回答 2

2

如果您怀疑 ssh 有什么问题,为什么不创建一个脚本 my-ssh:

#!/bin/sh

ssh -v $@

然后

env GIT_SSH='./my-ssh' git pull

这样,您可以说出 ssh 进程挂起的位置

(这应该是一个评论,但后来我无法格式化代码!)

于 2013-09-26T18:22:06.523 回答
1

我在我的 Mac 上遇到了类似的问题,ssh 的某些 git 命令可以工作,其他人似乎会挂在终端中而没有任何响应。

git remote -v show origin  -- would hang
git push origin            -- would work

切换路由器,通过使用我的手机作为无线接入点,这两个命令都有效......

解决方案:

  1. 如果不存在,则在您的用户目录中创建文件(我的不存在)

    /Users/[your_user]/.ssh/config
    
  2. 进入它:

    Host *
      IPQoS 0x00
    
  3. 不确定是否需要重新启动 ssh 进程,我认为不需要。

为什么?

路由器中服务质量的默认设置。我在http://forthescience.org/blog/tag/ssh/中找到了解决方案和解释

于 2014-03-10T10:15:02.930 回答