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을 참고하도록 하자.
댓글 없음:
댓글 쓰기