【问题标题】:return code 22, fatal: git-http-push-failed返回代码 22,致命:git-http-push-failed
【发布时间】:2014-02-24 13:35:44
【问题描述】:

我使用git init --bare 在我的服务器上创建了自己的 git 存储库。我在那里添加了一些文件,然后通过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,但我仍然无法推送到我的仓库。

【问题讨论】:

  • 您能检查一下您的 http 错误日志,看看那里是否显示任何错误吗?

标签: git ssh


【解决方案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

【讨论】:

    【解决方案2】:

    那是因为您使用的是 http url 而不是 Github 上的 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 推送时提供用户名和密码。

    【讨论】:

      【解决方案3】:

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

      [http]
             receivepack = true
      

      【讨论】:

      • 我试过了,但它对我不起作用。我仍在寻找解决方案。
      • 错误可能取决于很多原因。使用服务器 http 日志会有很多帮助。
      【解决方案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

      【讨论】:

      【解决方案5】:

      我的诀窍是enable WebDAV

      我把它放在 LocationMatch 中:

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

      【讨论】:

        猜你喜欢
        • 2012-09-21
        • 1970-01-01
        • 2014-12-22
        • 1970-01-01
        • 2014-05-26
        相关资源
        最近更新 更多