我在服务器上的一个由Apache服务提供的目录中拥有一个Git仓库。我已经配置了WebDAV,并且它似乎正在正常运行。Litmus返回100%的成功率。
我可以从远程主机克隆我的仓库,但是当尝试通过http或https进行推送时,出现以下错误:
错误:无法访问URL https://git.example.com/repo/,返回代码22 致命错误:git-http-push失败
有任何想法吗?
我在服务器上的一个由Apache服务提供的目录中拥有一个Git仓库。我已经配置了WebDAV,并且它似乎正在正常运行。Litmus返回100%的成功率。
我可以从远程主机克隆我的仓库,但是当尝试通过http或https进行推送时,出现以下错误:
错误:无法访问URL https://git.example.com/repo/,返回代码22 致命错误:git-http-push失败
有任何想法吗?
请编辑您的.git/config文件中的以下部分:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://git.repository.url/repo.git
到
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://username:password@git.repository.url/repo.git
然后尝试 git push origin master
。
根据需要编辑配置文件中其他仓库URL的身份验证详细信息,并推送到所需的分支。
如果可能的话,强烈建议不要使用WebDAV。如果必须使用HTTP/HTTPS,则推荐使用git-http-backend CGI脚本而不是WebDAV。
在这个帖子评论中,你的/Web/git/Logs/ErrorLog
关于该错误有什么说法?
查看了
/Web/git/Logs/ErrorLog
后,我发现锁定文件存在权限问题。 在我的httpd-dav.conf
文件中,有一行...
DavLockDB “/usr/var/DavLock”
/usr/
目录,发现‘var
’目录已经不存在了。$ mkdir var
$ cd var
$ chown www .
$ chgrp www .
git-http-backend
CGI脚本可以通过http处理任何git命令。
Git 2.17 (2018年第二季度) 将增加一个调试辅助工具。
请参见提交记录 a2b9820 (2018年1月24日),作者为Patryk Obara (dreamer
)。
(由Junio C Hamano -- gitster
--于提交记录 39a1dd8中合并,2018年2月13日)
http-push
:改进错误日志当git push
由于服务器端WebDAV错误而失败时,很难找到主要原因。
提供有关确切的cURL
错误和HTTP服务器响应的附加信息有助于调试。
您可能需要将用户添加为存储库成员,并可能更新权限。
我们需要对每个将在我们组织的 GitHub 存储库上贡献的成员执行此操作。
<VirtualHost *:443>
ServerAdmin admin@example.com
ServerName git.example.com
DocumentRoot /var/git
# SSL configuration
SSLEngine on
# Fix dav header
#RequestHeader edit Destination ^https: http: early
<Directory /var/git>
DAV on
Options ExecCgi FollowSymLinks
# Gitweb config
AddHandler cgi-script .cgi
DirectoryIndex .gitweb.cgi
SetEnv GITWEB_CONFIG /var/git/.gitweb.conf
# Basic auth config
AuthType Basic
# Auth title
AuthName "Git repositories"
# Use file and external providers
AuthBasicProvider file
# File location
AuthUserFile /var/git/.htpasswd
Require method GET OPTIONS PROPFIND
<LimitExcept GET OPTIONS PROPFIND>
Require valid-user
</LimitExcept>
</Directory>
</VirtualHost>
然后只需使用您的用户名克隆存储库:
git clone https://user@git.example.com/repository
当你尝试推送时,它会要求你的密码并提供它。
将密码放在克隆URL中是一种安全不良实践,因为任何人都可以在你的.git/config文件中读取它。
我曾经遇到过一个类似的问题,可以使用HTTP协议克隆和拉取存储库,但无法推送。我通过以下方法解决了这个问题。
我在项目的.git/config文件中更改了远程的URL,使其匹配GitHub的SSH URL。然后我按照 "https://help.github.com/articles/generating-ssh-keys#platform-linux" 的所有说明进行操作,并使用 "https://help.github.com/articles/error-permission-denied-publickey" 进行故障排除。最好的部分是,我不需要处理Apache或更改远程服务器上的任何HTTP设置。