返回代码22,致命:git-http-push-failed

时间:2014-01-31 18:14:26

标签: git ssh

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

5 个答案:

答案 0 :(得分:4)

尝试将其添加到裸存储库中的配置文件中:

[http]
       receivepack = true

答案 1 :(得分:4)

仅供记录,因为在搜索“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

答案 2 :(得分:1)

/repo/.ssh/authorized_keys对您服务器上的ssh守护程序没有任何意义:sshd将在用户的主页下查找ssh查询:/home/user/.ssh/authorized_key

另外,如果您使用的是https:// ... url,则无论如何都不会使用ssh。要使ssh url起作用,您需要正确配置Apache服务器以调用git-http-backend script 例如,请参阅此git-http-backend question

答案 3 :(得分:0)

这是因为您使用http网址克隆,而不是使用Github上存在的ssh网址。 而现在你正试图推动使用无效的ssh。 在这种情况下,git clone或git pull工作但git push失败。

一种解决方案是使用ssh url进行克隆,其形式为git@github.com:username / repo-name.git 当您在&#34中单击SSH时,您可以在您的Github仓库中找到此URL;您可以使用HTTPS,SSH或Subversion来克隆"信息。 然后进行更改并进行git推送。确保您的计算机的公钥存在于您的Github帐户中。

当前情况的另一种方法是在执行Git推送时提供用户名和密码。

答案 4 :(得分:0)

对我来说,诀窍是enable WebDAV

我将其放入LocationMatch:

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