Git , SourceTree and Meld
깃을 통해 공동으로 작업을 하다보면
충돌 해결이라는 필수적인 과제를 안고 가야합니다.
여러분들은 어떻게 해결을 하시나요?
초고수시라면 커맨드라인에서 샤샤삭 처리를 하실 수도 있겠고
또한 초고수시라도 시각적 비교도구를 통해 느긋하게 처리를 하실 수도 있겠죠..
뭐가 좋고 나쁨이 아니라 자기만의 스타일이라고 여겨집니다.
이 글의 목적은 제가 쓰고 있는 방법(?) 에 대해 짤막하게 공유하고자 합니다.
저는 "소스트리"와 "Meld"를 주로 사용합니다.
제 환경은 맥에서 주로 작업을 하는데
글을 쓰면서 M1에서도 테스트를 해보니 잘 동작을 합니다.
소스트리를 다들 잘 아실테고 "Meld"에 대해서 간단히 이야기하자면,
Meld는 개발자를 대상으로 하는 시각적 비교 및 병합 도구입니다. Meld를 사용하면 파일, 디렉토리 및 버전 제어 프로젝트를 비교할 수 있습니다.
공식 사이트는 아래와 같습니다.
이 곳을 방문하면 다운로드를 받을 수가 있죠
맥 사용자라면 brew를 통해 간단히 설치가 가능합니다.
brew install meld
설치가 끝나면 Meld를 한번 실행하여 “보안 및 개인 정보 보호" 설정에서 차단문제를 해결해 주어야 합니다.
정상적으로 실행이 된다면 이제 소스트리에서 이 meld를 시각적 비교 도구로 등록만 해주면 됩니다.
소스트리 설정에서 비교 탭으로 진입하여 아래와 같이 설정을 해줍니다.
시각적 비교 도구 ⇒ 맞춤설정
Diff 명령어 ⇒ /Applications/Meld.app/Contents/MacOS/meld
변수 ⇒ -n $LOCAL $REMOTE
병합 도구 ⇒ 맞춤설정
병합 명령어 ⇒ /Applications/Meld.app/Contents/MacOS/meld
변수 ⇒ -n $LOCAL $BASE $REMOTE --auto-merge --output=$MERGED
이렇게 하면 모든 설정이 완료가 되었고
제대로 동작하는지 확인하기 위해
고의로 충돌상황을 만들어 테스트를 해보겠습니다.
master 브랜치와 second 브랜치를 통해 충돌상황을 만들고 병합을 시도했더니 아래와 같이 충돌이 생겼습니다.
사실 이런 상황은 비교도구고 뭐고 그냥 눈감고(?) 해결이 가능한 상황이지만...
(눈감고 해보면 안됩니다..앞이 안보여서...)
외부 병합 도구를 선택해보겠습니다.
현재 second 브랜치에서 master 브랜치의 것을 병합하는 상황에서
별다른 설정을 하지 않았다면 화면 왼쪽이 내것(로컬-second) 의 소스가 되고 우측이 병합대상(master)이 됩니다.
가운데가 최종적으로 생성할 코드가 됩니다.
스크린샷에서는 화살표가 나타나지 않는데 가운데를 기점으로 양 옆에 어떤 소스를 쓸 것인지 화살표가 나오는데 이것을 눌러 원하는 소스를 사용하도록 지정해 주면 됩니다.
선택이 되었다면 저장 후 멜드를 닫으면 끝나게 됩니다.
이렇게 하면 시각적 도구를 통해 충돌 해결을 할 수 있는데
고질적으로 따라다는 것이 백업 파일이 생성됩니다.
이것을 원치 않을 때에는 아래와 같이 백업 파일 생성 해제 명령을 한번 날려주면 됩니다.
git config --global mergetool.keepBackup false
그럼 앞으로 즐거운 충돌 해결 시간이 되실 겁니다.
끝.