comparison slides.html @ 13:3547bba86af2

Removed *.html from .hgignore because we are using our own theme now (that includes a base.html file), and it is convenient to control the generated presentation since I won't necessarily have Python and landslide installed on every computer I want to give the presentation.
author Brian Neal <bgneal@gmail.com>
date Wed, 30 Nov 2011 18:46:32 -0600
parents
children 048e5aea6d36
comparison
equal deleted inserted replaced
12:727c48601d66 13:3547bba86af2
1 <!DOCTYPE html>
2 <!--
3 Copyright 2010 Google Inc.
4
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
8
9 http://www.apache.org/licenses/LICENSE-2.0
10
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16
17 Original slides: Marcin Wichary (mwichary@google.com)
18 Modifications: Ernest Delgado (ernestd@google.com)
19 Alex Russell (slightlyoff@chromium.org)
20
21 landslide modifications: Adam Zapletal (adamzap@gmail.com)
22 Nicolas Perriault (nperriault@gmail.com)
23 -->
24 <html>
25 <head>
26 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
27 <meta http-equiv="X-UA-Compatible" content="chrome=1">
28 <title>Introduction to Distributed Version Control with Mercurial</title>
29 <!-- Styles -->
30
31 <link rel="stylesheet" media="print" href="./my_theme/css/print.css">
32 <link rel="stylesheet" media="screen, projection" href="./my_theme/css/screen.css">
33
34
35
36 <link rel="stylesheet" href="slides.css">
37
38
39 <!-- /Styles -->
40 <!-- Javascripts -->
41
42 <script type="text/javascript" src="./my_theme/js/slides.js"></script>
43
44
45 <!-- /Javascripts -->
46 </head>
47 <body>
48 <div id="blank"></div>
49 <div class="presentation">
50 <div id="current_presenter_notes">
51 <div id="presenter_note"></div>
52 </div>
53 <div class="slides">
54
55 <!-- slide source: slides.rst -->
56 <div class="slide-wrapper">
57 <div class="slide">
58 <div class="inner">
59
60 <header><h1>Introduction to Distributed Version Control with Mercurial</h1></header>
61
62
63 </div>
64 <div class="presenter_notes">
65 <header><h1>Presenter Notes</h1></header>
66 <section>
67
68 </section>
69 </div>
70 <footer>
71
72 <aside class="source">
73 Source: <a href="slides.rst">slides.rst</a>
74 </aside>
75
76 <aside class="page_number">
77 1/33
78 </aside>
79 </footer>
80 </div>
81 </div>
82
83 <!-- slide source: slides.rst -->
84 <div class="slide-wrapper">
85 <div class="slide">
86 <div class="inner">
87
88 <header><h1>(Subliminal Message)</h1></header>
89
90
91 <section><img alt="images/stop.jpg" src="images/stop.jpg" /></section>
92
93 </div>
94 <div class="presenter_notes">
95 <header><h1>Presenter Notes</h1></header>
96 <section>
97
98 </section>
99 </div>
100 <footer>
101
102 <aside class="source">
103 Source: <a href="slides.rst">slides.rst</a>
104 </aside>
105
106 <aside class="page_number">
107 2/33
108 </aside>
109 </footer>
110 </div>
111 </div>
112
113 <!-- slide source: slides.rst -->
114 <div class="slide-wrapper">
115 <div class="slide">
116 <div class="inner">
117
118 <header><h1># whoami</h1></header>
119
120
121 <section><p>Brian Neal &lt;<a class="reference external" href="mailto:bgneal1&#64;rockwellcollins.com">bgneal1&#64;rockwellcollins.com</a>&gt;</p>
122 <p>Started at Rockwell Collins in July 1999</p>
123 <p>You might remember me from the following programs:</p>
124 <ul class="simple">
125 <li>UMS (July 1999 - Spring 2000)</li>
126 <li>Surgical Strike - (Spring - Fall 2000)</li>
127 <li>JTRS 2B - (Fall 2000 - Summer 2001)</li>
128 <li>SCAMP SEP - (Summer 2001 - October 2004)</li>
129 <li>TTNT (January 2005 - Present)</li>
130 </ul></section>
131
132 </div>
133 <div class="presenter_notes">
134 <header><h1>Presenter Notes</h1></header>
135 <section>
136
137 </section>
138 </div>
139 <footer>
140
141 <aside class="source">
142 Source: <a href="slides.rst">slides.rst</a>
143 </aside>
144
145 <aside class="page_number">
146 3/33
147 </aside>
148 </footer>
149 </div>
150 </div>
151
152 <!-- slide source: slides.rst -->
153 <div class="slide-wrapper">
154 <div class="slide">
155 <div class="inner">
156
157 <header><h1>Brief History of Version Control Tools</h1></header>
158
159
160 <section><h2>First Generation</h2>
161 <ul class="simple">
162 <li>No networking!</li>
163 <li>Concurrency method: locks</li>
164 <li>Examples:<ul>
165 <li>SCCS - 1972</li>
166 <li>RCS - 1982</li>
167 </ul>
168 </li>
169 </ul></section>
170
171 </div>
172 <div class="presenter_notes">
173 <header><h1>Presenter Notes</h1></header>
174 <section>
175
176 </section>
177 </div>
178 <footer>
179
180 <aside class="source">
181 Source: <a href="slides.rst">slides.rst</a>
182 </aside>
183
184 <aside class="page_number">
185 4/33
186 </aside>
187 </footer>
188 </div>
189 </div>
190
191 <!-- slide source: slides.rst -->
192 <div class="slide-wrapper">
193 <div class="slide">
194 <div class="inner">
195
196 <header><h1>Brief History of Version Control Tools</h1></header>
197
198
199 <section><h2>Second Generation</h2>
200 <ul class="simple">
201 <li>Client/Server networking; CVCS (Centralized Version Control)</li>
202 <li>Concurrency method: merge before commit</li>
203 <li>Examples:<ul>
204 <li>CVS - 1990</li>
205 <li>IBM Rational ClearCase - 1992</li>
206 <li>Visual SourceSafe - 1994</li>
207 <li>Perforce - 1995</li>
208 <li>SVN - 2000</li>
209 </ul>
210 </li>
211 </ul></section>
212
213 </div>
214 <div class="presenter_notes">
215 <header><h1>Presenter Notes</h1></header>
216 <section>
217
218 </section>
219 </div>
220 <footer>
221
222 <aside class="source">
223 Source: <a href="slides.rst">slides.rst</a>
224 </aside>
225
226 <aside class="page_number">
227 5/33
228 </aside>
229 </footer>
230 </div>
231 </div>
232
233 <!-- slide source: slides.rst -->
234 <div class="slide-wrapper">
235 <div class="slide">
236 <div class="inner">
237
238 <header><h1>Brief History of Version Control Tools</h1></header>
239
240
241 <section><h2>Third Generation</h2>
242 <ul class="simple">
243 <li>Distributed networking; DVCS (Distributed Version Control)</li>
244 <li>Concurrency method: commit then merge</li>
245 <li>Examples:<ul>
246 <li>Bitkeeper - 2000</li>
247 <li>Darcs - 2003</li>
248 <li>Monotone - 2003</li>
249 <li>Git - 2005</li>
250 <li><strong>Mercurial</strong> - 2005</li>
251 <li>Fossil - 2006</li>
252 <li>Bazaar - 2007</li>
253 <li>Veracity - 2011</li>
254 </ul>
255 </li>
256 </ul></section>
257
258 </div>
259 <div class="presenter_notes">
260 <header><h1>Presenter Notes</h1></header>
261 <section>
262
263 </section>
264 </div>
265 <footer>
266
267 <aside class="source">
268 Source: <a href="slides.rst">slides.rst</a>
269 </aside>
270
271 <aside class="page_number">
272 6/33
273 </aside>
274 </footer>
275 </div>
276 </div>
277
278 <!-- slide source: slides.rst -->
279 <div class="slide-wrapper">
280 <div class="slide">
281 <div class="inner">
282
283 <header><h1>What is a CVCS Again?</h1></header>
284
285
286 <section><img alt="images/cvcs.png" src="images/cvcs.png" /></section>
287
288 </div>
289 <div class="presenter_notes">
290 <header><h1>Presenter Notes</h1></header>
291 <section>
292
293 </section>
294 </div>
295 <footer>
296
297 <aside class="source">
298 Source: <a href="slides.rst">slides.rst</a>
299 </aside>
300
301 <aside class="page_number">
302 7/33
303 </aside>
304 </footer>
305 </div>
306 </div>
307
308 <!-- slide source: slides.rst -->
309 <div class="slide-wrapper">
310 <div class="slide">
311 <div class="inner">
312
313 <header><h1>So what's a DVCS look like?</h1></header>
314
315
316 <section><img alt="images/dvcs.png" src="images/dvcs.png" />
317 <p>All repositories are peers. By convention only, one repository is designated the master.
318 It is possible for all peers to exchange changes (via <em>push</em> and <em>pull</em> operations).</p></section>
319
320 </div>
321 <div class="presenter_notes">
322 <header><h1>Presenter Notes</h1></header>
323 <section>
324
325 </section>
326 </div>
327 <footer>
328
329 <aside class="source">
330 Source: <a href="slides.rst">slides.rst</a>
331 </aside>
332
333 <aside class="page_number">
334 8/33
335 </aside>
336 </footer>
337 </div>
338 </div>
339
340 <!-- slide source: slides.rst -->
341 <div class="slide-wrapper">
342 <div class="slide">
343 <div class="inner">
344
345 <header><h1>What does a DVCS buy you?</h1></header>
346
347
348 <section><ul class="simple">
349 <li>Private workspaces</li>
350 <li>Offline mode</li>
351 <li>Speed</li>
352 <li>Scalability</li>
353 <li>Split Geography</li>
354 <li>Flexible workflows</li>
355 <li>Distributed backups</li>
356 <li><strong>Easier merging</strong></li>
357 <li><strong>Commit before merge</strong></li>
358 </ul></section>
359
360 </div>
361 <div class="presenter_notes">
362 <header><h1>Presenter Notes</h1></header>
363 <section>
364
365 </section>
366 </div>
367 <footer>
368
369 <aside class="source">
370 Source: <a href="slides.rst">slides.rst</a>
371 </aside>
372
373 <aside class="page_number">
374 9/33
375 </aside>
376 </footer>
377 </div>
378 </div>
379
380 <!-- slide source: slides.rst -->
381 <div class="slide-wrapper">
382 <div class="slide">
383 <div class="inner">
384
385 <header><h1>Private Workspaces</h1></header>
386
387
388 <section><ul class="simple">
389 <li>You can safely experiment in your local repository</li>
390 <li>Commit as often as you like without affecting the team<ul>
391 <li>Encourages &quot;micro-commits&quot;</li>
392 <li>With SVN, people often hold back until an entire feature is complete</li>
393 </ul>
394 </li>
395 <li>Encourages experimentation<ul>
396 <li>Make cheap repository clones to try things out</li>
397 <li>Not visible to coworkers</li>
398 </ul>
399 </li>
400 </ul></section>
401
402 </div>
403 <div class="presenter_notes">
404 <header><h1>Presenter Notes</h1></header>
405 <section>
406
407 </section>
408 </div>
409 <footer>
410
411 <aside class="source">
412 Source: <a href="slides.rst">slides.rst</a>
413 </aside>
414
415 <aside class="page_number">
416 10/33
417 </aside>
418 </footer>
419 </div>
420 </div>
421
422 <!-- slide source: slides.rst -->
423 <div class="slide-wrapper">
424 <div class="slide">
425 <div class="inner">
426
427 <header><h1>Offline Mode</h1></header>
428
429
430 <section><ul class="simple">
431 <li>Work when you have spotty or no network access</li>
432 <li>Full access to the repo when offline</li>
433 <li>Can work on multiple tasks offline</li>
434 </ul>
435 <blockquote>
436 <ul class="simple">
437 <li>Work on bug report #1</li>
438 <li>Commit</li>
439 <li>Work on bug report #2</li>
440 <li>With a CVCS, you'd have both fixes in the same pending commit</li>
441 </ul>
442 </blockquote></section>
443
444 </div>
445 <div class="presenter_notes">
446 <header><h1>Presenter Notes</h1></header>
447 <section>
448
449 </section>
450 </div>
451 <footer>
452
453 <aside class="source">
454 Source: <a href="slides.rst">slides.rst</a>
455 </aside>
456
457 <aside class="page_number">
458 11/33
459 </aside>
460 </footer>
461 </div>
462 </div>
463
464 <!-- slide source: slides.rst -->
465 <div class="slide-wrapper">
466 <div class="slide">
467 <div class="inner">
468
469 <header><h1>Speed</h1></header>
470
471
472 <section><ul class="simple">
473 <li>Local operations are <strong>fast</strong><ul>
474 <li>No, really, <strong>you will</strong> notice a big difference</li>
475 <li>Switching between branches will blow your mind</li>
476 </ul>
477 </li>
478 <li>Initial pull down of an entire repository <em>might</em> be slower than a CVCS<ul>
479 <li>Then again, you might be surprised</li>
480 <li>Mercurial, for example, stores an entire repository in less space than
481 a SVN working copy in many cases</li>
482 </ul>
483 </li>
484 </ul></section>
485
486 </div>
487 <div class="presenter_notes">
488 <header><h1>Presenter Notes</h1></header>
489 <section>
490
491 </section>
492 </div>
493 <footer>
494
495 <aside class="source">
496 Source: <a href="slides.rst">slides.rst</a>
497 </aside>
498
499 <aside class="page_number">
500 12/33
501 </aside>
502 </footer>
503 </div>
504 </div>
505
506 <!-- slide source: slides.rst -->
507 <div class="slide-wrapper">
508 <div class="slide">
509 <div class="inner">
510
511 <header><h1>Scalability</h1></header>
512
513
514 <section><ul class="simple">
515 <li>Some CVCS systems require heavy weight hardware to support the server<ul>
516 <li>E.g. ClearCase with a thousand users</li>
517 <li>With a DVCS, only pushes &amp; pulls contact a central server</li>
518 <li>Most of the work is done locally</li>
519 </ul>
520 </li>
521 </ul></section>
522
523 </div>
524 <div class="presenter_notes">
525 <header><h1>Presenter Notes</h1></header>
526 <section>
527
528 </section>
529 </div>
530 <footer>
531
532 <aside class="source">
533 Source: <a href="slides.rst">slides.rst</a>
534 </aside>
535
536 <aside class="page_number">
537 13/33
538 </aside>
539 </footer>
540 </div>
541 </div>
542
543 <!-- slide source: slides.rst -->
544 <div class="slide-wrapper">
545 <div class="slide">
546 <div class="inner">
547
548 <header><h1>Split Geography</h1></header>
549
550
551 <section><ul class="simple">
552 <li>Imagine a team split between Cedar Rapids &amp; Richardson...</li>
553 <li>With a CVCS, you have to pick where to put the server</li>
554 <li>The remote location is stuck with network latency &amp; associated problems</li>
555 <li>With a DVCS, each site can have a central repository<ul>
556 <li>The two central repos can be synched when convenient or even scripted</li>
557 </ul>
558 </li>
559 </ul>
560 <img alt="images/split_geography.png" src="images/split_geography.png" /></section>
561
562 </div>
563 <div class="presenter_notes">
564 <header><h1>Presenter Notes</h1></header>
565 <section>
566
567 </section>
568 </div>
569 <footer>
570
571 <aside class="source">
572 Source: <a href="slides.rst">slides.rst</a>
573 </aside>
574
575 <aside class="page_number">
576 14/33
577 </aside>
578 </footer>
579 </div>
580 </div>
581
582 <!-- slide source: slides.rst -->
583 <div class="slide-wrapper">
584 <div class="slide">
585 <div class="inner">
586
587 <header><h1>Flexible Workflows</h1></header>
588
589
590 <section><ul class="simple">
591 <li>There is no internal concept of a central repository</li>
592 <li>A central repository exits only by convention</li>
593 <li>More elaborate topologies and workflows can be created:<ul>
594 <li>A SW team may push to a central SW repo</li>
595 <li>Periodically changes from the SW repo are pushed to a QA repo</li>
596 <li>Changes from the QA repo can be pushed into a release repo</li>
597 </ul>
598 </li>
599 </ul>
600 <img alt="images/flexible_workflows.png" src="images/flexible_workflows.png" /></section>
601
602 </div>
603 <div class="presenter_notes">
604 <header><h1>Presenter Notes</h1></header>
605 <section>
606
607 </section>
608 </div>
609 <footer>
610
611 <aside class="source">
612 Source: <a href="slides.rst">slides.rst</a>
613 </aside>
614
615 <aside class="page_number">
616 15/33
617 </aside>
618 </footer>
619 </div>
620 </div>
621
622 <!-- slide source: slides.rst -->
623 <div class="slide-wrapper">
624 <div class="slide">
625 <div class="inner">
626
627 <header><h1>Distributed Backups</h1></header>
628
629
630 <section><ul class="simple">
631 <li>With a DVCS, multiple copies of the repository exist on multiple machines</li>
632 <li><strong>Of course, this is no substitute for a real backup strategy!</strong></li>
633 <li>But usually, and with short notice, you can easily designate a repository as
634 the central repository in an emergency</li>
635 </ul></section>
636
637 </div>
638 <div class="presenter_notes">
639 <header><h1>Presenter Notes</h1></header>
640 <section>
641
642 </section>
643 </div>
644 <footer>
645
646 <aside class="source">
647 Source: <a href="slides.rst">slides.rst</a>
648 </aside>
649
650 <aside class="page_number">
651 16/33
652 </aside>
653 </footer>
654 </div>
655 </div>
656
657 <!-- slide source: slides.rst -->
658 <div class="slide-wrapper">
659 <div class="slide">
660 <div class="inner">
661
662 <header><h1>Easier Merging</h1></header>
663
664
665 <section><ul class="simple">
666 <li>Subversion has a bad reputation for merging<ul>
667 <li>Some of this is not warranted...<ul>
668 <li>Merge tracking was added in SVN v1.5</li>
669 </ul>
670 </li>
671 <li>SVN does not handle file renames and tree conflicts very well</li>
672 <li>A lot of teams simply avoid merging out of fear</li>
673 </ul>
674 </li>
675 </ul></section>
676
677 </div>
678 <div class="presenter_notes">
679 <header><h1>Presenter Notes</h1></header>
680 <section>
681
682 </section>
683 </div>
684 <footer>
685
686 <aside class="source">
687 Source: <a href="slides.rst">slides.rst</a>
688 </aside>
689
690 <aside class="page_number">
691 17/33
692 </aside>
693 </footer>
694 </div>
695 </div>
696
697 <!-- slide source: slides.rst -->
698 <div class="slide-wrapper">
699 <div class="slide">
700 <div class="inner">
701
702 <header><h1>Easier Merging (cont.)</h1></header>
703
704
705 <section><ul class="simple">
706 <li>Why is merging better in a DVCS?<ul>
707 <li>Merging simply has to work correctly and be easy in a DVCS<ul>
708 <li>More attention was paid to this aspect by DVCS's</li>
709 </ul>
710 </li>
711 <li>DVCS's use directed acyclic graphs internally to represent change sets<ul>
712 <li>More information is available to make merge decisions</li>
713 <li>Easier to find common ancestors of code</li>
714 </ul>
715 </li>
716 <li>Developer changes and merge changes are separate<ul>
717 <li>&quot;Commit before merge&quot;</li>
718 </ul>
719 </li>
720 </ul>
721 </li>
722 </ul></section>
723
724 </div>
725 <div class="presenter_notes">
726 <header><h1>Presenter Notes</h1></header>
727 <section>
728
729 </section>
730 </div>
731 <footer>
732
733 <aside class="source">
734 Source: <a href="slides.rst">slides.rst</a>
735 </aside>
736
737 <aside class="page_number">
738 18/33
739 </aside>
740 </footer>
741 </div>
742 </div>
743
744 <!-- slide source: slides.rst -->
745 <div class="slide-wrapper">
746 <div class="slide">
747 <div class="inner">
748
749 <header><h1>Commit Before Merge</h1></header>
750
751
752 <section><ul class="simple">
753 <li>With a CVCS:<ul>
754 <li>You make changes in your working copy</li>
755 <li>Before you can commit, you often must peform an update<ul>
756 <li>This may trigger a merge</li>
757 <li>Your changes are now mixed up with your friendly coworkers' changes</li>
758 <li>Sometimes this can be a problem...</li>
759 </ul>
760 </li>
761 </ul>
762 </li>
763 <li>With a DVCS:<ul>
764 <li>You make changes in your working copy</li>
765 <li>You commit locally!</li>
766 <li>You can then choose to pull changes from others and merge<ul>
767 <li><strong>Your changes are already safely tucked away and can be retrieved later if things go wrong</strong></li>
768 </ul>
769 </li>
770 </ul>
771 </li>
772 </ul></section>
773
774 </div>
775 <div class="presenter_notes">
776 <header><h1>Presenter Notes</h1></header>
777 <section>
778
779 </section>
780 </div>
781 <footer>
782
783 <aside class="source">
784 Source: <a href="slides.rst">slides.rst</a>
785 </aside>
786
787 <aside class="page_number">
788 19/33
789 </aside>
790 </footer>
791 </div>
792 </div>
793
794 <!-- slide source: slides.rst -->
795 <div class="slide-wrapper">
796 <div class="slide">
797 <div class="inner">
798
799 <header><h1>Okay, what's the catch?</h1></header>
800
801
802 <section><h2>Potential drawbacks to a DVCS</h2>
803 <ul class="simple">
804 <li>Practically no support for locks<ul>
805 <li>This makes working with binary files difficult in a team environment</li>
806 </ul>
807 </li>
808 <li>Huge repositories are not practical</li>
809 <li>Hetrogenous repositories are not practical<ul>
810 <li>Not a good idea to mix, say, software, systems, and firmware in the same repo</li>
811 <li>Not a good idea to mix multiple products in the same repo</li>
812 <li>Arguably, this applies to a CVCS as well</li>
813 </ul>
814 </li>
815 <li>No support for path-based access control<ul>
816 <li>With current tools, you either can access the full repo, or nothing</li>
817 </ul>
818 </li>
819 </ul></section>
820
821 </div>
822 <div class="presenter_notes">
823 <header><h1>Presenter Notes</h1></header>
824 <section>
825
826 </section>
827 </div>
828 <footer>
829
830 <aside class="source">
831 Source: <a href="slides.rst">slides.rst</a>
832 </aside>
833
834 <aside class="page_number">
835 20/33
836 </aside>
837 </footer>
838 </div>
839 </div>
840
841 <!-- slide source: slides.rst -->
842 <div class="slide-wrapper">
843 <div class="slide">
844 <div class="inner">
845
846 <header><h1>Introduction to Mercurial</h1></header>
847
848
849 <section><ul class="simple">
850 <li>Overview</li>
851 <li>Repositories &amp; working directories</li>
852 <li>Changesets</li>
853 <li>Branches &amp; Tags</li>
854 <li>Example workflow</li>
855 <li>Command overview</li>
856 </ul></section>
857
858 </div>
859 <div class="presenter_notes">
860 <header><h1>Presenter Notes</h1></header>
861 <section>
862
863 </section>
864 </div>
865 <footer>
866
867 <aside class="source">
868 Source: <a href="slides.rst">slides.rst</a>
869 </aside>
870
871 <aside class="page_number">
872 21/33
873 </aside>
874 </footer>
875 </div>
876 </div>
877
878 <!-- slide source: slides.rst -->
879 <div class="slide-wrapper">
880 <div class="slide">
881 <div class="inner">
882
883 <header><h1>Mercurial Overview</h1></header>
884
885
886 <section><ul class="simple">
887 <li>Distributed Version Control System</li>
888 <li>Free, open source software licensed under GPL Version 2</li>
889 <li>Available for Microsoft Windows, GNU/Linux, Mac OS X, Solaris 11 Express</li>
890 <li>Written in Python with a small amount of C</li>
891 <li>Extensible with official and 3rd party extensions</li>
892 <li>TortoiseHg is a popular GUI for Windows</li>
893 <li>Reputation for being fast &amp; easy to get started with</li>
894 <li>Can be served via Apache Web server</li>
895 <li>Repository hooks</li>
896 <li>Integrates with Trac</li>
897 <li>Can import history from other tools, including Subversion</li>
898 </ul></section>
899
900 </div>
901 <div class="presenter_notes">
902 <header><h1>Presenter Notes</h1></header>
903 <section>
904
905 </section>
906 </div>
907 <footer>
908
909 <aside class="source">
910 Source: <a href="slides.rst">slides.rst</a>
911 </aside>
912
913 <aside class="page_number">
914 22/33
915 </aside>
916 </footer>
917 </div>
918 </div>
919
920 <!-- slide source: slides.rst -->
921 <div class="slide-wrapper">
922 <div class="slide">
923 <div class="inner">
924
925 <header><h1>Repositories &amp; Working Directories</h1></header>
926
927
928 <section><p>A repository consists of two things:</p>
929 <ul class="simple">
930 <li>Your working directory (similar to a working copy in SVN)</li>
931 <li>The repository itself (also known as &quot;the store&quot;)<ul>
932 <li>A .hg directory at the top of your working copy</li>
933 </ul>
934 </li>
935 </ul>
936 <p>Example:</p>
937 <pre class="literal-block">
938 $ ls -A
939 .hg .hgignore images/ slides.cfg slides.css slides.html slides.rst
940 </pre>
941 <ul class="simple">
942 <li>Repositories communicate via the <em>push</em> and <em>pull</em> commands<ul>
943 <li>Push &amp; Pull do not affect your working directory<ul>
944 <li>An <em>update</em> or <em>merge</em> must be performed to receive remote changes into your working directory</li>
945 </ul>
946 </li>
947 </ul>
948 </li>
949 </ul></section>
950
951 </div>
952 <div class="presenter_notes">
953 <header><h1>Presenter Notes</h1></header>
954 <section>
955
956 </section>
957 </div>
958 <footer>
959
960 <aside class="source">
961 Source: <a href="slides.rst">slides.rst</a>
962 </aside>
963
964 <aside class="page_number">
965 23/33
966 </aside>
967 </footer>
968 </div>
969 </div>
970
971 <!-- slide source: slides.rst -->
972 <div class="slide-wrapper">
973 <div class="slide">
974 <div class="inner">
975
976 <header><h1>What's in a Repository?</h1></header>
977
978
979 <section><p>A repository consists of a directed, acyclic graph of <em>changesets</em></p>
980 <img alt="images/repos.png" src="images/repos.png" />
981 <ul class="simple">
982 <li>Each changeset can have 0, 1, or 2 parents (and infinite children)</li>
983 <li>A changeset with 0 parents is the root</li>
984 <li>A changeset with 2 parents is the result of a merge</li>
985 <li>The newest changeset is called the <em>tip</em>, a special tag name</li>
986 </ul></section>
987
988 </div>
989 <div class="presenter_notes">
990 <header><h1>Presenter Notes</h1></header>
991 <section>
992
993 </section>
994 </div>
995 <footer>
996
997 <aside class="source">
998 Source: <a href="slides.rst">slides.rst</a>
999 </aside>
1000
1001 <aside class="page_number">
1002 24/33
1003 </aside>
1004 </footer>
1005 </div>
1006 </div>
1007
1008 <!-- slide source: slides.rst -->
1009 <div class="slide-wrapper">
1010 <div class="slide">
1011 <div class="inner">
1012
1013 <header><h1>What's a Changeset?</h1></header>
1014
1015
1016 <section><p>A changeset is an atomic collection of changes and some meta information.
1017 The meta information includes:</p>
1018 <ul class="simple">
1019 <li>Who made the changes</li>
1020 <li>When the changes were made</li>
1021 <li>Why - the commit message</li>
1022 <li>The name of the branch the changes were made on (&quot;default&quot; is the default)</li>
1023 <li>A local revision number</li>
1024 <li>A changeset ID; a 40 digit hex number (SHA-1 hash of the changeset &amp; parents)</li>
1025 </ul>
1026 <p>A changeset can be named by:</p>
1027 <ul class="simple">
1028 <li>Revision number (within a repository)</li>
1029 <li>Changeset ID (globally)</li>
1030 <li>Tag name</li>
1031 </ul></section>
1032
1033 </div>
1034 <div class="presenter_notes">
1035 <header><h1>Presenter Notes</h1></header>
1036 <section>
1037
1038 </section>
1039 </div>
1040 <footer>
1041
1042 <aside class="source">
1043 Source: <a href="slides.rst">slides.rst</a>
1044 </aside>
1045
1046 <aside class="page_number">
1047 25/33
1048 </aside>
1049 </footer>
1050 </div>
1051 </div>
1052
1053 <!-- slide source: slides.rst -->
1054 <div class="slide-wrapper">
1055 <div class="slide">
1056 <div class="inner">
1057
1058 <header><h1>Branches &amp; Tags</h1></header>
1059
1060
1061 <section><ul class="simple">
1062 <li>In the simple case, each changeset appear in a line</li>
1063 <li>When a changeset develops 2 or more children, a branch occurs<ul>
1064 <li>The latest revision of a branch is called a <em>head</em></li>
1065 <li>A <em>merge</em> is when two branches join back together</li>
1066 <li>Branches can be given names; the default branch name is <em>&quot;default&quot;</em></li>
1067 </ul>
1068 </li>
1069 <li>Changesets can be given human readable names, or <em>tags</em><ul>
1070 <li><em>Local tags</em> are only visible within a repository</li>
1071 <li><em>Regular tags</em> are revision controlled and propagate to other repos</li>
1072 <li>The newest head in a repository is a tag called <em>tip</em></li>
1073 </ul>
1074 </li>
1075 </ul></section>
1076
1077 </div>
1078 <div class="presenter_notes">
1079 <header><h1>Presenter Notes</h1></header>
1080 <section>
1081
1082 </section>
1083 </div>
1084 <footer>
1085
1086 <aside class="source">
1087 Source: <a href="slides.rst">slides.rst</a>
1088 </aside>
1089
1090 <aside class="page_number">
1091 26/33
1092 </aside>
1093 </footer>
1094 </div>
1095 </div>
1096
1097 <!-- slide source: slides.rst -->
1098 <div class="slide-wrapper">
1099 <div class="slide">
1100 <div class="inner">
1101
1102 <header><h1>Example Workflow</h1></header>
1103
1104
1105 <section><img alt="images/workflow1.png" src="images/workflow1.png" /></section>
1106
1107 </div>
1108 <div class="presenter_notes">
1109 <header><h1>Presenter Notes</h1></header>
1110 <section>
1111
1112 </section>
1113 </div>
1114 <footer>
1115
1116 <aside class="source">
1117 Source: <a href="slides.rst">slides.rst</a>
1118 </aside>
1119
1120 <aside class="page_number">
1121 27/33
1122 </aside>
1123 </footer>
1124 </div>
1125 </div>
1126
1127 <!-- slide source: slides.rst -->
1128 <div class="slide-wrapper">
1129 <div class="slide">
1130 <div class="inner">
1131
1132 <header><h1>Example Workflow (cont.)</h1></header>
1133
1134
1135 <section><img alt="images/workflow2.png" src="images/workflow2.png" /></section>
1136
1137 </div>
1138 <div class="presenter_notes">
1139 <header><h1>Presenter Notes</h1></header>
1140 <section>
1141
1142 </section>
1143 </div>
1144 <footer>
1145
1146 <aside class="source">
1147 Source: <a href="slides.rst">slides.rst</a>
1148 </aside>
1149
1150 <aside class="page_number">
1151 28/33
1152 </aside>
1153 </footer>
1154 </div>
1155 </div>
1156
1157 <!-- slide source: slides.rst -->
1158 <div class="slide-wrapper">
1159 <div class="slide">
1160 <div class="inner">
1161
1162 <header><h1>Example Workflow (cont.)</h1></header>
1163
1164
1165 <section><img alt="images/workflow3.png" src="images/workflow3.png" />
1166 <ul class="simple">
1167 <li>Notice that after Alice's pull:<ul>
1168 <li>Her working directory is unaffected</li>
1169 <li>Her repository only has one head =&gt; no merging required</li>
1170 </ul>
1171 </li>
1172 </ul></section>
1173
1174 </div>
1175 <div class="presenter_notes">
1176 <header><h1>Presenter Notes</h1></header>
1177 <section>
1178
1179 </section>
1180 </div>
1181 <footer>
1182
1183 <aside class="source">
1184 Source: <a href="slides.rst">slides.rst</a>
1185 </aside>
1186
1187 <aside class="page_number">
1188 29/33
1189 </aside>
1190 </footer>
1191 </div>
1192 </div>
1193
1194 <!-- slide source: slides.rst -->
1195 <div class="slide-wrapper">
1196 <div class="slide">
1197 <div class="inner">
1198
1199 <header><h1>SVN Commands for Review</h1></header>
1200
1201
1202 <section><p>Basic SVN commands:</p>
1203 <ul class="simple">
1204 <li>add, remove, copy, move, mkdir</li>
1205 <li>checkout, commit, update, revert</li>
1206 <li>merge, resolved, diff</li>
1207 <li>status, log</li>
1208 <li>lock, unlock</li>
1209 </ul></section>
1210
1211 </div>
1212 <div class="presenter_notes">
1213 <header><h1>Presenter Notes</h1></header>
1214 <section>
1215
1216 </section>
1217 </div>
1218 <footer>
1219
1220 <aside class="source">
1221 Source: <a href="slides.rst">slides.rst</a>
1222 </aside>
1223
1224 <aside class="page_number">
1225 30/33
1226 </aside>
1227 </footer>
1228 </div>
1229 </div>
1230
1231 <!-- slide source: slides.rst -->
1232 <div class="slide-wrapper">
1233 <div class="slide">
1234 <div class="inner">
1235
1236 <header><h1>Basic Mercurial Commands</h1></header>
1237
1238
1239 <section><p>Mercurial (hg) vs SVN commands:</p>
1240 <ul class="simple">
1241 <li>add, remove, copy, move, <span class="strike">mkdir</span></li>
1242 <li><span class="strike">checkout</span>, commit, update, revert</li>
1243 <li>merge, resolve, diff, <strong>heads</strong></li>
1244 <li>status, log</li>
1245 <li><span class="strike">lock, unlock</span></li>
1246 </ul>
1247 <p>Additional &quot;distributed commands&quot;:</p>
1248 <ul class="simple">
1249 <li><strong>clone</strong>, <strong>push</strong>, <strong>pull</strong></li>
1250 <li><strong>incoming</strong>, <strong>outgoing</strong></li>
1251 </ul>
1252 <p><strong>Not a whole lot to learn above SVN</strong></p></section>
1253
1254 </div>
1255 <div class="presenter_notes">
1256 <header><h1>Presenter Notes</h1></header>
1257 <section>
1258
1259 </section>
1260 </div>
1261 <footer>
1262
1263 <aside class="source">
1264 Source: <a href="slides.rst">slides.rst</a>
1265 </aside>
1266
1267 <aside class="page_number">
1268 31/33
1269 </aside>
1270 </footer>
1271 </div>
1272 </div>
1273
1274 <!-- slide source: slides.rst -->
1275 <div class="slide-wrapper">
1276 <div class="slide">
1277 <div class="inner">
1278
1279 <header><h1>References</h1></header>
1280
1281
1282 <section><ul class="simple">
1283 <li>Mercurial <a class="reference external" href="http://mercurial.selenic.com/">http://mercurial.selenic.com/</a></li>
1284 <li>Mercurial Wiki <a class="reference external" href="http://mercurial.selenic.com/wiki/">http://mercurial.selenic.com/wiki/</a></li>
1285 <li>Mercurial Book (free!) <a class="reference external" href="http://hgbook.red-bean.com/">http://hgbook.red-bean.com/</a></li>
1286 <li>Hg Init: A Mercurial Tutorial <a class="reference external" href="http://hginit.com">http://hginit.com</a></li>
1287 <li>Version Control By Example (free!) <a class="reference external" href="http://www.ericsink.com/vcbe/">http://www.ericsink.com/vcbe/</a></li>
1288 </ul>
1289 <p>This presentation is available at:</p>
1290 <pre class="literal-block">
1291 $ hg clone https://bitbucket.org/bgneal/dvcs_intro_brownbag
1292 </pre></section>
1293
1294 </div>
1295 <div class="presenter_notes">
1296 <header><h1>Presenter Notes</h1></header>
1297 <section>
1298
1299 </section>
1300 </div>
1301 <footer>
1302
1303 <aside class="source">
1304 Source: <a href="slides.rst">slides.rst</a>
1305 </aside>
1306
1307 <aside class="page_number">
1308 32/33
1309 </aside>
1310 </footer>
1311 </div>
1312 </div>
1313
1314 <!-- slide source: slides.rst -->
1315 <div class="slide-wrapper">
1316 <div class="slide">
1317 <div class="inner">
1318
1319 <header><h1>Questions?</h1></header>
1320
1321
1322 </div>
1323 <div class="presenter_notes">
1324 <header><h1>Presenter Notes</h1></header>
1325 <section>
1326
1327 </section>
1328 </div>
1329 <footer>
1330
1331 <aside class="source">
1332 Source: <a href="slides.rst">slides.rst</a>
1333 </aside>
1334
1335 <aside class="page_number">
1336 33/33
1337 </aside>
1338 </footer>
1339 </div>
1340 </div>
1341
1342 </div>
1343 </div>
1344
1345 <div id="toc" class="sidebar hidden">
1346 <h2>Table of Contents</h2>
1347 <table>
1348 <caption>Table of Contents</caption>
1349
1350 <tr id="toc-row-1">
1351 <th><a href="#slide1">Introduction to Distributed Version Control with Mercurial</a></th>
1352 <td><a href="#slide1">1</a></td>
1353 </tr>
1354
1355
1356 <tr id="toc-row-2">
1357 <th><a href="#slide2">(Subliminal Message)</a></th>
1358 <td><a href="#slide2">2</a></td>
1359 </tr>
1360
1361
1362 <tr id="toc-row-3">
1363 <th><a href="#slide3"># whoami</a></th>
1364 <td><a href="#slide3">3</a></td>
1365 </tr>
1366
1367
1368 <tr id="toc-row-4">
1369 <th><a href="#slide4">Brief History of Version Control Tools</a></th>
1370 <td><a href="#slide4">4</a></td>
1371 </tr>
1372
1373
1374 <tr id="toc-row-5">
1375 <th><a href="#slide5">Brief History of Version Control Tools</a></th>
1376 <td><a href="#slide5">5</a></td>
1377 </tr>
1378
1379
1380 <tr id="toc-row-6">
1381 <th><a href="#slide6">Brief History of Version Control Tools</a></th>
1382 <td><a href="#slide6">6</a></td>
1383 </tr>
1384
1385
1386 <tr id="toc-row-7">
1387 <th><a href="#slide7">What is a CVCS Again?</a></th>
1388 <td><a href="#slide7">7</a></td>
1389 </tr>
1390
1391
1392 <tr id="toc-row-8">
1393 <th><a href="#slide8">So what's a DVCS look like?</a></th>
1394 <td><a href="#slide8">8</a></td>
1395 </tr>
1396
1397
1398 <tr id="toc-row-9">
1399 <th><a href="#slide9">What does a DVCS buy you?</a></th>
1400 <td><a href="#slide9">9</a></td>
1401 </tr>
1402
1403
1404 <tr id="toc-row-10">
1405 <th><a href="#slide10">Private Workspaces</a></th>
1406 <td><a href="#slide10">10</a></td>
1407 </tr>
1408
1409
1410 <tr id="toc-row-11">
1411 <th><a href="#slide11">Offline Mode</a></th>
1412 <td><a href="#slide11">11</a></td>
1413 </tr>
1414
1415
1416 <tr id="toc-row-12">
1417 <th><a href="#slide12">Speed</a></th>
1418 <td><a href="#slide12">12</a></td>
1419 </tr>
1420
1421
1422 <tr id="toc-row-13">
1423 <th><a href="#slide13">Scalability</a></th>
1424 <td><a href="#slide13">13</a></td>
1425 </tr>
1426
1427
1428 <tr id="toc-row-14">
1429 <th><a href="#slide14">Split Geography</a></th>
1430 <td><a href="#slide14">14</a></td>
1431 </tr>
1432
1433
1434 <tr id="toc-row-15">
1435 <th><a href="#slide15">Flexible Workflows</a></th>
1436 <td><a href="#slide15">15</a></td>
1437 </tr>
1438
1439
1440 <tr id="toc-row-16">
1441 <th><a href="#slide16">Distributed Backups</a></th>
1442 <td><a href="#slide16">16</a></td>
1443 </tr>
1444
1445
1446 <tr id="toc-row-17">
1447 <th><a href="#slide17">Easier Merging</a></th>
1448 <td><a href="#slide17">17</a></td>
1449 </tr>
1450
1451
1452 <tr id="toc-row-18">
1453 <th><a href="#slide18">Easier Merging (cont.)</a></th>
1454 <td><a href="#slide18">18</a></td>
1455 </tr>
1456
1457
1458 <tr id="toc-row-19">
1459 <th><a href="#slide19">Commit Before Merge</a></th>
1460 <td><a href="#slide19">19</a></td>
1461 </tr>
1462
1463
1464 <tr id="toc-row-20">
1465 <th><a href="#slide20">Okay, what's the catch?</a></th>
1466 <td><a href="#slide20">20</a></td>
1467 </tr>
1468
1469
1470 <tr id="toc-row-21">
1471 <th><a href="#slide21">Introduction to Mercurial</a></th>
1472 <td><a href="#slide21">21</a></td>
1473 </tr>
1474
1475
1476 <tr id="toc-row-22">
1477 <th><a href="#slide22">Mercurial Overview</a></th>
1478 <td><a href="#slide22">22</a></td>
1479 </tr>
1480
1481
1482 <tr id="toc-row-23">
1483 <th><a href="#slide23">Repositories &amp; Working Directories</a></th>
1484 <td><a href="#slide23">23</a></td>
1485 </tr>
1486
1487
1488 <tr id="toc-row-24">
1489 <th><a href="#slide24">What's in a Repository?</a></th>
1490 <td><a href="#slide24">24</a></td>
1491 </tr>
1492
1493
1494 <tr id="toc-row-25">
1495 <th><a href="#slide25">What's a Changeset?</a></th>
1496 <td><a href="#slide25">25</a></td>
1497 </tr>
1498
1499
1500 <tr id="toc-row-26">
1501 <th><a href="#slide26">Branches &amp; Tags</a></th>
1502 <td><a href="#slide26">26</a></td>
1503 </tr>
1504
1505
1506 <tr id="toc-row-27">
1507 <th><a href="#slide27">Example Workflow</a></th>
1508 <td><a href="#slide27">27</a></td>
1509 </tr>
1510
1511
1512 <tr id="toc-row-28">
1513 <th><a href="#slide28">Example Workflow (cont.)</a></th>
1514 <td><a href="#slide28">28</a></td>
1515 </tr>
1516
1517
1518 <tr id="toc-row-29">
1519 <th><a href="#slide29">Example Workflow (cont.)</a></th>
1520 <td><a href="#slide29">29</a></td>
1521 </tr>
1522
1523
1524 <tr id="toc-row-30">
1525 <th><a href="#slide30">SVN Commands for Review</a></th>
1526 <td><a href="#slide30">30</a></td>
1527 </tr>
1528
1529
1530 <tr id="toc-row-31">
1531 <th><a href="#slide31">Basic Mercurial Commands</a></th>
1532 <td><a href="#slide31">31</a></td>
1533 </tr>
1534
1535
1536 <tr id="toc-row-32">
1537 <th><a href="#slide32">References</a></th>
1538 <td><a href="#slide32">32</a></td>
1539 </tr>
1540
1541
1542 <tr id="toc-row-33">
1543 <th><a href="#slide33">Questions?</a></th>
1544 <td><a href="#slide33">33</a></td>
1545 </tr>
1546
1547
1548 </table>
1549 </div>
1550
1551 <div id="help" class="sidebar hidden">
1552 <h2>Help</h2>
1553 <table>
1554 <caption>Help</caption>
1555 <tr>
1556 <th>Table of Contents</th>
1557 <td>t</td>
1558 </tr>
1559 <tr>
1560 <th>Exposé</th>
1561 <td>ESC</td>
1562 </tr>
1563 <tr>
1564 <th>Full screen slides</th>
1565 <td>e</td>
1566 </tr>
1567 <tr>
1568 <th>Presenter View</th>
1569 <td>p</td>
1570 </tr>
1571 <tr>
1572 <th>Source Files</th>
1573 <td>s</td>
1574 </tr>
1575 <tr>
1576 <th>Slide Numbers</th>
1577 <td>n</td>
1578 </tr>
1579 <tr>
1580 <th>Toggle screen blanking</th>
1581 <td>b</td>
1582 </tr>
1583 <tr>
1584 <th>Show/hide slide context</th>
1585 <td>c</td>
1586 </tr>
1587 <tr>
1588 <th>Notes</th>
1589 <td>2</td>
1590 </tr>
1591 <tr>
1592 <th>Help</th>
1593 <td>h</td>
1594 </tr>
1595 </table>
1596 </div>
1597 <script>main()</script>
1598 </body>
1599 </html>