Reputation: 25996
Imagine you have a large software project where you have to support several branches (releases) at the same time. For instance you have a production release on the website, a integration test release that is currently tested by the customer, a testing release that for your local systems test and a development release where your developers are hacking away new features.
What version control system supports this setup well? My main concern is that it should support merging between the different releases - if you fix an urgent bug in your production release you do not want to check out all other releases as well and fix the bug by hand 5 times.
If you have an answer I would like to hear how big the project you applied it in was and what experiences you had. I am looking for a system that explicitly supports merging by the developer - solutions with scripts applied by build managers etc. won't help us. (Too dangerous; the merge should be done by the developer immediately since he/she knows best what to do.) Thanks so much!
Upvotes: 0
Views: 319
Reputation: 24891
The answer to this question is one of process first, and toolchain second.
You need to decide how you wish to access known versions (e.g. "what's on production?"), how you want to make changes to those and how you want to disseminate changes to other versions.
Most VCS systems that are Subversion-Or-Better will support common workflows. Here is one that is common:
Here is another common practice:
These are very common and simple to implement/understand; they are easily supported by most version control systems. If you get more complex processes, you will reduce the toolset available, but possibly have more power.
Upvotes: 1
Reputation: 6402
If you really want to handle multiple releases but not suffering the pain of Clearcase you should try something like Accurev or PlasticSCM.
Accurev is very powerful dealing with its streams, you've to get used to them but once you do it's very, very powerful.
Plastic is more powerful in terms of handling unlimited number of branches (and their corresponding merges) something easier said than done. You've all the flexibility mentioned for good-ol CC but without the arcane commands or weird configurations.
Here you've the branch explorer tracking multiple branches
Upvotes: 1
Reputation: 272347
Clearcase will handle multiple branches and revisions, and merging between any/all of these. You can define branches at will, labelled as you desire, and merge to/from these. Needless to say, this can get extraordinarily complicated and IBM provides a merge manager to help you. You can display the branches graphically (if that helps).
Clearcase is amazingly powerful, but correspondingly complex and time-consuming to manage.
Upvotes: 1
Reputation: 41152
I think most, if not all, modern SCMs can do that. Not necessarily automatically, although some scripts can handle that in a quite painless way.
At work, we use Perforce, and we do the integrations by hand (helped by a Perl script to copy changelist information). We carefully choose which changelists go to release (we can discard risky ones, for example).
For most distributed VCS (Mercurial, Bazaar, probably Git, etc.), working with several branches (or clones) is the natural workflow.
Upvotes: 4
Reputation: 37228
In my experience merging with subversion works, but is quite painful (though I've heard newer versions are better in this respect). Git and Mercurial do merges properly with no problems.
Upvotes: 2
Reputation: 161801
Team Foundation Server supports any number of branches, with merging. It's pretty good as it is, but the features of the 2010 release make branching even more compelling. See 10-4 Episode 4: No More Parallel Development Pain.
Upvotes: 1
Reputation: 25996
It is possible to configure Telelogic CM Synergy/CM to support such a setup.
The good point is that all "higher" releases are updated automatically without developer or build manager actions if the file is unchanged in those releases. If the modified file is changed, the developer is notified immediately on checkin and has to merge the stuff. It supports grouping of related changes into tasks and change requests and has an associated tracking system for those.
The bad points are that it is really big and slow, needs a lot of buildmanager time and the eclipse integration is almost unusable. You'll probably need a fulltime buildmanager each 5 or 10 developers.
Upvotes: 0