在个人服务器上通过 HTTP 克隆 git 存储库会导致克隆空存储库



我有一个git存储库托管在基于Debian的个人ApacheWeb服务器上。如果我像这样访问它:
git "command" user@server:/path/to/repo.git
我可以克隆、推、拉等没有问题。接下来,我添加了一个虚拟主机,并将一个子域添加到我的 DNS 记录中,以便 git.domain.com 转到我将在其中存储存储库的目录。我可以成功导航到 git.domain.com/repo.git 并查看存储库中的文件和目录。但是,当我尝试通过带有域的http克隆它时:
git clone git.domain.com/repo.git
它会导致错误:
warning: You appear to have cloned an empty repository.
我真的被这个错误抛弃了,因为我可以用ssh克隆它,并且在服务器(git clone /path/to/repo(上内部,Web服务器应该完全按照内部的方式提供文件。

克隆它并收到一个空存储库后,我进入存储库目录并运行git show-ref命令通过(没有失败(但没有输出。

任何帮助将不胜感激。谢谢!

当从所谓的"Dumb http后端"(提供git目录的Web服务器(公开存储库时,需要使某些文件保持最新。默认情况下,git 不会使这些文件保持最新,因为这意味着它正在使用不需要的 CPU 周期来处理只有一小部分 git 用户使用的东西。

您可以使用git update-server-info直接更新这些文件,但在每次更改存储库后都应注意执行此操作,以使文件保持最新。

确保此文件保持最新,方法是将 git 配置为在使用其他传输进行推送时自动运行上述命名命令。这可以通过转到.git/hook并将post-update.sample重命名为post-update来轻松启用。

请注意,以这种方式通过 http 运行 git 可能会产生很高的服务器负载,因为它通常需要从服务器请求许多文件,并且如果客户端已经有文件的某些部分,则不够智能,无法部分下载包文件。这种行为可以通过使用智能 git HTTP 后端来改进,如 https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP 所述

最新更新