【问题标题】:Git fails to clone repo from ownCloud's webdav interfaceGit 无法从 ownCloud 的 webdav 界面克隆 repo
【发布时间】:2013-02-20 13:58:16
【问题描述】:

我在 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 未找到:您是否在服务器上运行了 git update-server-info?

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

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

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

【问题讨论】:

  • 问题解决了吗?我现在确实有一个完全相同的。
  • 不,很遗憾我没有。相反,我现在通过带有 apache 网络服务器的标准 WebDAV 文件夹托管我的 git 存储库。

标签: git webdav owncloud


【解决方案1】:

整个?service=... 是为了 git 在 1.6.6 中引入的智能 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 上有关更改的详细信息。

【讨论】:

  • 同时我听说了这个变化,但你的解释真的很有帮助,谢谢!
【解决方案2】:

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

研究让我找到了这个帖子:can't clone git repos via http; info/refs not found

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

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

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

【讨论】:

    【解决方案3】:

    现在这可能更健壮:“git clone(man) 来自 Git 使用 SHA-1 作为默认哈希算法构建的 SHA256 存储库,通过哑 HTTP 协议没有正确设置生成的存储库,该存储库已使用 Git 2.32(2021 年第二季度,8 年后)进行了更正。

    参见Eric Wong (ele828)commit 00bc839(2021 年 5 月 11 日)。
    (由 Junio C Hamano -- gitster -- 合并于 commit bdff041,2021 年 5 月 20 日)

    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 无需更改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2010-11-05
      • 1970-01-01
      • 2023-03-10
      • 2018-04-13
      相关资源
      最近更新 更多