bgneal@13: <!DOCTYPE html>
bgneal@13: <!--
bgneal@13:   Copyright 2010 Google Inc.
bgneal@13: 
bgneal@13:   Licensed under the Apache License, Version 2.0 (the "License");
bgneal@13:   you may not use this file except in compliance with the License.
bgneal@13:   You may obtain a copy of the License at
bgneal@13: 
bgneal@13:      http://www.apache.org/licenses/LICENSE-2.0
bgneal@13: 
bgneal@13:   Unless required by applicable law or agreed to in writing, software
bgneal@13:   distributed under the License is distributed on an "AS IS" BASIS,
bgneal@13:   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
bgneal@13:   See the License for the specific language governing permissions and
bgneal@13:   limitations under the License.
bgneal@13: 
bgneal@13:   Original slides: Marcin Wichary (mwichary@google.com)
bgneal@13:   Modifications: Ernest Delgado (ernestd@google.com)
bgneal@13:                  Alex Russell (slightlyoff@chromium.org)
bgneal@13: 
bgneal@13:   landslide modifications: Adam Zapletal (adamzap@gmail.com)
bgneal@13:                            Nicolas Perriault (nperriault@gmail.com)
bgneal@13: -->
bgneal@13: <html>
bgneal@13: <head>
bgneal@13:     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
bgneal@13:     <meta http-equiv="X-UA-Compatible" content="chrome=1">
bgneal@13:     <title>Introduction to Distributed Version Control with Mercurial</title>
bgneal@13:     <!-- Styles -->
bgneal@13:     
bgneal@13:     <link rel="stylesheet" media="print" href="./my_theme/css/print.css">
bgneal@13:     <link rel="stylesheet" media="screen, projection" href="./my_theme/css/screen.css">
bgneal@13:     
bgneal@13:     
bgneal@13:       
bgneal@13:       <link rel="stylesheet" href="slides.css">
bgneal@13:       
bgneal@13:     
bgneal@13:     <!-- /Styles -->
bgneal@13:     <!-- Javascripts -->
bgneal@13:     
bgneal@13:     <script type="text/javascript" src="./my_theme/js/slides.js"></script>
bgneal@13:     
bgneal@13:     
bgneal@13:     <!-- /Javascripts -->
bgneal@13: </head>
bgneal@13: <body>
bgneal@13:   <div id="blank"></div>
bgneal@13:   <div class="presentation">
bgneal@13:     <div id="current_presenter_notes">
bgneal@13:       <div id="presenter_note"></div>
bgneal@13:     </div>
bgneal@13:     <div class="slides">
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Introduction to Distributed Version Control with Mercurial</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               1/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>(Subliminal Message)</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><img alt="images/stop.jpg" src="images/stop.jpg" /></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               2/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1># whoami</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><p>Brian Neal &lt;<a class="reference external" href="mailto:bgneal1&#64;rockwellcollins.com">bgneal1&#64;rockwellcollins.com</a>&gt;</p>
bgneal@13: <p>Started at Rockwell Collins in July 1999</p>
bgneal@13: <p>You might remember me from the following programs:</p>
bgneal@13: <ul class="simple">
bgneal@13: <li>UMS (July 1999 - Spring 2000)</li>
bgneal@13: <li>Surgical Strike - (Spring - Fall 2000)</li>
bgneal@13: <li>JTRS 2B - (Fall 2000 - Summer 2001)</li>
bgneal@13: <li>SCAMP SEP - (Summer 2001 - October 2004)</li>
bgneal@13: <li>TTNT (January 2005 - Present)</li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               3/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Brief History of Version Control Tools</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><h2>First Generation</h2>
bgneal@13: <ul class="simple">
bgneal@13: <li>No networking!</li>
bgneal@13: <li>Concurrency method: locks</li>
bgneal@13: <li>Examples:<ul>
bgneal@13: <li>SCCS - 1972</li>
bgneal@13: <li>RCS - 1982</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               4/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Brief History of Version Control Tools</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><h2>Second Generation</h2>
bgneal@13: <ul class="simple">
bgneal@13: <li>Client/Server networking; CVCS (Centralized Version Control)</li>
bgneal@13: <li>Concurrency method: merge before commit</li>
bgneal@13: <li>Examples:<ul>
bgneal@13: <li>CVS - 1990</li>
bgneal@13: <li>IBM Rational ClearCase - 1992</li>
bgneal@13: <li>Visual SourceSafe - 1994</li>
bgneal@13: <li>Perforce - 1995</li>
bgneal@13: <li>SVN - 2000</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               5/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Brief History of Version Control Tools</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><h2>Third Generation</h2>
bgneal@13: <ul class="simple">
bgneal@13: <li>Distributed networking; DVCS (Distributed Version Control)</li>
bgneal@13: <li>Concurrency method: commit then merge</li>
bgneal@13: <li>Examples:<ul>
bgneal@13: <li>Bitkeeper - 2000</li>
bgneal@13: <li>Darcs - 2003</li>
bgneal@13: <li>Monotone - 2003</li>
bgneal@13: <li>Git - 2005</li>
bgneal@13: <li><strong>Mercurial</strong> - 2005</li>
bgneal@13: <li>Fossil - 2006</li>
bgneal@13: <li>Bazaar - 2007</li>
bgneal@13: <li>Veracity - 2011</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               6/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>What is a CVCS Again?</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><img alt="images/cvcs.png" src="images/cvcs.png" /></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               7/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>So what's a DVCS look like?</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><img alt="images/dvcs.png" src="images/dvcs.png" />
bgneal@13: <p>All repositories are peers. By convention only, one repository is designated the master.
bgneal@13: It is possible for all peers to exchange changes (via <em>push</em> and <em>pull</em> operations).</p></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               8/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>What does a DVCS buy you?</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>Private workspaces</li>
bgneal@13: <li>Offline mode</li>
bgneal@13: <li>Speed</li>
bgneal@13: <li>Scalability</li>
bgneal@13: <li>Split Geography</li>
bgneal@13: <li>Flexible workflows</li>
bgneal@13: <li>Distributed backups</li>
bgneal@13: <li><strong>Easier merging</strong></li>
bgneal@13: <li><strong>Commit before merge</strong></li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               9/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Private Workspaces</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>You can safely experiment in your local repository</li>
bgneal@13: <li>Commit as often as you like without affecting the team<ul>
bgneal@13: <li>Encourages &quot;micro-commits&quot;</li>
bgneal@13: <li>With SVN, people often hold back until an entire feature is complete</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: <li>Encourages experimentation<ul>
bgneal@13: <li>Make cheap repository clones to try things out</li>
bgneal@13: <li>Not visible to coworkers</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               10/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Offline Mode</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>Work when you have spotty or no network access</li>
bgneal@13: <li>Full access to the repo when offline</li>
bgneal@13: <li>Can work on multiple tasks offline</li>
bgneal@13: </ul>
bgneal@13: <blockquote>
bgneal@13: <ul class="simple">
bgneal@13: <li>Work on bug report #1</li>
bgneal@13: <li>Commit</li>
bgneal@13: <li>Work on bug report #2</li>
bgneal@13: <li>With a CVCS, you'd have both fixes in the same pending commit</li>
bgneal@13: </ul>
bgneal@13: </blockquote></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               11/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Speed</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>Local operations are <strong>fast</strong><ul>
bgneal@13: <li>No, really, <strong>you will</strong> notice a big difference</li>
bgneal@13: <li>Switching between branches will blow your mind</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: <li>Initial pull down of an entire repository <em>might</em> be slower than a CVCS<ul>
bgneal@13: <li>Then again, you might be surprised</li>
bgneal@13: <li>Mercurial, for example, stores an entire repository in less space than
bgneal@13: a SVN working copy in many cases</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               12/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Scalability</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>Some CVCS systems require heavy weight hardware to support the server<ul>
bgneal@13: <li>E.g. ClearCase with a thousand users</li>
bgneal@13: <li>With a DVCS, only pushes &amp; pulls contact a central server</li>
bgneal@13: <li>Most of the work is done locally</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               13/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Split Geography</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>Imagine a team split between Cedar Rapids &amp; Richardson...</li>
bgneal@13: <li>With a CVCS, you have to pick where to put the server</li>
bgneal@13: <li>The remote location is stuck with network latency &amp; associated problems</li>
bgneal@13: <li>With a DVCS, each site can have a central repository<ul>
bgneal@13: <li>The two central repos can be synched when convenient or even scripted</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul>
bgneal@13: <img alt="images/split_geography.png" src="images/split_geography.png" /></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               14/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Flexible Workflows</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>There is no internal concept of a central repository</li>
bgneal@13: <li>A central repository exits only by convention</li>
bgneal@13: <li>More elaborate topologies and workflows can be created:<ul>
bgneal@13: <li>A SW team may push to a central SW repo</li>
bgneal@13: <li>Periodically changes from the SW repo are pushed to a QA repo</li>
bgneal@13: <li>Changes from the QA repo can be pushed into a release repo</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul>
bgneal@13: <img alt="images/flexible_workflows.png" src="images/flexible_workflows.png" /></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               15/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Distributed Backups</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>With a DVCS, multiple copies of the repository exist on multiple machines</li>
bgneal@13: <li><strong>Of course, this is no substitute for a real backup strategy!</strong></li>
bgneal@13: <li>But usually, and with short notice, you can easily designate a repository as
bgneal@13: the central repository in an emergency</li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               16/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Easier Merging</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>Subversion has a bad reputation for merging<ul>
bgneal@13: <li>Some of this is not warranted...<ul>
bgneal@13: <li>Merge tracking was added in SVN v1.5</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: <li>SVN does not handle file renames and tree conflicts very well</li>
bgneal@13: <li>A lot of teams simply avoid merging out of fear</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               17/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Easier Merging (cont.)</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>Why is merging better in a DVCS?<ul>
bgneal@13: <li>Merging simply has to work correctly and be easy in a DVCS<ul>
bgneal@13: <li>More attention was paid to this aspect by DVCS's</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: <li>DVCS's use directed acyclic graphs internally to represent change sets<ul>
bgneal@13: <li>More information is available to make merge decisions</li>
bgneal@13: <li>Easier to find common ancestors of code</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: <li>Developer changes and merge changes are separate<ul>
bgneal@13: <li>&quot;Commit before merge&quot;</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               18/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Commit Before Merge</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>With a CVCS:<ul>
bgneal@13: <li>You make changes in your working copy</li>
bgneal@13: <li>Before you can commit, you often must peform an update<ul>
bgneal@13: <li>This may trigger a merge</li>
bgneal@13: <li>Your changes are now mixed up with your friendly coworkers' changes</li>
bgneal@13: <li>Sometimes this can be a problem...</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: <li>With a DVCS:<ul>
bgneal@13: <li>You make changes in your working copy</li>
bgneal@13: <li>You commit locally!</li>
bgneal@13: <li>You can then choose to pull changes from others and merge<ul>
bgneal@13: <li><strong>Your changes are already safely tucked away and can be retrieved later if things go wrong</strong></li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               19/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Okay, what's the catch?</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><h2>Potential drawbacks to a DVCS</h2>
bgneal@13: <ul class="simple">
bgneal@13: <li>Practically no support for locks<ul>
bgneal@13: <li>This makes working with binary files difficult in a team environment</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: <li>Huge repositories are not practical</li>
bgneal@13: <li>Hetrogenous repositories are not practical<ul>
bgneal@13: <li>Not a good idea to mix, say, software, systems, and firmware in the same repo</li>
bgneal@13: <li>Not a good idea to mix multiple products in the same repo</li>
bgneal@13: <li>Arguably, this applies to a CVCS as well</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: <li>No support for path-based access control<ul>
bgneal@13: <li>With current tools, you either can access the full repo, or nothing</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               20/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Introduction to Mercurial</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>Overview</li>
bgneal@13: <li>Repositories &amp; working directories</li>
bgneal@13: <li>Changesets</li>
bgneal@13: <li>Branches &amp; Tags</li>
bgneal@13: <li>Example workflow</li>
bgneal@13: <li>Command overview</li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               21/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Mercurial Overview</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>Distributed Version Control System</li>
bgneal@13: <li>Free, open source software licensed under GPL Version 2</li>
bgneal@13: <li>Available for Microsoft Windows, GNU/Linux, Mac OS X, Solaris 11 Express</li>
bgneal@13: <li>Written in Python with a small amount of C</li>
bgneal@13: <li>Extensible with official and 3rd party extensions</li>
bgneal@13: <li>TortoiseHg is a popular GUI for Windows</li>
bgneal@13: <li>Reputation for being fast &amp; easy to get started with</li>
bgneal@13: <li>Can be served via Apache Web server</li>
bgneal@13: <li>Repository hooks</li>
bgneal@13: <li>Integrates with Trac</li>
bgneal@13: <li>Can import history from other tools, including Subversion</li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               22/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Repositories &amp; Working Directories</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><p>A repository consists of two things:</p>
bgneal@13: <ul class="simple">
bgneal@13: <li>Your working directory (similar to a working copy in SVN)</li>
bgneal@13: <li>The repository itself (also known as &quot;the store&quot;)<ul>
bgneal@13: <li>A .hg directory at the top of your working copy</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul>
bgneal@13: <p>Example:</p>
bgneal@13: <pre class="literal-block">
bgneal@13: $ ls -A
bgneal@13: .hg  .hgignore  images/  slides.cfg  slides.css  slides.html  slides.rst
bgneal@13: </pre>
bgneal@13: <ul class="simple">
bgneal@13: <li>Repositories communicate via the <em>push</em> and <em>pull</em> commands<ul>
bgneal@13: <li>Push &amp; Pull do not affect your working directory<ul>
bgneal@13: <li>An <em>update</em> or <em>merge</em> must be performed to receive remote changes into your working directory</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               23/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>What's in a Repository?</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><p>A repository consists of a directed, acyclic graph of <em>changesets</em></p>
bgneal@13: <img alt="images/repos.png" src="images/repos.png" />
bgneal@13: <ul class="simple">
bgneal@13: <li>Each changeset can have 0, 1, or 2 parents (and infinite children)</li>
bgneal@13: <li>A changeset with 0 parents is the root</li>
bgneal@13: <li>A changeset with 2 parents is the result of a merge</li>
bgneal@13: <li>The newest changeset is called the <em>tip</em>, a special tag name</li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               24/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>What's a Changeset?</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><p>A changeset is an atomic collection of changes and some meta information.
bgneal@13: The meta information includes:</p>
bgneal@13: <ul class="simple">
bgneal@13: <li>Who made the changes</li>
bgneal@13: <li>When the changes were made</li>
bgneal@13: <li>Why - the commit message</li>
bgneal@13: <li>The name of the branch the changes were made on (&quot;default&quot; is the default)</li>
bgneal@13: <li>A local revision number</li>
bgneal@13: <li>A changeset ID; a 40 digit hex number (SHA-1 hash of the changeset &amp; parents)</li>
bgneal@13: </ul>
bgneal@13: <p>A changeset can be named by:</p>
bgneal@13: <ul class="simple">
bgneal@13: <li>Revision number (within a repository)</li>
bgneal@13: <li>Changeset ID (globally)</li>
bgneal@13: <li>Tag name</li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               25/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Branches &amp; Tags</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>In the simple case, each changeset appear in a line</li>
bgneal@13: <li>When a changeset develops 2 or more children, a branch occurs<ul>
bgneal@13: <li>The latest revision of a branch is called a <em>head</em></li>
bgneal@13: <li>A <em>merge</em> is when two branches join back together</li>
bgneal@13: <li>Branches can be given names; the default branch name is <em>&quot;default&quot;</em></li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: <li>Changesets can be given human readable names, or <em>tags</em><ul>
bgneal@13: <li><em>Local tags</em> are only visible within a repository</li>
bgneal@13: <li><em>Regular tags</em> are revision controlled and propagate to other repos</li>
bgneal@13: <li>The newest head in a repository is a tag called <em>tip</em></li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               26/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Example Workflow</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><img alt="images/workflow1.png" src="images/workflow1.png" /></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               27/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Example Workflow (cont.)</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><img alt="images/workflow2.png" src="images/workflow2.png" /></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               28/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Example Workflow (cont.)</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><img alt="images/workflow3.png" src="images/workflow3.png" />
bgneal@13: <ul class="simple">
bgneal@13: <li>Notice that after Alice's pull:<ul>
bgneal@13: <li>Her working directory is unaffected</li>
bgneal@13: <li>Her repository only has one head =&gt; no merging required</li>
bgneal@13: </ul>
bgneal@13: </li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               29/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>SVN Commands for Review</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><p>Basic SVN commands:</p>
bgneal@13: <ul class="simple">
bgneal@13: <li>add, remove, copy, move, mkdir</li>
bgneal@13: <li>checkout, commit, update, revert</li>
bgneal@13: <li>merge, resolved, diff</li>
bgneal@13: <li>status, log</li>
bgneal@13: <li>lock, unlock</li>
bgneal@13: </ul></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               30/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Basic Mercurial Commands</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><p>Mercurial (hg) vs SVN commands:</p>
bgneal@13: <ul class="simple">
bgneal@13: <li>add, remove, copy, move, <span class="strike">mkdir</span></li>
bgneal@13: <li><span class="strike">checkout</span>, commit, update, revert</li>
bgneal@13: <li>merge, resolve, diff, <strong>heads</strong></li>
bgneal@13: <li>status, log</li>
bgneal@13: <li><span class="strike">lock, unlock</span></li>
bgneal@13: </ul>
bgneal@13: <p>Additional &quot;distributed commands&quot;:</p>
bgneal@13: <ul class="simple">
bgneal@13: <li><strong>clone</strong>, <strong>push</strong>, <strong>pull</strong></li>
bgneal@13: <li><strong>incoming</strong>, <strong>outgoing</strong></li>
bgneal@13: </ul>
bgneal@13: <p><strong>Not a whole lot to learn above SVN</strong></p></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               31/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>References</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:             <section><ul class="simple">
bgneal@13: <li>Mercurial <a class="reference external" href="http://mercurial.selenic.com/">http://mercurial.selenic.com/</a></li>
bgneal@13: <li>Mercurial Wiki <a class="reference external" href="http://mercurial.selenic.com/wiki/">http://mercurial.selenic.com/wiki/</a></li>
bgneal@13: <li>Mercurial Book (free!) <a class="reference external" href="http://hgbook.red-bean.com/">http://hgbook.red-bean.com/</a></li>
bgneal@13: <li>Hg Init: A Mercurial Tutorial <a class="reference external" href="http://hginit.com">http://hginit.com</a></li>
bgneal@13: <li>Version Control By Example (free!) <a class="reference external" href="http://www.ericsink.com/vcbe/">http://www.ericsink.com/vcbe/</a></li>
bgneal@13: </ul>
bgneal@13: <p>This presentation is available at:</p>
bgneal@13: <pre class="literal-block">
bgneal@13: $ hg clone https://bitbucket.org/bgneal/dvcs_intro_brownbag
bgneal@13: </pre></section>
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               32/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:       <!-- slide source: slides.rst -->
bgneal@13:       <div class="slide-wrapper">
bgneal@13:         <div class="slide">
bgneal@13:           <div class="inner">
bgneal@13:             
bgneal@13:             <header><h1>Questions?</h1></header>
bgneal@13:             
bgneal@13:             
bgneal@13:           </div>
bgneal@13:           <div class="presenter_notes">
bgneal@13:             <header><h1>Presenter Notes</h1></header>
bgneal@13:             <section>
bgneal@13:             
bgneal@13:             </section>
bgneal@13:           </div>
bgneal@13:           <footer>
bgneal@13:             
bgneal@13:             <aside class="source">
bgneal@13:               Source: <a href="slides.rst">slides.rst</a>
bgneal@13:             </aside>
bgneal@13:             
bgneal@13:             <aside class="page_number">
bgneal@13:               33/33
bgneal@13:             </aside>
bgneal@13:           </footer>
bgneal@13:         </div>
bgneal@13:       </div>
bgneal@13:       
bgneal@13:     </div>
bgneal@13:   </div>
bgneal@13:   
bgneal@13:   <div id="toc" class="sidebar hidden">
bgneal@13:     <h2>Table of Contents</h2>
bgneal@13:     <table>
bgneal@13:       <caption>Table of Contents</caption>
bgneal@13:       
bgneal@13:       <tr id="toc-row-1">
bgneal@13:         <th><a href="#slide1">Introduction to Distributed Version Control with Mercurial</a></th>
bgneal@13:         <td><a href="#slide1">1</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-2">
bgneal@13:         <th><a href="#slide2">(Subliminal Message)</a></th>
bgneal@13:         <td><a href="#slide2">2</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-3">
bgneal@13:         <th><a href="#slide3"># whoami</a></th>
bgneal@13:         <td><a href="#slide3">3</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-4">
bgneal@13:         <th><a href="#slide4">Brief History of Version Control Tools</a></th>
bgneal@13:         <td><a href="#slide4">4</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-5">
bgneal@13:         <th><a href="#slide5">Brief History of Version Control Tools</a></th>
bgneal@13:         <td><a href="#slide5">5</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-6">
bgneal@13:         <th><a href="#slide6">Brief History of Version Control Tools</a></th>
bgneal@13:         <td><a href="#slide6">6</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-7">
bgneal@13:         <th><a href="#slide7">What is a CVCS Again?</a></th>
bgneal@13:         <td><a href="#slide7">7</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-8">
bgneal@13:         <th><a href="#slide8">So what's a DVCS look like?</a></th>
bgneal@13:         <td><a href="#slide8">8</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-9">
bgneal@13:         <th><a href="#slide9">What does a DVCS buy you?</a></th>
bgneal@13:         <td><a href="#slide9">9</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-10">
bgneal@13:         <th><a href="#slide10">Private Workspaces</a></th>
bgneal@13:         <td><a href="#slide10">10</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-11">
bgneal@13:         <th><a href="#slide11">Offline Mode</a></th>
bgneal@13:         <td><a href="#slide11">11</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-12">
bgneal@13:         <th><a href="#slide12">Speed</a></th>
bgneal@13:         <td><a href="#slide12">12</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-13">
bgneal@13:         <th><a href="#slide13">Scalability</a></th>
bgneal@13:         <td><a href="#slide13">13</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-14">
bgneal@13:         <th><a href="#slide14">Split Geography</a></th>
bgneal@13:         <td><a href="#slide14">14</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-15">
bgneal@13:         <th><a href="#slide15">Flexible Workflows</a></th>
bgneal@13:         <td><a href="#slide15">15</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-16">
bgneal@13:         <th><a href="#slide16">Distributed Backups</a></th>
bgneal@13:         <td><a href="#slide16">16</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-17">
bgneal@13:         <th><a href="#slide17">Easier Merging</a></th>
bgneal@13:         <td><a href="#slide17">17</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-18">
bgneal@13:         <th><a href="#slide18">Easier Merging (cont.)</a></th>
bgneal@13:         <td><a href="#slide18">18</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-19">
bgneal@13:         <th><a href="#slide19">Commit Before Merge</a></th>
bgneal@13:         <td><a href="#slide19">19</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-20">
bgneal@13:         <th><a href="#slide20">Okay, what's the catch?</a></th>
bgneal@13:         <td><a href="#slide20">20</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-21">
bgneal@13:         <th><a href="#slide21">Introduction to Mercurial</a></th>
bgneal@13:         <td><a href="#slide21">21</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-22">
bgneal@13:         <th><a href="#slide22">Mercurial Overview</a></th>
bgneal@13:         <td><a href="#slide22">22</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-23">
bgneal@13:         <th><a href="#slide23">Repositories &amp; Working Directories</a></th>
bgneal@13:         <td><a href="#slide23">23</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-24">
bgneal@13:         <th><a href="#slide24">What's in a Repository?</a></th>
bgneal@13:         <td><a href="#slide24">24</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-25">
bgneal@13:         <th><a href="#slide25">What's a Changeset?</a></th>
bgneal@13:         <td><a href="#slide25">25</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-26">
bgneal@13:         <th><a href="#slide26">Branches &amp; Tags</a></th>
bgneal@13:         <td><a href="#slide26">26</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-27">
bgneal@13:         <th><a href="#slide27">Example Workflow</a></th>
bgneal@13:         <td><a href="#slide27">27</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-28">
bgneal@13:         <th><a href="#slide28">Example Workflow (cont.)</a></th>
bgneal@13:         <td><a href="#slide28">28</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-29">
bgneal@13:         <th><a href="#slide29">Example Workflow (cont.)</a></th>
bgneal@13:         <td><a href="#slide29">29</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-30">
bgneal@13:         <th><a href="#slide30">SVN Commands for Review</a></th>
bgneal@13:         <td><a href="#slide30">30</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-31">
bgneal@13:         <th><a href="#slide31">Basic Mercurial Commands</a></th>
bgneal@13:         <td><a href="#slide31">31</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-32">
bgneal@13:         <th><a href="#slide32">References</a></th>
bgneal@13:         <td><a href="#slide32">32</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:       <tr id="toc-row-33">
bgneal@13:         <th><a href="#slide33">Questions?</a></th>
bgneal@13:         <td><a href="#slide33">33</a></td>
bgneal@13:       </tr>
bgneal@13:       
bgneal@13:       
bgneal@13:     </table>
bgneal@13:   </div>
bgneal@13:   
bgneal@13:   <div id="help" class="sidebar hidden">
bgneal@13:     <h2>Help</h2>
bgneal@13:     <table>
bgneal@13:       <caption>Help</caption>
bgneal@13:       <tr>
bgneal@13:         <th>Table of Contents</th>
bgneal@13:         <td>t</td>
bgneal@13:       </tr>
bgneal@13:       <tr>
bgneal@13:         <th>Exposé</th>
bgneal@13:         <td>ESC</td>
bgneal@13:       </tr>
bgneal@13:       <tr>
bgneal@13:         <th>Full screen slides</th>
bgneal@13:         <td>e</td>
bgneal@13:       </tr>
bgneal@13:       <tr>
bgneal@13:         <th>Presenter View</th>
bgneal@13:         <td>p</td>
bgneal@13:       </tr>
bgneal@13:       <tr>
bgneal@13:         <th>Source Files</th>
bgneal@13:         <td>s</td>
bgneal@13:       </tr>
bgneal@13:       <tr>
bgneal@13:         <th>Slide Numbers</th>
bgneal@13:         <td>n</td>
bgneal@13:       </tr>
bgneal@13:       <tr>
bgneal@13:         <th>Toggle screen blanking</th>
bgneal@13:         <td>b</td>
bgneal@13:       </tr>
bgneal@13:       <tr>
bgneal@13:         <th>Show/hide slide context</th>
bgneal@13:         <td>c</td>
bgneal@13:       </tr>
bgneal@13:       <tr>
bgneal@13:         <th>Notes</th>
bgneal@13:         <td>2</td>
bgneal@13:       </tr>
bgneal@13:       <tr>
bgneal@13:         <th>Help</th>
bgneal@13:         <td>h</td>
bgneal@13:       </tr>
bgneal@13:     </table>
bgneal@13:   </div>
bgneal@13:   <script>main()</script>
bgneal@13: </body>
bgneal@13: </html>