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
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
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
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
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
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
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
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
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
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
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
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
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
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 patchbomb Extension
15. Migrating to Mercurial
15.1 Importing History from another System
15.2 Migrating from Subversion
15.3 Useful Tips for Newcomers
15.4 Appendix Mercurial Queues Reference
15.5 MQ Command Reference
15.6 MQ File Reference
16. Installing Mercurial from Source
16.1 On a Unix-Like System
16.2 On Windows