Как я настраивал gitweb

Методом проб и ошибок, наконец разобрался как настроить себе на одном домене gitweb и доступ к репозиториям через HTTP. Ошибкой было то, что я считал, что достаточно одного gitweb а на деле оказалось ещё и небольшое шаманство с Апачем. За основу взята инструкция с хабрахабр.

  • Первым делом установил сами пакеты:
    aptitude install git-core gitweb
    
  • Создал каталоги для репозиториев и веб-доступа:
    mkdir -p /web/git.domain.tld/{htdocs,logs} /web/git.domain.tld/htdocs/git
    
  • Активируем модули DAV в Апаче, для доступа с помощью git:
    a2enmod dav
    a2enmod dav_fs
    a2enmod rewrite
    a2enmod env
    
  • Создаем конфигурацию gitweb:
    vim /web/git.domain.tld/gitweb.conf
    
    

    Например:

    # адрес репозиториев
    $my_uri = "http://git.domain.tld";
    # название сайта, отображается в заголовке
    $site_name = "git.domain.tld"; 
    # путь к репозиториям git на жёстком диске
    $projectroot = "/web/git.domain.tld/htdocs/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];
    
  • И на закуску самое вкусное — настройки Апача:
    <VirtualHost *:80>
            ServerName git.domain.tld
            ServerSignature Off
    
            ServerAdmin admin@git.domain.tld
    
            DocumentRoot /web/git.domain.tld/htdocs/
            ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    
            SetEnv GITWEB_CONFIG /web/git.domain.tld/gitweb.conf
            Alias /gitweb /usr/share/gitweb/
    
            RewriteEngine on
            RewriteRule ^/([a-zA-Z0-9_\-]+\.git.*)$ /cgi-bin/gitweb.cgi/$1 [L,PT]
    
            <Directory /web/git.domain.tld/htdocs>
                    Options Indexes FollowSymLinks ExecCGI
                    AllowOverride None
                    Order allow,deny
                    allow from all
            </Directory>
    
            <Location /git>
                    DAV on
                    <LimitExcept GET HEAD PROPFIND OPTIONS REPORT>
                            Require valid-user
                    </LimitExcept>
            </Location>
    
            ErrorLog /var/log/apache2/error.log
    
            <Location />
                    DirectoryIndex /cgi-bin/gitweb.cgi
    
                    AuthType Basic
                    AuthName "Version Control Server"
                    AuthUserFile /web/git.domain.tld/htusers
                    Require valid-user
            </Location>
    </VirtualHost>
    

Остается только завести пользователей в web/git.domain.tld/htusers и создавать репозитории в /web/git.domain.tld/htdocs/git. Например, создав myrepo.git (с опцией --bare) мы увидим его в списке проектов, зайдя браузером на git.domain.tld, а чтобы работать с ним через git надо будет использовать url http://git.domain.tld/git/myrepo.git/,