Mercurial Workflows: Translation Branches

원문: http://stevelosh.com/blog/2010/06/mercurial-workflows-translation-branches/

이 글은 다양한 Mercurial 작업 흐름을 설명하는 일련의 글에서 세 번째이다. 첫 번째에서는 가장 간단한, 필요할 때 브랜치를 만든다를 설명했고 두 번째는 전통적인 “default와 stable” 작업 흐름에 대한 것이었다.

나는 요즘  다른 작업 흐름을 시험해 보고 있는데 제법 유용해서 그 내용을 적어 보고 싶었다.

실제 예

난 그 동안 Mercurial을 더 쉽게 사용할 수 있는 작은 팁을 모두 모아 둔 hgtip.com 사이트를 만들었다. 사람들이 그 내용을 좋아해서 결국엔 그 사이트를 다른 언어로 번역하는데 관심 있어 하는 이도 일부 있었다.

사이트 자체는 플랫 파일(flat file) 모음이며 Hyde를 사용해 정적 HTML 페이지를 만든다. 사이트 내용은 하위 저장소에 보관해 기여할 사람들이 사이트 구조에 대한 걱정 없이 복제할 수 있도록 했다.

번역 내용을 관리할 전략을 세우는데 있어 조건은 다음과 같았다.

  • 번역 내용을 버전 관리해야 한다. 버전 관리는 굉장히 도움이 되므로 사용해야 한다.
  • 번역 내용을 올릴 때는 주 사이트에 내용을 올리는 것만큼이나 쉬워야 한다. 간단히 복제, 커밋, 푸시 외 다른 일은 없길 바랐다.
  • 팁을 적을 때 오자를 내기도 하고, 때때로 사람들이 내가 생각하지 못한 것을 댓글로 적으면 해당 팁에 내용을 추가한다. 팁의 주(영어) 버전을 갱신하면 바뀐 것을 번역자가 정확히 알고 번역 내용을 갱신하기에 쉬워야 한다.

잠시 이 문제를 생각한 후 Mercurial에 번역 내용을 관리할 명명한 브랜치를 설정했다.

브랜치 구조

hgtip 내용에 사용하는 브랜치는 (현재) default, ja, de 세 개이다.

default에는 영어 버전이 있고 jade에는 일어와 독어 번역 내용이 있다.

다른 사람들이 기존 팁 내용을 번역할 때는 해당 브랜치에 커밋한다. 내가 서버에 사이트 내용을 올릴 때는 해당 내용을 표시할 각 브랜치를 한 번에 쉽게 갱신할 수 있다.

내가 새로운 팁을 추가할 때는 default 브랜치에 커밋하고 default에서 모든 번역 브랜치로 병합한다. 이렇게 하면 각 번역 브랜치에 새 파일을 추가하고 다른 언어 버전에 (영어로) 그 내용을 표시하게 된다.

번역자가 새 팁을 번역할 준비가 되면 hg log -b THEIRBRANCH를 실행해 해당 브랜치에 어떤 내용이 병합됐는지, 번역해야 하는 팁이 무엇인지 알 수 있다.

다음은 설명을 도와줄 그림이다. 추가한 새 팁은 번역 브랜치로 병합한다. 번역자가 팁을 번역하면 자신의 브랜치에 커밋한다.
Translation Branches

줄바꿈 문자

이와 같은 작업 흐름에는 작은 문제가 있는데 기존 팁에 오자를 고칠 때 (또는 추가하거나 갱신할 때) 생긴다.

내가 beginner/sometip.html에 있는 오자를 고치고 누군가 그 내용을 번역 브랜치에 병합하려 하면 충돌이 생긴다. 일반적으로 이는 번역자가 바뀐 내용을 알 수 있으므로 좋다. 그렇게 되면 번역자는 번역 내용을 바꿔 충돌을 해결하고 커밋해 모든 일을 해결한다. 곤란한 점은, Mercurial에서는 차이점을 줄 단위로 보여준다는 것이다. 팁 내용에서 각 문단이 줄 하나이면 Mercurial에서는 바뀐 문단만 알려준다. 문단이 더 크면 이는 골치 아픈데 정확히 어떤 단어가 바뀌었는지 직접 찾아야 하기 때문이다.

이런 문제를 피하기 위해 나는 항상 줄바꿈 문자로 줄을 바꾼다(hard-wrap). 이는 TextMate에서 Ctrl-Q를 누르거나 vim에서 gqip를 사용해 쉽게 할 수 있으며 Emacs에도 같은 기능이 있다고 확신한다.

이렇게 해도 출력 결과는 달라지지 않는다. hgtip에서는 Markdown을 사용하는데 줄바꿈 문자가 하나인 경우 무시하기 때문이다. 만약 여러분이 다른 마크 업 언어를 사용한다면 나보다는 더 큰 문제가 될 수도 있다.

앞으로

이 브랜치 구조를 이번에 처음으로 사용했기에 다른 사람들로부터 아무런 얘기를 듣지 못했다. 더 부드럽게 진행할 수 있는 방법이 있을 거라 생각하므로 조언을 해 준다면 기꺼이 듣겠다!

 

You may also like...