Git Server einrichten (Debian)

Aus MattWiki

Anleitung, um einen Git-Server unter Debian 8.0 und Apache 2.2 einzurichten.

Quelle: Pro Git-Handbuch v2 von https://git-scm.com/book/en/v2

Es bestehen mehrere Verfahren, um mit einem Git-Server zu kommunizieren:

  • Lokal Dateizugriff via Filesystem
  • HTTP "dumb" Bis Version 1.6.6 → Zugriff via HTTP/HTTPS nur Read-Only
  • HTTP "smart" Ab Version 1.6.6a
  • SSH
  • Git-Protokoll Ohne Authentifizierung, daher schnell und für große Repositories

Nachfolgende Anleitung bezieht sich auf SSH, und erfordert daher SSH Zugriff.


Installation

# apt-get install git gitweb hightlight

Neues leeres Repository auf Server anlegen

Wird mit dem User gemacht, in dessen Zugriffsrechtekontext alles passieren soll.

In Debian geht GitWeb auf /var/lib/git, daher sollte das Verzeichnis dort angelegt werden (Root notwendig):

# cd /var/lib/git
# mkdir project.git
# chown gituser:gituser project.git

Mit dem Git-User:

$ cd project.git
$ git init --bare
Initialized empty Git repository in /var/lib/git/project.git/
$ nano description     # Projektbeschreibung einfügen

Danach, entweder

  1. Repository mit Inhalt eines lokalen repositories befüllen oder
  2. Das Repository auf einen neuen Client herunterladen.

Serverrepository aus lokalem Repository befüllen

Dazu muss ein Repository für das Projekt lokal vorbereitet werden, und auf den Server gepusht werden.

$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ nano .git/description     # Projektbeschreibung einfügen
$ git remote add origin git@gitserver:/var/lib/git/project.git
$ git remote -v
$ git push origin master

Repository auf anderen Client runterladen

$ mkdir git
$ cd git
$ git clone git@gitserver:/var/lib/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master

GitWeb einrichten

Das GitWeb-Paket in Debian erstellt automatisch alle notwendigen Dateien.

Benötigte Apache-Module:

  • mod_alias
  • mod_cgi
  • mod_cgid

Aktivieren, falls notwendig (mod_alias ist schon aktiviert):

# a2enmod cgi
# a2enmod cgid
# service apache2 restart

Gitweb-Einstellungen sind in

# nano /etc/gitweb.conf

Dort muss ggf. angepasst werden:

$projectroot = "/var/lib/git";

Für Syntax-Highlighting des BLOB-Quelltexts ist das Debian Paket "Highlight" notwendig sowie folgende Zeile in der Conf-Datei:

$feature{'highlight'}{'default'} = [1];


Serverseitiges Backup

Konzept

  • Auf Server
    • Ein Skript zum Erstellen von Packages für alle relevanten Repositories erstellen
    • Skript als Cronjob einhängen
  • Auf Client
    • Per SSH Packages der Repositories abholen

Codebeispiel für Packageerstellung

#!/bin/bash                                                                                         
                                                                                                    
cd /var/lib/git/<repo>.git/                                                                         
git bundle create /home/<user>/gitbackup/<repo>.git --all