is a relatively new revision
control system that was written in Haskell by physicist David Roundy.
The system is designed around a "theory of patches" which has its roots
in quantum mechanics. Darcs has been released under version 2 of
the GNU General Public License.
explains the project in more detail:
Darcs is a revision control system, along the lines of CVS or arch. That means that it keeps track of various revisions and branches of your project, allows for changes to propagate from one branch to another. Darcs is intended to be an ``advanced'' revision control system. Darcs has two particularly distinctive features which differ from other revision control systems: 1) each copy of the source is a fully functional branch, and 2) underlying darcs is a consistent and powerful theory of patches.
The manual further describes these two distinctions:
Functional Branches -
"This has several advantages, since you can harness the full power of darcs in any scratch copy of your code, without committing your possibly destabilizing changes to a central repository."
The Theory of Patches -
"This patch formalism means that darcs patches have a set of properties, which make possible manipulations that couldn't be done in other revision control systems. First, every patch is invertible. Secondly, sequential patches (i.e. patches that are created in sequence, one after the other) can be reordered, although this reordering can fail, which means the second patch is dependent on the first. Thirdly, patches which are in parallel (i.e. both patches were created by modifying identical trees) can be merged, and the result of a set of merges is independent of the order in which the merges are performed. This last property is critical to darcs' philosophy, as it means that a particular version of a source tree is fully defined by the list of patches that are in it, i.e. there is no issue regarding the order in which merges are performed."
Darcs differs from other revision control systems:
"In the world of darcs, the source tree is not the fundamental object, but rather the patch is the fundamental object. Rather than a patch being defined in terms of the difference between two trees, a tree is defined as the result of applying a given set of patches to an empty tree. Moreover, these patches may be reordered (unless there are dependencies between the patches involved) without changing the tree. As a result, there is no need to find a common parent when performing a merge. Or, if you like, their common parent is defined by the set of common patches, and may not correspond to any version in the version history."
Here is a brief list of Darcs
- The ability to record changes locally.
- The ability to perform interactive record operations.
- The ability to un-record a non-published change.
- A full set of interactive commands.
- Support for integrating test suites into a repository.
- Support for multiple repository server protocols including http, ftp, and ssh.
- User-defined repository write access.
- Symmetric repositories, all darcs repositories are equal.
- Support for repository browsing via a web server CGI script.
- Cross-platform capable with support for Unix, Mac OS-X, and Windows.
- History is preserved when files and directories are moved around.
- Support for token replacing allowing global variable and function name changes.
- Per-user and Per-repository default setting capabilities.
Darcs version 1.0
this week, the Linux kernel is being used as a test of the system
on a large project.
"With the release of 1.0, Roundy is also
making available a copy of the Linux kernel as a darcs repository. With
this proving ground, darcs is expected to soon scale to perform well on the
largest projects as well."
Darcs could prove to be a very useful tool for numerous open-source
development projects. Project leaders should certainly consider
to post comments)