changeset 122:c8f447c2b95d

Trimmed slides.
author Martin Geisler <mg@aragost.com>
date Tue, 23 Mar 2010 13:55:47 +0100
parents 7e3e7de00f9d
children 5a7ad73b6a02
files mercurial.tex
diffstat 1 files changed, 0 insertions(+), 329 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial.tex
+++ b/mercurial.tex
@@ -128,52 +128,6 @@
   \end{itemize}
 \end{frame}
 
-\subsection{Basic Concepts}
-
-\begin{frame}{The Repository}
-  The database that holds your history:
-  \begin{itemize}
-  \item series of project-wide snapshots
-  \item called changesets or revisions in Mercurial
-  \item changesets encapsulate a delta between two snapshots
-  \item each changeset has a parent changeset
-  \end{itemize}
-
-  \begin{center}
-    \begin{tikzpicture}
-      \node[repository, label=above:Repository] (repository) {};
-      \node[rev] (r1) at (-7mm, 0) {};
-      \node[rev] (r2) at (0, 0) {};
-      \node[rev] (r3) at (7mm, 0) {};
-      \draw[->] (r1) -- (r2);
-      \draw[->] (r2) -- (r3);
-    \end{tikzpicture}
-  \end{center}
-\end{frame}
-
-\begin{frame}{The Working Directory}
-  Holds your files:
-  \begin{center}
-    \begin{tikzpicture}[node distance=40mm]
-      \node[working copy, label=above:Alice] (a) {
-        hello.c\\
-        Makefile
-      };
-      \node[working copy, label=above:Bob, text width=20mm,
-        right=of a.north, anchor=north] {
-        hello.c\\
-        goodbye.c\\
-        Makefile
-      };
-    \end{tikzpicture}
-  \end{center}
-  \begin{itemize}
-  \item you edit files in the working directory
-  \item reflects a changeset (the parent changeset)
-  \item also called a working copy
-  \end{itemize}
-\end{frame}
-
 \begin{frame}{Branches}
   A key concept:
   \begin{itemize}
@@ -312,80 +266,6 @@
   \end{center}
 \end{frame}
 
-
-\subsection{Historic Context}
-
-\begin{frame}{Revision Control System (RCS)}
-  Version control from the 1980s:
-  \begin{itemize}
-  \item store changes (date, commit message)
-  \item browse history
-  \end{itemize}
-
-  \bigskip
-
-  \begin{tikzpicture}[node distance=5mm]
-    \begin{scope}[start chain=hello]
-      \node<2->[on chain,rev,,label=left:hello.c:] {};
-      \node<3->[on chain,rev,join] {};
-      \node<4->[on chain,rev,join] {};
-      \node<6->[on chain,rev,join] {};
-    \end{scope}
-    \begin{scope}[start chain]
-      \node<2->[on chain,rev,label=left:Makefile:,below=of hello-begin] {};
-      \node<5->[on chain,rev,join] {};
-      \node<7->[on chain,rev,join] {};
-    \end{scope}
-  \end{tikzpicture}
-\end{frame}
-
-\begin{frame}{Concurrent Versions System (CVS)}
-  Version control in the 1990s:
-  \begin{itemize}
-  \item collaboration over the network
-  \item several working copies
-  \item one central repository
-  \end{itemize}
-
-  \pause
-
-  \begin{center}
-  \begin{tikzpicture}
-    \begin{scope}[start chain, node distance=18mm]
-      \node[working copy, on chain, label=above:Alice] (Alice)
-           {hello.c\\ Makefile};
-      \node[repository, on chain, label=above:CVS Server] (repository) {};
-      \node[working copy, on chain, label=above:Bob] (Bob)
-           {hello.c\\ Makefile};
-    \end{scope}
-
-    \begin{scope}[scale=0.5,transform shape, node distance=5mm,
-        shift=(repository.center), yshift=4mm, xshift=3mm]
-      \begin{scope}[start chain=hello]
-        \node[on chain,rev,,label=left:hello.c:] {};
-        \node[on chain,rev,join] {};
-      \end{scope}
-      \begin{scope}[start chain]
-        \node[on chain,rev,label=left:Makefile:,below=of hello-begin] {};
-        \node<3->[on chain,rev,join] {};
-      \end{scope}
-    \end{scope}
-
-    \draw<3>[->, short] (Alice) -- node[above] {commit} (repository);
-    \draw<4>[->, short] (repository) -- node[above] {update} (Bob);
-  \end{tikzpicture}
-  \end{center}
-\end{frame}
-
-\begin{frame}{So, everything is good?}
-  CVS has many limitations:
-  \begin{itemize}
-  \item no atomic commits
-  \item no rename information
-  \item branches? I hope you have a CVS guru at hand\dots
-  \end{itemize}
-\end{frame}
-
 \begin{frame}{Subversion (SVN)}
   Version control from this millennia --- \emph{``CVS done right''}:
   \begin{itemize}
