# Tutorial Version Control, Build Automation ASE WS 2022/23 # Rückschau ## Cowsay-Aufgabe Write the following Bash script: **say_count.sh** which does the following: * check whether the `cowsay` command is available on the system * if not, download the Debian package from the Debian *unstable* repo and install it * download the command-line mystery (https://github.com/veltman/clmystery/archive/refs/heads/master.zip) and unpack it into a temporary directory * find all files which contain the word "Duchess" and let the cow say how many lines each file has * clean up, i.e. remove the downloaded files and uninstall `cowsay` ## Architektur-Diagramme (wir schauen mal gemeinsam Beispiele an) ## Exkurs ChatGPT (Vorschau auf 'AI in SE') # Version Control Was Du können bzw. verstanden haben solltest: * Grundlagen Versionskontrolle mit Git auf der Kommandozeile (Repo einrichten oder klonen, Commits, Push/Pull) ## Setup Wir arbeiten wie beim letzten Mal als Nutzer `root` auf einem 'disposable root server' [via segfault.net](https://blog.thc.org/disposable-root-servers). ssh root@segfault.net # Password is 'segfault' **Achtung:** Der Server ist nicht sicher - keine vertraulichen Infos/Passwörter dort eintippen Erster Schritt auf dem Server: Informationen zu Netzwerk-Schnittstellen prophylaktisch in einen Text-Editor kopieren Zweiter Schritt: tmate installieren und ausführen. apt install tmate tmate `tmate` startet eine `tmux`-Session und gibt Pfade/Befehle aus, mit denen man der Session remote beitreten kann. Diese Infos am Besten auch in einem Texteditor speichern und 'q' drücken. ## Git-Basics Finde heraus, was folgende Befehle machen: * git init * git clone * git commit (--amend) * git push / pull * git reset (--hard) * git checkout (-b) * git tag * git log * git blame * git bisect * git cherry-pick * [git absorb](https://github.com/tummychow/git-absorb) Bearbeitet zu zweit so viele Git Katas von https://github.com/eficode-academy/git-katas wie Ihr innerhalb von 15 Minuten schafft. **Aufgabe:** * Bearbeite die restlichen Git-Katas von https://github.com/eficode-academy/git-katas * Bearbeite das Tutorial zu Git Branches: https://learngitbranching.js.org/ ## Git Workflows Notwendige Vorkenntnisse: Git Basics (Raphael demonstriert ein bisschen was zu GitLab und CI/CD) **Aufgabe:** * lies https://www.atlassian.com/continuous-delivery/continuous-integration und die Unter-Kapitel * lies die GitLab-Dokumentation zu CI/CD * Lege in der GitLab-Gruppe ASE22WS ein neues Projekt an * Entwickle eine gut dokumentierte FizzBuzz-Anwendung in Python mit mehreren Commits. Erweitere sie auf beliebige Wörter und füge Logging oder ein anderes tolles Feature hinzu. * Baue eine CI/CD-Pipeline, die automatisch die Dokumentation der Anwendung erzeugt und Tests laufen lässt. (Tipp: verwende das Python-Template von GitLab) ## Alternative Versionskontrollsysteme Git ist inzwischen das meistverbreitete Werkzeug zur Versionskontrolle. Es gibt allerdings einige Alternativen, die eleganter, benutzerfreundlicher und/oder performanter sind. Beispiele: * [Fossil](https://www.fossil-scm.org/home/doc/trunk/www/index.wiki) von den Entwicklern von sqlite * [Mercurial](https://www.mercurial-scm.org/) (siehe auch: [Diskussion zu Facebook's Sapling](https://news.ycombinator.com/item?id=33612410)) * [Perforce](https://www.perforce.com/) / Helix Core (kommerziell, gut für Binärdateien) **Aufgabe**: * Lies Hacker-News-Kommentare zu diesen Systemen und fasse die wichtigsten Aspekte in Stichpunkten zusammen * Installiere Fossil und Mercurial, klone ein existierendes Repository und mache einen lokalen Commit in einer Datei. Vergleiche Laufzeit und Speicherbedarf informell.