Home Directory In CVS 414
shamir_k writes "Joey Hess has come up with an innovative solution to a problem we have all faced. He's put his whole home directory in CVS. Not only can he move between multiple computers easily, he also has automatic distributed backups."
Described in Linux Journal months ago (Score:2, Interesting)
Waky, waky editors?
Re:Described in Linux Journal months ago (Score:4, Funny)
Re:Described in Linux Journal months ago (Score:4, Insightful)
There's nothing about "new" mentioned anywhere in there, you pulled that out of your ass just so you could complain.
Merriam-Webster defines news [m-w.com] as "a report of recent events". If Slashdot is "News for Nerds" then an article from over a year ago ain't news.
Re:Described in Linux Journal months ago (Score:4, Insightful)
Re:Described in Linux Journal months ago (Score:2)
Here's a piece of advice (Score:5, Funny)
Re:Here's a piece of advice (Score:3, Funny)
like: untitled.bmp and untitled.bmp - even though they're two different pictures! It'll save the time to rename whole directories!
And, you can hide all your pr0n from prying eyes too! OOooooo Ahhhhhh!
Unless, you've named your tree - jerkoff_material.
Pun Intended... (Score:5, Funny)
"Hold on a minute, I've got to check out this porn."
CVS takes files? (Score:5, Funny)
My favorite directory to put in CVS (Score:5, Interesting)
Have a checkin comment for why a configuration change got made. Be able to roll back a failed experiment reliably. Find out when a change happened.
Or just RCS (Score:3, Interesting)
It also makes complete OS upgrades easier, I use the RCS subdirs to tell what I changed from the base install.
Re:Or just RCS (Score:5, Informative)
http://bleu.west.spy.net/~dustin/soft/filemonitor [spy.net]
You point it at a dir and run it from cron nightly. It also gives you a handy nightly mail telling you what changed. Excellent for those late night changes to systems where you don't remember what you did...or if someone else made some late night changes that you'd like to undo.
Re:Or just RCS (Score:3)
Re:My favorite directory to put in CVS (Score:5, Funny)
Re:My favorite directory to put in CVS (Score:5, Informative)
Or you can just use Gentoo, which does this automatically when you update your system, pointing out the location and files that are different, all with diff output, and the ability to merge the changes, overwrite or ignore the change.
Re:My favorite directory to put in CVS (Score:3, Informative)
Re:My favorite directory to put in CVS (Score:5, Informative)
Debian.
I wonder..... (Score:5, Interesting)
Re:I wonder..... (Score:5, Informative)
That being said, doing it in BK would be a compelling alternative if you wanted to use the same
Re:I wonder..... (Score:3, Informative)
Re:I wonder..... (Score:3, Funny)
^Z
[1] loop ends
Why just home? (Score:5, Interesting)
*Made a mistake in your config file? Revert it
*User deleted the file? Revert it
*Want to see why you made a change to any given file? Check the comments (commenting would be optional, of course)
*Your system was exploited? Revert the entire system to before the exploit
*Upgraded an app and regret it? Revert the files
And so on. I'm not sure if CVS would be the best method (I'm not a SCM specialist), but I'd see this as an extremely useful feature who's time has come.
Re:Why just home? (Score:4, Informative)
It had a filestore with file versioning - about 30 years ago.
Re:Why just home? (Score:2)
Re:Why just home? (Score:3, Informative)
Ever hear of VMS ? It had a filestore with file versioning - about 30 years ago.
Not just VMS. Apollo DOMAIN had something like this, too. -jh
Re:Why just home? (Score:4, Informative)
- It created a new version every time you saved, so just going through a few change/compile/fix cycles (for example) would create lots of versions clogging up the disk.
- The old versions were in the same place as the latest version, and if you wanted to delete a file, you'd just say "delete blah.blah.*" to wipe out all versions (and therefore all traces of the file)... then say "oops!"
It was useful in many cases, but in a different way from CVS. A very useful solution would be to have file-level journaling with the ability to throw in comments and create tags and branches.
Re:Why just home? (Score:5, Informative)
Users can rollback to previous revisions of files that they've saved to the 2k3 server, saving the sysadmins the time of restoring *another* accidently deleted file from the backup tapes.
Re:Why just home? (Score:2)
Re:Why just home? (Score:2)
Yes (Score:2)
Re:Yes (Score:2)
Re:Why just home? (Score:2)
Worked great 90% of the time. The other 10% or so it was easier to just go to last night's
Re:Why just home? (Score:3, Funny)
(ducks)
Re:Why just home? (Score:2)
Not too sure, though.
Re:Why just home? (Score:2)
Re:Why just home? (Score:5, Insightful)
You can't automatically commit after every xxx bytes of data written, because that means there will be a bunch of intermediate states on disk, most of which are probably bogus (this argument applies to the above two options as well).
The only thing that even remotely makes sense is to commit on close(), but that doesn't make sense for applications like text editors which keep the file open for the entire duration. You want each SAVE to be a commit, not each CLOSE.
What this boils down to is that there must be application level support for the commit operation (i.e., a new commit() syscall). The application has to specifically be coded to tell the operating system "Ok, I'm done with the revision, commit this now." And that means every application on the system will have to be tweaked to make the necessary commit calls, not to mention the thought that goes into deciding WHEN it is appropriate to commit. I would wager that a lot of maintainers wouldn't bother to make those changes, and as a result those applications wouldn't support versioning.
I agree that a versioned file system would kick ass, and there are even some out there already (Google for "versioning filesystems"). But they tend to be special purpose. I don't see how it could be cleanly and transparently integrated into a general purpose system such as Linux.
Note that I didn't bother to check CiteSeer to see if there is academic work on this before posting this comment. So if anyone knows of any work toward that end, I'm sure a lot of us would appreciate a pointer to it.
Re:Why just home? (Score:2)
We would, however need a new system call close_with_comments that comments a commit (the old style close would not comment, thus allowing back
Re:Why just home? (Score:5, Informative)
Re:Why just home? (Score:2)
Re:Why just home? (Score:2, Insightful)
This is the reason database transactions exist. A filesystem based on CVS would need the concept of (atomic) transactions: you open(2) the file, therefore starting a transaction. Every access (read(2)) and modification (write(2)) etc... goes in the transaction _only_, and at close(2), the transaction gets commited.
The funny part starts at close() (or commit())-time, when you need to resolve conflicts. Huh...
The solution is in your comment... (Score:2)
Or if the OS was really smart, you could configure it to commit on save() or close() depending on the application.
Re:Why just home? (Score:2)
Re:Why just home? (Score:5, Interesting)
I use Unison [upenn.edu] for this, and it works great. A commit happens whenever I choose to run Unison. I'm a human. Unlike a computer, I understand what I'm doing and why. I know when I'm done working on something, and when I'm ready to synchronize my files.
From the article:
I get all these benefits from Unison. Admittedly, the history only gives me snapshots at two different times (time 1=now, time 2=last time I committed), but that's always been good enough for me. Deleted the wrong file? No problem -- get it back from the other machine.
Unison is also cool because, unlike CVS, it (a) is easy to set up and maintain, (b) is quick and easy to run, and (c) works just as easily with binary files as with text files.
Re:Why just home? (Score:2)
Re:Why just home? (Score:2)
Re:Why just home? (Score:2)
I'm by no means an OpenVMS expert, so if there's one in the house please feel free to correct me.
At a past client (nearly seven years ago) I recall staring in awe when I learned some of the details about the VMS filesystem. Filenames were appended with a colon, followed by a number (for example, "README.TXT;5"). The number after the colon represented the version number.
Accessing the filename (without the colon or versi
Re:Why just home? (Score:2)
Windows does this. It's called "system restore".
Re: an innovative solution (Score:4, Funny)
Sourceforge (Score:5, Funny)
Re:Sourceforge (Score:5, Funny)
I fixed all the anti-Bush bugs.
Check your assumptions (Score:5, Funny)
Smitty825: AvantLegion: --
Now hold on. Just because his sig is "Doh!" doesn't automatically mean he's anti-Bush.
It might just mean that he's pro-Homer Simpson.
-- MarkusQ
How does he handle renaming and erasing in CVS? (Score:5, Interesting)
Re:How does he handle renaming and erasing in CVS? (Score:5, Interesting)
mv $1 $2
cvs remove $1
cvs add $2
cvs commit -m "move $1 $2" $1 $2
You might want to add some script to deal with the case where $2 is a directory, but that shouldn't be too hard.
That way, information about the move and the previous file status is kept.
CVS, eh? (Score:5, Informative)
I mean, that's not to say that alternative systems are perfect, either. I'm going through the process of learning arch now. There's a learning curve, but not nearly as big as it's made out to be. Still, using something else (almost anything else) would probably help on things like the merging issues, especially since he mentions that sometimes it's a pain keeping things in sync between three of his machines.
Re:CVS, eh? (Score:2)
--Mike--
Re:CVS, eh? (Score:5, Informative)
have you every tried to install and set up subversion?
plus, after years and years of development, it's still point-oh-something and specifically states they can only guarentee that your repository can be read with x number of versions after the version that created it.
as for arch, i've been looking into it, but it's still a hack onto cvs.
subversion gets some of it right, but at my old company we used perforce and honestly, i'm spoiled and i've been trying to find a free (just as in beer, free as in speech would be nice, but i just want to get my work done quickly and without hassle) source control client that can mimic the functionality and stability of perforce, and i've yet to find one.
too bad my new place won't shell out the $650/seat for the license...
Re:CVS, eh? (Score:2)
How do you mean that "arch is a hack onto CVS"? (I guess I had forgotten about archive format stability, though.)
Aegis (Score:3, Informative)
Personally I prefer Aegis [sourceforge.net]. It's a bit more complicated to use than CVS (well, aegis is MUCH easier to install than subversion), but takes care about way more situations for you.
Re:CVS, eh? (Score:3, Informative)
WTF are you talking about? Arch is only related to CVS in that it's in the same application category.
i'm spoiled and i've been trying to find a free (just as in beer, free as in speech would be nice, but i just want to get my work done quickly and without hassle) source control client that can mimic the functionality and stability of perforce, and i've yet to find one.
We use perforce at work and I'm fed up with the lack of functio
Re:CVS, eh? (Score:5, Informative)
Specifically, Perforce is available for download here [perforce.com]. Without a license, it only supports two users and two clientspecs... not enough to manage a project shared among developers, but wonderful for managing your code in home projects. More good news: Perforce is free-as-in-beer for use in developing open source projects [perforce.com].
(This isn't meant as a holy war... I know that many of you might think that source control package Foo is better than Perforce. You may be right. I'm just pointing out some Perforce licensing facts for those who like Perforce.)
Re:CVS, eh? (Score:5, Informative)
Subversion is pretty easy to install and set up as long as you don't use the Apache interface. It's pretty much just a matter of downloading the subversion and libdb archives, and doing "./configure; make; make install". I've never had any problems with it, and it is rapidly approaching version 1.0.
One of the main things that they ought to make clear is that the http interface is a nightmare to set up -- with the exception of making publically-accessible repositories, using the svnserve method over ssh is a far better choice.
Re:CVS, eh? (Score:2)
The article was written in September 2002. SVN was at 0.14 then.
Re:CVS, eh? (Score:2, Informative)
reiserfs (Score:2)
As I understand it, you register callbacks on the atomic operations of the FS, and your code gets run with appropriate parameters before/after whatever. A bit like SQL triggers...
Simon.
auto-backups the plan9 way (Score:5, Interesting)
Automated incremental backups are a way of life.
With Venti [bell-labs.com] one can even back up two windows/linux machines and *not* use up disk space for commonly used blocks, so backing up 100 machines wont use up the usual 1Gb each for the duplicate libs/windows directories.
The yesterday [bell-labs.com] command give you the power to browse back through your life
Find what has changed in the C library since March 1:
yesterday -d -0301
When did you say this guy did the innovation again?
Re:auto-backups the plan9 way (Score:5, Funny)
v1.0: "You stupid fuck, why don't you give me a raise some day?"
v1.1: "You tight-pocketed capitalist, isn't it high time you gave me a raise?"
v1.2: "Hey Boss, I really think I deserve a raise, I've been working on this project for so long."
v1.3: "Hello Boss, I respectfully request that you should consider giving me a raise, as I think have proven to be a reliable, hard-working employee. Please?"
v1.4-FINAL: "Dear Mr. Schmoe, I wish to apologize in advance for stopping work on our most important project for five minutes, but I would like to present an idea to you : you see, ever since I have started working at 6-pack computing, I've tried to be a model employee and
Oh I like that (Score:4, Insightful)
In a slightly more abstract sense, it provides a 'working set' of documents on your computer. Comments on your version history adds meta-data to files that is time-based. Most systems at the moment add meta-data that is for the current file. Imagine, you check in some files with a comment like 'Project: holiday snaps 03'. Then later on, you use one of those files in a presentation 'Project: report for Bill 03'. With standardised formatting of such tags, the file keeps with it the idea that it has been used with multiple projects at different times. That's a powerful method of grouping.
Ever been in the situation where a file belongs with multiple projects? With your standard directory structures, you might put it in one directory and shortcut/alias/whatever it in the other (or maybe make a second copy). It's pretty ugly right? What if you could say, this file belongs to both of these projects, and you could even provide the old version that was used in another project. OK, so all of that would require some more automation - we can dream can't we?
That has a lot of possibilities.
ssh private keys (Score:2, Insightful)
To much of a headace worrying about where they are, were they deleted properly... etc.
Re:ssh private keys (Score:4, Informative)
Re:ssh private keys (Score:3, Funny)
You read the article? You must be new here.
Bows before a clapping audience. Such karma-whoring is to be admired.
Great for Mozilla settings! (Score:5, Interesting)
unison is probably a better solution (Score:5, Interesting)
It's not quite the same thing as CVS, but that's probably a good thing. Most importantly, it won't give you versioning. On the other hand, it is symmetric (meaning, none of the copies are distinguished) and it is much less hassle to use. Also, you can define custom merge methods to automate merging of things like mailboxes. Unison is great for keeping a home directory (or portions of it) in sync between different desktops, and between desktops and laptops.
Note that for live backups, rsync is probably still the best choice because you want something unidirectional.
Re:unison is probably a better solution (Score:2)
Re:unison is probably a better solution (Score:2)
Re:unison is probably a better solution (Score:2)
That's actually the key feature here. Unison is great if you want to have just the most recent copy available. Rsync can actually be used in that fashion too, BTW, right out of the box, and it works well too. However, versioning allows you to go back to the most useful prior version of the file, not just the most recent. What if you finally managed to get your configuration right las
Re:unison is probably a better solution (Score:3, Interesting)
No, it cannot. rsync is a uni-directional file synchronizer and it doesn't have an interactive interface. unison is a bi-directional file synchronizer with non-timestamp-based change detection and a GUI for resolving conflicts. The two are completely different things. unison does much more than rsync.
However, versioning allows you to go back to the most useful prior version of the file, not just the mos
Re:unison is probably a better solution (Score:3, Informative)
I used to depend on exactly that technique to keep my home directories in sync. It was a pain in the butt. If you have a file named "foo" in replica A and no such file in replica B, then rsync has no way to tell whether it should delete "foo" from A or copy it to B. For that you need
Problems... (Score:2)
I've recently started using rsync kinds of scripts along with cron. It doesn't keep history, but it makes syncing really easy. If you need history, make daily backups. Additionally, rsync is slightly better at lower bandwidth usage vs full blown CVS.
As for ssh keys (as someone here mentioned) you can have CVS and rsync ignore specific directories you don't want
Renaming a directory (Score:5, Insightful)
Definitely the biggest problem with CVS.
kinda old article; update (Score:5, Informative)
This is the second time I've been slashdotted for something over 1 year old this year. Previously it was the pkg-comp page, which I wrote circa 1998.
Kinda makes you wonder.
Anyway..
I suppose I should mention that these days I keep most of my home directory in subversion. I have not gotten around to writing a successor to this article yet, but it works even better than cvs, and that's probably the most common question people ask me about this article these days.
Innovate? (Score:2, Funny)
Sounds like iFolder to me. (Score:2, Informative)
I attended a conference, today actually, about Novell's jump into Linux and iFolder was stressed again and again as an excellent cross platform synergy device. I was thinking through the whole conference that
I wonder what his comments look like (Score:2, Funny)
---
Nov 10, 2003. Deleted old porn from pictures directory. Replaced with new, better, porn.
Nov 11, 2003. Added 'Animal House' soundtrack to the music directory. Added additional porn to the pictures directory.
The comments say he uses subversion now (Score:5, Informative)
Been doing that a *long* time (Score:5, Interesting)
I haven't yet decided to go to Subversion, in part because I have a patched version of CVS that allows me to check into multiple CVS repositories - i.e. I can check in when on my laptop on an airplane, disconnected from the net, and can later check in to my main repository when I get connected. (Yeah, yeah, BitKeeper is a way to do that.)
As Joey's article discusses, there are minor issues with CVS'ing your home directory: use of modules, etc. I divide it into stuff that is owned by the company that I am currently working for, and stuff that I own.
When I get an account on a new machine, one of the first things that I do is create a new branch (or, a new version on some existing branch) to hold the dot files and other files
that were pre-installed in my home directory. Having saved them, I then blithely overwrite them with my standard home directory, and maybe do a quick check to see if there are any special features worth propagating to my standard home directory.
Oh, yeah: a bit of footwork to checkout
onto your home directory:
cd ~
mv *
cvs -d MYSERVER co glew-home
mv glew-home/{*,.*}
rmdir glew-home
I often find myself pasting together
modules from different repositories.
Sometimes I *want* a "cvs update"
in the root, e.g. in ~, to traverse
repository boundaries - no problem.
But sometimes I don't - e.g. I frequently
work in ~/hack, and check out stuff into there.
To do this, I have fallen into the habit
of creating a CVSBARRIER directory that is
not checked in, that prevents cvs update
from traversing.
Also, I find it useful to have a place
to put overall comments for a repository.
Typically, this is ~/README or ~/CVS-status.
The overall comments - such as "the tag
named FOO is my home directory at the time
I moved to university BAR and merged in
changes from my laptop BAZZ that had diverged"
get suck in the CVS log, via
cvs ci -f CVS-status.
Oner thing: when yiou have as much history as this, you notice when programs change their interface. E.g. nmh doesn't run my ~/.mhrc from 1994
--- Andy "Krazy" Glew
(I'm too lazy to create a slashdot account)
Rsync anyone? (Score:3, Insightful)
Old news (Score:5, Informative)
This was featured in a Linux Journal article from September 2002:
http://linuxjournal.com/article.php?sid=5976
Same guy, too.
rcsvi for easy sysadmining (Score:3, Interesting)
rcsvi is a simple wrapper for vi that puts edited files under revision control. It does not support any vi flags. It only takes one file argument and an optional revision number for reverting to previous versions. A few examples:
Voila. You now have your passwd file under revision control. More examples: To make a complete backup of your system configuration: Now you may ask "ok i want to edit multiple files and/or do some other trickery". Don't. It's a simple tool, that i'm using for years now with great satisfaction.Check it out here [freshmeat.net]
Re:I keep my life in a CVS repository (Score:5, Funny)
cvs commit suicide
Subversion rocks! (Score:2, Interesting)
(With a hint of sarcasm for you mentioning it but not linking!)
From personal experience it seems to be quite usable already. Although I did find it hard to install and get everything set up properly (path problems, etc) partly because I'm a Visual SourceSafe refugee. I'm still not quite used to the pathing schemes and checkin model and am still confused by wanting to assign a VSS-style 'working directory' to a Subversion folde
Re:Ugh... (Score:2)
Re:slashdotted... (Score:2, Informative)
I keep my life in a CVS repository. For the past two years, every file I've created and worked on, every e-mail I've sent or received and every config file I've tweaked have all been checked into my CVS archive. When I tell people about this, they invariably respond, ``You're crazy!''
After all, CVS is meant for managing discrete bodies of code, such as free software programs that are worked on and available to a lot of people or in-house projects tha
Re:Just trying to sell more advertising (Score:2)
Re:Temporary solution for the few? (Score:2)
Re:Not Innovative (Score:5, Funny)
Slow down, I can only patent so quickly...
Note to self:
1. Patent home dir in CVS
2. Patent system configs in CVS
3. Patent pr0n in CVS (note -kb)
Re:Not Innovative (Score:3, Interesting)
Hey! I claim "prior art"!
Seriously, I do this for entire binary installations including all configuration files for a custom server we've written.
It's a really nice solution.
One of the really great benefits is when someone has been footling some of the more complex configuration and broken things. It's really easy to find which files they've changed and what the changes are.
Sure there's nothing you couldn't any other way but it it certainly makes lo
Re:should have chose xls (Score:2)
Re:automate this! (Score:2)
Re:Ehhh, again, years behind NT. (Score:2)
Re:Comma Delimited??? (Score:3, Funny)