Jump to content

Code Co-op: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Bartosz (talk | contribs)
No edit summary
Line 1: Line 1:
{{advertisment}}
{{Infobox Software
{{Infobox Software
| name = Code Co-op
| name = Code Co-op

Revision as of 15:43, 25 January 2007

Code Co-op
Stable release
5.0 / Nov 15, 2006
Repository
Operating systemWindows
Available inEnglish
Typeversion control system
Licensecommercial
WebsiteReliable Software

Code Co-op is the peer-to-peer version control system made by Reliable Software.

Distinguishing features

Code Co-op uses peer-to-peer architecture to share projects among developers and to control changes to files. Instead of using a centralized database (the repository), it replicates its own database on each computer involved in the project.

The replicas are synchronized by the exchange of (differential) scripts. The exchange of scripts may proceed using different transports, including e-mail (support for SMTP and POP3, integration with MAPI clients) and LAN.

The use of e-mail for synchronization is particularly convenient in widely distributed collaborations, or when using mobile computers.

Version 5.0 introduced a unique Peer-to-peer wiki system, which can be used for integrating documentation with a software project. Code Co-op wiki also offers a unique ability to create text-based Wiki databases, complete with simplified SQL queries integrated into wiki pages. One application of this feature is a wiki bug database. Code Co-op takes care of versioning and sharing of wiki sites and databases among project members.

Standard features

  1. Distributed team support through E-mail, LAN, or VPN
  2. Change-based model -- modifications to multiple files are checked in as one transaction
  3. File additions, deletions, renames, and moves are treated on the same level as edits -- they can be added in any combination to a check-in changeset
  4. File changes can be reviewed before a check-in using a built-in or user-defined differ
  5. Synchronization changes can be reviewed in the same manner by the recipients
  6. Three-way merge
  7. Project history is replicated on each machine. Historical version can be reviewed, compared, or restored
  8. Integration with Microsoft SCC clients, including Visual Studio, and Borland Delphi and C++ Builder

History

Code Co-op was the first distributed version control system. It debuted at the 7th Workshop on System Configuration Management in May 1997 [1].

The development of Code Co-op started in 1996, when Reliable Software, the distributed software company that makes it, was established. Reliable Software needed a collaboration tool that would work between the United States and Poland. The only dependable and affordable means of communication between the two countries was e-mail, hence the idea of using e-mail for the exchange of diffs. Of course, with such slow transport, using a centralized repository was unfeasible. Each user of Code Co-op had to have a full replica of the repository, including the history of changes.

The problem was reduced to that of designing a distributed database that uses slow and unreliable transport for synchronization (later, faster LAN transport was also added). It also followed that the synchronization between multiple sites must use some kind of peer-to-peer protocol.

Challenges

The biggest challenge for a distributed system is the merge problem--How to create a single "official" version of the project from contributions made by many independent developers?

In a centralized version control system, it's the server that keeps the official copy of the project--the central repository. All changes are made against the current version stored in that repository. Conflicts are avoided by providing a centralized locking mechanism. The server is locked during each individual check-in operation.

In a distributed system, check-ins are made into a local repository. Each project member works on his or her private branch of the project. Those branches have to be merged in order to create a common version of the project--the trunk.

The simplest approach, adopted by most distributed version control systems, is to leave the merging to the users. Although this model is the most flexible, it is also the most intrusive. Merging, even with specialized tools, becomes a non-trivial part of the development effort.

Code Co-op is unique among distributed version control systems in that it enforces the view of a single distributed database. Local repositories are considered the replicas of this virtual database. Any changes made to a local repository are automatically propagated to all other repositories (the push model). As long as the frequency of check-ins is much lower than the latency of inter-repository transport, conflicts requiring merges are very rare.

Even with the latency of e-mail transport, this model works very well for most software development scenarios. For large distributed development teams, the use of VPN, with its lower latency, reduces the need for merging to a minimum.