Собственный сервер 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 <пароль>
    Поделиться публикацией
    Комментарии 22
      –1
      хабракат!
        +3
        добавил, спасибо :)
        +1
        респект и уважуха :), eсть офтопный вопросик может какойнить баг трекер посоветуете?
          +1
          я пользуюсь mantis с собственными модификациями для крупных проектов :) для мелких — просто файлик TODO в репозитории
            0
            вот пример установки mantis bugs.unrealircd.org/, мой личный, к сожалению, не доступен для сторонних пользователей :)
              0
              мне нравиться
              redmine
              www.redmine.org/
                +1
                Извените, может немного не в тему. Чем различаются команды apt-get и aptitude? У меня в одной находились пакеты которых небыло если пользовался apt-get!
                  0
                  про это писалось множество статей на многих сайтах, под Debian у aptitude лучше работа с зависимостями, объективно это так (тестировал лично), под Ubuntu что apt-get что aptitude — дело вкуса, насколько я знаю они там работают одинаково
                    +1
                    apt-get — всего лишь транспортный агент со связкой с dpkg для регистрации пакетов в системе (в случае debian-based дистрибутивов). dselect+apt и aptitude — фронтенды к apt, соответственно, у них своё понятие о наборе выделенных к установке пакетов.
                    0
                    добавил P.S. с ссылкой на хабратопик об использовании git под Windows, сам встал на грабли, а на поиск решения времени прилично потратил
                      +1
                      Спасибо за статью, в все собираюсь, но никак не соберусь развернуть такое же под FreeBSD.
                        0
                        как только доберусь до FreeBSD, поплню статью указаниями и для этой системы :)
                          0
                          Думаю что все различия будут состоять в том, что вместо apt-get придется лазить по дереву портов и собирать пакеты.
                            0
                            расположение устанавливаемых портами/пакетами файлов всегда оставалось загадкой для каждой следующей системы :(
                        +1
                        Спасибо! Очень не хватало в рунете такой статьи.
                          0
                          для тех, кто предпочитает ssh-доступ, а не webdav — есть чрезвычайно удобный gitosis, который позволяет в пять минут поднять git-сервер и затем управлять им через текстовый конфиг и сам git. Плюс даёт возможность полного контроля доступа — public-репозиторий, закрытый репозиторий, и т.п. Рекомендую.
                            0
                            То, что надо, спасибо.
                            0
                            А я использую gitolite + redmine, удобно получилось
                            chodex.ru/ustanovka-gitolite/
                              0
                              Выручайте, чот не получается довести все до ума. Gitweb генерирует ссылки на репозитории вида git.domain.tld/reponame.git по которым 404. При этом git.domain.tld/git/reponame.git/somefilename — показывает содержимое нужного файла.
                                0
                                А, может быть это тоже имеет значение для проблемы: по ссылке git.domain.tld/git/ не запрашивается логин-пароль, хотя все сделано как по тексту.
                                0
                                Извиняюсь за, возможно, глупый вопрос… Как будет выглядеть ссылка на репозиторий, лежащий на сервере? Я в /www/git.domain.tld/htdocs/git/ сделал git clone одного репозитория, он отображается на git.domain.tld, а как к нему доступ получить чтобы уже со своего сервера его клонировать не разобрался… =(

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое