Собственный сервер Git на базе Ubuntu или Debian/GNU Linux
Я встречал в сети много tutorial'ов по установке своего сервера git как на gitweb, так и на webdav, но, увы, они либо были только по одному из вышеназванных пунктов, не освещая другой, либо банально не работали. Вчера возникла необходимость поднять свой сервер репозиториев. Потратил пару часов — поднял, теперь хочу поделиться опытом, потому что считаю проблему актуальной :)
По данному руководству был создан репозиторий git.shadowircd.net
Для начала сделаем install некоторых пакетов aptitude:
aptitude install git-core git-svn gitweb
Создадим папку для хранения сайта с gitweb и dav-версии репозитория git:
mkdir -p /www/git.domain.tld/{htdocs,logs} /www/git.domain.tld/htdocs/git
Активируем нужные моды Apache2:
a2enmod dav
a2enmod dav_fs
a2enmod rewrite
a2enmod env
Составляем конфигурационный файл gitweb’а:
mcedit /www/git.domain.tld/gitweb.conf
У меня он выглядит так:
$my_uri = “http://git.domain.tld”; # адрес репозиториев
$site_name = “git.domain.tld”; # название сайта, отображается в заголовке
$projectroot = “/www/git.domain.tld/htdocs/git/”; # путь к репозиториям git на жёстком диске
$git_temp = “/tmp”;
$home_link = $my_uri; # ссылка на «домашнюю страничку»
# $home_text = “indextext.html”; # текст, можно расскоментировать и вставить свой
$projects_list = $projectroot;
$stylesheet = “/gitweb/gitweb.css”;
$logo = “/gitweb/git-logo.png”;
$favicon = “/gitweb/git-favicon.png”;
$projects_list_description_width = 40;
$feature{’pathinfo’}{’default’} = [1];
Теперь перейдём к нашему vhost в apache2, вот тут-то и содержится самое интересное:
<VirtualHost *:80>
ServerName git.domain.tld
ServerAlias www.git.domain.tld
ServerAdmin head@coderscamp.ru
DocumentRoot /www/git.domain.tld/htdocs
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
DirectoryIndex /cgi-bin/gitweb.cgi
RewriteEngine on
RewriteRule ^/([a-zA-Z0-9_\-]+\/\.git)/?(\?.*)?$ /cgi-bin/gitweb.cgi/$1 [L,PT]
SetEnv GITWEB_CONFIG /www/git.domain.tld/gitweb.conf
Alias /gitweb /usr/share/gitweb/
<Directory /www/git.domain.tld/htdocs>
Options FollowSymLinks
AllowOverride None
Order allow,deny
allow from all
</Directory>
<Location /git>
DAV on
AuthType Basic
AuthName «Git»
AuthUserFile /www/git.domain.tld/passwd.git
<LimitExcept GET HEAD PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
LogLevel warn
ErrorLog /www/git.domain.tld/logs/error.log
CustomLog /www/git.domain.tld/logs/access.log combined
</VirtualHost>
Остаётся только добавить нового пользователя:
htpasswd -cm /www/git.domain.tld/passwd.git user
Всё Создаём репозитории в /www/git.domain.tld/htdocs/git/ и наслаждаемся самой приятной системой контроля версий из всех :)
P.S. для пользователей Windows при использовании git будет полезен tip об отключении автовставки CRLF переноса строки habrahabr.ru/blogs/development/43808
P.P.S. для пользователей Linux — данный сервер работает с использованием DAV, могут возникнуть проблемы с push, разрешается созданием файла ~/.netrc со следующим содержимым machine git.domain.tld login <пользователь> password <пароль>