Rant alert: this is just a brain dump, and not much thinking has been put in the following paragraphs. I hope you can grok at least a few words out of them.
In the last couple of months I've been caught in the Distributed Version Control Systems (DVCS from now on) world. The very idea is fascinating, and actually using one of the freely available DVCS out there is enlightening. After sometime, they change the way you see a project's history significantly. It's no longer linear; it's no longer about files, but it's a rather convoluted, many-branched tree composed of lots of patches.
Some of them change not only the way you see the project, but also the way you work on it. In most DVCS, branches are cheap. Branches are, actually, the core concept for many of them. It's normal to keep at least three different branches for a project you're working on:
- The "inbox" branch. You pull any upstream changes to this branch. You don't actually work on it.
- The "work" branch. You pull selected changes from the incoming branch into the work branch, and work on it. You can see this as your personal branch; changes here are supposed to be kept private.
- The "outbox" branch. You pull selected changes from the "work" branch into the "outbox" branch, and publish it. This is the branch you usually make available to other people; changes here are supposed to go public
It's not uncommon to use more than one work branch. If you're working on multiple unrelated features, you would create a branch to work on each feature. Once you get used to it, it's a very nice way to keep things simple and isolated.
One problem, thou. Managing these many branches within IDEA is quite hard, and involve a lot of manual work. Also, visualizing two branches at the same time is not as natural. Now, Demetra is coming, with lots of features related to distributed development. This should be the prime time to add full integration with a DVCS (which one would be a hot topic for another post).
In my blurry dreams, IDEA would take care of all work related to branch and changeset management. Over the rainbow, IDEA would have a way to let me see all branches within a project (a single project, not many copies of it), to select which one I'm work on, and to push and pull changesets between different branches. In dreamland, this would be a very quick and cheap operation, so I could switch branhces almost as fast as I switch files. While the Sandman is blowing dust over my eyes, IDEA would completly abstract away where and how to store these branches. I would only care about opening IDEA and working on them.
Many other things would happen after dusk. But then, I'm getting weary, and need some sleep now. Oh wait, it's still 11AM... I'll have to take coffee over sleep.