Everyone keeps saying "It's simple you can just merge [Clearcase] main\LATEST into your private branch" but I'm pretty sure that almost no one understands what this involves. In fact several people have spoken to me with problems relating to just that. Hence this article!
Let's take a typical scenario. Create a private branch and check in a couple of new versions. Wait for your feature to get the go-ahead for main\LATEST check in. Merge main latest into your private branch. What will you end up with? Clearcase will check out every single file and directory in your view that has changed (in main) since you created your private view. Clearcase will then merge all those files into your branch; for the most part this will be a trivial merge because the version on your private branch won't have changed. If your code has been on a branch for a while there may be thousands of files across the VOB that have nothing to do with you that will be merged. Each merge will create merge lines from one branch to the other.
There is a simpler and quicker way which involves a lot less hassle (and scary merge lines):
- When you have finished your new feature and checked everything in on to your [private] branch.
- Make a note of the private branch's name.
- Go into Clearcase explorer, right click on the view and select "Finish private branch".
- Clearcase pops up a merge box so select "Leave my changes on Private branch".
- Clearcase will kick off an "Update". If you're on a dynamic view this will be instant whereas if you're using a snapshot view then get yourself a coffee.
- When the update has finished, go back into Clearcase Explorer and right click on the view name and click "Set up private branch".
- The dialogue will pop up asking for a branch name, so enter the branch name you wrote down earlier.
- Clearcase will pop up a warning about reusing the branches so click "OK" to say that's fine.
- Clearcase will kick off another update, so if you're on a snapshot view you can go to the toilet to get rid of that coffee and dynamic view users can move to the next step. The update process will copy the items on your branch into the local view.
- You are now on your private branch again only the private branch timestamp has moved forward. All the files that have not been modified by you (i.e. don't have a version on your branch) will be updated to the latest version. Your view will also contain the files on your branch.
- Now if you merge main latest into your private branch only the files that have changed on main latest AND your branch will be merged together.
- Now you are free to continue working with the latest code base. If you decide to check in your code (i.e. merge your private branch into main) then all the merges will be trivial.