无法使用http/https将Git推送到远程存储库

mwyxok5s  于 2023-08-01  发布在  Git
关注(0)|答案(8)|浏览(101)

我在服务器上的Apache服务的目录中有一个Git存储库。我已经配置了WebDAV,它似乎运行正常。石蕊返回100%成功。
我可以从远程主机克隆我的仓库,但是当尝试通过http或https推送时,我得到以下错误:

你知道吗?

7y4bm7vi

7y4bm7vi1#

编辑.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的身份验证详细信息,并推送到所需的分支。

hgb9j2n6

hgb9j2n62#

如果可能的话,强烈建议不要使用WebDAV。如果必须使用HTTP/HTTPS,则建议使用git-http-backend CGI脚本而不是WebDAV。

tzxcd3kk

tzxcd3kk3#

在这篇文章的评论中,你的/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 .


然后重复这个过程,似乎现在我可以推!=)
正如Eddie在评论中提到的,Arrowmaster在他的回答中提到的,smart http protocol现在是最近Git发行版的一部分。
git-http-backend CGI脚本可以通过http处理任何git命令。
x1c 0d1x的数据
更聪明的协议(git和ssh)将与服务器上的git upload-pack进程进行对话,该进程将确定客户端需要的确切对象集,并仅使用这些对象构建自定义packfile并将其流式传输。
Git 2.17(Q2 2018)将添加调试辅助工具。
参见commit a2b9820(2018年1月24日),作者Patryk Obara ( dreamer )
(由Junio C Hamano -- gitster --合并于commit 39a1dd8,2018年2月13日)

http-push:改进错误日志

git push由于服务器端WebDAV错误而失败时,不容易指出罪魁祸首。
有关确切的cURL错误和HTTP服务器响应的其他信息有助于调试目的。

zsohkypk

zsohkypk4#

您可能需要将用户添加为存储库的成员,并可能更新权限。
我们必须与每个将在我们组织的Github存储库中做出贡献的成员一起这样做。

biswetbf

biswetbf5#

我在Windows上遇到了同样的问题,我的凭据存储在Windows凭据管理器中。我不希望每个用户都必须编辑配置文件,所以我将url从http://example.com更改为http://git@example.com,即使我的id不是git,它也可以工作。我不认为用户“git”在任何地方都有定义,并且假设任何名称都可以工作。(如果您不在专用网络上,请确保使用https)。

46scxncf

46scxncf6#

Here是我使用git-http-backend配置和ldap认证的解决方案。

tzxcd3kk

tzxcd3kk7#

我也遇到过类似的问题,我可以使用HTTP协议克隆并从存储库中拉取数据,但我无法推送数据。我通过以下方式解决了这个问题。
我在项目的.git/config文件中更改了远程的url,以匹配GitHub SSH url。然后,我按照“www.example.com”上的所有说明进行操作https://help.github.com/articles/generating-ssh-keys#platform-linux,并使用“https://help.github.com/articles/error-permission-denied-publickey”进行故障排除。最好的部分是我没有处理Apache或更改远程服务器上的任何HTTP设置。

r7s23pms

r7s23pms8#

使用gitweb enable编写经过身份验证的git dav virtualhost的示例可以解决您的问题:

<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中读取它。

相关问题