gitweb optimal einsetzen

Wer git verwendet wird sich auch das ein oder andere mal in der Situation vorfinden, dass man das ein oder andere Repository veröffentlichen will. Am besten natürlich mit smart http, damit auch ohne SSH Zugang geladen und geändert werden kann.

Auf einem Debian System installiert man am Besten so:

apt-get install gitolite git git-web highlight

gitolite braucht man für den ssh Zugang zu Repositories. Nach Debian Vorgaben installiert sollte man nach den Anleitungen vorgehen um das gitlolite-admin.git Repository zu clonen und die gewünschte Konfiguration einchecken zu können. Für gitweb ist nur der Pfad zum Repository und ggf. passende Berechtigungen interessant.

Hier eine passende /var/lib/gitolite/.gitolite.rc:

$GL_PACKAGE_CONF="/etc/gitolite";
$GL_PACKAGE_HOOKS="/usr/share/gitolite/hooks";
$REPO_BASE="repositories";
# notwendige Rechte
$REPO_UMASK = 0027;
$PROJECTS_LIST = $ENV{HOME} . "/projects.list";
$GL_ADMINDIR=$ENV{HOME} . "/.gitolite";
$GL_LOGT="$GL_ADMINDIR/logs/gitolite-%y-%m.log";
$GL_CONF="$GL_ADMINDIR/conf/gitolite.conf";
$GL_KEYDIR="$GL_ADMINDIR/keydir";
$GL_CONF_COMPILED="$GL_ADMINDIR/conf/gitolite.conf-compiled.pm";
$GIT_PATH="";
$GL_BIG_CONFIG = 0;
$GL_NO_DAEMON_NO_GITWEB = 0;
$GL_GITCONFIG_KEYS = "";
$HTPASSWD_FILE = "";
$RSYNC_BASE = "";
$SVNSERVE = "";
$GL_WILDREPOS = 0;
1;

Wichtig ist auch die Berechtigung auf den Ordner – dazu muss der Webserver Zugriff auf das gitolite Repository erhalten:

addgroup www-data gitolite

git-web bindet man im Apache wie folgt ein:

    # Repository Pfad
    SetEnv GIT_PROJECT_ROOT /var/lib/gitolite/repositories/
    # Zugriff auf alle Repositories erlauben
    SetEnv GIT_HTTP_EXPORT_ALL
    Alias /gitweb/static /usr/share/gitweb/static
    # kein git hook
    SetEnv GL_BYPASS_UPDATE_HOOK
    # Download beschleunigen
    AliasMatch ^/gitweb/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$          /var/lib/gitolite/repositories/$1
    AliasMatch ^/gitweb/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/lib/gitolite/repositories/$1
    # git-http-backend für Smart HTTP Anfragen
    ScriptAliasMatch \
            "(?x)^/gitweb/(.*/(HEAD | \
                            info/refs | \
                            objects/info/[^/]+ | \
                            git-(upload|receive)-pack))$" \
            /usr/lib/git-core/git-http-backend/$1
    # Gitweb
    ScriptAlias /gitweb /usr/share/gitweb/gitweb.cgi/

    # Zugriff auf git-http-backend erlauben
    <Directory "/usr/lib/git-core/">
        Options ExecCgi
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
    # Repositories schützen durch Filter
    <LocationMatch "^/gitweb/secret.*$">
        AuthType Basic
        AuthName "Git Access"
        AuthUserFile /etc/apache2/htpasswd-gitweb-ar
        Require valid-user
        Order allow,deny
        Allow from all
    </LocationMatch>
    # Keine weiteren Handler im gitweb static
    <Directory /usr/share/gitweb/static>
        SetHandler default-handler
    </Directory>

Damit vom Apache aus auch die Berechtigungen im gitolite stimmen müssen noch diese Anpassungen gemacht werden:

chown gitolite.gitolite /usr/lib/git-core/git-http-backend
chmod ug+s /usr/lib/git-core/git-http-backend

Die git-web.conf mit passenden Einstellungen:

# path to git projects (<project>.git)
#$projectroot = "/var/lib/git";
$projectroot = "/var/lib/gitolite/repositories/";

# directory to use for temp files
$git_temp = "/tmp";

# target of the home link on top of all pages
#$home_link = $my_uri || "/gitweb/";

# html text to include at home page
#$home_text = "indextext.html";

# file with project list; by default, simply scan the projectroot dir.
#$projects_list = $projectroot;
$projects_list = "/var/lib/gitolite/projects-web.list";

# stylesheet to use
@stylesheets = ("gitweb/static/gitweb.css");

# javascript code for gitweb
$javascript = "gitweb/static/gitweb.js";

# logo to use
$logo = "gitweb/static/git-logo.png";

# the 'favicon'
#$favicon = "static/git-favicon.png";

# git-diff-tree(1) options to use for generated patches
#@diff_opts = ("-M");
@diff_opts = ();

$feature{'blame'}{'default'} = [undef];
$feature{'pickaxe'}{'default'} = [undef];
$feature{'search'}{'default'} = [undef];
$feature{'show-sizes'}{'default'} = [1];
$feature{'highlight'}{'default'} = [1];
$feature{'avatar'}{'default'} = ['gravatar'];
$feature{'grep'}{'default'} = 1;
$feature{'snapshot'}{'default'} = ['tgz', 'gzip', 'zip'];
$feature{'snapshot'}{'override'} = 1;
$feature{'pathinfo'}{'default'} = [1];
Share

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

5DyLah

Bitte geben Sie den Text vor: