views:

124

answers:

1

We've been working with a Subversion repository for some time now for a research lab and have repeatedly been presented with a common issue:

We want to version all of the code, and small bits of permanent data, but we also have large binary blobs that live within ignored directories in user checkouts and we'd like to make it easy for the users to both back those files up and synchronize them so that multiple users could work with the larger blobs without having to manually copy them between machines or check them into the repository (it already has more of this sort of thing than is ideal).

I've thought about using various backup services like JungleDisk to at least make it easy for users to back up this data, but they're not really designed for synchronization. Also, just working off of the JungleDisk would be less than ideal because sometimes the data files are quite large and waiting for them to be cached could degrade performance significantly.

Other alternatives could be along the lines of providing copies of rsync, and just using some shell scripts within the repository that users could run to sync files manually (separate from svn checkouts/commits), but it would be nice to have this work with really minimal effort on Mac, Windows & Linux for users who may not be the most technically savvy. So it would be ideal to have this be something that's easy to configure (for new unversioned files), easy to install (fewer steps is better) and doesn't require much user intervention to make the system work (automatic, or just double-clicking a script would be nice).

Any thoughts or suggestions?

+4  A: 

I'd make an rsync script to do that, and then wrap the subversion binary in it. Probably need some further scripting to install it at low hassle for end users (though if you only have a few, just do it by hand).

Additionally, if it was at all possible, I'd try to move those binary blobs to some location other than within your subversion tree... that just seems to be asking for trouble.

Supporting windows is just a pain in all of these situations. I'd personally use python for this task because it's fairly portable across all those systems.

Paul McMillan
Beat me to it. I'd add, if you are using a build system (ant,rake,phing,etc) but the rsync command in there.
Lance Rushing
I do somewhat agree that moving it out would be less painful. I do actually have some server-side hooks to prevent commits that include certain filenames or directories. The error that the client gets is not so useful, but at least then when someone asks why their commit failed I can explain that it had to do with attempting to check in files that should have been excluded.I'd like to keep the number of things that need to be installed to a minimum. Windows is the rate-limiting step there because it definitely won't already have rsync, python, etc..
James Snyder