Git Server einrichten (Debian)
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
- Repository mit Inhalt eines lokalen repositories befüllen oder
- 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