为了自动为我的所有 git 存储库提供服务,http.conf 是什么?
例如,如果我有一个如下的目录结构(名为 git 的中心目录里面有多个项目):
/../htdocs/git/项目
1 /../htdocs/git/项目
2 /../htdocs/git/项目3
为了避免在每个项目中重复相同的内容,我必须写什么:
<Location /git/project1>
DAV on
AuthType Basic
AuthName "Git"
AuthUserFile /../htdocs/git/project1/passwd.git
Require valid-user
</Location>
附加问题:
有没有办法将 repos 放在 apache 的 htdocs 之外的某个地方,并将请求重定向到那里?(比如使用 DocumentRoot)
笔记:
所有存储库都是 --bare,因为它们是中央存储库(Trac 使用)
答案1
使用 mod_macro:
<Macro Project $repos>
<Location /git/$repos>
DAV on
AuthType Basic
AuthName "Git for $repos"
AuthUserFile /../htdocs/git/$repos/passwd.git
Require valid-user
</Location>
</Macro>
然后你只需为每个存储库添加一行
Use Project repos1
Use Project repos2
不幸的是,这不是自动的,即它不会选择目录中的所有存储库,但您可以运行 cron 作业来为您创建配置:
echo "# Git repository definitions" > /path/to/httpd_projectdef.conf
for i in /path/to/git/*; do echo "Use Project `basename $i`" >> /path/to/httpd_projectdef.conf; done
如果您愿意,项目宏也可以执行 trac http 配置。
答案2
如果可能的话,我建议使用 SSH 来共享您的存储库 - 它将提供更好的安全性,并且通常效果更好,因为 HTTP 在 Git 术语中是一种“愚蠢”的协议。这也意味着您可以使用标准文件系统权限来控制访问,并且可以运行钩子脚本等。HTTP 是 Git 的最低公分母协议,我认为您最好使用其他协议。
如果您由于某种原因无法使用 HTTP,那么 pgs 的答案就是可行的方法。
答案3
如果您的所有存储库都可以使用相同的 AuthUserFile,那么就可以了,但我认为这不是您要问的。您可能必须在外部生成多个 Location 部分,例如使用一些 perl 代码,然后让 apache 重新读取配置文件。
您是否考虑过使用 gitosis 或 git-daemon?
对于你的奖励问题,类似这样的内容:
alias /git /path/to/repository/root
<Directory "/path/to/repository/root">
...
</Directory>