~jan0sch/was-ist-eigentlich-darcs

Showing details for patch 7edb7a62e7282e7ec1d76308cacd9b3d0dd00636.
2023-07-02 (Sun), 3:52 PM - Jens Grassel - 7edb7a62e7282e7ec1d76308cacd9b3d0dd00636

Slides

Summary of changes
1 files added
  • slides.tex
diff -rN -u old-was-ist-eigentlich-darcs/slides.tex new-was-ist-eigentlich-darcs/slides.tex
--- old-was-ist-eigentlich-darcs/slides.tex	1970-01-01 00:00:00.000000000 +0000
+++ new-was-ist-eigentlich-darcs/slides.tex	2024-12-04 08:31:42.852074308 +0000
@@ -0,0 +1,213 @@
+\documentclass[aspectratio=1610]{beamer}
+\usetheme{metropolis}
+\usepackage[utf8]{inputenc}
+\usepackage{booktabs}
+\usepackage{lmodern}
+\usepackage{FiraSans}
+\usepackage{minted}
+%\usepackage{pgfpages}
+%\pgfpagesuselayout{4 on 1}[a4paper,border shrink=1cm,landscape]
+\title{Was ist eigentlich Darcs?}
+\date{06.07.2023}
+\author{Jens Grassel}
+\institute{Wegtam GmbH}
+\begin{document}
+  \maketitle
+
+\section{Versionsverwaltung}
+\begin{frame}[fragile]{Früher so...}
+  Wir ändern etwas und tun vorher etwas in der Art:
+  \begin{minted}{bash}
+    % cp quelltext.c quelltext.c.bak
+  \end{minted}
+  Dann ändern wir nochmal was:
+  \begin{minted}{bash}
+    % cp quelltext.c quelltext.c.bak2
+  \end{minted}
+  Und so weiter\ldots
+\end{frame}
+
+\begin{frame}{Versionsverwaltungssoftware}
+  Software nimmt uns das mittlerweile ab und es gab eine \textit{Evolution} von lokaler über zentraler zu verteilter Versionsverwaltung.
+  \begin{alertblock}{Aber welche nehmen wir?}
+    \begin{itemize}
+      \item CVS (zentral) - Bitte nicht!
+      \item SVN (zentral) - Bitte auch nicht!
+      \item Git (verteilt)
+      \item Mercurial (verteilt)
+      \item Darcs (verteilt)
+      \item Pijul (verteilt)
+      \item Das kann den ganzen Tag so weitergehen. ;-)
+    \end{itemize}
+  \end{alertblock}
+\end{frame}
+
+\section{Aber Git hat doch gewonnen!?!}
+\begin{frame}{Ja, kann man so sagen.}
+  Die Vorteile von Git:
+  \begin{itemize}
+    \item es ist sehr schnell
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{Grundlegende Abläuft mit Git}
+  Ihr kennt das sicherlich:
+  \begin{itemize}
+    \item \mintinline{bash}{edit $FILE}
+    \item \mintinline{bash}{git add $FILE}
+    \item \mintinline{bash}{git commit}
+    \item \mintinline{bash}{git push}
+    \item Argh, Fehlermeldung!
+    \item \mintinline{bash}{git fetch}
+    \item \mintinline{bash}{git rebase}
+    \item \mintinline{bash}{git push}
+  \end{itemize}
+  Und über \mintinline{bash}{git checkout / branch / switch} reden wir noch gar nicht.
+\end{frame}
+
+\begin{frame}{Auch immer beliebt...}
+  \begin{itemize}
+    \item \mintinline{bash}{git rebase / git merge}
+    \item stundenlanges Beheben von Mergekonflikten
+  \end{itemize}
+  Um fair zu sein: Das passiert eigentlich nur, wenn mehrere Leute an einem Repository arbeiten.
+  \begin{alertblock}{Aber ist das nicht der Sinn von Versionsverwaltung?}
+  \end{alertblock}
+\end{frame}
+
+\section{Was macht Darcs anders?}
+\begin{frame}{Grundlegende Abläufe mit Darcs}
+  Recht ähnlich, aber weniger:
+  \begin{itemize}
+    \item \mintinline{bash}{edit $FILE}
+    \item \mintinline{bash}{darcs record}
+    \item \mintinline{bash}{darcs push}
+    \item \mintinline{bash}{darcs pull}
+  \end{itemize}
+  Warum? $\rightarrow$ Es gibt keine \textit{Staging Area}!
+\end{frame}
+
+\begin{frame}[fragile]{Interaktion mit dem Menschen!}
+  Alle Kommandos von Darcs sind per se interaktiv!
+  \begin{minted}[fontsize=\small]{diff}
+% darcs record
+addfile ./README.md
+Shall I record this change? (1/2)  [ynW...], or ? for more options: y
+hunk ./README.md 1
++# Was ist eigentlich Darcs?
++
++Es wird das Metropolis-Theme genutzt.
++
++Die Folien können mittels `pdflatex -shell-escape slides.tex` erzeugt werden.
++
+Shall I record this change? (2/2)  [ynW...], or ? for more options: y
+Do you want to Record these changes? [Yglqk...], or ? for more options: y
+Finished recording patch 'README'
+  \end{minted}
+\end{frame}
+
+\begin{frame}{Sehr viel genauere Erfassung von Änderungen!}
+  \begin{itemize}
+    \item Patches meist zeilengenau erfaßbar
+    \item damit [fast] keine Notwendigkeit für Branches mehr
+    \item detaillierte Fragen beim Commit (record)
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{Die Lösung aller Probleme?}
+  Nein, auch Darcs hat Schwächen:
+  \begin{itemize}
+    \item das sog. "exponential merge problem"
+      \begin{itemize}
+        \item tritt eigentlich seit Version 2 nicht mehr auf
+      \end{itemize}
+    \item Konflikte bzw. deren Lösung landen nicht im Repository
+      \begin{itemize}
+        \item Patch kommt rein $\rightarrow$ Konflikte
+        \item lokal behoben
+        \item aber kann nicht per Push gesendet werden, da nicht snapshot-basiert
+      \end{itemize}
+    \item Signieren von Patches funktioniert nur wirklich mit GnuPG
+    \item darcs send schwieriger aufzusetzen als git send-email
+  \end{itemize}
+  Ersteres hatte ich noch nie und zweiteres keine 10 Mal in über 15 Jahren.
+\end{frame}
+
+\begin{frame}{Patch vs. Snapshot}
+  "patch based"
+  \begin{itemize}
+    \item nur einzelne Patches und deren Abhängigkeiten gespeichert
+    \item Reihenfolge egal, wenn gleiches Ergebnis
+    \item langsamer, da ggf. viele Berechnungen ($Zustand = \sum P$)
+  \end{itemize}
+  "snapshot based"
+  \begin{itemize}
+    \item immer der gesamte Zustand aller Dateien im Repository gespeichert
+    \item schnell, da immer "alles da"
+    \item größerer Platzbedarf (interne Komprimierung)
+  \end{itemize}
+\end{frame}
+
+\section{Was sind die Unterschiede im Alltag?}
+
+\begin{frame}{Flexibleres Arbeiten}
+  \begin{enumerate}
+    \item kleinere Patches
+      \begin{itemize}
+        \item leichter einzelne Änderungen zu Patches zusammenzufassen
+      \end{itemize}
+    \item weniger (keine) Gedanken um Merge-Konflikte
+      \begin{itemize}
+        \item a.k.a. "Bin ich auf dem aktuellen HEAD?"
+      \end{itemize}
+    \item "spontane" Zweige ("spontaneous branches")
+      \begin{itemize}
+        \item a.k.a. selektives Auswählen der Änderungen für einen Patch
+      \end{itemize}
+    \item flexiblere Tagging
+      \begin{itemize}
+        \item manuelle Auswahl der Patches, die zu einem Patch gehören sollen
+      \end{itemize}
+    \item Kommandos arbeiten auf einzelnen Änderungen ("Hunks") nicht auf ganzen Dateien
+  \end{enumerate}
+\end{frame}
+
+\begin{frame}{Weniger "Gedanken um das VCS-Tooling"}
+  \begin{itemize}
+    \item intuitivere Bedienung
+    \item kein rebase mehr, da quasi "frei Haus" mit darcs
+    \item kein internalisiertes Umschiffen von Git-Tücken mehr
+    \item Erkenntnis, das "web based pull requests" womöglich ein Fehler sind
+      \begin{itemize}
+        \item Review primär per E-Mail (machen auch viele große Git-Projekte)
+      \end{itemize}
+    \item selbst knifflige Sachen immer leicht lösbar (unrecord, revert)
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{Aber \textit{alle} nehmen Git!}
+  Dann machen wir Git etwas "darcsiger"
+  \begin{enumerate}
+    \item Anpassung des Diff-Algorithmus
+      \begin{itemize}
+        \item \mintinline{bash}{git config --global diff.algorithm histogram}
+        \item sogar besser als \textit{patience} von Darcs
+        \item gibt bessere Diffs/Patches
+      \end{itemize}
+    \item Nutzen von \mintinline{bash}{git commit -p}
+      \begin{itemize}
+        \item ermöglicht wie darcs einzelne Hunks auszuwählen, die ins Commit sollen
+      \end{itemize}
+  \end{enumerate}
+\end{frame}
+
+\begin{frame}[standout]{Fazit}
+  \begin{itemize}
+    \item macht \textit{mehr Spaß} / funktioniert für mich intuitiver
+    \item ist kein Allheilmittel (auch darcs hat Ecken und Kanten)
+    \item E-Mail als Medium für Patches wiederentdeckt ;-)
+    \item der Kopf ist freier als mit Git
+  \end{itemize}
+  \Large{Probiert es einfach mal aus, es lohnt sich!}
+\end{frame}
+\end{document}