Einleitung

Ohne Github geht es auch. Im LAN oder über den eigenen Webserver.
Insgesamt ist die einfache Installation und Anforderung ohne weitere Benutzerrechte zum eingrenzen derer Möglichkeiten schnell erledigt.
Will man verschiedene Rechte an einzelne Benutzer vergeben wird es schon schwieriger.

Der einfache Weg

…sieht wie folgt aus:

Installation

Es werden noch weitere nützliche Tools mit installiert. In der Basis wird unter Debian nur das git Paket benötigt.

aptitude install git gitweb git-svn gitstats subversion subversion-tools

  • gitweb: Nach Einrichtung können Repositories über den Browser betrachtet werden
  • git-svn: Zum Arbeiten mit svn unter git oder zur Überführung von svn in git
  • gitstats: Statistiken eines git Repositories in HTML
  • subversion subversion-tools: Die Tools die man für svn im allgm. benötigt
  • Nützlich: gitk und git-gui: Zwei verschiedene GUIs zum Betrachten von Repositories

Git Benutzer erstellen

Es wird ein Standard Benutzer eingerichtet der sich nicht mittels Passwort anmelden darf. Über SSH mit Schlüssel allerdings schon. Dazu komme ich später.

adduser --shell /bin/bash --home /home/git --disabled-password git

Das Kommando Ausführen und den Anweisungen (Name, Telefon, Büro… können leer gelassen werden) folgen.

SSH Schlüssel Einrichten

Als nächstes müssen die öffentlichen SSH Schlüssel (id_rsa.pub) aller beteiligten Personen eingerichtet werden damit man über SSH den Git Account und seine Repositories erreichen kann.

# Zum Benutzer git wechseln
su - git

mkdir /home/git/.ssh
chmod 700 /home/git/.ssh

# öffentliche SSH Schlüssel einrichten
cat /wo/liegt/der/schlüssel/id_rsa.pub >> /home/git/.ssh/authorized_keys
cat /wo/liegt/der/nächste/schlüssel/id_rsa.pub >> /home/git/.ssh/authorized_keys

# Rechte setzen sonnst klappt die Authentifizierung nicht
chmod 600 /home/git/.ssh/authorized_keys

Repositories

In dem neuen Git Account gibt es nun noch keine Repositories. Wird gitweb verwendet empfehle ich einen Unterordner für die Projekte anzulegen damit dieser Ordner für gitweb konfiguriert werden kann.

# z.B.:
mkdir ~/projects

Neues Repository Anlegen

Ein neues und „nacktes“ Repository wird wie folgt angelegt:

cd ~/projects/
git init --bare project-1.git

P.s.: Ein mit –bare oder –mirror erzeugtes Git Repository eignet sich nicht um darin direkt zu arbeiten!

Mit git clone git@meingitserver:projects/<projektname>.git kann nun jeder dieses Projekt klonen der Zugriff zum Git Account hat und kann seine Arbeit damit machen.

Migration

Zur Überführung von Projekten könnt Ihr je nach Voraussetzung verschiedene Wege gehen.
Angenommen Ihr habt lokal ein Github Projekt und wollt erst einmal alles zentral haben bevor etwas an die Öffentlichkeit geht.
Klar, man kann von jeder Git Instanz aus auch zu Github pushen aber es soll zuerst in die Zentrale (unserem Git Server).

Man klont zunächst das Github Projekt als –mirror:

cd projects/
git clone --bare --mirror https://github.com/<username>/<projektname>.git

Für dieses Projekt soll dann künftig git@meingitserver:projects/<projektname>.git die erste Adresse für pull, fetch und push sein.

So oder so ähnlich kann mit all deinen anderen Projekten verfahren werden.

Modifizierung bestehender Repositories

Alle bestehenden Repositories auf den verschiedenen Rechnern oder bei Mitarbeitern müssen nun angepasst werden.
Github benutzt ja „origin“ als haupt remote. Da es öffentlich ist erzeuge ich ein neues „public“ remote in meiner lokalen Kopie was ja sinngemäss viel treffender ist und verwende nochmals die gleiche Github URL dafür:

login meinuser
cd /bestehendes/github/projekt
git remote add public https://github.com/<username>/<projektname>.git

Anschliessend ändere ich einfach die URL des „origin“ Zweigs zu unserem Git Server:
git remote set-url origin git@meingitserver:projects/project-1.git

Falls „origin“ bei euch anders benannt ist (bei mir ist es z.b. „master“ als remote und der „master“ branch nennt sich bei mir „stable“, dann den anderen Name verwenden! In meinem Fall also „master“.
Wichtig wäre zu prüfen ob bestehende branches immer noch auf „origin“ zeigen oder zum „public“ Zweig! Ein cat .git/config zeigt wo das remote = <hin zeigt>. Es sollte „origin“ (remote = origin) je branch dort stehen. Wenn nicht die Datei entweder von Hand editieren oder mittels git branch –help dann das neuen remote setzen.

Nun kann mit git pull | fetch | push von und zu unserem Git Server gearbeitet werden.
Mit z.B. git pull public kann der pull nach Github erfolgen um von dort Neuerungen zu ziehen.

Git-Shell Einrichten

Zwei wichtige Sachen:

  • Mit der git-shell wird der klassische SSH Zugang gesperrt. Es werden dann nur noch Git- Kommandos akzeptiert
  • Zur git-shell können Scripte zur Ausführung hinterlegt werden und zu besseren Vorbereitung legt man daher am besten schon mal den dafür vorgesehenen Ordner an: /home/git/git-shell-commands
# Optional: Für limitierte Befehlszugriffe kopiere die default scripte nach ~/git-shell-commands
sudo cp -r /usr/share/doc/git/contrib/git-shell-commands /home/git/
sudo chmod 750 /home/git/git-shell-commands/*
# Rechte setzen
sudo chown -R git:git /home/git/

# Git Shell scharf schalten
sudo chsh -s /usr/bin/git-shell git

Weiterführende Themen

Intern:

Extern:

  • Gitweb
  • Kommerziell/Closed Source: Gitlab Scheint gerade einige Konkurrenz Anbieter aufzukaufen 🙁

Quellen