\begin{frame}{Moving Changesets Around}
  \tikzstyle{rev}+=[on chain, minimum size=6mm, 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=red!50!black!50, bottom color=red!50!black!20]
  \tikzstyle{join-above}=[out=0, in=240]
  \tikzstyle{join-below}=[out=-90, in=180]
  \tikzset{node distance=10mm and 12mm, 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] {$B_1$};
      \end{scope}
      \node<2->[a,join] {$A_1$};
      \node<3->[a,join] {$A_2$};
      \node<6->[a,join,join=with alice/bob-end by join-above] {$A_3$};
    \end{scope}

    \begin{scope}[start chain=bob, shift={(7, 0)}]
      \node[rev,label=above:Bob] {0};
      \node<4->[b,join] {$B_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] {$B_1$};
      \end{scope}
      \begin{scope}[start branch=alice]
        \node<11->[a,join=by join-below,below=of carla/bob-2] {$A_1$};
        \node<11->[a,join] {$A_2$};
        \node<11->[a,join,join=with carla/bob-end by {out=0, in=120}] {$A_3$};
      \end{scope}

      \node<7->[c,join] {$C_1$};
      \node<8->[c,join] {$C_2$};
      \node<10->[c,join] {$C_3$};
      \node<12->[c,join, join=with carla/alice-end by {out=0, in=-90}] {$C_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}
