多个 HTTP Git Repos 设置

多个 HTTP Git Repos 设置

为了自动为我的所有 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>

相关内容