Taking the plunge

Adam Compton comptona at gmail.com
Fri Jan 5 18:44:27 CET 2007


J. David Blackstone wrote:
>   I'm just getting started with putting everything I have into Subversion.  My main purposes are to synchronize things (especially configuration) across a large number of machines, to make things I want available from multiple locations rather than tied to a specific machine, and to have a revertable backup of everything I do.
>
>   Here are the machines I'm needing to synchronize:
>
> * My work laptop: I spend more time here than anywhere else.  Windows, but my life happens in Cygwin.
> * My RT machine: A Debian on Sparc machine at my desk where I (try to) keep my task list, and occasionally do other mundane things (for example, right now I'm testing my new SVN home directory there)
> * New and old primary work machines: where programs I write get installed and run, and where a significant part of my development work occurs (it can't all be done from the laptop); I have my own personal account on these where development tends to occur, then there are system accounts for installed programs ... and to complicate things, the CVS repository I used to use for these programs was scarfed up into the new repository for the workgroup I joined last year.  New machine is in progress replacing everything Old machine does, just as soon as it's connected to everything Old machine is, which is taking awhile.
> * Other machines from my workgroup
> * Home laptop: Windows, with Cygwin.  For now
> * Home RT machine: Debian on Intel, may eventually use as a home file server or other purposes
>
>   Here are the repositories I think I'll need:
> * Gotta fit in the workgroup CVS repository
> * A personal repository, hosted at my preferred hosting provider.  This will hold universal configuration files, non-work related programs (mostly tiny scripts that do things that are irrelevant to everybody on the planet except me, and occasionally my wife), and a large repository of files related to my diverse interests (gotta figure out how to organize this, currently uses the plan of "dump everything in a big swollen directory, with a couple of ill-thought-out swollen subdirectories for some things."  This repository can contain NOTHING that is work-specific.  No code, no work-specific configuration files, definitely no passwords or keys, not even machine names or design notes.
> * A work repository.  This will hold work programs I develop before they become part of the group CVS repository, work-specific configuration files, design notes, etc.
>
>   So far, my planned layout is that I'll have everything work related in a directory named for my employer.  This directory will be a working copy of my work repository, but it will also contain a complete working copy of my workgroup's CVS repository, named for my workgroup.  There will also be a dotfiles directory, containing configuration files which will be linked to from the home directory.  Joey Hess's article talks about using a tmp/ subdirectory for things that haven't found a permanent place in the main repository, yet.  I'll probably have something like that, and I think it will probably have numbered subdirectories that correspond to RT ticket numbers.
>
>   Meanwhile, my main repository will contain a dotfiles directory (again with symlinks from the top) and directories named for my different spheres of interest.  I may group everything into a personal/ subdirectory, so that at work it doesn't cause clutter.  Or I may separate things into two personal repositories: one for universal configuration, and then another that can serve as the root of my home directory at home, but will be the personal/ directory on my work laptop.
>
>   I don't know yet how to handle several things.  For one thing, I don't want the entire contents of personal/ checked out on every work machine.  I'd like it accessible on my laptop.  I may pitch my MP3 collection in there or something.  Obviously that works great on my laptop, but I'd never want it on the primary machines.
>
>   Another issue is splitting out the configuration files.  I need to set a bunch of environment variables and add directories to my PATH on work machines, but I can't put this information in the personal repository.  My plan is to have the main configuration files check for the existence of the work configuration files and source them if they exist.  I may even be able to do that without a need to symlink them into the home directory.
>
>   Finally, SVN doesn't exist on most of those work machines. :)  I can probably put it into my home directory in several instances, but that brings up the thought of versioning compiled software in my home directory!  (Possibly across multiple architectures!)  As well as a bit of a chicken-egg problem for getting the setup onto a new machine.  And on some of these machines, directory space is limited (which is of course another problem to solve, as I'll definitely have to segment the repository and only pick selected items).  Plus, I'm not sure I want all these work machines calling home for the personal repository, so maybe what I need to do is find some means of making a master working copy on a machine at work which the other machines can somehow sync to.  Maybe what I really want is SVK (in fact, distributed branches would allow me to simply have a work branch and a personal branch of several things, which would solve a lot of these problems), but I've barely just learned subversion, and not sure I'm ready to take that plunge.
>
>   Right now all I've got is my main repository, with my bash and vim configuration files loaded.  Currently I'm just trying to spend a few minutes making a small add each day.  In the process hopefully I can start organizing things so I don't have giant directories any more.  Eventually I'll start regularly querying to see what's missing, and hopefully eventually everything will get scarfed up into the appropriate repository(ies).  I'm also planning to post some regular reports here and share stories of banging my head up against the wall. :)
>
> David
>
> _______________________________________________
> vcs-home mailing list
> vcs-home at lists.madduck.net
> https://albatross.madduck.net/mailman/listinfo/vcs-home
>   
One thing that will probably help you in planning and building your 
configuration is the svn:externals property.

See http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html 
for the official definition, but basically, you construct a working copy 
on-the-fly from a list of other repository directories. These can be 
from the same repository, or from different ones.

For example, I have something like this setup in my main repository:

/branches
  /linux
    /desktop
      /.local
    /server
      /.local
  /mac
    /laptop
      /.local
/trunk
  /emacs
  /bash
  /doc
  /bin


where the directories in /branches are mostly empty, and contain 
svn:externals properties that reference the directories in the trunk. 
The Windows branch, for example, has no need for the "/bash" module, so 
I do not include its svn:externals reference and thus it never appears.

I learned about this method from this article: 
http://toykeeper.net/tutorials/svnhome ; it has much more information 
than my meager summary here.

Good luck with your project!

- Adam Compton





More information about the vcs-home mailing list