Good version control needs to be …

… topical.

CVS was a nightmare because it let you nest branches ad-nauseum: it simply created a new dot with a new numeral below where you were, e.g. if you branched it became

SVN lets you create your own branch hierachy, just don’t count on anything to really understand it.

For many projects branches are significant ancestry points of the project. The version that supports Windows 8, 64-bit work, etc.

But this branching concept doesn’t help with agility, test management, feature management or anything but small projects.

A “topic” has a relatively short life time and is supposed to comprise a subset of changes, e.g. a particular feature, being prepared for addition to a branch. You might consider two types of topic, branched (that is, they are based on a specific revision of the branch they descend from) and floating (that is, they are represent a change set to the head of the branch they are descended from, whenever you refresh the working copy, the changes are shelved, the head is updated, and then the changes are re-applied).

The sole purpose of topics is for them to be merged upwards, e.g. when they’ve been tested and sanctioned.

There must be a VCS (aside from Torture-force, I mean perforce) that does this?


Your topic sounds a bit like branches in Git ( Also how some people use branches in SVN (e.g.

We used ‘Plastic SCM’ for a while at my last job. It has some UI issues, but the branching support was spectacular (compared to perforce, which I’d used previously). They had a feature similar to what you described where you could make a branch based on the latest revision of it’s parent (which would automatically get the new versions of any files not checked into that branch on every update), or off of a fixed revision.

If you find p4 tortuous, you’re not using it right!

@tazle Apart from the floating part … I suppose it’s basically a more formalized concept of a shelf, i.e. local changes that are continuously rebase to the head of the branch you derived from.

Hey! I need a branch. I can’t be bothered to use the mainline for my NEW K00L F33TURE

p4 branch //depot/whateverthehellitis/.. //whereverthehellilike//…

A code attack occurs.

p4 integrate //… (my workspace to see how we’re getting on)

p4 remembers where this shit came from.

We’re good! Not only does it compile but it looks like the other team’s new stuff compiles too!

p4 submit (the above shite)

We now are not far from a position to “p4 -r -i TRUNK” the lot to back to the cowboy wild west where arrows are cheap to buy but expensive to fix.


Oh ffs, I shouldn’t comment when it’s late. Some of the syntax is wrong, but the spirit is there.

Distributed VCS like Git or Mercurial can work “basically” like you mention. They let you commit your own changes locally to a branch that you can share (then everybody updates against the same branch) or keep locally (so it is simply based on the root where you branched and you’ll merge with a shared branch when you are ready).

The thing is, if I understood correctly, the process to refresh changes that you describe, shelve the changes first, update, then re-apply the changes would be just different from the “regular updates” if you had conflicts, otherwise shelving the local changes first and re-applying is the same as simply updating the remote changes. And conflicts are not resolved automagically so, how would that be different from the regular updates we have now? I’m surely missing something :)

Your evil is all in your head ;-P

kfsone :
Your evil is all in your head ;-P

lucky you, imagine they would be real!

Leave a Reply

Name and email address are required. Your email address will not be published.

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

You may use these HTML tags and attributes:

<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <pre> <q cite=""> <s> <strike> <strong> 

%d bloggers like this: