커밋 충돌 해결
거의 모든 시나리오에서 여러 개발자가 함께 일하여 프로젝트를 제공합니다. 여러 사람이 참여하는 것이 도움이 되지만, 프로젝트의 충돌 버전을 만들 가능성이 커집니다. 하지만 이는 개발자들이 수십 년 동안 알고 있었던 사실입니다.
최근 프로젝트 중 하나에서 팀은 하루 종일 한 페이지에만 집중해야 했습니다. 이로 인해 많은 갈등이 발생했고, 이는 우리의 속도를 더욱 늦추고 그룹 내에서 좌절감을 조성했습니다.
결국 우리는 이런 문제를 피하기 위해 프로젝트의 한 버전에서 작업을 시작했습니다! 때로는 이런 문제를 피할 수 없고(예: 단일 페이지의 팀 전체 검토) 이를 처리해야 합니다.
Mendix의 더 스마트하고 플랫폼을 사용하면 버전을 쉽게 추적하고 충돌을 피할 수 있습니다. Mendix Team Server는 Subversion(SVN)을 사용하여 프로젝트 버전을 관리합니다. Team Server는 프로젝트 소스 코드를 저장하고 팀이 변경 사항을 추적할 수 있는 방법을 제공합니다.
변경 사항이 발생하면 팀 서버는 전체 프로젝트의 최신 버전을 지능적으로 업데이트하고 제어할 수 있습니다. 두 팀원이 같은 페이지, Microflow 또는 도메인 모델을 변경하면 충돌이 발생할 수 있습니다.
이 글에서는 갈등이 발생하는 과정과 갈등을 해결하는 방법에 대해 알아보겠습니다.
갈등은 어떻게 발생하는가
Ryan과 Lisa라는 두 명의 팀원이 있다고 가정해 보겠습니다. 팀 서버에 소스 코드가 있으므로 프로젝트의 사본이 세 개 있습니다. 처음에는 모두 동일합니다.
Ryan은 변경을 한 후(A가 A'가 됨) 이를 Team Server에 다시 커밋하여 Team Server 버전을 A'로 업데이트합니다.
리사는 다른 변화를 일으킵니다(A는 A''가 됩니다).
Lisa가 자신의 프로젝트를 Team Server에 다시 커밋하기 전에, 그녀는 자신의 프로젝트를 최신 버전으로 업데이트해야 합니다. 업데이트가 완료되면 Lisa는 충돌 알림을 받습니다.
이제 갈등이 생겼으니, 이를 해결하는 방법을 살펴보겠습니다.
갈등 해결
우리의 예에서, Lisa는 충돌을 해결하기 전까지는 자신의 프로젝트를 커밋할 수 없습니다. 먼저, 그녀는 충돌을 찾아야 합니다. 이는 Changes 도크(알림에 지정된 대로)를 통해 수행합니다.
메시지를 두 번 클릭하면 어떤 구성 요소가 충돌하는지 확인할 수 있습니다. 다시 두 번 클릭하면 충돌에 대한 더 구체적인 세부 정보를 확인할 수 있습니다.
여기서 우리는 두 개의 열을 봅니다: '그들의 것'과 '내 것'. '내 것'은 방금 한 변경 사항을 나타냅니다(예시에서 '내 것'은 Lisa의 변경 사항을 나타냅니다). '그들의 것'은 다른 팀원(Ryan)이 한 변경 사항을 나타냅니다. 우리의 충돌은 상당히 사소합니다. Microflow에서 시작 이벤트의 위치가 변경되었습니다. 상대적인 중간 지점이 원래 -100;200(A)이었고 Ryan은 -220;200(A')으로 변경했고 Lisa는 -95;195(A'')로 변경한 것을 볼 수 있습니다.
이 충돌을 해결하는 방법은 두 가지가 있습니다. 두 가지 방법 중 하나를 사용하려면 Changes dock에서 충돌을 마우스 오른쪽 버튼으로 클릭하여 다음 메뉴를 가져옵니다.
여기서 우리는 두 가지 옵션을 볼 수 있습니다. '내 것을 사용하여 충돌 해결'과 '그들의 것을 사용하여 충돌 해결'. '내 것을 사용하여 충돌 해결'을 선택하면 이 버전이 커밋될 때 Ryan이 한 변경 사항(A')이 무시됩니다. '그들의 것을 사용하여 충돌 해결'을 선택하면 Lisa가 한 변경 사항(A'')이 제거되고 Lisa의 문서가 Ryan의 A'와 동일해집니다.
이러한 작업은 취소할 수 없으므로 신중하게 선택하는 것이 중요합니다. 어떤 것을 사용할지 불확실한 경우 팀원과 소통하세요. 그들은 어떤 버전을 유지하는 것이 가장 좋은지 결정하는 데 도움을 줄 수 있습니다.
어떤 것을 사용해야 할지 모르겠다면?
리사가 라이언이 무엇을 하려고 했는지 모른다면? 아니면 리사가 라이언의 변경 사항 중 일부는 필요하지만, 그녀가 한 일도 필요하다면? 제공된 두 가지 해결책은 충분하지 않을 수 있습니다.
충돌 항목이 도메인 모델이 아닌 경우 복제할 수 있습니다. 문서를 복제할 수 있는 경우 복제본을 만들고 끝에 '_Conflict'를 추가합니다. 그런 다음 'Resolve conflict using theirs' 옵션을 사용하여 충돌을 해결할 수 있습니다. 이제 Lisa는 A'와 A''의 사본을 갖게 되었습니다! 두 개를 나란히 볼 수 있으며 Lisa는 어떤 부분을 사용할지 결정할 수 있습니다.





