我有一个Ubuntu的服务器,运行Apache2。 我试图将其设置为通过http服务git仓库。
阅读了数十个样本后,我以非常简化的configuration文件结束,为简单起见,删除了所有的身份validation。
我在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>
我创build了一个空的git仓库,像这样:
# git --bare init myrepo # cd myrepo # git --bare update-server-info # cd .. # chown -R www-data:www-data myrepo
现在,乐趣开始了。 我能够克隆本地机器上的回购:
# cd ~/tmp # git clone /my/repo/path/myrepo test1
但是,每当我尝试从远程机器克隆,如下所示:
$ git clone http:// myserver / git / myrepo test1
我收到:
fatal: http://cfs-int-redmine/git/iosdemo/info/refs not found: did you run git update-server-info on the server?
如果在服务器上,我创build一个符号链接到回购如:
# ln -s myrepo myrepo.git
然后我尝试克隆http://myserver/git/myrepo.git ,它的工作原理。
发生什么了? 我是否应该使用“.git”才能使用存储库? 如何让它在没有.git的情况下工作?
通常任何托pipe都将使用.git后缀。 从技术的angular度来看,我不会期望它是必需的,但在这一点上它是一个相当根深蒂固的标准,而且你自己的testing似乎证实了git的确执行了这个。 目录名称上的.git后缀将该目录标记为git裸存储库,类似于如何使用.git文件夹将git存储库信息存储在非裸存储库中。
解决这个问题的另一个办法是100%确保你的ScriptAlias指向正确的git-http-backend位置。
SetEnv GIT_PROJECT_ROOT /data/git/ SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/