티스토리 뷰

개발 단계에서 가장 귀찮고 지루한 작업중 하나가 머지다. 내 소스 알아보기도 힘든데 남의 소스까지 봐가면서 코드를 합체 시켜야 한다니.

다행이도 버전 관리 시스템들은 자동 머지를 기능을 갖추고 있다. svn의 경우 자동으로 머지 해주는 기능이 있다. 하지만 맹신은 금물이다. 소스 코드가 복잡하다면 일부 changeset이 머지가 안되거나 된다고 해도 conflict가 나는 경우가 종종있기 때문이다.

따라서 자동 머지를 사용한다 하더라도 수작업으로 파일을 일일히 확인하는 과정이 필연적인데, 이 때 사용하는 diff 툴이 얼마나 비교점을 잘 찾아주는가가 중요하다.

이번 기회에 몇가지 diff툴을 비교해 보는 시간을 가져봤다.

인터넷에서 한번 검색을 해보니 스택오버플로우에 나와 같은 궁금증을 가진 사람이 이미 질문을 올려놨는데 상당히 인기있는 글이었다.



사진 말고 링크를 눌러보면 best diff tooll질문에 대한 정답이 나온다. 그런데 이게 정답이 있는 문제라니!

결론을 말하자면 Beyond Compare라는 상용 diff 툴이 가장 좋았다. 하지만 난 시간이 많기 때문에... 몇 가지 툴을 선별해서 직접 성능을 비교해보기로 했다.


후보 및 간략평
1. Beyond Compare
스택오버플로우에서 가장 좋은 diff 툴로 꼽혔다. 이번 리뷰를 통해 알게됐지만 정말 좋다. 이걸 쓴다면 머지도 신날 것 같다.
2. Ultra Compare
울트라 에디트에서 이런것도 만드는 줄은 처음 알았다. 내 생각엔 그냥 울트라 에디트에 올인하는게 좋을 것 같은데...
3. WinMerge
오픈소스에 사용하기도 편리해서 내가 주로 쓰던 프로그램. 하지만 이번 비교를 통해 알게됐는데 안좋은 거였구나...
4. SourceGear Diff Merge
무료지만 Beyond Compare에 맞먹는 성능을 보여준다. Beyond Compare를 안사주는 회사에서 사용하기엔 안성맞춤일 듯.
5. Araxis Merge
해외에선 별 인기가 없는 것 같지 않지만 국내에서는 유명한 상용 diff 툴. 하지만 라인별로 보여주지 않고 화살표 그어서 보여주는게 불편해서 싫어한다.


비교 시작
우선 비교할 소스 코드는 내가 만든 이미지 레이커라는 프로그램의 C# UI 소스이다. 최신 버전과 1년 전 소스를 비교했다. 오픈 소스 코드를 비교해도 좋지만 아무래도 내가 만든 프로그램이니 히스토리도 더 잘 아니까 내가 만든걸로 했다.

diff를 시작하면 차이점이 몇개인지 표시해주는데, 아무래도 차이점을 가장 적게 찾아내는 툴이 좋은 툴인 것 같다. 소스코드가 서로 심하게 다르면 어디를 어디와 비교해야 될지 몰라서 전혀 엉뚱한 라인끼리 비교해버리는 툴들이 있는데, 이러면 차이점 갯수는 무지하게 높게 나온다.

이 테스트에선 Beyond Compare와 Diff Merge가 가장 적게 나타났다.

1. Beyond Compare
88
2. Ultra Compare
111
3. WinMerge
111
4. SourceGear Diff Merge
88
5. Araxis Merge
100 (12 삭제, 24 삽입, 64 변경)

좋은 순
Beyond Compare = SourceGear Diff Merge > Araxis Merge > WinMerge = Ultra Compare


테스트1
본격적으로 코드를 비교해보자. 일부러 많이 변경된 코드 부분으로 테스트했다.

1. Beyond Compare

정말 제대로 찾는다. 특히 '중요하지 않은 라인 숨기기 기능'이 있는데 이걸 쓰면 주석이나 연관된 섹션이 diff에서 제외되므로 한결 보기 편하다. 화면에서 파란색으로 표시된 부분이 중요하지 않은 라인이다.


2. Ultra Compare

비슷하게 찾아놓고 정작 비교를 못하고 있다.


3. WinMerge

아쉽게도 거의 찾지 못한다.


4. SourceGear Diff Merge

무료지만 Beyond Compare와 동급의 성능을 보여준다!


5. Araxis Merge

비슷하게 찾기는 했지만 역시 라인별로 보여주지 않는 점이 불편하다.


테스트2

이번엔 다른 함수를 테스트해보자.


1. Beyond Compare

역시 어디가 어떻게 변경됐는지 잘 찾는다.


2. Ultra Compare

이 프로그램은 유료이다.


3. WinMerge

역시 전혀 찾지 못한다.


4. SourceGear Diff Merge

잘 찾아줬다. Beyond Compare와 차이점이 거의 없어보이지만 Beyond Compare는 SetCompareMethod 라는 부분을 찾은 반면 Diff Merge는 찾지 못했다.


5. Araxis Merge

찾긴 찾았지만 역시 보기 불편하다.


두줄 결론

돈주고 쓸거면 Beyond Compare
무료로 쓸거면 SourceGear Diff Merge

댓글
댓글쓰기 폼