我已经阅读了其他几个关于克隆问题的'git hangs',但没有一个与我的环境和细节相符。我正在使用在cygwin下构建的git(msys git不是一个选项)来通过SSH克隆来自Linux主机的repo。
git clone user@host:repo
我已经在其他平台上针对同一主机进行了测试,但它运行正常,但在这台Windows机器上克隆无限期挂起。我设置GIT_TRACE=1
,看起来问题出在这个命令上:
'ssh' 'user@host' 'git-upload-pack '\''repo'\'''
我的SSH密钥设置正确:ssh user@host
正常工作。当我运行命令时,我得到一堆输出,结尾如下:
...
003dbbd3db63763922ad75bbeefa3811dce001576851 refs/tags/start
0000
然后它会挂起20多分钟,这是我在杀死它之前等待的最长时间。
服务器的Git 1.7.11.7与OpenSSH 5.9p1,而客户端的Git 1.7.9与OpenSSH 6.1p1。
那应该是git-upload-pack输出的结尾吗?这是Git或我的配置中的错误吗?
答案 0 :(得分:2)
即将推出的git1.8.5(2013年第4季度)将记录更多智能http协议 请commit 4c6fffe2ae3642fa4576c704e2eb443de1d0f8a1旁边Shawn O. Pearce。
通过详细的文档,我们的想法是监控您的git客户端和服务器之间完成的Web请求,并查看它们是否符合下面记录的内容。
这可以帮助确定服务“挂起”的位置。
文件Documentation/technical/http-protocol.txt
坚持:
“ Smart Service git-upload-pack ”
客户必须首先使用“$GIT_URL/info/refs?service=git-upload-pack
”执行参考发现。
C: POST $GIT_URL/git-upload-pack HTTP/1.0
S: 200 OK
S: Content-Type: application/x-git-upload-pack-result
S: Cache-Control: no-cache
S:
S: ....ACK %s, continue
S: ....NAK
客户端不得重复使用或重新验证缓存的响应。
(c) Send one $GIT_URL/git-upload-pack request:
C: 0032want <WANT #1>...............................
答案 1 :(得分:1)
过时的PuTTy也会造成这种情况。您的系统可能正在使用plink.exe
作为GIT_SSH
。
您可以从http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html安装最新的开发版本,以确保这不是问题。
答案 2 :(得分:0)
我们遇到了类似的问题 - 我们将其归结为以下内容:我们的git repo已经签入了大量二进制文件(多个版本,在此项目的过去1。5年内)。所以,我们认为这是原因。
为了支持这个理论,我们有其他更新的代码库(因此没有那么多二进制文件及其版本) - 它们没有表现出这种行为。
我们的设置:通过T1线路在伦敦和印度之间的Linux,站点到站点VPN上进行Git设置。
答案 3 :(得分:0)
在我将一些爵士乐添加到我的ssh配置中以便在tmux中设置窗口标题后,我遇到了同样的问题:
Host *
PermitLocalCommand yes
LocalCommand if [[ $TERM == screen* ]]; then printf "\033k%h\033\\"; fi
摆脱固定我的git。
答案 4 :(得分:0)
这对我有用,因为它可以帮助别人。
检查你的git远程网址。如果您使用了错误的网址类型,它可能会在跟踪上挂起git-upload-pack
。将您的网址从git@github.com:
更改为您的遥控器上的https://github.com/
。