~jan0sch/was-ist-eigentlich-darcs
Showing details for patch 7edb7a62e7282e7ec1d76308cacd9b3d0dd00636.
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}