Monday, April 27, 2009

Distributed vs Client-Server Revision Control

Sort of off-topic from the class, but while I was upgrading to the latest version of Ubuntu, I noticed a comment about how all of Ubuntu's core development was moved over to the Bazaar distributed revision control system. Looking into this, I found a Wiki entry on distributed revision control:

http://en.wikipedia.org/wiki/Distributed_revision_control

For the lazy:

Differences

* There may be many "central" repositories.
* Code from disparate repositories are merged based on a web of trust, i.e., historical merit or quality of changes.
* Lieutenants are project members who have the power to dynamically decide which branches to merge.
* Network is not involved in most operations.
* A separate set of "sync" operations are available for committing or receiving changes with remote repositories.

Advantages

* Allows users to work productively even when not connected to a network
* Makes most operations much faster since no network is involved
* Allows participation in projects without requiring permissions from project authorities, and thus arguably better fosters culture of meritocracy instead of requiring "committer" status.
* Allows private work, so you can use your revision control system even for early drafts you don't want to publish
* Avoids relying on a single physical machine. A server disk crash is a non-event with Distributed revision control

Disadvantages

* Concepts of DVCSs are more difficult for developers to grasp as they are required to know more about infrastructure.
* It's not possible to remove or change the whole history by only one party. This may be an issue for some companies, who would like to have full control over the history.
* A centralised server tends to be favored in corporate environment where access management and selective code visibility is more easily achieved; in this sense, tighter data security.
* There are no dedicated versions at one time, There are multiple variants.

Unclear

The following points are neither well documentated nor easily understandable:

* Will DVCS often require many more merge conflict resolution by hand efforts?
* Source code is considered the "crown jewels" of a software group. Centralized version control systems have been around much longer and thus perceived to be more stable.
* Some projects want or need centralized control.
* Distributed systems can end up with a person as the central point of control, rather than a server.


I'm kind of new to revision control (just started using SVN last semester, which is client-server). I'm pretty happy with SVN, but I wouldn't mind learning more about these others, especially if they have some nice advantages (of course, have to find the right combination of advantages/disadvantages).

No comments:

Post a Comment