我一直在我的私人服务器上运行SVN存储库。我有一些项目需要维护,所有项目都使用标准配置模式进行维护,后者将用作Apache macro
。基本上我的结构很简单
映射
有多个宏,因为每个存储库都有自己的身份验证方案(公共读取,经过身份验证的提交或完全私有)
即使我找到了一些使用Apache和Git的配置指令,我也没有正确理解它们。以下是我的问题:
我希望我的虚拟主机(https://git.example.com
)能够托管多个Git存储库,所有这些都可以从shell轻松配置(例如,添加mod_macro
的{{1}}指令并运行{{1}通过SSH)。每个人都有自己的许可系统,例如根据{{1}}。典型的存储库路径可以Use
映射到git init
如何在Apache中执行此操作?
我尝试构建一个类似下面的Git配置(尚未测试,因为它暂时不会做任何事情)
.htpasswd
但是让我们专注于我现在无法理解的以下几行
https://git.example.com/[projects-or-whatever]/myProject.git
从我的understanding上面的正则表达式匹配绝对路径,如
/home/me/srv/git/repos/myProject
好的,看起来我的所有项目都会放在<VirtualHost *:443>
ServerName git.example.com
ServerAlias www.git.example.com
ServerAdmin me@example.com
AssignUserID me myself
# Use HTTP Strict Transport Security to force client to use secure connections only
Header always set Strict-Transport-Security "max-age=500000000"
ErrorLog /path/to/error_log
CustomLog /path/to/access_log "vhost_combined"
DocumentRoot /srv/www/default
SSLEngine on
SSLOptions +StrictRequire
#SSLPassPhraseDialog builtin
SSLCertificateFile /path/to.crt
SSLCertificateKeyFile /path/to.key
SSLCertificateChainFile /path/to.ca-bundle
SSLVerifyClient none
SSLProxyEngine on
#Used for system login instead of .htaccess
AddExternalAuth pwauth /usr/bin/pwauth
SetExternalAuthMethod pwauth pipe
<IfModule mime.c>
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
</IfModule>
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"
ScriptAlias /git /usr/share/gitweb/gitweb.cgi
SetEnv GIT_PROJECT_ROOT /home/me/srv/git/repos/
SetEnv GIT_HTTP_EXPORT_ALL
#In this directory, specific repositories are configured
Include "/home/hosting/vhosts.d/me/git/*.git.conf"
<Directory "/home/me/srv/git/repos">
Allow from all
Options +ExecCGI
AllowOverride All
</Directory>
<Directory "/usr/lib/git/">
Options ExecCGI Indexes
Order allow,deny
Allow from all
</Directory>
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
<Files gitweb.cgi>
SetHandler cgi-script
</Files>
</VirtualHost>
下,如果我不改变它,是正确的吗?
但是,由于我目前不知道Git over HTTP协议是如何工作的,如何独立于其他存储库保护每个存储库?
答案 0 :(得分:0)
挖掘the book可能会提供答案。在我尝试之前,这是候选答案。
基本上,上面的全局配置告诉所有以给定模式结尾的内容(例如git-receive-pack
)都会被发送到Git CGI。行。
但使用正确的LocationMatch
,Alias
和<Directory>
指令应该有效。这是草稿:
Alias
将文件系统目录映射到某个位置<Directory>
设置.htaccess
。 SVN使用HTTP verbs
来区分读/写操作,Git使用git-receive-pack
进行写操作。该书建议使用LocationMatch
指令Macro