[컴] 3-way merge

merge / diff / 3way / 3-way / three-way merge /git merge

3-way merge

우리가 단순하게 diff 를 한다고 생각하면, 2개의 file을 비교하는 것을 생각한다.

이전의 merge 는 단순하게 이전파일(이것을 A라고 하자)에서 현재파일(이것을 B라고 하자.)을 비교하는 것을 생각했다.

A <--> B

그런데 version control system(vcs) 에서 이 방식은 문제가 발생한다. 하나의 file에 대해서 한사람만 수정하는 것이 아니라 여럿이 하나의 파일을 수정하는 경우가 발생한다.

이 경우 당연히 같은 시간에 같은 위치에 대한 작업이 발생하고, 이것에 대한 판단이 어려워진다.

예를 들어 ’AC’라는 내용이 있는 file을 수정하는 경우, 한쪽은 ABC 로 수정하고, 한쪽은 ADC 로 수정했다고 하자. 그러면 이것이 merge 될때, B를 선택할지 D를 선택할지 알 수 없다.

이것을 2-way merge를 사용하는 경우라면, 단순히 ABC –> ADC 로 변화한 것으로 판단하게 된다. 그런데 3-way merge를 보면, ‘ABC’와 ’ADC’ 의 같은 origin 인 ‘AC’와 비교한다. 그래서 ’AC –> ABC’ 와 ‘AC –> ADC’ 두개를 보고, 추가를 해야할 곳이 ’BD’모두를 추가해야 한다고 판단할 수 있다.

---------------------> time flies

                            +------+
                            | A    |
                            | +B   |
+-----+     +-----+         | +D   |
| AC  | --> | ABC | --------| C    |
+-----+     +-----+         +------+  
   |                          ^
   |               +-----+    |
   +-------------> | ADC | ---+ 
                   +-----+    
                      
                    

좀 더 자세하고, 다양한 설명은 ref. 1을 참고하도록 하자.

Reference

  1. version control - Why is a 3-way merge advantageous over a 2-way merge? - Stack Overflow

댓글 없음:

댓글 쓰기