views:

188

answers:

4

I want to create a personal digital archive.

I want to be able to check digital files (some several years old, some recent, some not yet created) into that archive and have them preserved, along with their metadata such as ctime, atime and mtime.

I want to be able to check these files out of that archive, modify their contents and commit the changes back to the archive, while keeping the earlier commits and their metadata intact.

I want the archive to be very reliable and secure, and able to be backed up remotely.

I want to be able to check files in and out of the archive from PCs running Linux, Mac OS X 10.5+ or Win XP+.

I want to be able to check files in and out of the archive from PCs with RAM capacities lower than the size of the files. E.g. I want to be able to check in/out a 13GB file using a PC with 2GB RAM.

I thought Subversion could do all this, but apparently it can't. (At least, it couldn't a couple of years ago and as far as I know it still can't; correct me if I'm wrong.)

Is there a libre VCS or similar capable of all these things?

Thanks for your help.

A: 

I doubt there is a vcs that does exactly what you want. I wouldn't choose a feature like this as my primary criteria for choosing a vcs. However, using svn and git you can store properties along with your commit, and enable security to not allow editing of the properties.

Mike Miller
+1  A: 

What you want seems to be better achieved with rsync and snapshots. You can learn about it here: http://rsnapshot.org/

Anyway, this seems like a question better suited to serverfault or superuser.

itorres
A: 

Git really can't do it either, and neither can Mercurial, and as far as I know any other modern SCM system. The reason is that 1) they were designed for source code and 2) preserving and updating those file metadata timestamps sensibly in the face of branches, merges, and other SCM activities is pretty much impossible. Plus they all can set the mtime on files to the commit time, which is as useful as mtime for the vast majority of use cases. Using mtimes also causes lots of unnecessary churn in SCM systems (can you imagine if they stored atime as well?) Older file-based SCMs like CVS and even Visual SourceSafe do store mtimes, but they have so many other weaknesses for your use case that they are not worth considering.

The common solution suggested for all these SCMs is a commit/update hook script which stores your file metadata (timestamps, permissions, whatever) as a separate file in the repository or even as a custom SVN property. Your script updates that file at checkin, and restores the metadata at checkout/update. Merging gets ugly no matter what. There are lots of such scripts out there as samples on the internet.

If you want an portable archive, the simplest thing to do might just be tar + xdelta + SHA1SUM/gpg signatures to "chain" things together.

rmalayter
A: 

How do you get mercurial to set the mtime to the commit time?

Jimmy