@@ -396,56 +276,6 @@
   \end{itemize}
 \end{frame}
 
-\subsection{Subversion in Detail}
-
-\begin{frame}{Merging in Subversion}
-  SVN is a centralized system:
-  \begin{center}
-    \begin{tikzpicture}[node distance=1cm]
-      \node[repository, label=above:Repository] (repository) {};
-      \node[rev] (r1) at (-7mm, 0) {};
-      \node[rev] (r2) at (0, 0) {};
-      \node[rev] (r3) at (7mm, 0) {};
-      \draw[->] (r1) -- (r2);
-      \draw[->] (r2) -- (r3);
-
-      \node[working copy, label=below:Alice, left=of repository] (a) {
-        hello.c\\
-        Makefile
-      };
-      \node[working copy, label=below:Bob, below left=of repository] (b) {
-        hello.c\\
-        Makefile
-      };
-      \node[working copy, label=below:Carla, below=of repository] (c) {
-        hello.c\\
-        Makefile
-      };
-
-      \node[working copy, label=below:Dan, below right=of repository] (d) {
-        hello.c\\
-        Makefile
-      };
-
-      \node[working copy, label=below:Eve, right=of repository] (e) {
-        hello.c\\
-        Makefile
-      };
-
-      \draw[<->, short] (a) -- (repository);
-      \draw[<->, short] (b) -- (repository);
-      \draw[<->, short] (c) -- (repository);
-      \draw[<->, short] (d) -- (repository);
-      \draw[<->, short] (e) -- (repository);
-    \end{tikzpicture}
-  \end{center}
-
-  \begin{itemize}
-  \item merging takes place in client
-  \item merging takes place on server(!)
-  \end{itemize}
-\end{frame}
-
 \begin{frame}{SVN Merge in Client}
   When you do \cmd{svn update}, you merge:
   \begin{itemize}
@@ -463,35 +293,6 @@
   \end{itemize}
 \end{frame}
 
-\begin{frame}{Mixed Revisions?!}
-  SVN lets you work with an \alert{inconsistent} working copy:
-  \begin{itemize}
-  \item Alice and Bob have revision 1
-  \item Alice changes \path{hello.c} $\to$ revision 2
-  \item Bob changes \path{Makefile} $\to$ \alert{revision 3}
-  \item \alert{server merged} Bob's change into revision 2
-  \end{itemize}
-
-  \pause
-
-  They both have mixed revisions in their working copies:
-  \begin{center}
-    \begin{tikzpicture}
-      \tikzstyle{working copy}+=[text width=25mm]
-      \node[working copy, label=below:Alice] (a) {
-        hello.c (r2)\\
-        Makefile (r1)
-      };
-      \node[working copy, label=below:Bob, right=of a] (b) {
-        hello.c (r1)\\
-        Makefile (r3)
-      };
-    \end{tikzpicture}
-  \end{center}
-
-  Difficult for Carla to reproduce either working copy.
-\end{frame}
-
 \begin{frame}{Server-Side Merges}
   Mixed revisions are a result of allowing server-side merges
   \begin{itemize}
@@ -575,61 +376,6 @@
 
 \end{frame}
 
-%% \begin{frame}{Thinking Distributed}
-%%   Natural solution to SVN branch situation:
-%%   \begin{itemize}
-%%   \item make merges explicit, which requires
-%%   \item branches as first-class objects
-%%   \end{itemize}
-%%
-%%   \pause
-%%
-%%   \begin{center}
-%%     \begin{tikzpicture}
-%%       \begin{pgfonlayer}{foreground}
-%%         \begin{scope}[thick, node distance=4mm]
-%%           \node[rev] (r1) {};
-%%           \node[rev, right=of r1] (r2) {};
-%%           \node[rev, right=of r2] (r3) {};
-%%           \draw[->] (r1) -- (r2);
-%%           \draw[->] (r2) -- (r3);
-%%
-%%           \node[rev, below=of r1] (r4) {};
-%%           \node[rev, right=of r4] (r5) {};
-%%           \node[rev, right=of r5] (r6) {};
-%%           \draw[->] (r4) -- (r5);
-%%           \draw[->] (r5) -- (r6);
-%%         \end{scope}
-%%       \end{pgfonlayer}
-%%
-%%       \node[draw, fill=blue!60, fit=(r1) (r2) (r3)] (trunk) {};
-%%       \node[draw, fill=blue!30, fit=(r4) (r5) (r6)] (bob) {};
-%%
-%%       \begin{pgfonlayer}{background}
-%%         \node[thick, repository, inner sep=10pt,
-%%           label=above:Repository, fit=(trunk) (bob)] {};
-%%       \end{pgfonlayer}
-%%
-%%       \node[working copy, label=below:Alice, left=of trunk] (a) {
-%%         hello.c\\
-%%         Makefile
-%%       };
-%%       \node[working copy, label=below:Bob, below=of bob] (b) {
-%%         hello.c\\
-%%         Makefile
-%%       };
-%%       \node[working copy, label=below:Carla, right=of trunk] (c) {
-%%         hello.c\\
-%%         Makefile
-%%       };
-%%
-%%       \draw[<->] (a) -- (trunk);
-%%       \draw[<->] (b) -- (bob);
-%%       \draw[<->] (c) -- (trunk);
-%%     \end{tikzpicture}
-%%   \end{center}
-%% \end{frame}
-
 
 \section{Using Mercurial}
 
