繁体   English   中英

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

[英]Cloning git repository over HTTP on personal server results in cloning an empty repository

我有一个git存储库托管在基于Debian的个人Apache Web服务器上。 如果我像这样访问它:
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 )进行git clone /path/to/repo ,并且Web服务器应该完全按照内部文件的方式提供文件。

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

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

从所谓的“ Dumb http backend”(提供git目录的Web服务器)公开存储库时,需要使某些文件保持最新。 默认情况下,git不会使这些文件保持最新状态,因为这意味着它仅对所有git用户使用的一小部分使用不必要的CPU周期。

您可以使用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后端来改善此行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM