2.1. Subversive Control

Source control is the generic term for an application that manages a repository of source code being used by one or more developers. Such systems typically have three main purposes:

  • Maintain a record of any and all changes made to the code base during its history, allowing the development team to precisely recreate the state of the code base at any point in time.

  • Mediate changes between different developers such that changes made by one do not overwrite changes made by another, even if the two developers are working on the same file.

  • Allow for easy distribution of the current state of the source code to your development team, or if you're managing an open-source project, to the entire world.

Most of the commonly used source control systems follow a client-server model. The server manages the central code repository, consisting of every revision of every file in the project. This data is maintained in some combination of a database and a regular file system. The server application is responsible for keeping track of all revisions to the code and mediating access to the files in the code base. Individual developers on the project interact with the code files via a client program that contacts the server for the up-to-date version of the code base, and sends changes back to the server to be integrated with the repository.

Source control systems differ from one another in the way they manage developer interaction. The paranoid style of source control attempts ...

Get Professional Ruby on Rails™ 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.