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

时间:2017-08-15 02:30:23

标签: git apache http server

我在个人的,基于Debian的Apache Web服务器上托管了一个git存储库。如果我像以下那样访问它:
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并且命令已经完成(没有失败)但没有输出。

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

1 个答案:

答案 0 :(得分:0)

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

您可以使用git update-server-info直接更新这些文件,但每次更改回购后都应该注意这一点,以使文件保持最新。

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

请注意,以这种方式通过http运行git可能会产生很高的服务器负载,因为它通常需要从服务器请求许多文件,如果客户端已经有部分文件,那么部分下载包文件就不够智能了。文件。如https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP

所述,使用Smart git HTTP后端可以改善此行为
相关问题