我在个人的,基于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
并且命令已经完成(没有失败)但没有输出。
任何帮助将不胜感激。谢谢!
答案 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后端可以改善此行为