Git - Versionsverwaltung

Git

Git ist eines der bekanntesten Versionskotrollsystemen unter Linux.

Informationen

Programmierer die Software erstellen, Nutzer die viel mit sich immer weider verändernden Textdateien zu tun haben - egal welcher Art (Text, HTML, ...) fragen oft wie sie Änderungen nach vielen Schritten wieder zu einem bestimmten Punkt rückgängig machen könnten, wie man mit anderen Nutzern auch über das Internet zusammen arbeiten können und ähnliches. Eine Software mit der solche und weitere Dinge möglich sind nennt sich VCS - Versionskontrollsystem.

Git ist nun eines der leistungsfähigsten solcher Systeme - nicht umsonst wird seit langem die Entwicklung des Linux-Kernels damit verwaltet - und Linus Torwalds war selbst an der Entwicklung dieser Software beteiligt.

In diesem Artikel werden wir eine Einführung in diese Software bekommen.

Was kann man verwalten?

Grob gesagt Textdateien aller Art, dazu zählen reine Textdateien (.txt), Programm-Code in Quelldateien (.c, .py, .ruby, .pl, ...), Webseiten (.php, .html, ...). Wie schon beschrieben alles worum es sich um reinen Text handelt, Bilder, kompilierte Programme, etc gehören dazu natürlich nicht.

Git installieren

Unter auf Debian basierenden Systemen wie Ubuntu, Kubuntu, Linux Mint und so weiter installieren Sie diese Software wie üblich über die Paket-Verwaltung durch das Paket "git".

Es gibt viele weitere zusätzliche Pakete die die Software erweitern, dazu suchen Sie am besten unter Synaptik (siehe voran gegangener Link) einfach nach dem Begriff "git".

Git nutzen

Zu Beginn werden wir uns einmal die lokale Nutzung ansehen, also etwa für einen einzelnen Nutzer der etwa wie ich seine HTML-Dateien verwalten will, als erstes auf dem Terminal und dann auch auf der grafischen Oberfläche. Später werden wir uns die dezentrale Nutzung über das Internet ansehen.

Git lokal nutzen

Wie schon beschrieben beginnen wir auf dem Terminal, daher werde ich auch gleich alle Schritte auf dem Terminal von Beginn an auf diesem zeigen, natürlich können Sie Verzeichnisse auch ganz einfach im grafischen Dateimanager erstellen.

Als erstes legen wir uns ein neues Verzeichnis an in dem wir später die Textdateien verwalten werden:

mkdir Homepage-Git

Nun konfigurieren wir den ersten Nutzer der unter diesem Account Zugriff hat, dabei ist es lokal egal wie viele Verzeichnisse man für Git anlegt. Ich erstelle erst einmal den Nutzer "Robert Gödl" mit der E-Mail-Adresse "robert.goedl76@gmail.com", als normaler Nutzer:

git config --global user.name "Robert Gödl"
git config --global user.email robert.goedl76@gmail.com
git config --list

Der letzte Befehl zehttps://syria.liveuamap.com/en/2019/13-march-the-opposition-forces-targeted-the-positions-ofigt den angelegte Nutzer, mit der Taste "q" beenden Sie die Ausgabe.

Wir haben noch keine Dateien in diesem Verzeichnis, sind dort trotzdem solche ist dies auch egal, die Software berücksichtigt solche nicht. Wir wechseln nun auf dem Terminal in das erstellte Verzeichnis und erstellen die Git-Datenbank:

cd Homepage-Git
git init
Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten

Dadurch wird im Projekt-Verzeichnis das versteckte Verzeichnis ".git" mit den nötigen Daten angelegt.

Jetzt können wir beginnen unsere Textdateien darin abzulegen, ich beginne ganz einfach mit diesem HTML-Dokument das Sie gerade lesen "git.html".

cp /home/robert/Homepage/ /home/robert/Homepage-Git/

Den aktuellen Zustand der Datei speichern wir nun in der Versionsverwaltung und beschreiben den ersten Eintrag mit dem Befehl:

git add git.html
git commit -m "Beginn der Kontrolle"
Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten

Nutzt man die Option "-m" nicht startet der vorkonfigurierte Texteditor mit dem man diesen Commit bearbeiten kann, den Editor kann man mit folgendem Befehl anpassen - in diesem Fall werde ich den Terminal-Editor "nano" fest legen.

git config --global core.editor nano

Nun hätten wir also den aktuellen Zustand in der Git-Datenbank gespeichert, hat man die originale Datei nun geändert kopiert man diese wieder in das Git-Verzeichnis, in diesem Fall also nach "Homepage-Git", mit:

git add git.html

zeigt man der Software die neue Version, der Befehl:

git status

zeigt uns welche Datei/en geändert wurden:

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten

Mit:

git commit -m "Erste Änderung"

kann man die Änderung wieder bezeichnen. Wann von wem Änderungen durchgeführt wurden zeigt nun der Befehl:

git log
Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten

Mit der Taste "q" beendet man diese Ausgabe.

In dieser Ausgabe sehen wir als erstes den Begriff "commit" - wer die Entwicklung des Linux-Kernels etwas verfolgt liest häufig Zeilen wie 'so und so viele Commit's wurden hinzu gefügt' - nun verstehen wir auch was dahinter steckt. Hinter diesem Begriff sehen wir eine Zeichenfolge - dies ist der Hash-Wert, im Beispiel "f633ca30bac0436e848ca044e7ae64a2177ac981", diesen braucht man in Git nun des öfteren. Wie werden wir bald sehen.

