使用Apache和mod_宏设置私有多个公共/私有Git存储库
我一直在我的私有服务器上运行SVN存储库。我有几个项目需要维护,所有项目都使用标准配置模式进行维护,该模式被用作Apache使用Apache和mod_宏设置私有多个公共/私有Git存储库,git,apache,Git,Apache,我一直在我的私有服务器上运行SVN存储库。我有几个项目需要维护,所有项目都使用标准配置模式进行维护,该模式被用作Apache宏。基本上我的结构非常简单 /svnroot /报告1 /报告2 /viewvc /报告1 /报告2 映射到 /主页/me/srv/svn/repos /报告1 /报告2 有多个宏,因为每个存储库都有自己的身份验证方案(公共读取、身份验证提交或完全私有) 现在我想去吉特 即使我找到了一些使用Apache和Git的配置指令,我也没有正确理解它
宏
。基本上我的结构非常简单
-
- /svnroot
- /报告1
- /报告2
- /viewvc
- /报告1
- /报告2
- /svnroot
- /主页/me/srv/svn/repos
- /报告1
- /报告2
我想要我的虚拟主机(
https://git.example.com
)托管多个Git存储库,所有这些都可以通过shell轻松配置(例如添加mod_宏的使用指令并通过SSH运行Git init
)。每个人都有自己的权限系统,例如根据.htpasswd
。典型的存储库路径可以是https://git.example.com/[projects或任何东西]/myProject.git
映射到像/home/me/srv/git/repos/myProject这样的地方
在Apache中如何做到这一点?
到目前为止还很糟糕
我试着构建一个Git配置,如下所示(还没有测试,因为它现在什么都做不了)
根据我的经验,上面的正则表达式匹配绝对路径,如
/git/sdf/HEAD
/git/blablabla/blabla/objects/info/sdfs
/git/daf/git-receive-pack
好的,看起来我所有的项目都将放在/git/
下,如果我不更改它,正确吗
但是,由于我目前不知道Git over HTTP协议是如何工作的,如何独立于其他存储库保护每个存储库?挖掘可能会提供答案。在我尝试之前,这里是候选答案
基本上,上面的全局配置告诉我们,以给定模式结尾的所有内容(例如,git receive pack
)都被发送到git CGI。嗯
但是使用适当的LocationMatch
、Alias
和
指令应该可以工作。这是一份草稿:
- 使用
Alias
将文件系统目录映射到某个位置
- 如果需要,使用
设置.htaccess
。SVN使用HTTP动词
来区分读/写操作,Git使用Git接收包
进行写操作。本书建议使用LocationMatch
指令
- 将所有内容包装在
宏中
该配置是gitweb配置。它允许我以一种奇特的方式显示Git存储库,而不是推送。对于推送,我应该调查WebDAV或智能HTTP()
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
"/usr/lib/git/git-http-backend/$1"
/git/sdf/HEAD
/git/blablabla/blabla/objects/info/sdfs
/git/daf/git-receive-pack