Switching from CVS to Subversion: test svn repo available

Josh Sled jsled at asynchronous.org
Sat Oct 22 18:04:00 EDT 2005


Recently we've been planning on moving the GnuCash repository from CVS to
Subversion. This week I've made the changes on cvs.gnucash.org to enable
anonymous and developer access to a subversion repository.  This encompases:

   - http-style anonymous access
   - svn+ssh authenticated developer access
   - setup of `viewcvs.cgi` for repository browsing
   - repository migration

NOTE that this setup, and especially the migrated repository, is ENTIRELY
PROVISIONAL.  While you can both checkout and (developers) commit changes,
we're going to THROW OUT this copy and do another, real, migration later.

The current idea is to do the changeover shortly after the gnome2-branch ->
HEAD collapse, which should occur in the next couple of weeks.


Repository Layout, Migration
----------------------------

Since svn doesn't have the same notions of modules, branches and tags that
CVS does, there's an initial decision to be made about the repository layout.
I've decided to use the "recommended" layout, described below.  As well, it
seems right that both 'gnucash' and 'gnucash-docs' are part of the same
repository.

The recommended layout has a `trunk` directory for main-line development,
with sibling `branches` and `tags` directories.  As such, the repository
looks like:

/repo/gnucash/trunk/AUTHORS
                   /README
                   /src
                   [...]
             /branches/gnucash-1-8-branch/AUTHORS
                                         /README
                                         /src
                                         [...]
                      /gnucash-gnome2-dev
                      [...]

             /tags/gnucash-1-8-11
                  /gnucash-1-8-10
                  [...]

     /gnucash-docs/trunk
                  /branches/[...]
                  /tags/[...]

If anyone thinks an alternative layout is better, please suggest it.  At DayJob
we reviewed the various styles last month and I this one does make the most
sense.


Migration Specifics and Decisions
---------------------------------

The cvs2svn migration script provides the option of running some
pattern-based conversions of the tag/branch names... we could, for instance,
drop the 'gnucash-' prefix and change '-' to '.', changing...

    /repo/gnucash/branches/gnucash-1-8-branch

...into...

    /repo/gnucash/branches/1.8

This is certainly more attractive, but all historical notions of tag-names in
people heads and out in the world would be invalidated.  Thoughts?


Another option is to only migrate a subset of the history; here I've migrated
it all, but we could easily only migrate -- say -- everything from 1.8 on:
1.8 branch (+tags), gnucash-gnome2-dev and HEAD.  As this migration didn't
take that long [*] without such a restriction and there's plenty of disk
space on svn.gnucash.org, it seems better to keep as much history as
possible.  Thoughts?

[*: For the curious, it look about 27 minutes to run cvs2svn to create a ~2GB
 dumpfile of the grouped-commits, and about 45 minutes to transact those
 changesets into the empty repository.]


One thing cvs2svn does /not/ provide (that I can see, anyways) is the
migration of the contents of the .cvsignore files into subversion's
'svn:ignore' directory-property.  Perhaps someone wants to cut their teeth on
subversion by doing this. :)



Introduction to Subversion
--------------------------

The excellent "Version Control with Subversion" [1] is a very good resource
for information about subversion.  Specifically, Chapter 3. Guided Tour [2]
and Appendix A. Subversion for CVS Users [3] are relevant.

The command-line client `svn` has a nice integrated help system; `svn help`
will provide the top-level command list, and `svn help <command>` detailed
help for the specific command.

[1] http://svnbook.red-bean.com/
[2] http://svnbook.red-bean.com/en/1.1/ch03.html
[3] http://svnbook.red-bean.com/en/1.1/apa.html


The command-line svn client is intentionally similar to the cvs client, with
some important differences; here's a brief mapping of the commands:

cvs checkout        -> svn checkout
cvs commit          -> svn commit
cvs status          -> svn status [...but one that's actually useful :)]
cvs log             -> svn log
cvs annotate        -> svn blame
cvs diff            -> svn diff
cvs update          -> svn update, svn switch
cvs update -C       -> svn revert
cvs update -j [...] -> svn merge
   ----             -> svn resolved [conflicting merges must be explicitly resolved]
cvs add             -> svn add, svn mkdir
cvs remove          -> svn delete
   ----             -> svn move
cvs [r]tag [-b]     -> svn copy


Repository Addresses
--------------------

svn.gnucash.org is setup and resolves (thanks Linas! :), so the various base
URLs look like:

  anonymous:  http://svn.gnucash.org/repo/gnucash/trunk 
  developer:  svn+ssh://svn.gnucash.org/repo/gnucash/trunk
    viewcvs:  http://svn.gnucash.org/cgi-bin/viewcvs.cgi

As in...

    $ svn checkout http://svn.gnucash.org/repo/gnucash/trunk gnucash

    $ svn switch http://svn.gnucash.org/repo/gnucash/branches/gnucash-gnome2-dev

    $ svn copy svn+ssh://svn.gnucash.org/repo/gnucash/trunk \
          svn+ssh://svn.gnucash.org/repo/gnucash/branches/big-nasty-change


commit mails
------------

I've setup the post-commit hook to mail the changeset diffs to
'gnucash-changes at gnucash.org'.  Note that a seperate gnucash-patches mail of
only the commit notice (without diffs) is *not* setup here.  I'm not sure that
it will be, either.  If you have a strong desire to have a
non-diff-containing-per-commit email, speak up now.


viewcvs.cgi
-----------

cvsweb does not support subversion, and apparently will not; viewcvs does and
has been installed at http://svn.gnucash.org/cgi-bin/viewcvs.cgi/ .


Feedback
--------

PLEASE checkout and play around with this provisional repository.  If you're
a dev, then PLEASE make some changes and check them in.  Try to explore the
history to make sure it's all there.  Create a branch, rename some files, &c.

Please let me (and the list) know if there are any configuration issues or
problems.  I'll be traveling next week, but will be checking mail
periodically and certainly when I get back.


...jsled
-- 
http://asynchronous.org/ - `a=jsled; b=asynchronous.org; echo ${a}@${b}`


More information about the gnucash-devel mailing list