@@ -784,62 +530,6 @@
   \end{center}
 \end{frame}
 
-\begin{frame}{Pull Workflow}
-  \tikzstyle{rev}+=[on chain, minimum size=5mm, font=\small]
-  \tikzstyle{a}=[rev, draw=yellow!50!black!50, bottom color=yellow!50!black!20]
-  \tikzstyle{b}=[rev, draw=green!30!black!50, bottom color=green!30!black!20]
-  \tikzstyle{c}=[rev, draw=blue!50!black!50, bottom color=blue!50!black!20]
-  \tikzstyle{join-above}=[out=0, in=240]
-  \tikzstyle{join-below}=[out=-90, in=180]
-  \tikzset{node distance=8mm and 10mm, on grid}
-
-  People have read-only access (e.g., \cmd{hg serve}):
-  \medskip
-
-  \begin{tikzpicture}
-    \begin{scope}[start chain=alice]
-      \node[rev,on chain,label=above:Alice] {0};
-      \begin{scope}[start branch=bob]
-        \node<5->[b,on chain=going below right, join=by join-below] {1};
-      \end{scope}
-      \node<2->[a,join] {1};
-      \node<3->[a,join] {2};
-      \node<6->[a,join,join=with alice/bob-end by join-above] {3};
-    \end{scope}
-
-    \begin{scope}[start chain=bob, shift={(6, 0)}]
-      \node[rev,label=above:Bob] {0};
-      \node<4->[b,join] {1};
-    \end{scope}
-
-    \begin{scope}[start chain=carla, shift={(2, -3)}]
-      \node[rev,label=above:Carla] {0};
-      \begin{scope}[start branch=bob]
-        \node<9->[b,on chain=going below right, join=by join-below] {1};
-      \end{scope}
-      \begin{scope}[start branch=alice]
-        \node<11->[a,join=by join-below,below=of carla/bob-2] {1};
-        \node<11->[a,join] {2};
-        \node<11->[a,join,join=with carla/bob-end by {out=0, in=120}] {3};
-      \end{scope}
-
-      \node<7->[c,join] {1};
-      \node<8->[c,join] {2};
-      \node<10->[c,join] {3};
-      \node<12->[c,join, join=with carla/alice-end by {out=0, in=-90}] {4};
-
-      \node<1-5>[fit=(alice-begin) (alice-end)] (A) {};
-      \node<6->[fit=(alice-begin) (alice-end) (alice/bob-end)] (A) {};
-      \node[fit=(bob-begin) (bob-end)] (B) {};
-      \node[fit=(carla-begin) (carla-end)] (C) {};
-
-      \tikzstyle{every path}=[->, short]
-      \draw<5> (B) -- node[below] {\cmd{pull}} (A);
-      \draw<9> (B) -- node[below right] {\cmd{pull}} (C);
-      \draw<11> (A) -- node[above right] {\cmd{pull}} (C);
-    \end{scope}
-  \end{tikzpicture}
-\end{frame}
 
 \subsection{Using History}
 
@@ -1164,25 +854,6 @@
 
 \section{Wrapping Up}
 
-\subsection{Unsolved Problems}
-
-\begin{frame}{Unsolved Problems}
-  DVCSs generally have problems with
-  \begin{itemize}
-  \item large binary files
-  \item retrieving only a sub-tree (narrow clones)
-  \item retrieving only recent history (shallow clones)
-  \end{itemize}
-
-  Some more Mercurial specific problems are:
-  \begin{itemize}
-  \item it is fairly easy to create conflicts in \path{.hgtags} files
-  \item filename encodings across different filesystems
-  \end{itemize}
-\end{frame}
-
-\subsection{Conclusion}
-
 \begin{frame}{Mercurial in a Nutshell}
   Mercurial changes the way you develop:
   \begin{itemize}