Git - verteilte Versionswaltung von Dateien

Schritt für Schritt Anleitung

Git ist eine Software zur verteilten Versionsverwaltung von Dateien.

D.h. wenn man eine Software entwickelt oder ein Buch schreibt, kann man den aktuellen Stand verwerfen und auf eine frühere Version zurück kehren.

Mehrheitlich wird ein Dienst wie GitHub, GitLab, Bitbucket oder Gitee für die Speicherung der Projekte genutzt. Man kann jedoch auch einfach einen eigenen Server in Betrieb nehmen. Oder mit dem Dienst “Dropbox” arbeiten.

Die grosse Mehrheit verwendet GitHub. Dort werden die Texte mit Markdown (vereinfachte Auszeichnungssprache) erstellt. Alternativ unterstützt GitHub auch “AsciiDoc”

Kommandozeile (CLI) versus GUI

Es hat etwas von einem Dogma, dass man auf der Kommandozeile arbeitet, wenn man als Informatiker ernst genommen werden will. Das hat eine lange Tradition. Die ersten Entwickler hatten ihre Programme direkt für die Hardware (“Assembler”) geschrieben. Danach entstanden höhere Sprachen wie C / C++, Java oder die .NET Familie die effizientere Konzepte einbrachten.

Wenn man nicht in der Informatik arbeitet bzw. so wenig wie möglich darüber wissen will, sollte man ein Tool (GUI) einsetzen. “GitHub Desktop” ist für Einsteiger konzpiert. Dazu gibt es viele Informationen im Web. Z.B. den YouTube Channel von GitHub.

“GitHub Pages” darf hier nicht fehlen. Das Video von Kevin Workman: “GitHub Pages Hello World Tutorial” demonstriert das.

Ich arbeite seit vielen Jahren mit der Kommandozeile. Auch verschiedene Git Operationen erledige ich darüber. Die Texte erstelle ich mit dem Editor “MS Visual Studio Code”. Darüber und das arbeiten mit Markdown und Git / GitHub erstelle ich zu einem späteren Zeitpunkt ein eigenes Dokument.

Ein praktisches Beispiel für den Ablauf

Die Kommandozeile (CLI - Command Line Interface) ist immer der beste Startpunkt, um etwas von Grund auf zu verstehen. Hier verwende ich das Betriebssystem “Windows 10” und die CLI heisst “Powershell”.
Das nachfolgende Beispiel habe ich selber Schritt für Schritt durchgespielt. D.h. es sollte auf anderen Windows 10 Installationen nachvollziehbar sein. Linux (“Bash”) und MacOS (“Terminal”) haben (IMHO) dieselben GIT Befehle.
In diesem Beispiel geht es darum, ein Textdokument zu erstellen, zu ändern und mit den Änderungen zu arbeiten. “Hilfe” zu den einzelnen Git Befehlen erhält man über den Parameter “help”. Will man wissen, was der Befehl “git status” macht, ruft man diesen mit “git help status” auf. Alle Informationen zu einem Git Projekt liegen im Repository (“Repo”). Das kann man sich wie einen Container vorstellen. Man kann Git rein lokal einsetzen, ohne das man einen Onlinedienst wie Github.com nutzt.

  1. Download Git. Für Windows steht eine 32 Bit (kompatiblitätsgründe mit alter Hardware) und eine 64 Bit Variante bereit.

  2. Git installieren. D.h. die Datei “Git-2.18.0-64-bit.exe” (alternativ “Git-2.18.0-32-bit.exe”) ausführen. Einstellungen wie vorgeschlage akzeptiert. Neustart (Sicher ist sicher).

  3. Powershell (CLI) starten. Wer bisher Powershell noch nicht genutzt hat, findet z.B. auf dieser Website unter Prerequites die notwendigen Einstellungen.

  4. Zeichensatz einstellen. Damit später in einem Browser alle Zeichen korrekt dargestellt werden, muss in Powershell der Zeichensatz auf UTF8 umgestellt werden. Dazu direkt in der Powershell den Befehl “set LC_ALL=C.UTF-8” eingeben.

  5. In PS in das Verzeichnis “Dokumente” wechseln und dort ein Unterverzeichnis “DEV” anlegen. Wechsel in das Verzeichnis “DEV”.

  6. Damit mit Repos gearbeitet werden kann, gibt man den Namen des Autors sowie eine E-Mail Adresse an. Das dient rein lokal Git, damit die Versionen einem Autor zugeordnet werden kann. Es wird zu diesem Zeitpunkt in keiner Weise ausserhalb des lokalen Netzes verwendet

