SCM is not artifact repository

Slowly but steadily, at least professional developers agrees that You really need to have a version control system. Yes, one might endlessly argue which one, but it's not really so important (except when it is).

However, I still sense some confusion about what to store there. Because, especially in interpreted language world, one might confuse it with artifact repository. And I hate it.

SCM stands for Source Code Management. And there is a Zen Truth™: You should manage only sources. It's not always so, even in big projects like Django.

Problem is, lot of those script kiddies takes „interpreted“ for „no build step needed“. So, why bother with building at all? You should just check things out and they should work (hey, we can use this SVN thing for deployment, could we?).

You have build step (even if You don't think so)

As well as every software is tested even if developers don't test it (customers will), every software is build (even if developers don't care). Yes, Python boys will se those .pyc files created on-fly, Erlang love the beams and even poor PHP guys likes their eAccellaretors.

It might work with just check out™ for a while. But then you start adding some neaties and it will hurt, so You'll hack around it (just a little), but never take the time to do it properly. So admit from the beginning: You need the build process and will use it, so plan from the start.

Yes, even You, web guys. Everyone is now raving about those minified files. But You write them so? No, but store them both and use the cursed „if debug“ clause.

Another example: translations. Because we want to give some 中国 love, we all use the gettext translations thing. But because noone wants to build, those ugly binary .mos are in repository, too.

And both those examples means one thing: inconsistency. When You forgot to rebuild & recommit, You might not know it until production. And we all want to avoid this one.

At least but not at last, I see one major problem with this: resistance. Once You don't have Your process, You unconsiously avoid to add useful things because it takes time and effort and You think You don't really need it.

So please. Make (yeah, or ant or rake or scons or distutils or whatever) is really Your friend.

Published on April 16, 2010 under english programming rant