Upload
psluaces
View
858
Download
2
Embed Size (px)
DESCRIPTION
Merge Recursive explained. Find more info here: http://codicesoftware.blogspot.com/2012/01/more-on-recursive-merge-strategy.html
Citation preview
© 2013 Codice Software
All about Merge Recursive
Pablo Santos Luaces @psluaces – Lead Engineer
Manuel Lucio @mrcatacroquer – Plastic SCM Ambassador
Follow us @plasticscm
© 2013 Codice Software
Very simple merge
0
main
A foobar/foo.cA bar.c
1
2
3
C bar.c
Base & Destination
Result
Source
© 2013 Codice Software
A real merge
0
main
A foobar/foo.cA bar.c
1
2
4
C bar.c
Base Result
Source(theirs)
3
Destination(yours)
C bar.c
© 2013 Codice Software
2-way vs 3-way merge
0
main
A foobar/foo.cA bar.c
1
2
4
C bar.c
Base Result
Source(theirs)
3
Destination(yours)
C bar.c
bar.c bar.c
function foo(){}
© 2013 Codice Software
3-way merge
0
main
A foobar/foo.cA bar.c
1
2
4
C bar.c
Base Result
Source(theirs)
3
Destination(yours)
C bar.c
bar.c bar.c
function foo(){}
bar.c
© 2013 Codice Software
It is all about finding the right “base”
0
main
A foobar/foo.cA bar.c
1
2
4
C bar.c
Base Result
Source(theirs)
3
Destination(yours)
C bar.c
© 2013 Codice Software
It is all about finding the right “base”
© 2013 Codice Software
Enter merge recursive…
© 2013 Codice Software
A merge recursive case
main/task001
42
3
76
8
5
/ foo.c = A
edit / foo.c = B
edit / foo.c = C
main/task002
main
/ foo.c = A /foo.c = A
/foo.c = B
/foo.c = B
© 2013 Codice Software
The wrong option
7 8
5
/ foo.c = C
Conflict: Both contributor have changed.
????
/ foo.c = A
/foo.c = B
main/task001
42
3
76
8
5
edit / foo.c = C
main/task002
main
/ foo.c = A
/foo.c = B
© 2013 Codice Software
The right option
7 8
4
/ foo.c = C
/ foo.c = B
/foo.c = B
main/task001
42
3
76
8
5
edit / foo.c = C
main/task002
main / foo.c = Bedit / foo.c = B
Automatic - C
© 2013 Codice Software
How recursive works
© 2013 Codice Software
The right solution
main/task001
42
3
76
8
5
/ foo.c = A
edit / foo.c = B
edit / foo.c = C
main/task002
main
/ foo.c = A /foo.c = A
/foo.c = B
/foo.c = B
4 5
2
virt
/ foo.c = B
/ foo.c = A
/foo.c = A
Automatic - B
7 8/ foo.c = C / foo.c = B
rAutomatic - C
© 2013 Codice Software
Questions?
Pablo Santos Luaces @psluacesManuel Lucio @mrcatacroquer – Plastic SCM Ambassador
Follow us @plasticscm