Mark and Jonathan had a little Subversion problem today. They wanted to move a directory in the repo and had a hard time doing it.
I've been using Subversion for a long time and never had any problems with it. However, I had never attempted to move a directory. So I tried a little experiement with my toy repo using the svn command from Cygwin:
[weiqi@gao] $ svn co file:///var/svnroot
A svnroot/trunk
A svnroot/branches
A svnroot/src
A svnroot/src/foo.txt
A svnroot/tags
Checked out revision 14.
[weiqi@gao] $ lssvnroot/
[weiqi@gao] $ cd svnroot
[weiqi@gao] $ lsbranches/ src/ tags/ trunk/
[weiqi@gao] $ svn move src trunk
svn: Can't move 'trunk/src/.svn/props/foo.txt.svn-work.tmp' to 'trunk/src/.svn/p
rops/foo.txt.svn-work': Permission denied
I don't know what causes this problem. But the problem goes away if I performs a server side move (svn move file:///var/svnroot/src file:///var/svnroot/trunk).
"Why can't they just add the directory moving (and atomic commit) features to CVS?"
"The maintainers of CVS wrote Subversion."
And then there's Bazaar-NG (bzr). It's in both Cygwin and Fedora Core 5. I vaguely know that it's a new kind of source control system, but not much more. I read about it on Mark Shuttleworth's blog 10 days ago.
Mark Shuttleworth, for those who don't already know, is the man behind the Ubuntu Linux distribution. (He was on stage with Jonathan Schwartz at JavaOne on Tuesday announcing the availability of Java in Debian and Ubuntu repositories.)
Bzr is definitely different from CVS and Subversion. Their tutorial is easy to follow. And I like the fact that I'm always working in a branch and can commit to my branch without bothering other developers. However, some of the other features are not so easy to get used to. For example, there is not a central repository. (I guess that's why it is called a decentralized source control system.) Everybody has his own branch, which they can push to a web site for others to marvel at. And everybody can merge from everybody else's branch.
It also seems to me that all the revisions are stored in a .bar subdirectory of the working directory, just like in the SCCS days. If I loose my hard drive, I loose my branch.
What do you do when you want to release version 1.0? Whose branch do you use?
However, this blog entry from Tom Albers shows a different scenario where bzr's usage may add value. Because you can very easily bring any old directory laying around your hard drive under bzr's control (bzr init; bzr add; bzr commit;) you can version directories that isn't normally versioned.