返回代码22,严重错误:Git HTTP推送失败。

3
我使用git init --bare在服务器上创建了自己的git仓库,并添加了一些文件。然后通过git clone http://www.example.com/mygit/repo从我的服务器上克隆了我的仓库,并成功克隆。现在,我想通过git push origin master将这个目录推送到仓库,但是返回错误代码22。我还将我的PC的ssh公钥添加到http://www.example.com/mygit/repo/.ssh/authorized_keys中,但仍无法推送到我的仓库。

你能检查一下你的HTTP错误日志,看看是否有任何错误显示在那里吗? - Matt Jennings
5个回答

5
仅供参考,当在Google搜索“git-http-push failed return code 22”时,可能会出现以下情况:
使用https Git和服务器上的htpasswd时,似乎发送的用户名包括域名:user@domain.tld,但预期的名称仅为user
我的解决方法是在~/.netrc中添加以下内容: machine host.domain.tld login the_user_name password the_password

除此之外,每次使用新的克隆时我都会遇到这个问题。需要在配置文件的URL设置中添加“the_user_name@”。因此,URL=https://stackoverflow.com/git/repository.git 将变为URL=https://the_user_name@stackoverflow.com/git/repository.git。 - Hutjepower

4
尝试将以下内容添加到裸仓库的配置文件中:
[http]
       receivepack = true

1
我尝试了这个方法,但对我没有用。我还在寻找解决方案。 - Mirko Seifert
错误可能有很多原因。使用服务器的HTTP日志可以提供很大的帮助。 - Marcs

2

/repo/.ssh/authorized_keys这个路径对于你的服务器上的ssh守护程序没有任何意义:sshd会在执行ssh查询的用户主目录下查找该文件:/home/user/.ssh/authorized_key

此外,如果您使用https://...的URL,则根本不会使用ssh。 要使ssh url起作用,您需要正确配置的Apache服务器来调用 git-http-backend脚本
例如,请参阅此git-http-backend问题


1
这是因为您使用了Github上的http url而不是ssh url进行克隆。 现在,您正在尝试使用ssh进行推送,这将无法正常工作。在这种情况下,git clone或git pull有效,但git push失败。
一种解决方法是使用ssh url进行克隆,格式为git@github.com:username/repo-name.git。当您单击“您可以使用HTTPS,SSH或Subversion克隆”消息中的SSH时,可以在Github存储库上找到此url。然后进行更改并执行git push。确保您的计算机的公钥存在于您的Github帐户中。
当前情况下另一种方法是在进行Git push时提供用户名和密码。

0

对我来说,诀窍是启用WebDAV

我将它放在LocationMatch中:

 <LocationMatch /git/.*\.git>
   Dav On
   AuthType Basic
   AuthName "Git Verification"
   AuthUserFile /etc/httpd/git/test.passwd
   Require valid-user
 </LocationMatch>

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