I liked Mercurial a lot but got disappointed in the past by it’s inability to store files larger than a few megabytes. Furthermore, I prefer the storage model of git, which is based on cryptographic hashes, which I have first seen in OpenCM many years ago and which was first popularized (IMHO) by Monotone.
So, yesterday I decided to get rid of Mercurial in favor of using git. This will allow me to store huge videos in a repository. I have also converted some of my subversion repositories which wasn’t all that easy because they got somehow corrupted so that I had to use a two year old backup (I haven’t used svn since two years :). It seems that I destroyed the original repository simply by using a newer version of the subversion client svn. Luckily, I haven’t made any change to the repository for more than two years, so the backup contained exactly the same data. In this point I fully agree with Linus that “Subversion is the most pointless project ever started”.
This article took the words right out of my mouth. I am a happy Mercurial user and git always confused me too much (besides that you shouldn’t take a look at it’s source code ;-). While the concepts behind git are more advanced, the UI is a lot worse IMHO.
Linus Thorvalds wrote git in around two weeks. The concepts behind are really simple (as is true for most source code versioning systems that use content addressing by cryptographic hashes). Huh, but it's now around 70k lines of code. Because I'm hacking on a similar version control system, I made some tests. I added the whole DragonFlyBSD source tree (/usr/src) into a git repository (git add . && git commit). Adding it took around 4.5 minutes and commiting it another 1.5 minutes, so in total it took 6 minutes. The git repository uses 154 MB. The same with my very early version control system takes around 5 minutes and consumes 139 MB. The original files consume 387 MB in total.
Did I mentioned that it's written in Ruby?
"I hate it with a passion (CVS)."
"If there are any Subversion or CVS users out there in the audience, you might want to leave."
"I see Subversion as the most pointless project ever started."
"I'm not going force you to switch over to decentralized, I just call you ugly and stupid!"
"...the designers of Subversion were complete morons". Strong opinions, that's me! [...] Your stupid!.
"Merging in Subversion is a complete disaster! The Subversion people kind of acknowledge this and they have a plan and their plan sucks too. It is incredible how stupid these people are!"
"I would never ever trust Google to maintain my sourcecode for me. I'm sorry. You're just not that trustworthy. (Google code uses Subversion)". The talk was held at Google :)
Again, I love this guy ;-)
If you love Linux and are still using Subversion, consider the switch or change to BSD ;-).
For the purpose of maintaining changes to configuration files on our server, I wrote some time ago a little shell script called scm. Today I added some new features, mainly support for rsync to make space usage more efficient (optionally it uses pax so it works out-of-the-box on a FreeBSD system), but also a log subcommand and some fixes.
Download and try it: scm. Rename it to ’/usr/local/bin/scm’. Then let’s start:
scm help scm init /tmp/repos scm add some-file scm add some-other-file scm status scm diff scm commit scm log
Note that due to recording which packages are currently installed on a FreeBSD system, scm will fail on other systems. You can avoid this by simply overwriting function scm_custom_action.
cm ls everyone
For example, the full path of my user object is email@example.com.
Then modify it with:
cm -u admin set name FullPathToUserObject
and you’ll be prompted to enter a Synopsis. Enter here the new email address.
You can change other attributes of objects in the same way, just replace set name appropriatly.
cm diff --against project_name/version
cm diff --against myav/1