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 '[EMAIL PROTECTED]'. 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 [EMAIL PROTECTED] _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel