Mercurial > evolve-talk
view talk.tex @ 23:ba454c7497f6
Remove hg next call, it's unnecessary
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Sun, 09 Mar 2014 19:52:49 -0400 |
parents | 86607675e0a8 |
children | 95b79f82a200 |
line wrap: on
line source
%%% BEGIN BEAMER PREAMBLE %%% \documentclass[green]{beamer} \usepackage{bm, fourier, anyfontsize} \mode<presentation> { \usetheme{boxes} \usecolortheme{crane} } \beamertemplatenavigationsymbolsempty \usepackage{times} %%% END BEAMER PREAMBLE %%% %%% BEGIN METADATA %%% \author{Jordi G. H. $\langle$jordigh@octave.org$\rangle$ \\ ~ \\ hg clone http://hg.octave.org/evolve-talk} \title{Changeset Evolution in Mercurial} \subtitle{Edit commits as a team!} \date{} %%% END METADATA%%% \begin{document} \begin{frame} \titlepage \end{frame} \begin{frame} {\Large \textbf{Problems that Evolve is trying to solve}} \pause \textbf{Problem 1}: Recovering from upstream rewrite (rebase) \pause \begin{quote} Rebasing (or any other form of rewriting) a branch that others have based work on is a bad idea: anyone downstream of it is forced to manually fix their history. \end{quote} ... from git-rebase(7) \end{frame} \begin{frame} \begin{center} \pgfimage[height=3in]{rebase1} \end{center} \end{frame} \begin{frame} \begin{center} \pgfimage[height=3in]{rebase2} \end{center} \end{frame} \begin{frame} \begin{center} \pgfimage[height=3in]{ohcrap} \end{center} \end{frame} \begin{frame} \begin{center} \pgfimage[height=3in]{rebase3} \end{center} \end{frame} \begin{frame} \begin{center} \pgfimage[height=3in]{rebase4} \end{center} \end{frame} \begin{frame} \begin{center} \pgfimage[height=3.69in]{git-rebase} \end{center} \end{frame} \begin{frame} {\Large \textbf{Problems that Evolve is trying to solve}} \textbf{Problem 2}: Some commits are historical record, should not be rewritten \pause \begin{table} \pgfimage[width=4in]{histedit} \end{table} \end{frame} \begin{frame} {\Large \textbf{Problems that Evolve is trying to solve}} \textbf{Problem 3}: Safely sharing rewritten commits with remote repos \pause \begin{table} \pgfimage[width=4in]{lol-jenkins} \end{table} \end{frame} \begin{frame} \begin{table} \pgfimage[height=3in]{git-force-push} \end{table} \end{frame} \begin{frame} {\Large \textbf{Problems that Evolve is trying to solve}} \begin{enumerate} \item Recovering from upstream rewrite (rebase) \item Some commits are historical record, should not be rewritten \item Safely sharing rewritten commits with remote repos \end{enumerate} \pause Evolve provides a clean, consistent UI to solve these problems. \end{frame} \begin{frame} \begin{table} \pgfimage[height=2in]{hg-logo} \end{table} Mercurial Evolve to the rescue! \end{frame} \begin{frame} {\Large \textbf{Evolve basics}} When you enable Evolve, you get a few extra commands: \begin{columns} \column{0.3 \textwidth} \begin{itemize} \item \texttt{amend} \item \texttt{fold} \item \texttt{previous} \item \texttt{next} \item \texttt{prune} \item \texttt{uncommit} \item \texttt{restore} \end{itemize} \pause \column{0.7 \textwidth} \begin{itemize} \item \texttt{hg commit -{}-amend} \item can be done with \texttt{hg histedit} \item \texttt{hg update -r 'parents()'} \item \texttt{hg update -r 'children()'} \item \texttt{hg strip} \item \texttt{hg strip -{}-keep} \item \texttt{hg unbundle strip-backup/...} \end{itemize} \end{columns} \begin{center} {\large These are very scriptable!} \end{center} \end{frame} \begin{frame} {\Large \textbf{Evolve basics}} For reference, these are the rough git equivalents: \begin{columns} \column{0.3 \textwidth} \begin{itemize} \item \texttt{amend} \item \texttt{fold} \item \texttt{previous} \item \texttt{next} \item \texttt{prune} \item \texttt{uncommit} \item \texttt{restore} \end{itemize} \column{0.7 \textwidth} \begin{itemize} \item \texttt{git commit -{}-amend} \item can be done with \texttt{git rebase -i} \item \texttt{git checkout HEAD\^} \item Nothing simple, must use log or reflog \item \texttt{git reset -{}-hard HEAD\^} \item \texttt{git reset -{}-soft HEAD\^} \item Nothing simple, must use reflog \end{itemize} \end{columns} \end{frame} \begin{frame} {\Large \textbf{Evolve's core}} There's also a shiny, new command that does magic: \begin{center} {\Large \texttt{hg evolve}} \end{center} \begin{table} \pgfimage[height=2in]{logo-evolve} \end{table} \begin{center} \begin{itemize} \pause \item Basically, automatically fixes any problems \item recovers from upstream rebase (solves Problem 1) \end{itemize} \end{center} \end{frame} \begin{frame} {\Large \textbf{Immutable history}} What about things that are set in stone? \begin{table} \pgfimage[width=4in]{set-in-stone} \end{table} \pause Evolve knows how to work with phases! (solves Problem 2) \pause \begin{itemize} \item public (immutable) \item draft (editable) \end{itemize} \end{frame} \begin{frame} \begin{center} Let's see Evolve in action! \fontsize{68}{80}\selectfont \lefthand \end{center} \end{frame} \begin{frame} {\Large \textbf{What about Problem 3? (sharing safely)}} So far we've been doing this alone, but... \begin{itemize} \pause \item What about sharing with others? \pause \item Those revision numbers skipping around? \end{itemize} \end{frame} \begin{frame} {\Large \textbf{Evolve under the hood}} \begin{itemize} \item All Evolve operations are \emph{append-only}. \pause \item Pre-edited commits stick around. They're only marked as obsolete. \pause \item Commits may be obsoleted by another overwriting commit. \begin {itemize} \item \texttt{fold} (\texttt{squash}) \item \texttt{amend} \end{itemize} \pause \item Commits may just be plain obsolete with nothing to replace them. \begin{itemize} \item \texttt{prune} \end{itemize} \pause \item Evolve knows how to propagate all this info across clones! \end{itemize} \end{frame} \begin{frame} {\Large \textbf{Sharing with Evolve}} \begin{table} \pgfimage[width=4in]{evolve-1} \end{table} \end{frame} \begin{frame} {\Large \textbf{Sharing with Evolve}} \begin{table} \pgfimage[width=4in]{evolve-2} \end{table} \end{frame} \begin{frame} {\Large \textbf{Sharing with Evolve}} \begin{table} \pgfimage[width=4in]{evolve-3} \end{table} \end{frame} \begin{frame} {\Large \textbf{Sharing with Evolve}} \begin{table} \pgfimage[width=4in]{evolve-4} \end{table} \end{frame} \begin{frame} {\Large \textbf{Sharing with Evolve}} \begin{table} \pgfimage[width=4in]{evolve-5} \end{table} \end{frame} \begin{frame} {\Large \textbf{Sharing with Evolve}} \begin{table} \pgfimage[width=4in]{evolve-6} \end{table} \end{frame} \begin{frame} {\Large \textbf{Sharing with Evolve}} \begin{table} \pgfimage[width=4in]{evolve-7} \end{table} \end{frame} \begin{frame} \begin{center} Let's see Evolve sharing commits around! \fontsize{68}{80}\selectfont \lefthand \end{center} \end{frame} \end{document}