Crossfire should use Git
Crossfire originally lived in the world of CVS, until a handful of brave
knights ventured to move it to SVN. Today I believe it is time to move
again, and this time to Git.
Git is a distributed version control system, which means that checking
out an old revision or reading the commit log does not require accessing
the sometimes painfully slow servers on the Internet. Each 'clone' of
the repository is a fully-functioning repository on its own. This means
that developers, even those who do not have commit access, can work on
projects at their own pace and submit them with tools such as `git
format-patch` and others.
Git makes branching easy. It makes maintaining them manageable. As an
example, several important fixes were made in 'trunk', which have yet to
be backported to 1.12.0. In addition, there are no release engineering
branches, which means that each release is simply cut from the next
'trunk' state in line. Even "trivial" fixes could benefit from topic
branches, but SVN does not make this easy, convenient, or fun. Using Git
branches would help create a more stable codebase by improving release
engineering and adopting intermediate "stable" branches that servers can
track. A recent autotools bug that wiped server configuration files, for
example, could have been prevented if changes on the bleeding edge were
evaluated by test servers first.
Git is not terribly difficult to use. Right now I access the SVN
repository through a local Git clone, but this is inadequate because I
cannot publish my topic branches (without considerably difficulty). A
migration that preserves tags, branches, and full revision history can
be made as fast as the revisions are pulled from SVN.
In summary, a few important benefits of using Git:
Contributors can work on the code easier, with revision control.
Distributed, so works without (slow) Internet access.
Encourages branching -> more stable codebase.
Easy to use and migrate to.
Full (all revision history) repository size: 21.7 MiB (server), 13.9
MiB (client), 106.1 MiB (maps)
However, there are a few immediate problems:
Most projects using SVN make extensive use of the revision number
identifiers. Crossfire is no different. Git has revision (commit)
identifiers, but they are meaningless without the repository, whereas
SVN increments the number for each commit. I do not believe this is an
issue, because client compatibility is not determined by this
specifier, plugin versions are only checked to match, and other uses
of the identifier can be removed.
Of course, comments, questions, and hate mail are always welcome.