git config --global user.name "Maria Mustermann"
git config --global user.email "maria.mustermann@example.com"

Wenn man diese zwei Parameter nicht vorneweg setzt, wird beim ersten Commit Befehl über ein Pop-Up Fenster diese Information eingefordert.

  1. Damit ein neues Verzeichnis namens “doc” für die Repo erstellt und über Git verwaltet wird, verwendet man den Befehl “git init doc”. Wenn das Verzeichnis bereits existiert, wird dort ein Unterverzeichnis “.git” mit den Informationen zur Repo hinzugefügt.
    Git init

  2. “git status” zeigt den Status des Repo an. Typischerweise mit einem Hinweis, was als nächstes getan werden kann. Auf Bildschirmkopie sieht man farblich hervorgehobene Worte sowie in eckigen Klammern “Master”. Das ist zu diesem Zeitpunkt nicht relevant, da es die Folge eines Powershell Modules (“posh-git”) ist. Bitte ignorieren.

  3. Da das Verzeichnis leer ist, soll eine erste Textdatei namens “test.txt” erstellt werden. Mit dem Windows Befehl “fsutil” kann ich eine Textdatei im aktuellen Verzeichnis “doc” in der gewünschten Grösse - hier 1001 Byte - erstellen: “fsutil file createnew .\test.txt 1001”. Über “cat” ist zu sehen, dass die Datei effektiv leer ist. Testdatei erstellen

  4. “git status” zeigt nun einen neuen Abschnitt: “Untracked files”. Mit “git add test.txt” wird die Datei der Repo hinzugefügt. Genauer gesagt, dem Index welche die Dateien auflistet, die mit dem nächsten “Commit” Befehl übernommen werden sollen.

  5. Jeder “Commit” Befehl enthält eine Beschreibung, damit man die enthaltenen Änderungen sofort nachvollziehen kann. In diesem Beispiel könnte der Commit Befehl so aussehen: “git commit -m “test.txt erstellt”. Mit “git status” kann überprüft werden, dass die Datei wirklich hinzugefügt wurde.

  6. Danach editiere (z.B. mit Notepad) die Datei und schreibe hinein “Das ist eine Ergänzung”. Test Datei ändern

  7. “git status” zeigt auch hier an, dass die Änderung nicht getrackt wurde. D.h. auch hier muss die Datei dem Index hinzugefügt werden, damit sie im nächsten Commit Befehl berücksichtigt wird: git “add test.txt”. Danach wieder einen Commit absetzen: “git commit -a “test.txt wurde ergänzt”.

  8. Mit “git log” werden nun alle Commits angezeigt. Mit Datum, Kommentar und welcher Autor die Änderung gemacht hat.

Kommentar zu diesem Beispiel

Mit diesem Beispiel wurde gezeigt, dass Git mit den lokalen Dateien auf drei (logischen) Ebenen arbeitet:

  • “Working Dir”: Das Verzeichnis des Repo, wo Dateien hinzugefügt, gelöscht oder geändert werden
  • “Index”: Die für den nächsten Commit vorgemerkten Änderungen aus dem “Working Dir”
  • “Repository” Die Sammlung aller “scharfen” Versionen. D.h. über Commit freigegebenen Änderungen

Ausblick

Git ist nicht nur für Programmierer interessant. Dieser Blog ist mit Markdown und Git über GitHub gehostet. Für Blogs hat William Koehrsen eine Vorlage namens “Jeckyll Now” erstellt. I Artikel beschreibt er, wie man damit innert 5 Minuten einen Blog erstellt.

Spannende Repositories:

Quellen

Written on August 21, 2020