我有一台 ubuntu 服务器,运行 apache2。我试图将其设置为通过 http 提供 git 存储库。
在阅读了数十个样本之后,我最终得到了一个非常简化的配置文件,为了简单起见,删除了所有的身份验证。
我的 conf.d 中的 git_conf 文件如下所示:
SetEnv GIT_PROJECT_ROOT /srv/repos/git/
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<Location /git>
</Location>
我创建了一个空的 git 存储库,如下所示:
# git --bare init myrepo
# cd myrepo
# git --bare update-server-info
# cd ..
# chown -R www-data:www-data myrepo
现在,好玩的事情开始了。我能够在本地机器上克隆 repo:
# cd ~/tmp
# git clone /my/repo/path/myrepo test1
但是,每当我尝试从远程机器克隆时,如下所示:
$ git clonehttp://我的服务器/git/myrepo测试1
我收到:
fatal: http://cfs-int-redmine/git/iosdemo/info/refs not found: did you run git update-server-info on the server?
如果我在服务器上创建指向 repo 的符号链接,例如:
# ln -s myrepo myrepo.git
然后我尝试克隆http://myserver/git/myrepo.git, 有用。
那么,发生了什么事?我是否应该始终使用“.git”才能使用存储库?如何在没有 .git 的情况下使其工作?
答案1
通常,任何托管都会使用.git
后缀。从技术角度来看,我并不认为这是必需的,但目前这是一个根深蒂固的标准,你自己的测试似乎证实了git
这一点。.git
目录名称上的后缀将目录标记为 git 裸存储库,类似于文件.git
夹用于在非裸存储库中存储 git 存储库信息的方式。
答案2
解决这个问题的另一个方法是100%确保你的脚本别名指向正确的git-http-后端地点。
SetEnv GIT_PROJECT_ROOT /data/git/
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/