Currently, gEDA uses CVS. CVS is the “original” version control system used for collaborating on open source projects.
Unfortunately, CVS has a number of problems:
CVS does not support the concept of patch sets. That is, it’s very difficult to work out what changes went into
CVS together without using dodgy tools like
cvsps.
Merging with
CVS is painful, especially when there is keyword expansion brokenness such as the
Log
keyword.
CVS doesn’t support renames preserving history.
The overhead involved in creating and managing a branch in
CVS is such that people tend to do one of the following:
Don’t bother
Use another VCS locally, then export patches, then commit patches to
CVS. This is a big hassle for everyone.
Do II.
and use a branch in
CVS, which is even more hassle, but means people can see the changes in advance.
You can’t do anything in
CVS (view logs, view “blame” for a line of code, create diffs to previous versions) without being online & connecting to the repository.
gEDA has a development process that involves a number of people working independently on separate changes. Some of these are a single changeset hacked together in a few minutes, some involve several major changes and are developed over a matter of months. Often, in order to track down a tricky bug, it is necessary for a developer to try and work out what a fellow developer did several months ago.
The following features would be deemed desirable in a version control system:
Free as in beer as well as free as in speech.
Actively developed/maintained.
Atomic commits (a.k.a. changesets).
All users have their own copy of the history.
Users can make local branches/commits without being logged onto a remote server (“distributed” repository model).
Merge & rename tracking.
Easy to transition to from
CVS.
Using the comparison matrix at Wikipedia, it looks like only Mercurial and git have the features we require.
A number of factors militate in favour of using git:
Existing experience within the the gEDA development community.
More extensively used by major projects (Linux kernel, X.org X server, OLPC, WINE).