# Re: Symmetry for branching, move tracking and merging

From: Branko Čibej <brane_at_wandisco.com>
Date: Sat, 07 Mar 2015 09:18:13 +0100

On 06.03.2015 12:13, Julian Foad wrote:
> I want to share, briefly, one of the key concepts that is guiding my thinking about move tracking. It's nothing amazing, in fact it may seem so obvious that it hardly needs mentioning. What's more surprising is that we haven't paid more attention to this idea before.
>
> In order to build a sane merging system, we expect certain symmetries in the data model.
>
> Example:
>
> commit patch P onto trunk, making trunk_at_10
> branch trunk_at_9 to B, making B_at_11
> merge trunk to B, making B_at_12
> then: diff(trunk_at_10, B_at_12) should be nil
>
> Bleedin' obvious, heh?
>
> The idea is that these two things should be symmetrical, interchangeable:
>
> * a change along a branch
>
> * a difference between two related branches
>
> That generalizes to:
>
> * uniformity of the difference from branch1_at_r1 to branch2_at_r2
> for any values of: branch1, r1, branch2, r2
> where branch1 and branch2 are 'related' (formally: in the same branch family)
>
> * diffs obey some (more or less obvious) arithmetic rules such as:
> diff(A,B) (+) diff(B,C) == diff(A,C)
> diff(A,B) (+) diff(B,A) == nil
> and so on
>
> Not just roughly but precisely, testably so.

You've heard of darcs, I take it. :)

-- Brane