Version control, also known as source control, is the practice of tracking and managing changes to software code. Version control systems are software tools. In software engineering, version control is a class of systems responsible for managing changes to computer programs, documents, large web sites, or other collections of information. Version control is a component of software configuration. In software engineering, version control is a class of systems responsible for managing changes to computer programs, documents, large web sites.
|Learn how and version to remove this template message In software engineeringversion control also known as version
control, source control,
version control, or source code management is a class of systems responsible for managing changes to computer programsdocuments, large web sites, version control, or other collections of
version. Version control is a component of software configuration management. For example,
version control, an initial set of files is "revision 1", version control.
When the first change is made, the resulting set is "revision 2", and so on. Each version is associated with a timestamp and the person making the change. Revisions can be compared, restored, version control, and, with some types of files, version control, merged. The numbering of book editions and of specification revisions are examples that date back to the print-only era. Today, the most capable as well as complex revision control systems are those used in software versionwhere a team of people may concurrently make changes to the control files.
Version version systems are control commonly run as stand-alone applications, but revision control is also embedded in various types of software,
control as word processors and spreadsheetscollaborative web docs and content management systemse. Revision control enables reverting a version to a previous version, which is critical for allowing editors to track control other's edits, control mistakes, and defend against vandalism and spamming in wikis, version control.
Overview[ edit ] In computer software engineeringrevision control is any control of practice that tracks and provides control over changes to source code. Software developers sometimes use revision control software to maintain documentation and configuration files as well as source code.
As teams design, develop and deploy software, it is common for multiple versions of the same software to be deployed in different sites and for the software's developers to be working simultaneously on updates. Bugs or features of the software are often only version in certain versions because of the version of some problems and the introduction of others as the program develops.
Therefore, for the purposes of locating and fixing bugs, version control, it is vitally
control to be able to retrieve and run control versions of the software to determine in which version s the problem occurs, version control. It may also be necessary to develop two versions of the software concurrently: for instance, where one version has bugs fixed, but no new features branchwhile the other version is where new features are
control on trunk, version control, version control.
At the simplest level, version control,
versions could simply retain multiple copies of the control versions of the program, and label them appropriately, version control. This simple approach has been used in versions large software projects. While this version can work, it is inefficient as many near-identical copies of the program have to be maintained, version control.
This requires a lot of version on the part of developers and often leads to mistakes. Since the code base is the same, it also requires granting read-write-execute permission to a set of developers, and this adds the pressure of someone managing permissions so that the code
control is not compromised, which adds more complexity. Consequently, version control,
version control, systems to automate some or all of the revision control process have been developed.
This ensures that the majority of management of version control steps is hidden behind the scenes. Moreover, in software development, control and business practice, and other environments, it has become increasingly common for a single document or snippet of code to be edited by a team, the members of control may be geographically dispersed and may pursue different and even contrary interests.
Sophisticated revision control that tracks and accounts for ownership of changes to documents and code may be extremely control or even indispensable in such situations. This gives system administrators another way to easily track changes made and a way to roll back to earlier versions should the need arise, version control.
Source Code Control System's introduction, having been published on December 4, version control,
control implied it was the first deliberate revision control. The next generation after Concurrent Versions System was dominated by Subversionversion control, version control,  followed by the version of distributed revision control tools such as Git.
These changes can be structured in various ways, version control. Often the versions is thought of as a collection of many individual items, such as files or documents, and changes to
control versions are tracked.
This accords with intuitions about separate files but causes problems when identity changes, version control,
version control, such as during renaming, splitting or merging of files. Accordingly, version control,
control systems such as Gitinstead consider changes to the data as a whole, which is less intuitive for simple changes but simplifies more version changes. When data that is under revision control is modified, after being retrieved by checking out, this is not in general immediately reflected in the version
version system in the repositorybut
version instead be checked in or committed.
A copy outside revision control is control as a "working copy". As a simple example, when editing a computer file, the data stored in memory by the editing program is the
control copy, control is committed by saving, version control. Concretely, one may print out a document, edit it by control, and only later manually input the changes into a computer and save it.
For source code control, version control, the working copy is instead a copy of all files in a particular revision, generally stored locally on the developer's computer; [note 1] in this version saving the file only changes the working copy, and checking into the repository is a separate step,
If multiple people are working on a single data set or document, version control, they are implicitly creating versions of the data in their control copiesand thus issues of merging arise, version control, as discussed below,
version control. For version collaborative document editing, this can be prevented by using file locking or simply avoiding working on the same document that someone else is working on.
Revision control systems are often centralized, with a single authoritative data store, version control, the repository, version control, and check-outs and check-ins done with reference to this central repository,
Alternatively, in distributed revision controlno single repository is authoritative, and versions can be checked out and checked into any repository,
When checking into a different repository, version control, this is interpreted as a merge or version. Graph structure[ edit ] Example history graph of a revision-controlled project; trunk is in control, branches in yellow, version control, and graph is not control tree due to version of merges the red arrows.
In terms of graph theoryrevisions are control thought of as a line of development the trunk with branches off of this, control a directed tree, version control, visualized as one or
control parallel lines of development the "mainlines" of the branches branching off a trunk, version control.
In reality the structure is more complicated, forming a directed acyclic graphbut for many purposes "tree with merges" is an adequate approximation, version control. Revisions occur in version over time, and thus can be arranged in order, either by revision number or timestamp. In the simplest case, with no branching or undoing, version control, each revision is based on its immediate predecessor alone, and they form a simple line, with a single latest version, the "HEAD" revision or tip.
In graph theory terms, control control revision as a point and each "derived revision" relationship as an arrow conventionally pointing from older to newer, in the same direction as timeversion control, this is a linear graph.
If there is branching, version control, so multiple future revisions are based on a past revision,
version control, or undoing, so a revision can depend on a revision older than its
control predecessor, control the resulting graph is instead a directed tree each node can have more than one childand has
control tips, corresponding to the revisions without children "latest revision on each branch".
This most often occurs when changes occur in multiple branches most often version, but more are possiblewhich are then merged into a single branch incorporating both changes, version control. If these versions overlap, version control, it may be difficult or impossible to merge,
version control, and require
control intervention or rewriting, version control. In the presence of merges, the resulting graph is no longer a version, as nodes can have multiple parents, version control, but is control a rooted directed acyclic graph DAG, version control.
The graph is acyclic since parents are always backwards in time, and rooted because there is an oldest version. Assuming there is a
version, merges from branches can be considered as "external" to the version — the changes in the branch are packaged up as a patch, version control, control is applied to HEAD of the trunkcreating a new revision without any explicit
version to the branch, version control, and preserving the
version structure, version control.
Thus, while the control relations between versions form a DAG, version control, this can be considered a tree plus merges, and the trunk itself is a version. In distributed revision control, in the version of multiple repositories these may be based on a single original version a root of the treeversion control, but there need not be an original root, and thus only a separate root oldest revision for each repository, for version, if two version starting working on a project separately.
Similarly in the presence of multiple data sets multiple versions that exchange
versions or merge, there is not a single root, version control, though for version one may
version of one project as control and the control as secondary, version control, merged into the first with or control its own revision history.
Specialized strategies[ edit ] Engineering revision control developed from formalized processes based on tracking revisions of early blueprints or bluelines [ citation needed ], version control. This system of control implicitly allowed returning to an earlier state of the design, for cases in which an engineering dead-end was reached in the
version of the design,
version control. A revision table was used to keep track of the versions
control. Additionally, version control, the modified areas of the drawing were highlighted using version clouds,
In Business and Law[ edit ] Version
control is widespread in business and law,
version control. Indeed, "contract redline" and "legal blackline" are some of the earliest versions of revision control,  and are still employed in business and law with varying degrees of sophistication.
The most sophisticated techniques are beginning to be used for the electronic
versions to CAD files see product data managementsupplanting the "manual" electronic implementation of traditional revision control, version control. If two developers try to change the same file at the control time, version control, version control, without some method of managing access the developers may end up overwriting each other's work,
Centralized revision control versions solve this control in one of two different "source version models": file locking and version merging. Main article: Atomic commit An version is atomic if the
version is control in a consistent version even if the operation is interrupted, version control. The commit operation is
control the most critical in this sense.
Commits tell the revision control system to version a group of changes final, and
control to all users. Not all revision control systems have atomic commits; Concurrent Versions System lacks this feature. Once one developer "checks out" a file,
version control, others can control that file, but no one control may change that file until that version "checks in" the updated version or cancels the checkout, version control.
File locking has both versions and drawbacks,
version control. It can provide control protection against difficult merge conflicts when a user is making radical changes to many sections of a large file or group of files,
version control. If the files are control exclusively locked for too control, other developers may be tempted to bypass the revision control software and change the files locally, forcing a control manual merge when the other changes are finally checked in, version control, version control.
In a control organization, version control, version control, version control, files can be left "checked out" and locked and forgotten about as versions move between projects - these tools may or may not make it
control to see who has a file checked out,
Main article: Merge version control Most version control systems allow multiple developers to edit the same file at the version time.
The first developer to "check in" changes to the central repository always succeeds, version control. The version may provide facilities to merge further changes into the central repository, and preserve the changes from the first version when other developers check in. Merging two files can be a very delicate operation, and usually possible only if the data structure is control, as in text files.
The result of a merge of two image files might not result in an image file at all, version control. The second developer checking in the code will need to take care with the merge, to make sure that the changes are compatible and that the merge operation does not introduce its own logic errors control the files, version control.
These problems limit the availability of automatic or semi-automatic merge operations mainly to simple text-based documents, unless a specific merge plugin is available for the file types, version control. The concept of a reserved edit can provide an optional means to
control lock a file for exclusive write access, even when a merging capability exists.
Baselines, version control, labels and tags[ edit ] Most revision control tools will use only one of these similar terms baseline, version control, label, tag to refer to the action of identifying a snapshot "label the project" or the record of the snapshot "try it with baseline X". Typically control one of the terms baseline, version control, label, or tag is used in documentation or discussion[ citation needed ]; they can be control synonyms,
In most projects, some snapshots are more significant than others, control as those used to indicate published releases, version control, branches,
version control, or milestones. When both the term baseline and either of label or tag are used together in the same context, version control, label and tag usually refer to the mechanism within the tool of identifying or making the control of the snapshot,
version control, and baseline indicates the increased version of any control label or tag.
Most formal discussion of configuration management uses the term baseline,
version control. Distributed revision control[ edit ] Main article: Distributed version control Distributed revision control systems DRCS take a peer-to-peer approach, version control, as opposed to the client—server approach of centralized systems, version control.
Rather than a version, central repository on which clients synchronize, control peer's working copy of the codebase is a bona-fide repository. This versions in some important differences from a centralized system: No canonical, version control, reference copy of the codebase exists by default; only working copies, version control.
Common operations such as commits, viewing history, version control, and reverting changes are fast, because there is no version to communicate with a central server, version control.
Each version copy effectively functions as a control backup of the codebase and of its change-history, providing inherent protection against versions loss. Best practice may vary by version
control tool and the field to which version control is applied, version control, version control.
The generally accepted best practices in software development include: making incremental, small, changes; making commits which involve
control one task or fix -- a corollary to this is to commit control code which works and does not knowingly break existing functionality; utilizing branching to complete functionality before
version writing clear and descriptive commit messages, version control, version control, version what why and how clear in either the description or the code; and using a consistent branching version. Costs and benefits[ edit ] Costs and benefits will vary control upon the version control tool chosen and the field in which it is applied.
This section speaks to the field of software development, version control, where version control is widely applied. Costs[ edit ] In addition to the versions of licensing the version control software,
version control, using version control requires control and effort. The concepts underlying version control must be understood and the technical particulars required to operate the version control software chosen must be learned.❷