How I learned to stop worrying and move gnucash cvs to svn

Josh Sled jsled at
Tue Dec 6 23:12:40 EST 2005

I never published my notes about moving the CVS repository to SVN...

The basics are covered in all the applicable documentation, though
there's are some things I distilled out, primarily around cvs2svn.

cvs2svn is seperately available from but has
not-quite-direct docs about how to do what I'd imagine is a pretty
straightforward thing: dump multiple CVS modules into seperate top-level
SVN directories following the recommended
"module/{trunk,branches,tags}/" convention.  It turns out, from the
cvs2svn FAQ, the incantations are:

  - ~/cvs2svn-1.3.0/cvs2svn «options below» --dump-only --dumpfile=moduleA.dump /path/to/cvs/repo/moduleA
  - svn mkdir file:///path/to/svn/repo/moduleA
  - svnadmin --parent-dir moduleA load /path/to/svn/repo < moduleA.dump

There were two sets of options that we needed to add: the first around
symbol renaming, and the second dealing with binary files.

The list of symbol transform arguments to cvs2svn to do branch- and
tag-renaming was:


Turns out some of the historical CVS gnucash files aren't appropriately
tagged binary, and for some reason cvs2svn or svn itself wasn't really
doing the right thing.  As such, I needed to override the mime-types and
eol-handling with the options:


It turns out that you just have to use all these options together,
basically.  /root/test.mime.types was cobbled together by grepping the
image/* types out from the normal mime.types, then extending the
application/octet-stream entry for some gnucash-specific extensions.

  application/octet-stream        bin dms lha lzh exe class so dll xac gmo

Apart from that, cvs2svn does all the work, here.  After running the
svnadmin import, the dumpfile for moduleA will be imported into the
directory 'moduleA' in the SVN repo, and Bob's your uncle.

-- - `a=jsled;; echo ${a}@${b}`

More information about the gnucash-user mailing list