ClearCase Branching, Labeling, and Building
Branches •Branch only when necessary.
•Branch late.
•Give each branch a policy.
Change propagation
Builds
Processes
High-Level and Low-Level Branching
High-Level Branching• Main branch.
• Release branch.
• Emergency branch.
Low-Level Branching• CR branch.
• User CR branch.
• Rapid development branch
• User rapid development branch.
High-Level branching Branch only when necessary. Branch late. Emergency change on release branch. Specific customer changes on new release branch. Keep propagation under control.
One release line per major version
• Isolate logically distinct efforts.
• Each branch has a logical coherent purpose.
• Easy to automate process.
• Easy to verify.
• Easy to understand.
One release line per major version
mainline
sw8 line
/sw8sp2
/sw9
/sw9sp1
Each release is a branch
/main
/sw8
/sw8sp1
/sw8sp2
/sw9
/sw9sp1
Cumulative ECN on the same branch
/main
/sw8
8.02-GA
ECN001
Development
MaintenanceECN002
Non cumulative ECN on a specific branch
ECN003
/ecn003
ECN004
/ecn004
/main
/sw8
8.02-GA
ECN001
ECN002
Branch only when necessary and late.
Purpose:
•Reduce number of merge and propagation.
•Do not pollute the tree version.
Solution:
•Wait until new release branch is needed.
•Do not create a branch on each element, only on changed elements.
•For a particular release branch create all logical previous branches.
Branch only when necessary and late.
/main
/sw8
/sw8sp1
/sw8sp2
0
0
0
0
1
1
1
Item modified for each release, each branch are existing..
8.02-SP1-GA
8.02-GA
8.02-SP2-GA
Branch only when necessary and late.
/main
/sw80
0
1
Item modified for 8.02, not for 8.02SP1, branch sw8sp1 does not exist.
8.02-SP1-GA8.02-GA
Branch only when necessary and late
/main
/sw8
/sw8sp1
/sw8sp2
0
0
0
0
1
1
Item modified for 8.02 release, not for 8.02SP1, then later for 8.02SP2.
Sw8sp1 and sw8sp2 branches has been created at the same time.
8.02-SP1-GA8.02-GA
8.02-SP2-GA
Branch only when necessary and late
/main
/sw8
8.02-GA
ECN0018.02-SP1-GA
Item modified for 8.02 release, and for ECN 001, later 8.02SP1 has been created without specific change, sw8sp1 branch does not exist.
Branch only when necessary and late
/main
/sw8
8.02-GA
ECN0018.02-SP1-GA
Item modified for 8.02 release, and for ECN 001, not for 8.02SP1, then a 8.02SP1 ECN has been implemented.
ECN002
/sw8sp1
Branch only when necessary and late
/main
/sw8
8.02-GA
ECN001
8.02-SP1-GA
Item modified for 8.02 release, ECN 001, between ECN 001 and 8.02SP1 a change specific 8.02SP1 has been implemented.
/sw8sp1
Low-Level branching Branch only when necessary and
late. One branch per CR. Merge in major branch with
another environment, then unit test.
Keep merges under control.
One branch per CR.
•Changes are isolated.
•No impact on other developers.
•No impact on integration.
•Going back before merge is made easily.
•Integrate only changes made for the CR.
One branch per CR.
/main
sw8
cr0001
0
0
0
1 1
cr0002
0
1
2
CR0001
CR0002
Each change request has a branch. This branch exists only for modified items, then it is merged back to the major branch.
Merge only changes made for the CR
main
sw8
CR12000
cr12000
Purpose:
•Developer merges only his change.
• Don’t propagate changes from another CR.
Unit tested
cr11000
CR11000= CR1100
Merge only these changes
Merge on major branch in another environment, then unit test.
main
sw8
CR12000
cr12000
Purpose:
•Avoid forgotten private files.
•Avoid forgotten checkins.
•Avoid wrong merges.
•Avoid wrong labels.
Solution:
•Set an integration environment according to the CR.
•Merge from cr branch latest.
•Unit test.
•Check in.
•Lock cr branch and label.
Unit tested
Keep merges from cr branch to major branch under control.
main
sw8
cr12000
Purpose:
•Do not accept automatic merge for a non-trivial merge.
•Merge early.
Solution:
•Trivial merge can be automatic.
•Non–trivial merge must not be automatic.
•Changes on major branch are accepted automatically.
•Changes on cr branch must be integrated by hand.
Trivial merge: from cr121110 to sw8 Non-trivial merge: from cr13000 to sw8
main
sw8
cr12000 cr13000
Emergency change on release branch.
main
sw8
CR12000
cr12000
SW8.02
cr13000
EECNxxx
CR13000
Purpose:
•Branch are not duplicated.
•Same process as release branch.
EECNxxx on SW8.02 release.
Specific customer changes on new release branch.
main
sw8
CR12000
cr12000
SW8.02
sw8ecnXXX
SW8.02_SECNxxx
sw8sp1
SW8.02SP1
Purpose:
•Isolate specific customer changes.
•Same process as release branch.
Be careful:
•Integrate this specific branch into a normal release branch as soon as possible.
•Limit the number of these branches and their live.
Specific ECNXXX on SW8.02 release.
Propagate only when necessary.
main
sw8
sw8sp1
•Propagate CR12000, because next release branch exists.
•Propagate only changes made for 12000 CR.
CR12000
•Changes must not appear in sw8sp2, don’t propagate sw8sp2.
main
sw8
sw8sp1
•Do not propagate CR12000, sw8sp2 branch does not exist, even if sp2 release exists.
CR12000
sw8sp2
main
sw8
sw8sp1
CR13000
sw8sp2
CR12000 is for all releases, sp1 and sp2. CR13000 is SP1 specific.
CR11000
Child 12000
Purpose:
•Reduce number of propagation.
•Sp2 branch does not exist •Sp2 branch exists
Keep propagation under control.
main
sw8
sw8sp1
CR12000
on CR branchPurpose:
•Changes are isolated.
•No impact on other developers.
•No impact on integration.
Solution:
•Propagate as soon as possible.
•Set an environment according to the child CR.
•Merge from the major branch of the parent CR.
•Then handle the child CR as a normal CR.
Child 12000
Child 12000
8.02-SP1-GA
Cumulative ECN on the same branch
/main
/sw8
/sw8sp18.02-GA
ECN001
ECN002
Development
MaintenanceECN002