Modern computer software and hardware development projects often require a large number of people (e.g., programmers, engineers, technical writers, and artists) working in parallel to generate a product. Since this large number of people often require access to a common set of information and an ability to modify that information (e.g., software code), a mechanism for sharing this information among collaborators is necessary. A revision control system is a centralized system for sharing such information in a controlled manner.
Revision control systems maintain historical copies of all source code and other relevant artifacts (e.g., images, documentation, tools, and test cases) that are used in building the project. At the core of a revision control system is a repository server, which maintains a central store of data called the repository. A repository can store project information in the form of a file system tree, which is a typical hierarchy of files and directories. Unlike a standard file system, however, a repository contains every past version of every file in the file system tree since the beginning of a project, and the repository maintains a record of when each change was made to each file and, typically, information as to why such changes were made and who made those changes. Using a repository, a user can reconstruct a precise state of the project at all points in time during the development of that project.
In a typical revision control system environment, if a user wants to make changes to files in the repository, the user first checks out a copy of relevant portions of the file system tree of the project in interest to a local storage volume of the user's client computer. The user will then edit the local copy of the files. Once the user is satisfied with the changes that have been made, those changes are “committed” back to the repository. A commit typically involves scanning through the user's copy of the file system tree for files which have been changed, and then uploading the changed files back to the repository server to update the repository. In order to determine the changes made to files, a client typically stores two copies of every file on the local volume, one of which is maintained in its original form. In order to store two copies of the relevant portions of the project file system tree, client resources are expended in the form of disk space to maintain the file system tree copies and repository server resources are consumed in order to respond to the request to download the requested files from the file system tree, which are typically many more than the files being modified and often the complete file system tree from the repository. Further, network resources are consumed during the period in which files are being transferred from the repository server to the user's client computer.
Traditional revision control systems therefore consume significant storage resources, network resources, and repository server resources while responding to client requests for file system trees. In addition, since many clients can be connected to a single repository server, the repository server can be further slowed by competing requests for information and therefore users can experience significant time delays in waiting for responses to requests for information. Thus, a traditional revision control system also makes inefficient use of personnel resources and consequently costs a business additional money.
It is therefore desirable to provide a mechanism by which a user's client computer need request and receive only information the client computer requires at that time, rather than file and directory information from a file system tree that is not needed by the client computer. Such a mechanism would thereby conserve repository server, network, client, and personnel resources. It is further desirable that such an improved mechanism be capable of integration in traditional revision control environments, to avoid costs associated with migration from one repository server to another.