Wir haben nun gelernt wie wir eine Datei in Git einpflegen und wie wir sehen wann und von wem Änderungen vorgenommen wurden. Was wir noch wissen ist wir haben ein Verzeichnis, dieses nennt sich das Arbeitsverzeichnis, in diesem Beispiel "Homepage-Git". In diesem liegen unsere Dateien, dann gibt es noch den Stage-Bereich, diesen sehen wir nicht. Im Stage-Bereich sind nun die Unterschiede gespeichert.

Weiter haben wir nun heraus gefunden das wenn wir uns das Log anzeigen lassen hinter dem Begriff "commit" eine Zeichenfolge angezeigt wird - der Hash-Wert. Mit diesem können wir uns die Unterschiede zwischen zwei Versionen von Dateien anzeigen lassen. In diesem Beispiel - also der Log-Ausgabe von oben haben wir zwei Hash-Werte, mit dem Befehl "diff" können wir uns die Unterschiede zwischen diesen anzeigen lassen, also:

git diff f633ca30bac0436e848ca044e7ae64a2177ac981 03f2ba7a6ace7dac0bf7b2388c85fa3ffac4c1b9
Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten

Die rot markierten Bereiche sind nun die geänderten. Möchte man sich die Unterschiede in einer anderen Software ansehen, etwa einem grafischen Editor wie Kate oder Gedit legt man diesen mit dem Befehl:

git config --global diff.tool gedit

fest, in diesem Fall öffnet sich mit dem Befehl:

git difftool 03f2ba7a6ace7dac0bf7b2388c85fa3ffac4c1b9 f633ca30bac0436e848ca044e7ae64a2177ac981

die Anzeige der Unterschiede im Texteditor Gedit. Und jetzt werden wir uns noch ansehen wie wir eine Datei in einen bestimmten Zustand zurück versetzen. Auch hier benötigen wir wieder den Hash-Wert. Im Beispiel möchte ich die Datei in den Ursprungszustand zurück versetzen, hier gilt also nach meinem Beispiel der Hash-Wert "03f2ba7a6ace7dac0bf7b2388c85fa3ffac4c1b9":

git checkout 03f2ba7a6ace7dac0bf7b2388c85fa3ffac4c1b9

Hilfe

Git beinhaltet natürlich (zumindest unter auf Debian basierenden Systemen) zahlreiche Manpages, diese erreicht man mittels:

man git
man gittutorial
man giteveryday
man gitcore-tutorial

Git im Netz

Bis jetzt haben wir mit Git nur lokal gearbeitet, meist arbeiten jedoch mehr Nutzer an einem Projekt oder laden sich dieses vom Server um die daraus entstehende Software zu nutzen (siehe auch Kompilieren).

Wenn man sich das Projekt herunter laden möchte klont man so gesehen das Git-Projekt-Verzeichnis, man erhält also genau das Verzeichnis wie es auch auf dem Server der Entwickler liegt an denen diese arbeiten. Die bekanntesten Projekte liegen nun auf dem Git-Server Github, seitdem Microsoft den Dienst übernommen hat wechseln viele Projekte zu Gitlab.

Man kann natürlich auch sein eigenes Git-Repository auf seinem eigenen Rechner im Netzwerk anbieten, nutzt man jedoch einen solch großen Dienst ist man einfach für Nutzer und andere Entwickler einfacher zu finden, man braucht sich keine Gedanken über ob der Server auch immer läuft, ...

Nun wollen wir einfach einmal ein Projekt von Github klonen, nehmen wir einfach einmal den Linux-Kernel von Linus Torwalds das wir unter Torwads Linux finden, die nötige Adresse finden wir unter dem grünen Schalter "Download / Clone":

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten - im Netzwerk

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten - im Netzwerk

git clone https://github.com/torvalds/linux.git
Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten - im Netzwerk

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten - im Netzwerk

Der Befehl erzeugt nun also im aktuellen Verzeichnis ein genaues Abbild des Projekt-Verzeichnisses. Um selbst ein Projekt bei einem solchen Dienst anzulegen erstellen Sie sich beim gewünschten Dienst einen Account und besorgen sich Ihre Nutzer-Daten, dazu erhalten Sie nach der Erstellung des Projektes einen Projekt-Namen. Ich wechsle nun in mein lokales erzeugte Projekt-Verzeichnis das ich mit Git verwalte und lade dieses hoch:

git push origin https://github.com/robert/Projekt-Name.git

Die Software fragt nach dem Passwort und speichert die Daten, mit dem Befehl:

git push

laden Sie dann nur noch veränderte / neue Dateien hoch, haben Sie ein Projekt lokal geklont holen Sie sich Änderungen mit dem Befehl:

git pull

herunter.

Git grafisch

Unter auf Debian basierenden Systemen wie Ubuntu, Kubuntu, Linux Mint und so weiter ist die bekannteste grafische Oberfläche wohl Git-Cola die Sie sich über die Paket-Verwaltung durch das Paket "git-cola" installieren, nach der Installation finden Sie die Software im Anwendungsmenü im Bereich Entwicklung, alternativ nutzen Sie den Schnellstarter (Alt + F2) oder das Terminal mit dem Befehl:

git-cola
Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten - Grafisch

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten - Grafisch

Mit den entsprechenden Schaltern öffnen oder erstellen Sie ein lokales Projekt, klonen, veröffentlichen oder aktualisieren Sie eigene Projekte und vieles mehr:

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten - Grafisch

Git - Projekte mit der Versionsverwaltung Git unter Linux verwalten - Grafisch