我使用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
但仍然无法进入我的仓库。
答案 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>