Git und GitHub im Kontext von DH-Projekten
Christopher Pollin�Christian Steiner�Digital Humanities Craft OG
Agenda
Einführung
Git und seine Grundprinzipien
Arbeiten mit GitHub
GitHub als Software Engineering Tool
GitHub und Dokumentation
Recap und Wiederholung
Lernziele
Kennenlernen von Git-Grundlagen und grundsätzlicher Git-Workflows (anlegen, einchecken, staging, commit).
Umgang mit der Software GitHub Desktop und Anwendung grundsätzlicher Git-Workflows in GitHub.
Nutzung der Software Engineering-Möglichkeiten von GitHub (issues etc.) und Kennenlernen von Best Practices.
Nutzung der Dokumentationsmöglichkeiten innerhalb von GitHub und das Kennenlernen der Best Practices.
[Schwerpunkt nicht auf Programmierer*innen, sondern DH Projekte]
1. Block
4
45 min Git und seine Grundprinzipien
“I’m an egotistical bastard, and I name all my projects after myself. First ‘Linux’, now ‘Git’.”
– Linus Torvalds, https://de.wikipedia.org/wiki/Git [Git ~ Blödmann]
Git ist ein freies, verteiltes Versionsverwaltungssystem für Dateien.
Begriffe
Was ist eine Datei?�z.B. Text (.txt), Bild (.jpg), Musik (.mp3), XML/TEI (.xml), JavaScript (.js) …
<?xml version="1.0" encoding="UTF-8"?>�<memo>� <body>� <p>Yoda says,� “For your support thank I must!”
</p>
</body>
</memo>
<?xml version="1.0" encoding="UTF-8"?>�<memo>� <body>� <p>Yoda says, � <q>For your support thank I must!<q>
</p>
</body>
</memo>
Version 1
Version 2
Was ist eine Version?� Eine Version beschreibt den Inhalt einer Datei zu einem bestimmten Zeitpunkt. � Die Änderung einer Datei erzeugt eine neue Version.
Begriffe
Was ist Versionskontrolle?� Ermöglicht die Verwaltung verschiedener Versionen von Dateien.� Erlaubt einen “Blick zurück” durch die Versionen von Dateien.
Git ist ein freies, verteiltes Versionsverwaltungssystem für Dateien - Wie funktioniert es genau?
Lokaler Rechner
Staging
Working Directory
Commit History
memo.xml
git add memo.xml
git commit
Commit
Commit
Commit
Lokaler Rechner und Remote-Server
Staging
Commit
Commit
Commit
git push
git pull
git pull
Lokaler Rechner
Remote-Server
Git Befehle
$ git add�Datei (in ihrem gegenwärtigen Zustand) �zum nächsten Commit hinzufügen (Staging)��$ git commit�Alles was in Staging ist, kommt als Commit in das Repository (Commit History)
$ git push�Wird verwendet, um Inhalte aus einem lokalen Repository in ein Remote-Repository hochzuladen.
$ git clone�Über eine URL ein neues Repository kopieren.
$ git pull�Der pull-Befehl wird verwendet, um Inhalte aus einem Remote-Repository herunterzuladen und unverzüglich das lokale Repository zu aktualisieren, damit die Inhalte übereinstimmen.
$ git fetch�Damit werden Commits, Dateien und Verweise aus einem Remote-Repository in das lokale Repository heruntergeladen.
$ git merge�Die heruntergeladenen Dateien etc. werden mit den lokalen zusammengeführt.
Grundprinzipien von Git
2. Block
12
45 min Arbeiten mit GitHub
Command Line vs. GUI Clients
Gemeinsames Hands-On: “mein memo.xml”
Gemeinsames Hands-On: “mein memo.xml”
Wenn die neue Datei angelegt wurde, erscheinen folgende Änderungen in GitHub Desktop auf.
Jeder Commit muss immer eine Nachricht beinhalten. Damit soll ausgedrückt werden, was Sie gerade bearbeitet oder hinzugefügt haben.
Die Dateien befinden sich in der Staging Area.
Mit dem Button “Commit to main” wird git commit aktiviert und der Commit kommt in die Commit History.
Jetzt muss das Ganze noch in das Repository (Test-Training-Repo) gepusht werden - git push aktiv.
Unsere Dateien sind jetzt auf dem Server.
In der History in GitHub Desktop bzw. auf der Webseite https://github.com/chpollin/PM_DH22/tree/main/xml können wir die Commits einsehen.
$ git fetch
Gleichen Sie ab: Gibt es was Neues bei uns lokal? Gibt es etwas Neues im Repository am Server?
�
Bearbeiten Sie nun das XML-Dokument von Ihrer/Ihrem alphabetisch nächsten Kollegin/Kollegen. Fügen Sie eine Kleinigkeit hinzu, wie z.B. ein zweites <p> mit dem Text “Greetings from Christian”.�
<?xml version="1.0" encoding="UTF-8"?>�<memo>� <body>� <p>Hello Git from Christopher</p>� <p>Greetings from Christian</p>� </body>�</memo>
Es könnte jetzt zu einem Konflikt gekommen sein, weil zwei Personen gleichzeitig dieselbe Datei bearbeitet haben.
“Git can handle most merges on its own with automatic merging features. A conflict arises when two separate branches have made edits to the same line in a file, or when a file has been deleted in one branch but edited in the other. Conflicts will most likely happen when working in a team environment.”
“The Perfect Commit”
Git for Professionals Tutorial - Tools & Concepts for Mastering Version Control with Git, https://www.youtube.com/watch?v=Uszj_k0DGsg
→ nur die Dateien ankreuzen, die zum Thema passen.
→ gemeinsame Regeln definieren, was ein Commit ist. �
→ gemeinsame Regeln definieren, wie eine Commit-Message aufgebaut sein muss.
3. Block
23
45 min GitHub als Software Engineering Tool
Milestones
Beispiele
Consulting Schönberg Edition�https://github.com/chpollin/Schoenberg/issues
Interne Arbeit in DHCraft�https://github.com/DigitalHumanitiesCraft/Projects/issues
Stefan Zweig digital�https://github.com/chpollin/SZD/issues
Hands-On: Issue anlegen
“The best Issue”
Simpel, prägnant und beschreibend
Einheitliche Formatierung
Bearbeitbar / Durchführbar
Relevant
Kontext
Problem oder Idee
Lösung und nächste Schritte
How We Write Github Issues, https://wiredcraft.com/blog/how-we-write-our-github-issues/
4. Block
31
45 min GitHub und Dokumentation
Markdown
Überschriften, Text, ungeordnete Liste, Code Block
Absätze, geordnete Liste, Schriftauszeichnung (kursiv & fett)
Blockzitate, Links, Bilder, Tabellen, Inhaltsverzeichnis
README.md zur Dokumentation
Wiki: Beispiel Kodierungsregeln
Hands-On: Markdown
Erstellen Sie eine neue Wiki Page (mit ihrem Namen). Probieren Sie Markdown aus → Überschrift, Liste und eine Code Snippet (memo.xml).
5. Block
39
45 min Recap, Wiederholung, Anhang
Zusammenfassung
Lokaler Rechner
Staging
Working Directory
Commit History
memo.xml
git add memo.xml
git commit
Commit
Commit
Commit
git push
git pull
git pull
Remote-Server
git clone
mit einer Message
Branches
Commit�Update cheatsheet.md
Commit�adding xml_snippet.xml
Commit�Update cheatsheet.md
Commit�add schoenberg edition example
00dd9f48fe57728084791bb636962837f64009b6
b77361c6662a88f3d9ffb6c9932a5a114eb15300
35433b1736f1050b086a243a85f1890d5e57a1ed
34301044aeabc74273e367cfb71ed57e6fff9ad1
main
Branches und Pull request
Hands-On: eigener Branch
Erzeugen Sie einen neuen Branch mit Ihrem Namen (z.B.: “christopher”).
Nehmen Sie eine Änderung im XML/TEI vor: https://github.com/KlassikStiftungWeimar/Test-Training-Repo/tree/main/digital_edition_schoenberg_example/sample_letter
Committen Sie “lustig drauflos”, damit jede/r einen Konflikt bekommt, den wir dann bereinigen (oder auch nicht) bereinigen können.
Merge Conflicts
Merge Conflicts
“Branching Strategies”
Mainline Development
State, Releases, and Feature Branches
Git for Professionals Tutorial - Tools & Concepts for Mastering Version Control with Git, https://www.youtube.com/watch?v=Uszj_k0DGsg
Kritik an Git
Dinge, die wir nicht besprochen haben…
Git bzw. GitHub installieren
Distribution Ubuntu � Paketverwaltungstool: apt � $ apt-get install git��macOS� Xcode Kommandozeilen-Tools � $ git --version
Windows� Binärer Installationsassistent, https://git-scm.com/download/win��Oder GitHub Desktop https://desktop.github.com/ ���
51
Christopher Pollin
Geschichte, EuroMACHS, Doktorat DH
52
Christian Steiner
Translation (EN/BKS), EuroMACHS, Doktorat DH
Christopher Pollin
Geschichte, EuroMACHS, Doktorat DH