Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).
Git und cgit
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).
Git ist ein Versionsverwaltungssystem: Es speichert jeden Stand deiner Dateien und macht Änderungen nachvollziehbar. cgit ist eine schlanke Weboberfläche, mit der du Git-Repositories im Browser ansehen kannst, also Dateien, Änderungsverlauf und Unterschiede. Zusammen ergeben sie einen einfachen, lokalen Git-Server.
Vorbemerkungen
- Installation über apt: Git und cgit sind beide in den Ubuntu-Paketquellen enthalten.
- Voraussetzung für cgit: nginx ist nach der Anleitung installiert und läuft. cgit ist ein CGI-Programm. nginx kann solche Programme nicht selbst starten, deshalb übernimmt das der kleine Hilfsdienst fcgiwrap.
- Aufbau: Die zentralen Repositories liegen als sogenannte Bare-Repositories (ohne Arbeitskopie, Name endet auf
.git) im Ordner/srv/git. Dort liest cgit sie aus. Gearbeitet wird in Klonen, z. B. in deinem Home-Verzeichnis. - Nur lesen im Browser: cgit zeigt Repositories an und erlaubt das Klonen über HTTP. Änderungen hochladen (
git push) geht in dieser Anleitung nur lokal über den Dateipfad.
Git installieren und einrichten
1. Paketlisten aktualisieren
Damit apt die aktuellen Versionen von Git und cgit aus den Ubuntu-Paketquellen kennt.
sudo apt update
2. Git installieren
Installiert Git. Unter Ubuntu ist es oft schon vorhanden, dann meldet apt das nur.
sudo apt install git
Prüfen: Die Versionsnummer wird angezeigt, z. B. git version 2.53.0.
git --version
3. Namen festlegen
Git schreibt zu jeder gespeicherten Änderung (Commit), wer sie gemacht hat. --global speichert die Einstellung für alle deine Repositories in der Datei ~/.gitconfig.
git config --global user.name "Dein Name"
4. E-Mail-Adresse festlegen
Gehört ebenfalls zu jedem Commit. Verwende die Adresse, die du auch bei Diensten wie GitHub oder GitLab angibst.
git config --global user.email "du@example.org"
5. Namen des Hauptzweigs festlegen
Neue Repositories bekommen damit den Hauptzweig main statt master. Das entspricht dem heute üblichen Standard.
git config --global init.defaultBranch main
Prüfen: Die Ausgabe enthält die drei Einstellungen.
git config --global --list
Zentrales Repository anlegen
6. Ordner für die Repositories anlegen
/srv ist unter Linux für Daten gedacht, die ein Dienst bereitstellt, hier cgit.
sudo mkdir -p /srv/git
7. Ordner deinem Benutzer übergeben
So kannst du ohne sudo Repositories anlegen und Änderungen hochladen. cgit läuft als Benutzer www-data und braucht nur Leserechte. Die hat es, weil neue Dateien unter Ubuntu für alle lesbar angelegt werden.
sudo chown "$USER":"$USER" /srv/git
8. Bare-Repository anlegen
Legt das leere, zentrale Repository test.git an. --bare bedeutet: Es enthält nur die Versionsgeschichte, keine Arbeitskopie zum Bearbeiten.
git init --bare /srv/git/test.git
9. Beschreibung eintragen
cgit zeigt den Inhalt der Datei description in der Übersicht aller Repositories an.
nano /srv/git/test.git/description
Git hat die Datei mit einem englischen Platzhaltertext angelegt. Lösche diese Zeile mit Strg+K und füge stattdessen ein (im Terminal mit Strg+Umschalt+V). Speichere mit Strg+O und Enter und beende nano mit Strg+X:
Test-Repository für cgit
10. Repository klonen
Erstellt eine Arbeitskopie in ~/test. Die Meldung, dass ein leeres Repository geklont wurde, ist hier richtig.
git clone /srv/git/test.git ~/test
11. Erste Datei anlegen
Eine README-Datei in Markdown. cgit zeigt sie später auf der Seite about des Repositorys an.
nano ~/test/README.md
Füge diesen Inhalt ein (im Terminal mit Strg+Umschalt+V), speichere mit Strg+O und Enter und beende nano mit Strg+X:
# Test
Hallo **cgit**.
12. Datei für den Commit vormerken
git add nimmt die Datei in den nächsten Commit auf. -C ~/test führt den Befehl im Ordner ~/test aus, ohne dass du hineinwechseln musst.
git -C ~/test add README.md
13. Commit erstellen
Speichert den vorgemerkten Stand mit einer kurzen Beschreibung dauerhaft in der Versionsgeschichte.
git -C ~/test commit -m "Erster Commit"
14. Änderungen ins zentrale Repository hochladen
Überträgt den Commit nach /srv/git/test.git. -u merkt sich die Verbindung, danach genügt künftig git push.
git -C ~/test push -u origin main
Prüfen: Das zentrale Repository enthält den Commit „Erster Commit“.
git -C /srv/git/test.git log --oneline
cgit einrichten
15. cgit und Hilfsprogramme installieren
cgit– die Weboberflächefcgiwrap– startet cgit im Auftrag von nginxpython3-markdown– stellt README-Dateien in Markdown formatiert darpython3-pygments– färbt Quellcode in der Dateiansicht ein
cgit empfiehlt den Webserver Apache. Weil nginx schon installiert ist, gilt diese Empfehlung als erfüllt, und Apache wird nicht mitinstalliert.
sudo apt install cgit fcgiwrap python3-markdown python3-pygments
Prüfen: Die Ausgabe lautet active. fcgiwrap wartet damit auf Anfragen von nginx.
systemctl is-active fcgiwrap.socket
16. cgit konfigurieren
Ersetzt die Einstellungsdatei /etc/cgitrc. Die Angaben bewirken Folgendes:
css,logo,favicon– Adressen von Stildatei und Bildernroot-title,root-desc– Überschrift und Untertitel der Startseitevirtual-root=/– kurze Adressen wie/test/log/statt/?url=test/log/enable-http-clone,clone-url– Repositories lassen sich über HTTP klonen, die Adresse wird auf jeder Repository-Seite angezeigtreadme,about-filter– zeigtREADME.mdformatiert auf der Seite about ansource-filter– Syntaxhervorhebung für Quellcoderemove-suffix=1– zeigtteststatttest.gitanscan-path– Ordner, in dem cgit nach Repositories sucht. Diese Zeile muss am Ende stehen, weil nur die Einstellungen darüber für die gefundenen Repositories gelten.
sudo nano /etc/cgitrc
Die Datei hat schon Inhalt, der vollständig ersetzt wird. Lösche ihn zuerst: Alt+\ springt an den Anfang, Alt+A beginnt eine Markierung, Alt+/ springt ans Ende, Strg+K schneidet alles Markierte aus. Füge diesen Inhalt ein (im Terminal mit Strg+Umschalt+V), speichere mit Strg+O und Enter und beende nano mit Strg+X:
css=/cgit.css
logo=/cgit.png
favicon=/favicon.ico
root-title=Meine Git-Repositories
root-desc=Lokaler Git-Server auf dem Entwicklungsrechner
virtual-root=/
enable-http-clone=1
clone-url=http://localhost:8086/$CGIT_REPO_URL
readme=:README.md
about-filter=/usr/lib/cgit/filters/about-formatting.sh
source-filter=/usr/lib/cgit/filters/syntax-highlighting.py
remove-suffix=1
scan-path=/srv/git
17. nginx-Konfiguration für cgit anlegen
cgit läuft auf Port 8086 und ist nur vom eigenen Rechner aus erreichbar. Die festen Dateien, die cgit mitbringt (Stildatei, Skript, Logo und Symbol im Ordner /usr/share/cgit), liefert nginx direkt aus. Alle anderen Adressen reicht nginx über fcgiwrap an cgit weiter: SCRIPT_FILENAME nennt das Programm, das fcgiwrap starten soll, und PATH_INFO übergibt die aufgerufene Adresse. Daraus liest cgit ab, welches Repository und welche Ansicht gemeint sind, z. B. /test/log/.
sudo nano /etc/nginx/sites-available/cgit
Füge diesen Inhalt ein (im Terminal mit Strg+Umschalt+V), speichere mit Strg+O und Enter und beende nano mit Strg+X:
server {
listen 127.0.0.1:8086;
server_name localhost;
# Stildatei, Skript, Logo und Symbol bringt cgit mit, nginx liefert sie direkt aus
location ~ ^/(cgit\.(css|js|png)|favicon\.ico|robots\.txt)$ {
root /usr/share/cgit;
}
# Alle übrigen Adressen beantwortet cgit, gestartet über fcgiwrap
location / {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi;
fastcgi_param PATH_INFO $uri;
fastcgi_pass unix:/run/fcgiwrap.socket;
}
}
18. Konfiguration aktivieren
Ein Link in sites-enabled sorgt dafür, dass nginx die neue Seite lädt.
sudo ln -s /etc/nginx/sites-available/cgit /etc/nginx/sites-enabled/cgit
19. nginx-Konfiguration testen
Findet Tippfehler, bevor nginx neu geladen wird.
sudo nginx -t
Prüfen: Die Ausgabe endet mit test is successful.
20. nginx neu laden
Übernimmt die Konfiguration, ohne laufende Verbindungen abzubrechen.
sudo systemctl reload nginx
Testen
21. Startseite aufrufen
Prüft, ob cgit antwortet und das Repository findet.
curl -s http://localhost:8086/ | grep "Test-Repository"
Prüfen: Die Ausgabe enthält Test-Repository für cgit. Im Browser zeigt http://localhost:8086 die Liste der Repositories. Ein Klick auf test öffnet das Repository, unter about erscheint die formatierte README-Datei, unter log der Commit.
22. Über HTTP klonen
Prüft, ob das Klonen über die Weboberfläche funktioniert. Der Klon landet in ~/test-klon.
git clone http://localhost:8086/test ~/test-klon
Prüfen: Der Klon enthält den Commit „Erster Commit“.
git -C ~/test-klon log --oneline
23. Test-Klon wieder löschen
Der Klon aus dem vorigen Schritt wird nicht mehr gebraucht.
rm -rf ~/test-klon
Weitere Repositories hinzufügen
Jedes Bare-Repository, das du in /srv/git anlegst, erscheint automatisch in cgit, genau wie in den Schritten 8 und 9. Ein bestehendes Projekt lädst du so hoch: Leeres Bare-Repository anlegen, dann im Projektordner das Ziel eintragen und hochladen:
git remote add origin /srv/git/projekt.git
git push -u origin main
Deinstallieren
1. Seite in nginx deaktivieren
Löscht den Link aus sites-enabled.
sudo rm -f /etc/nginx/sites-enabled/cgit
2. nginx-Konfigurationsdatei löschen
Löscht die Konfigurationsdatei der Seite.
sudo rm -f /etc/nginx/sites-available/cgit
3. nginx neu laden
Übernimmt das Abschalten der Seite.
sudo systemctl reload nginx
4. cgit und Hilfsprogramme entfernen
purge entfernt auch die Einstellungsdatei /etc/cgitrc. python3-pygments bleibt installiert, weil es auch andere Programme nutzen.
sudo apt purge cgit fcgiwrap python3-markdown
5. Nicht mehr benötigte Pakete entfernen
Entfernt Abhängigkeiten, die nur für cgit installiert wurden.
sudo apt autoremove
6. Repositories und Arbeitskopie löschen (optional)
Achtung: Löscht alle zentralen Repositories in /srv/git und die Arbeitskopie ~/test endgültig. Nur ausführen, wenn du sie nicht mehr brauchst oder vorher gesichert hast.
sudo rm -rf /srv/git ~/test
7. Git entfernen (optional)
Git brauchen viele andere Programme und Anleitungen (z. B. MediaWiki). Entferne es nur, wenn du sicher bist, dass du es nicht mehr brauchst. Deine persönlichen Einstellungen in ~/.gitconfig bleiben dabei erhalten.
sudo apt purge git
Prüfen: Unter http://localhost:8086 antwortet kein Webserver mehr, curl meldet einen Verbindungsfehler.
curl -sI http://localhost:8086/
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).
Open Knowledge (Freies Wissen): Alle Texte stehen unter der freien Lizenz Creative Commons Namensnennung – Weitergabe unter gleichen Bedingungen 4.0 International (CC BY-SA 4.0) und können frei gelesen, geteilt und weiterverarbeitet werden.