Curious, we use assembla on our team and our designer uses git (assembla's git) without any problems.
It's great if people want to have the choice for subversion, tho. Some people just prefer the tools they are used to instead of learning new, more powerful ones. But to use that as argument that svn doesn't suck is not a very strong point.
Here's an idea. Instead of throwing around "Subversion sux", "Git is the new hotness", how about we all just use what works for us and the projects we're working on.
Agree ! Having gone from nothing to Subversion, I think Subversion is great (with TortoiseSVN, at least).
Are there better tools ? Is Git better ? Maybe, but different tools for different uses. For me personally, Subversion does not suck, and I don't need a "better" tool.
It's helpful for me to see these articles pop up since I don't currently use a revision control system such as subversion or git. Granted, I'm not looking for one at the moment, either, but it does plant seeds in the back of my mind for when I do need one.
All I know is is that Git i supereasy to use for a beginner for 1-man-projects if you get the right help or tutorial.
Preferrably start a repo at github and you will be waled through how to create a repo(not that there is much to it).
The author sets up a false dichotomy: Subersion or git. But those are two different models of source control: centralized and distributed. If you want to use centralized source control, the choice is more likely to be cvs or Subversion.
The popular notion isn't that Subversion sucks, but that it's pointless. The claim I hear is that it's a reinvention of cvs, but it doesn't actually improve much. Personally, I had to learn cvs, it's simple enough for my needs, and I see no reason to switch to something that's fundamentally the same thing.
I think most cvs users are in a similar situation as me. We know Subversion is better, but those benefits seem marginal and not worth the effort to switch.
I have a lot to say about version control, but I won't get into the details here.
However, on the 'switch from CVS to SVN', I'll comment and say that SVN is far superior to CVS.
The whole 'changes committed to the repo up the entire repo version' alone make this worthwhile.
SVN is also less arcane in its usage.
SVN has better tools for, well, everything.
SVN integrates well with all major IDEs (mine being VIM, but also Monodevelop and Eclipse).
The switch from CVS to SVN also made our releases much easier to manage (merging branches is fairly trivial and tagging is a no-brainer).
If you're using CVS in a company, do yourself a favour and switch to SVN. The basic concepts are the same, so re-educating developers takes all of 5 minutes.
Branching and merging suck in Subversion. Offline commits suck in Subversion. Does that mean Subversion sucks? Depends on whether you want good branching and merging and offline commits. I do; therefore, for me, Subversion sucks. QED.
In a world without Subversion, Subversion would be built out of Git. In a world without Git, Monotone, Darcs etc. ... well that's where we were 5 years ago, and it sucked.
Did it really suck? I was using subversion in a team of around 15, 5 years ago, and all in all it worked pretty well. It was rare that there would be any issue or that subversion got in the way.
Maybe git is better... maybe it doesn't matter enough to bother changing. But you have to admit these types of things are more about what is "in fashion" than what is better suited to a particular task.
Things go in big cycles. For a few years centralization is excellent, offers massive benefits, then suddenly distributed is excellent offers massive benefits etc etc
As the post hinted, I wouldn't be surprised if 5 years from now git is pronounced as a terrible idea, and the trend setters go back to something more like svn.
The issue with SVN is simply the work flow it forces you into. I can't tell you how many times I've looked at someone's repo and see .bak files everywhere. I know right away why they're doing this because I did it myself when I used CVS/SVN.
DVCS's let you branch off, experiment, and if it works out you can push everything into the main tree with the history included.
I'm very happy that Subversion works for you. For me, it just blew up on an update, which corrupted the fragile .svn directories it litters all over the working copy. "svn cleanup" couldn't repair the damage. This sort of thing happens on a regular basis.
For the stuff I do I find both svn and git get the job done. The only thing that I regularly experience that sucks about svn compared to git is the speed of checking out a working copy. Even when using tiny local file:// repositories svn checkouts on my OSX laptop often take several seconds where similar git operations are instantaneous.
Subversion isn't even better than CVS across the board: it's slower, wastes a lot of space, is way less stable, and doesn't have independent implementations.
Why does everyone assume that designers are stupid luddites who can't wrap their heads around complex systems? UI design is full of nuance and complexity. It's insulting to designers to assume they cannot deal with DVCS.
Meanwhile: To claim that SVN is intrinsically easier to understand than DVCS is to be very shortsighted. Subversion is a more mature technology: It's eight years old, and is conceptually based on CVS, which goes back to the eighties. DVCS is all of eleven years old in its eldest incarnation (according to Wikipedia) and the current generation of tools (git, Bazaar, Mercurial) date back only to 2005.
DVCS is a maturing technology. One of the things that happens as a technology matures is that people learn better ways to explain it to new users, build better interfaces, build better infrastructure.
If you don't think that DVCS makes enough sense to non-geeks yet... give it time.
The article isn't really about SVN vs all DCVSs, though, it's specifally about subversion's interface vs. git's.
There's no reason a DCVS can't have a clean, easily usable interface (darcs's is better than git's, for example), but the git developers have focused on features and raw power over usability.
distributed anything is usually hard for people to wrap their heads around the first time.
I don't think that's necessarily so. Have you ever tried to get an office full of people to collaboratively author a Word document? What's their instinctive behavior? They all grab copies. Then each of them hacks away on their copies. Sometimes two or three of them email their hacked copies to each other and mash them up, using cut and paste. Eventually some poor SOB has to get everyone to email over their individual versions so he can merge them. Hopefully they've all been using Track Changes (which is, in a sense, a poor man's facsimile of a single-document DVCS!); otherwise it's an even bigger clusterfuck.
That's a distributed model. Ever since the invention of photocopiers and email attachments, people have had to develop a very good understanding of how that model works, and how it fails.
It's tempting to think that the way to sort this out is to centralize it. But in my experience, centralized document-management systems are not that intuitive, which drives people to secretly work around them. ("Why can't I save my changed document on the shared drive? Oh, no, Joe checked it out and then went on eight-week vacation! I'll just stash my edited version on my local drive and distribute it via email." Or, "I created an alternate version of the doc, but I don't dare upload it to the shared drive because I might make another mistake and overwrite the official version. That always makes the admin really mad. So here it is on this USB stick.")
I think the most confusing aspects of version control are the navigation of history (just look at the wacky extreme that Apple' Time Machine designers went to in order to make it very obvious that you're looking backwards in history), and merging, particularly merge conflicts. But those aren't special features of DVCS; they're tricky no matter which VCS you use.
Because designers, unlike programmers, have much higher standards for tools. They don't jump on a new "ground-breaking" toy every 2 months, just because someone famous had said "this is THE shit - use it".
Whenever someone says "even X can use it" about some technology, it usually means that either X is stupid, or X is very busy and has no time to waste on "yet another Y".
That said, git can be used in a perfectly centralized fashion, just like SVN. (I use it for automatic synchornization of all my files across 3 laptops via central NAS). And there are some cool GUIs popping up.
In this case, however, when they say "even X can use it", they definitely mean "X is stupid". From earlier in the article:
But, this growth industry of training doesn't reach designers, clients, and other non-programmers, because this stuff is just too complicated for them.
I'm not sure this generalization applies to even a significant portion of either designers or programmers. As a human who uses tools, I want my tools to be reliable first and foremost, but since 100% reliable is a fantasy, it is always wise to be both on the look out for more reliable tools _and_ to know the tools you to use constantly intimately, inside and out, so you are more productive and less surprised by gotchas that the tools have. A tool that fails unpredictably or in a way that can't be fixed is a useless tool. You must know the limitations of your tools, to not know the limitations is to be unable to recognize when something better comes along. Not exploring new options and not being well versed with your current tools, or just doing one or the other, is wearing blinders.
Designers tend to have different sets of skills then programmers. In my experience they're not stupid, but they would tend to find a tool like git much harder to learn then you or I and it would give them less benefit even if they did.
The issue isn't that designers are stupid, it's that, since they tend to have a better design sense (the good ones, at least!), they're generally less forgiving of ugly, needlessly hacked-together systems than people who spend most of their time immersed in them.
Designers are often helpful for a reality check. People should listen to them more!
(There is also nothing about DCVSs that necessitates a bad UI, of course.)
they're generally less forgiving of ugly, needlessly hacked-together systems...
Huh? Am I the only one who finds Subversion to be very confusing, at the conceptual level, compared to git? All that file-by-file history tracking, just waiting to trip you up when you try to move a file around? The fact that branching in SVN is hopelessly entangled with the concept of copying directories around in some remote repository? Here's the canonical example from the SVN book:
svn copy http://svn.example.com/repos/calc/trunk \
http://svn.example.com/repos/calc/branches/my-calc-branch \
-m "Creating a private branch of /calc/trunk."
I guess I must be the only one who prefers:
git clone git://github.com/mechfish/calc
cd calc
git branch my-calc-branch
git checkout my-calc-branch
# ... fiddle around, then when it's time to go back to master ...
git checkout master # note: no need to cd anywhere
I suppose that one downside of this is that all your coworkers don't get to automatically see the my-calc-branch on their centralized server. (How terrible it is that your every whim isn't being automatically published to the world!) Instead, when you want to push changes, you have to say something like this:
Whenever you want to push up the changes to my-calc-branch. This sort of incantation is not great, but that doesn't mean it can't or won't be improved, and it's not that big a price to pay.
The biggest problem with SVN is that getting started with it is so hard. As a git user, if I have a directory and I want it under version control, I do this:
Done. Put this in a droplet script and your great-grandpa could do it. (He'd have to read some blogs to figure out what to do next, but at least it's a start. And even if all he knew how to do was this:
cd my-directory
git commit -a -m "I committed today"
and he did it every now and then, that would be great! Like a tiny, hidden, aperiodic, directory-specific version of Apple's Time Machine. His industrious great-granddaughter could use these snapshots to clean up after his PHP experiments...)
As an SVN user, you need to find a hosted repository, get admin permission on it, set up the canonical directory structure -- being very careful to heed these words from the SVN book (you did read the SVN book, right?):
While Subversion's flexibility allows you to lay out your repository in any way that you choose, we recommend that you create a trunk directory to hold the “main line” of development, a branches directory to contain branch copies, and a tags directory to contain tag copies.
... and then import your project, being sure to get it imported into /trunk and not into /trunk's parent. Then you have to check it out -- being sure to check out /trunk, or at least to do all your work in /trunk, lest you screw yourself up or confuse yourself.
So I assume that by "ugly, needlessly hacked-together systems" you mean "systems that make you use the command line". The only reason Subversion seems at all simple to non-geeks (to the extent that it does, which isn't much of an extent) is that the authors of tools like TortoiseSVN and Versions have sweated bucketloads of blood to design beautiful interfaces which hide all this cruft from the end users. DVCS will get there. Give it time.
Calm down. :) I never said that subversion's interface is great(?!), I just said that designers often find some tools programmers use ridiculously ugly and unnecessarily complicated. I think they have a valid point, and when programmers write them off, they often lose valuable feedback. (If a relatively simple tool is as annoying to configure as procmail, for example, somebody screwed up badly. IMHO.)
I use Mercurial, but I don't have any grand illusions about its interface being ideal. It works well enough for me, though. (I don't like svn either; tracking changes on a file-by-file basis isn't usually the right abstraction for the way I work.) DCVSs are relatively new, as somebody else pointed out, and in time they will probably have better interfaces.
designers often find some tools programmers use ridiculously ugly and unnecessarily complicated
Yeah, that must be why so many of them use no version control at all...
I agree that the VCS to use is the one that your designer is willing to use. I just think that there's no reason why designers should necessarily want to use Subversion over a DVCS... except that, as a more mature tool, Subversion has a better selection of interface alternatives and a larger installed base.
It's great if people want to have the choice for subversion, tho. Some people just prefer the tools they are used to instead of learning new, more powerful ones. But to use that as argument that svn doesn't suck is not a very strong point.