Branching (software)

From Wikipedia, the free encyclopedia

Branching, in revision control and software configuration management, is the duplication of an object under revision control (such as a source code file, or a directory tree) in such a way that the newly created object has initially the same contents as the version branched off from, and (more importantly) development (creation of new versions) can happen parallelly along both branches.

Branching also generally implies merging, which is the process of copying the differences accrued to an object on another branch back to the parent branch (usually called trunk). A branch not intended to be merged (e.g. because it is for a different platform or attempts to serve a different purpose) is usually called a fork.

Branches are created for various reasons. These are covered in depth in the paper "Streamed Lines: Branching Patterns for Parallel Software Development" by Brad Appleton, Stephen Berczuk, Ralph Cabrera, and Robert Orenstein.

Branches are also known as trees. In some distributed revision control systems, such as Darcs, there is no distinction made between repositories and branches - so in these systems, fetching a copy of a repository is equivalent to branching.

The branch that a new branch has been forked from is sometimes called "upstream" - especially if the branches are maintained by different organisations or individuals.

[edit] Development branch

A development branch or development tree of a piece of software is a version that is under development, and has not yet been officially released. (In the open source community, the notion of release is typically metaphorical, since anyone can usually check out any desired version, whether it be in the development branch or not.) Often, the version that will eventually become the next major version is called the development branch. However, there is often more than one subsequent version of the software under development at a given time.

Some revision control systems have specific jargon for the main development branch - for example, in CVS, it is called the "HEAD". A more generic term is "mainline".

[edit] Shadow

In cvc, a simple open source revision control and package building system produced by rPath, a shadow is a type of branch which is designed to "shadow" changes made in the upstream branch, to make it easier to maintain small changes.

In other languages