Собственный сервер 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
      хабракат!
    • +1
      респект и уважуха :), eсть офтопный вопросик может какойнить баг трекер посоветуете?
    • +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
                А я использую 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, а как к нему доступ получить чтобы уже со своего сервера его клонировать не разобрался… =(

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