Git:无法推送新克隆的存储库

4
我有一台运行Ubuntu的新台式电脑。我已经通过rsync将许多git仓库从我的旧计算机同步到新计算机上。我可以轻松地推送和拉取这些仓库代码。然而,如果我在一个新的仓库上执行git clone(我们使用gitolite和gitflow),任何git push操作都会卡住。即使我可以成功地推送rsync的项目,从gitolite克隆该项目后,虽然克隆成功,但最终得到的项目无法推送。.git/config文件是相同的。
我的计算机:
$ uname -a
Linux ovid-desktop 3.0.0-16-generic #29-Ubuntu SMP Tue Feb 14 12:48:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

Git push输出(或阅读strace输出):

GIT_TRACE=1 git push -vv origin users/ovid
trace: built-in: git 'push' '-vv' 'origin' 'users/ovid'
Pushing to gitolite:libs/perl/ThirdParty-Sync
trace: run_command: 'ssh' 'gitolite' 'git-receive-pack '\''libs/perl/ThirdParty-Sync'\'''
trace: run_command: 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
trace: exec: 'git' 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
trace: built-in: git 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
Counting objects: 53, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (21/21), done.
Writing objects: 100% (28/28), 2.59 KiB, done.
Total 28 (delta 13), reused 0 (delta 0)

Total 28 (delta...这一行后,它就会永远挂起。

从同一项目中但来自rsync目录的成功推送如下:

To gitolite:libs/perl/ThirdParty-Sync                                                                                                                 
   8c056a5..0321b35  users/ovid -> users/ovid

我能想到的唯一可能相关的症状(误导性信息?)是这个:

$ ssh gitolite
PTY allocation request failed on channel 0

我需要添加-T才能使其工作。
如果我在已同步的ThirdPart-Sync目录中,我可以成功地推送。只有当我尝试再次从gitolite服务器克隆该项目时,它才会失败。
更新:事实证明它不会永远挂起。相当一段时间后,在Total 28行之后,我会得到以下输出。
Write failed: Broken pipe
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly

更新 运行strace并不能告诉我发生了什么。在一个无法推送的存储库上:

wait4(4122, Counting objects: 53, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (18/18), done.
Writing objects: 100% (28/28), 11.62 KiB, done.
    Total 28 (delta 3), reused 28 (delta 3)
[{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 4122
--- SIGCHLD (Child exited) @ 0 (0) ---
read(3, 

在一个我可以推送的仓库上运行strace,大约在相同的位置,我得到了以下结果:

write(9, "^0321b3501969dead78a83a0d3234724"..., 42) = 42
write(9, "b9cbbc6cc37100baf706746205e7a4c4"..., 41) = 41
close(9)                                = 0
wait4(4632, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 4632
--- SIGCHLD (Child exited) @ 0 (0) ---
read(6, "000e", 4)                      = 4
read(6, "unpack ok\n", 10)              = 10
read(6, "001d", 4)                      = 4
read(6, "ok refs/heads/users/ovid\n", 25) = 25
read(6, "0000", 4)                      = 4
futex(0x7f8a49c619d0, FUTEX_WAIT, 4631, NULL) = 0

我总是遇到“在通道0上分配PTY请求失败”的问题:您的~/.ssh/authorized_keys文件中的force-command指令包含一个no-tty - VonC
你的意思是它对你当前冻结的推送没有影响吗? - VonC
VonC:没错。它修复了 SSH 问题(谢谢!),但并没有解决 Git 问题。 - Ovid
好的。我目前正在设置一个gitolite,并且我没有遇到你的问题。你能否:通过在gitolite-admin/conf/gitolite.conf文件中创建新声明来创建一个新的repo?(顺便问一下,你能够克隆,然后推回那个 repo吗?gitolite-admin?)尝试克隆该新的(空)repo,添加一些提交并推回? - VonC
RSA,对的。我以前从未尝试过DSA密钥。 - VonC
显示剩余2条评论
4个回答

3

在评论中,OP Ovid表示:

VonC: 经历了很多折磨后,我从一个dsa ssh密钥切换到了一个rsa ssh密钥,然后一切都正常了。

Gitolite文档“gitolite如何使用ssh”只提到了rsa密钥。因此,继续使用这种特定类型的密钥似乎是安全的。

检查工具(随gitoite打包)sshkeys-lint仅解析rsa(或dss)。


1

请尝试以下步骤:

   $git pull
   $git push origin branch

已经尝试过了。将DSA公共SSH密钥切换为RSA公共SSH密钥解决了问题。不知道为什么。 - Ovid

1

你能将任何存储库推送到Gitolite吗?还是只有那些你没有通过rsync同步的存储库?

你的~/.gitconfig文件怎么样?

如果我处在你的情况下,我会尝试两件事:

  • 使用strace来找出git-push/ssh正在等待什么。

  • 在~/.ssh/config中使用ControlMaster/ControlPath SSH创建共享SSH连接,并在运行ssh -T gitolite后尝试推送。


我可以推送所有我同步过来的仓库。但是我无法推送在这台设备上直接克隆的任何仓库。我的~/.gitconfig非常普通。它设置了颜色、我的用户名/电子邮件和一些别名,没有冲突。我会尝试使用strace命令。 - Ovid
我已经更新了我的查询,加入了一些被截断的strace信息,或者你可以在https://gist.github.com/2035495上查看完整的失败的strace git push。 - Ovid

0

尝试比较新存储库中的配置。Git 版本之间的默认值会发生变化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接