Chapter 20. Effective Version Control

Everything changes, nothing perishes.

Ovid

Version control, to the developer, is like eating and breathing; like a source editor and compiler. It’s an essential part of daily development life.

Version control is the process of managing multiple revisions of a set of files. These are commonly the source files for a software system (so it is often called source control), but it could just as easily be revisions of a document tree, or of anything else you’d store in a filesystem.

This is a simple enough facility. But a good version control system, used well, brings us many benefits:

  • It provides a central collaboration hub, orchestrating how developers work together.

  • It defines and publishes the state of the art; no code has been integrated unless it is stored in the system. Other tools link into this update feed—for example, continuous integration, release engineering, and code audit systems.

  • It maintains a history of the work on a project, archiving the exact contents that went into each specific release. It is a code time machine.

    This facilitates software archaeology, tracing the changes in files to work out the changes that comprised a particular feature. It catalogues who changed each file, and why.

  • It provides a central backup of your work.

  • It provides the developer with a safety net. It leaves room to experiment, to try changes, and roll them back if they do not work.

  • It fosters a rhythm and cadence of work: you do a chunk ...

Get Becoming a Better Programmer now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.