270 likes | 420 Views
ClearCase Branching, Labeling, and Building. 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.
E N D
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 Development 8.02-GA ECN001 Maintenance ECN002
Non cumulative ECN on a specific branch /main /sw8 8.02-GA /ecn003 ECN003 ECN001 /ecn004 ECN002 ECN004
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. Item modified for each release, each branch are existing.. /main 0 /sw8 0 1 8.02-GA /sw8sp1 0 8.02-SP1-GA 1 /sw8sp2 0 8.02-SP2-GA 1
Branch only when necessary and late. Item modified for 8.02, not for 8.02SP1, branch sw8sp1 does not exist. /main 0 /sw8 0 8.02-SP1-GA 1 8.02-GA
Branch only when necessary and late 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. /main 0 /sw8 0 8.02-GA 1 /sw8sp1 8.02-SP1-GA 0 /sw8sp2 1 8.02-SP2-GA 0
Branch only when necessary and late Item modified for 8.02 release, and for ECN 001, later 8.02SP1 has been created without specific change, sw8sp1 branch does not exist. /main /sw8 8.02-GA 8.02-SP1-GA ECN001
Branch only when necessary and late Item modified for 8.02 release, and for ECN 001, not for 8.02SP1, then a 8.02SP1 ECN has been implemented. /main /sw8 8.02-GA 8.02-SP1-GA /sw8sp1 ECN001 ECN002
Branch only when necessary and late Item modified for 8.02 release, ECN 001, between ECN 001 and 8.02SP1 a change specific 8.02SP1 has been implemented. /main /sw8 8.02-GA ECN001 /sw8sp1 8.02-SP1-GA
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. Each change request has a branch. This branch exists only for modified items, then it is merged back to the major branch. /main 0 sw8 0 cr0002 cr0001 0 0 1 1 CR0001 1 CR0002 2
Merge only changes made for the CR main sw8 • Purpose: • Developer merges only his change. • Don’t propagate changes from another CR. cr11000 CR11000 cr12000 = CR1100 Merge only these changes CR12000 Unit tested
Merge on major branch in another environment, then unit test. main • 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. sw8 cr12000 CR12000 Unit tested
Keep merges from cr branch to major branch under control. Trivial merge: from cr121110 to sw8 Non-trivial merge: from cr13000 to sw8 main main sw8 sw8 cr12000 cr12000 cr13000 • 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.
Emergency change on release branch. EECNxxx on SW8.02 release. main sw8 cr12000 • Purpose: • Branch are not duplicated. • Same process as release branch. CR12000 SW8.02 cr13000 EECNxxx CR13000
Specific customer changes on new release branch. Specific ECNXXX on SW8.02 release. main sw8 cr12000 • 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. CR12000 SW8.02 sw8ecnXXX sw8sp1 SW8.02_SECNxxx SW8.02SP1
Propagate only when necessary. CR12000 is for all releases, sp1 and sp2. CR13000 is SP1 specific. • Sp2 branch does not exist • Sp2 branch exists main main main sw8 sw8 sw8 sw8sp1 sw8sp1 sw8sp2 sw8sp1 sw8sp2 CR11000 CR12000 CR13000 CR12000 Child 12000 • Do not propagate CR12000, sw8sp2 branch does not exist, even if sp2 release exists. • Propagate CR12000, because next release branch exists. • Propagate only changes made for 12000 CR. • Changes must not appear in sw8sp2, don’t propagate sw8sp2. • Purpose: • Reduce number of propagation.
Keep propagation under control. on CR branch • Purpose: • 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. main sw8 sw8sp1 Child 12000 CR12000 Child 12000
Cumulative ECN on the same branch /main /sw8 Development 8.02-GA /sw8sp1 ECN001 8.02-SP1-GA Maintenance ECN002 ECN002