[그린컴퓨터] Server/JAVA(객체 지향 프로그래밍)

GIT3 branch & conflict - 3 way merge(충돌의 이해) {충돌을 이해해야 하는 이유, 충돌 이해하기

Ben의 프로그램 2023. 5. 23. 16:29
728x90

충돌을 이해해야 하는 이유

  • Merge 를 잘 하기 위해서는 충돌이 발생하는 좀 더 근본적인 원리에 대해 이해해야 합니다. 
  • 이번 시간에는 git 이 충돌을 인지하는 방식에 대해서 알아보고자 합니다. 
  • 이런 이유로 3 way merge 에 대해서 공부할 것입니다. 

충돌 이해하기

  • ABCD 4개의 파일이 있다고 생각해봅시다. 
  • 그런데, 버전관리를 시작하면서 branch 를 만들었다고 생각해봅시다. here 와 there 라고 생각해보죠.

  • here 브랜치에서는 2, 4 번째 칸을 수정했고, there 브랜치에서는 3,4 번째 칸을 수정했습니다.
  • 이런 상황에서 어느 부분은 자동 병합되고 어느 부분은 우리가 개입해야 할까요?

  • 양쪽이 서로 다른 3개의 경우에서 충돌이 발생하게 됩니다.
  • 1 번째 칸은 양쪽이 같으니, 문제가 없지만 나머지는 모두 충돌이 발생했습니다. 
  • 이렇게 병합하는 양쪽 버전을 비교하면서 병합하는 과정을 2 way merge 라고 합니다. 
  • 1 나라도 충돌이 발생하지 않고 자동 병합되었으니 좋다라고 생각할 수도 있지만, 더 많은 것들이 자동으로 병합되기를 원하며 여기에 만족하지 못한 사람들이 있었고, 그들은 새로운 방법을 생각해 냈습니다. 
  • 3 way merge 라는 환상적인 병합 방법이 등장하게 됩니다. 

  • 3 way merge 방식에서는 base 가 등장합니다. 
  • base 는 branch 로 갈라진 버전들의 공통 부모 버전을 지칭합니다. 
  • 1 번째 칸은 here, base, there 모두 A로 같으므로 자동 병합 됩니다. 
  • 2 번째 칸은 base 에서는 B, there 에서도 B 이므로, there 은 수정되지 않았다는 것을 알 수 있습니다. 그래서 자동으로 병합할 때는 here 가 수정되었다는 것을 알 수 있으므로 here 에서 수정한 대로 H가 입력됩니다. 
  • 3 번째 칸은 base 에서는 C, here 에서도 C 이므로, here 은 수정되지 않았다는 것을 알 수 있습니다. 그래서 자동으로 병합할 때는 there 가 수정되었다는 것을 알 수 있으므로 there 에서 수정한대로 T가 입력됩니다. 
  • 3 way merge 방식을 활용하게 되면, 2 way merge 방식을 사용할 때보다 훨씬 많은 것을 자동병합해줄 수 있게 됩니다. 
출처 생활코딩 : https://www.youtube.com/watch?v=43VjIv9LE2s