Using Version Control

Definition:

Agile teams use a version control system (VCS) or revision control system (RCS) to:

    • keep a history of revisions to the source code, artifacts, documents, and configuration files

    • ensure that all members are working on the same code

    • provide the input to a single-command build system

    • allow builds on a Continuous Integration server to be triggered

Agile team members commit and synchronize code often--hourly or daily, to reduce the cost of merge conflicts. The synchronization process is also another way to keep aware of other team members' changes.

Version Models:

Copy-modify-merge has largely displaced the older lock-modify-unlock approach, in part because file locking can cause difficulties managing resources and because merges rarely contain conflicts that need to be manually resolved.

Repository Styles:

One common way to categorize version control systems is by whether their repositories are centralized or distributed.

Centralized systems rely on all users committing their source code to a central server. Users can not commit update code if they do not have access to the server. Centralized systems often default to the copy-modify-merge versioning model.

Distributed systems allow developers to use version control even without access the server and distributed copies of the version control information serve as automatic backups.

Developers accustomed to the traditional centralized style of VCS may experience a certain learning curve when starting with distributed VCS, but developers starting with VCS for the first time may not find the concepts of distributed VCS much more challenging than those of centralized VCS.

Supports Pillars:

Confidence

Supports Skills:

Continuous Integration

Steps to Mastery:

As practitioners become more experienced with Using Version Control, different levels of capability emerge and can be summarized as follows:

* Questioning : Has heard of version control but doesn't use it. Backs up individual revisions in separate folders.

* Learning : Uses whatever version control system the team uses but check in irregularly and only knows basic operations.

* Practicing : Uses version control fully, in accordance with expected team practices. Can perform some advanced operations. May be familiar with two or three version control tools.

* Journeying : Has a full knowledge of several distributed and centralized systems. Can make recommendations based on team need.

* Mastering : Has unquestioned mastery of version control and raises the skills of teammates by example and mentoring.

* Contributing : Has written a "paradigm changing" version control system.

Resources:

A Comparison of Version Control Systems - may not be completely current