Pull to refresh

Собственный сервер Git на базе Ubuntu или Debian/GNU Linux

Reading time 2 min
Views 80K
Я встречал в сети много 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 <пароль>
Tags:
Hubs:
+33
Comments 22
Comments Comments 22

Articles