Mar*_*moy 18 apache git http git-http-backend
我需要使用git-over-http(智能http)设置一个git服务器,但是在线可用的资源很混乱,混合了其他apache配置,缺少细节或者不够明确.
我是根据我发现缺乏可用资源的问题自己回答这个问题的.
Mar*_*moy 34
首先,有必要了解git-over-http有2个组件:git和apache.这两个通过名为git-http-backend的脚本连接.挑战是配置这两个组件之间的接口,以便通过apache转发对git的http请求.
注意:安全性超出了本指南的范围.
首先使用您的发行版的软件包管理器安装git和apache2.
添加apache所需的模块以启用git-over-http.这些是cgi,别名和环境
$ a2enmod cgi alias env
Run Code Online (Sandbox Code Playgroud)
/etc/apache2/httpd.conf(不删除其中包含的任何内容)<VirtualHost *:80>
SetEnv GIT_PROJECT_ROOT /data/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
ScriptAliasMatch \
"(?x)^/(.*/(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"
Alias /git /data/git
<Directory /usr/lib/git>
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
/data/git服务器上的git repos的父目录替换2次出现(如果你还没有任何存储库,请不要担心,只需使用你打算放置它的目录/它们)也可以替换/usr/lib/git/git-http-backend为系统上的git-http-backend的位置,可以使用它找到$ find / -name git-http-backend
可能是您的系统REDIRECT_REMOTE_USER实际上覆盖了有效的REMOTE_USER.如果完成后此设置不起作用,请尝试删除该行.
根据此来源,可能需要替换Require all granted apache 2.4及更高版本的Directory标记中的最后两行.
$ apache2ctl -k graceful现在已经设置了apache服务器,但是我们还没有完成,设置repos有一些重要的部分会影响这个设置是否有效.
$ mkdir myrepo.git
$ cd myrepo.git
$ git init --bare --shared
$ cp hooks/post-update.sample hooks/post-update
$ git update-server-info
$ chown -R wwwrun:www
Run Code Online (Sandbox Code Playgroud)
在这里,重要的是要理解最后一行将repo的所有者更改为apache2用户.此用户可能在您的系统上有所不同.要查找apache用户,请执行$ ps aux | egrep '(apache|httpd)'.然后找到用户的组名,执行$ id user-name.在我的系统上,用户是wwwrun和组www.相应地更换.
要使用repo,您需要知道url.对于此设置,网址为http://server.domain/myrepo.git
注意:http s不起作用.
从客户端访问repo时,只需将其添加为远程:
$ git remote add origin http://server.domain/myrepo.git
Run Code Online (Sandbox Code Playgroud)
然后你可以像任何其他git repo一样与它进行交互.
| 归档时间: |
|
| 查看次数: |
30505 次 |
| 最近记录: |