Table of Contents
Preface; Technical Storytelling; Thank You for Supporting Mercurial; Conventions Used in This Book; Using Code Examples; Safari® Books Online; How to Contact Us; This Book Is Free; Acknowledgments; Chapter 1: A Brief History of Revision Control; 1.1 Why Revision Control? Why Mercurial?; 1.2 This Book Is a Work in Progress; 1.3 About the Examples in This Book; 1.4 Trends in the Field; 1.5 A Few Advantages of Distributed Revision Control; 1.6 Why Choose Mercurial?; 1.7 Mercurial Compared with Other Tools; 1.8 Switching from Another Tool to Mercurial; 1.9 A Short History of Revision Control; Chapter 2: A Tour of Mercurial: The Basics; 2.1 Installing Mercurial on Your System; 2.2 Getting Started; 2.3 Working with a Repository; 2.4 A Tour Through History; 2.5 All About Command Options; 2.6 Making and Reviewing Changes; 2.7 Recording Changes in a New Changeset; 2.8 Sharing Changes; 2.9 Starting a New Project; Chapter 3: A Tour of Mercurial: Merging Work; 3.1 Merging Streams of Work; 3.2 Merging Conflicting Changes; 3.3 Simplifying the Pull-Merge-Commit Sequence; 3.4 Renaming, Copying, and Merging; Chapter 4: Behind the Scenes; 4.1 Mercurial’s Historical Record; 4.2 Safe, Efficient Storage; 4.3 Revision History, Branching, and Merging; 4.4 The Working Directory; 4.5 Other Interesting Design Features; Chapter 5: Mercurial in Daily Use; 5.1 Telling Mercurial Which Files to Track; 5.2 How to Stop Tracking a File; 5.3 Copying Files; 5.4 Renaming Files; 5.5 Recovering from Mistakes; 5.6 Dealing with Tricky Merges; 5.7 More Useful Diffs; 5.8 Which Files to Manage, and Which to Avoid; 5.9 Backups and Mirroring; Chapter 6: Collaborating with Other People; 6.1 Mercurial’s Web Interface; 6.2 Collaboration Models; 6.3 The Technical Side of Sharing; 6.4 Informal Sharing with hg serve; 6.5 Using the Secure Shell Protocol; 6.6 Serving Over HTTP Using CGI; 6.7 System-Wide Configuration; Chapter 7: Filenames and Pattern Matching; 7.1 Simple File Naming; 7.2 Running Commands Without Any Filenames; 7.3 Telling You What’s Going On; 7.4 Using Patterns to Identify Files; 7.5 Filtering Files; 7.6 Permanently Ignoring Unwanted Files and Directories; 7.7 Case Sensitivity; Chapter 8: Managing Releases and Branchy Development; 8.1 Giving a Persistent Name to a Revision; 8.2 The Flow of Changes: Big Picture Versus Little Picture; 8.3 Managing Big-Picture Branches in Repositories; 8.4 Don’t Repeat Yourself: Merging Across Branches; 8.5 Naming Branches Within One Repository; 8.6 Dealing with Multiple Named Branches in a Repository; 8.7 Branch Names and Merging; 8.8 Branch Naming Is Generally Useful; Chapter 9: Finding and Fixing Mistakes; 9.1 Erasing Local History; 9.2 Reverting the Mistaken Change; 9.3 Dealing with Committed Changes; 9.4 Changes That Should Never Have Been; 9.5 Finding the Source of a Bug; 9.6 Tips for Finding Bugs Effectively; Chapter 10: Handling Repository Events with Hooks; 10.1 An Overview of Hooks in Mercurial; 10.2 Hooks and Security; 10.3 A Short Tutorial on Using Hooks; 10.4 Writing Your Own Hooks; 10.5 Some Hook Examples; 10.6 Bundled Hooks; 10.7 Information for Writers of Hooks; 10.8 Hook Reference; Chapter 11: Customizing the Output of Mercurial; 11.1 Using Precanned Output Styles; 11.2 Commands That Support Styles and Templates; 11.3 The Basics of Templating; 11.4 Common Template Keywords; 11.5 Escape Sequences; 11.6 Filtering Keywords to Change Their Results; 11.7 From Templates to Styles; 11.8 Style Files by Example; Chapter 12: Managing Changes with Mercurial Queues; 12.1 The Patch Management Problem; 12.2 The Prehistory of Mercurial Queues; 12.3 The Huge Advantage of MQ; 12.4 Understanding Patches; 12.5 Getting Started with Mercurial Queues; 12.6 More About Patches; 12.7 More on Patch Management; 12.8 Getting the Best Performance Out of MQ; 12.9 Updating Your Patches When the Underlying Code Changes; 12.10 Identifying Patches; 12.11 Useful Things to Know About; 12.12 Managing Patches in a Repository; 12.13 Third-Party Tools for Working with Patches; 12.14 Good Ways to Work with Patches; 12.15 MQ Cookbook; 12.16 Differences Between Quilt and MQ; Chapter 13: Advanced Uses of Mercurial Queues; 13.1 The Problem of Many Targets; 13.2 Conditionally Applying Patches with Guards; 13.3 Controlling the Guards on a Patch; 13.4 Selecting the Guards to Use; 13.5 MQ’s Rules for Applying Patches; 13.6 Trimming the Work Environment; 13.7 Dividing Up the Series File; 13.8 Maintaining the Patch Series; 13.9 Useful Tips for Developing with MQ; Chapter 14: Adding Functionality with Extensions; 14.1 Improve Performance with the inotify Extension; 14.2 Flexible Diff Support with the extdiff Extension; 14.3 Cherry-Picking Changes with the transplant Extension; 14.4 Sending Changes via Email with the ppppppatchbomb Extension; Migrating to Mercurial; Importing History from Another System; Migrating from Subversion; Useful Tips for Newcomers; Mercurial Queues Reference; MQ Command Reference; MQ File Reference; Installing Mercurial from Source; On a Unix-Like System; On Windows; Open Publication License; Requirements on Both Unmodified and Modified Versions; Copyright; Scope of License; Requirements on Modified Works; Good-Practice Recommendations; License Options; Colophon;
Bryan O'Sullivan is an Irish writer and developer who works with distributed systems, open source software, and programming languages. He wrote the award-winning O'Reilly title Real World Haskell. He has made significant contributions to the popular Mercurial revision control system, and to a number of other open source projects. He lives in San Francisco with his family. Whenever he can, he runs off to climb rocks.