4

我在 ownCloud 上有一些个人 git 存储库。我可以通过访问ownClouds webdav url从2台ubuntu机器和一台Windows PC克隆它:http://myserver.a/remote.php/webdav/repos/repo.git

最近我使用 git 版本 1.8.1.5 安装了 Arch Linux,但它失败并显示以下错误消息:致命:http://myserver.a/remote.php/webdav/repos/repo.git/info/refs?service=git-upload -pack not found:你在服务器上运行过 git update-server-info 吗?

我确实添加了更新后挂钩,最终它可以在我的其他机器上运行。当 git 请求 ...info/refs?service... 时,服务器 error.log 显示 404

ubuntu git 1.7 从服务器请求相同的 url。但是在收到错误代码 404 后,它会请求 .../info/refs HTTP/1.1 并以代码 200 成功。

那么为什么较新的 git 会失败,我该如何解决呢?

4

3 回答 3

5

整件事?service=...是为了 1.6.6 中引入的 git 的智能 HTTP 支持。它比传统的 HTTP 支持效率更高,但需要在 Web 服务器上运行特殊的 CGI 二进制文件,并且不适用于WebDAV。

IMO,在任何未损坏的 WebDAV 实现中,都应该忽略它,但显然 ownCloud 认为它是文件名的一部分或其他东西,因此会产生错误。与 ownCloud 开发人员讨论这个可能是有意义的。

在旧版本中,git 会退回到没有该后缀的 URL,但这有其自身的问题。因此,在 1.8.0 中删除了第二个请求,并引入了一个新选项,您可以使用它来关闭智能 HTTP 并直接使用旧 URL(这应该可以解决问题)。它的工作原理是这样的,例如:

GIT_SMART_HTTP=0 git fetch

如果您从不想使用智能 HTTP(但请注意,它确实可以在 Github 和所有其他理智的托管站点上运行,并且如果没有它,推送将无法正常工作),您可以在 shell 配置文件中导出该环境变量。

有关更改的详细信息,请访问https://git.kernel.org/cgit/git/git.git/commit/?id=02572c2e3afcc200936260f48863447726212a7c

于 2013-06-12T11:02:12.170 回答
0

我最近在将我的 Git 存储库推送到下一个云时遇到了同样的问题。我检查了存储库的内容,发现那里没有这样的文件信息/引用。

研究导致我进入这个线程:无法通过 http 克隆 git repos;未找到信息/参考

在存储库基目录中执行建议的命令git update-server-info会创建丢失的文件,并且我不再收到 404 错误。所以查询字符串不是这里的问题。

不幸的是,我收到另一个错误(“错误:没有 DAV 锁定支持 ...”),记录在此处https://help.nextcloud.com/t/webdav-lock-on-file-doesnt-work/21451(带有指向 Nextcloud 项目的 github-issue 的链接)。

遗憾的是,Nextcloud 上还没有基于 WebDAV 的 Git 存储库。

于 2018-05-13T15:15:57.650 回答
0

现在这可能更健壮:Git 使用 SHA-1 作为默认哈希算法构建的 SHA256 存储库中的“ git cloneman没有正确设置生成的存储库,已使用 Git 2.32(Q2 2021 年,8 年后)。

请参阅Eric Wong ( ) 的提交 00bc839(2021 年 5 月 11 日(由Junio C Hamano 合并 -- --提交 bdff041中,2021 年 5 月 20 日)ele828
gitster

remote-curl: 修复 sha256 repos 上的克隆

签字人:Eric Wong
签字人:brian m. 卡尔森

远程 https 进程需要更新它自己的the_repository' when it sees an HTTP(S) remote is using sha256. Without this, parse_oid_hex() fails to handle sha256 OIDs when it's eventually called byparse_fetch() 实例。

经测试:

git clone https://yhbt.net/sha256test.git
GIT_SMART_HTTP=0 git clone https://yhbt.net/sha256test.git
(plain http:// also works)

通过 git:// 克隆 URL 不需要更改

于 2021-05-23T21:11:14.583 回答