perforce convergence vs divergence

24
Convergence vs. Divergence Purposeful Merging with Perforce Laura Wingerd Perforce Software www.perforce.com

Upload: epatey

Post on 05-Jul-2015

948 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Perforce convergence vs divergence

Convergence vs. Divergence

Purposeful Merging with PerforceLaura Wingerd • Perforce Software • www.perforce.com

Page 2: Perforce convergence vs divergence

Overview

BackgroundBranching and merging 3-way file merging

Convergence vs. divergenceSome branches should converge, some should divergeMerging for convergence is not the same as merging for

divergence

Purposeful mergingHow to get the merge result you want

Page 3: Perforce convergence vs divergence

Branching...

DevX

Main

Rel 2

Rel 1

DevY

DevZ

Page 4: Perforce convergence vs divergence

Branches over time...

Main

Rel1

Main

Rel1

Main

DevX

Rel1

Main

DevX

DevY

Rel1

Main

DevX DevY

DevZ

Rel1

Main

Rel2

DevX

DevY

DevZ

Rel1

Main

Rel2

DevX

DevZ

Rel1

Main

Rel2

DevX

DevZ

Rel1

Main

Rel2

DevX

DevZ

Rel1

Main

Rel2

DevX

DevZ

Rel1

Main

Rel2

DevX

DevZ

Some branches converge, some branches diverge

Page 5: Perforce convergence vs divergence

Branches diverge when…

back-porting to release lines release lines always diverge from trunk

cherry-pickinge.g., hunt-and-peck feature packaging

branching for customization e.g., per-customer, per-platform, etc.

trading changes between developerse.g., boilerplates, code snippets

Page 6: Perforce convergence vs divergence

Branches converge when...

development tasks are completedi.e., delivering completed work from dev line to

mainline

isolated development projects are rejoineddelivering private branch work into a shared

branch

distributed development is reconcileddevelopers working in separate repositories

Page 7: Perforce convergence vs divergence

Merging files

Although we speak of “merging branches”...

...merging takes place between individual pairs of

source and target files

Page 8: Perforce convergence vs divergence

Integration history “arrows”

Integration history records source-to-target relationships between file revisions

Perforce uses integration history to determine: which source revisions still need to be integrated to target

the revision that will be used as the base for a three-way merge from source to target

Page 9: Perforce convergence vs divergence

Three-way file merging

A source file version and target file version are merged with reference to a base file version

The merged result is a consequence of:merge tool capabilities, and... base selection

MERGEDTARGET

SOURCEBASE

Page 10: Perforce convergence vs divergence

The essence of a three-way merge

A4B5C3D2E6

A4B5C4D4E7

A4B6C3D3E7

A4B6C4?E7

MERGED

BASE

SOURCE

TARGET

Page 11: Perforce convergence vs divergence

Three-way file merge tools vary...

Granularity

Conflict resolution

File formats

Syntax awareness

Page 12: Perforce convergence vs divergence

Perforce’s merge tools

File formats: text

Syntax awareness: none

Granularity: line

Conflict resolution: “diligent”

Does more auto-resolving

Leaves fewer conflicts to be resolved manually

<figure id="create_gizmo"> <title> The 'Create Gizmo' dialog </title> <graphic fileref="img/cg.gif"/></figure>

Page 13: Perforce convergence vs divergence

What makes a good merge base?

SOURCE

A base with “qualifying history” – i.e., whose complete history is in the history of both source and target...

... and a base with lots of history – i.e., whose history has as much in common with both the source’s history and the target’s history as possible

X

Y

TARGET

Z

Page 14: Perforce convergence vs divergence

The effect of base selection

SOURCE

TARGET

A1B1C1

A1??

X

Y

ZA1B2C1

A1B2C2

A1B2C1

A1B3C1

A1B3C2

A1B3C4

A1B4C4

A1B3C3

A2B3C4

A2B3C1

A1??

A1??

A3B4C4

A1B4C3

A3B3C4

A3B4?

A3B3C3

A3B4C3

A1B4C3

A3B3C4

A1B3C3

A3B4C4

?B4C3

?B4?

A3B4?

A3??

Page 15: Perforce convergence vs divergence

Base selection through the ages

X

Y

Z

SOURCE

TARGET

Page 16: Perforce convergence vs divergence

Arrow types and base selection

X

Y

Z

SOURCE

TARGET

A1B1C1

A1B2C1

A1B2C2

A1B2C1

A1B3C1

A1B5C2

A1B4C1

A1B6C2

A1B3C2

A1B4C2

A1B6C2

A2B4C1

A2?C2A1

B3C1

Page 17: Perforce convergence vs divergence

Preserving divergence

Continuous, incremental merging preserves divergence

Cherry-picking before mass merging does not preserve divergence

After-the-fact, incremental merging preserves divergence

A

B

C

D

E

F

Page 18: Perforce convergence vs divergence

“Inherited” divergence

A

B

C

Page 19: Perforce convergence vs divergence

Unintentional divergence

A

B

“nothing to integrate”C

D

“Merge down, copy up” can be foiled by “ignore” arrows

An “ignore” arrow is not the same as backing out a change

Page 20: Perforce convergence vs divergence

The effect of “edit” arrows

C

D

A

B

Change propagation is assured, but convergence is not guaranteed

Page 21: Perforce convergence vs divergence

Guaranteeing convergence

“Merge down, copy up”

COPY

Page 22: Perforce convergence vs divergence

Assuring a correct copy

The recipe:

1. p4 integ –n [target] [source]

2. p4 integ –f [source] [target]

3. p4 resolve –at

4. p4 diff –sr | p4 –x - revert

5. p4 integ [source] [target]

6. p4 resolve –at

7. p4 submit

Page 23: Perforce convergence vs divergence

In a nutshell:

Some branches diverge, some branches converge.

With three-way merging, base selection determines divergence or convergence.

As of Rel 2006.1, Perforce’s base selection accommodates both convergence and divergence nicely, but is biased toward preserving divergence

The “merge down, copy up” method achieves convergence between branches – as long as you’re copying branches correctly.

Page 24: Perforce convergence vs divergence

Convergence vs. Divergence

Purposeful Merging with PerforceLaura Wingerd • Perforce Software • www.perforce.com