Ubuntu 服务器上 apache 的 git 存储库仅有 .git 路径

Ubuntu 服务器上 apache 的 git 存储库仅有 .git 路径

我有一台 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/

相关内容