Git Server einrichten (Debian): Unterschied zwischen den Versionen
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Anleitung, um einen Git-Server unter Debian 8.0 und Apache 2.2 einzurichten. | 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 == | == Installation == | ||
# apt-get install git gitweb | # 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 | |||
[[Category:Linux]] | |||
[[Category:Git]] |
Aktuelle Version vom 2. September 2017, 15:32 Uhr
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