TortoiseSVN을 이용한 Subversion의 사용은 매우 쾌적합니다. 멋진 UI가 가져다 주는 쾌적함과 Windows Explorer의 Context Menu확장을 통한 통합된 이용은 아주 매력적이죠.
하지만!!!!!!!!
도저히 참을 수 없는 단점이 있습니다. 바로 “Local Commit”의 부재입니다.
Local Commit은 중앙의 저장소에 Commit하는게 아니라, 프로그래머의 개인 저장소에 Commit하는 개인적인 Commit의 개념입니다. 작업량이 많을 경우에는 중간 중간 Commit하는게 필요한데 중앙의 저장소에 Commit했다간 동료들의 불평불만을 한꺼번에 받을 가능성이 있지요. 이런 이유로 Local Commit은 상당히 편리한 기능입니다.
하지만, Subversion에는 Local Commit이 없습니다. OTL. 이를 위해 Mercurial을 사용하기도 해보았지만, TortoiseMercurial의 (TortoiseSVN에 비해) 떨어지는 UI는 사용할 맛이 안날 뿐더러, Subversion과의 연동에도 문제가 많았습니다.
이리저리 찾아본 결과 GIT이라는 훌륭한 시스템이 있었습니다. GIT은 리눅스 커널등의 개발에 사용되는 소스형상관리 시스템인데, 분산된 소스형상관리 시스템의 개념을 사용하고 있으므로, Local Commit이 매우 자연스럽게 적용됩니다. Subversion과의 연동도 훌륭한 편이여서 내심 노리고 있었습니다. 하지만, 사용이 불편하다는 단점이 있었지요. 이런 와중에.. TortiseGIT이 발표되었습니다. 그렇습니다. CVS, SVN에 이어 GIT도 거북이를 등에 업은겁니다!
제가 사용한 방법은 매우 간단합니다. GIT를 일종의 SVN클라이언트로 사용하는거죠. 🙂
- git svn clone 명령을 이용해서 작업할 영역을 GIT repository로 복사해옵니다.
- 생성된 GIT내에서 작업을 합니다. blah blah TortoiseGIT가 있으니 세상이 아름답습니다.
- TortoiseGIT의 SVN rebase명령을 이용해 Subversion측의 변경내역을 가져옵니다.
- TortoiseGIT의 SVN dcommit명령을 이용해 GIT측의 변경내역을 Subversion으로 밀어 넣습니다.
스크린샷을 찍어가면서 열심히 쓰고 싶지만, 그건 나중에… git svn clone을 TortoiseGIT에서 하지 않은 이유는 TortoiseGIT이 svn clone을 수행할때 인증절차를 제대로 처리하지 못하는 문제가 있었기때문입니다. 🙁 clone할때 한번 인증 시키면 그 뒤에는 잘 되더군요.
이렇게 하니, 부담없이 작업기록을 로컬의 GIT에 남겨두고 완성한 뒤에 중앙의 SVN에 커밋하는 일이 가능해졌습니다. 🙂
하지만.. 로컬의 GIT에 담겨있던 코드들이 SVN에 넘어갈때 자잘한 커밋로그까지 다 넘어가는 문제가 있더군요. 🙁 GIT에서 branch하고 dcommit하는 부분을 따로 관리하면 이것도 정리해서 가능하지만, 커밋로그라는게 작업했던 당시의 상황을 담는 용도도 있는지라 무시하기로 했습니다. 🙂 Blame을 써보면, 자잘하게 적은 로그이지만, 나중에 유용할때가 있거든요.
나중에 필요하거나 시간이 되면 좀 더 자세히 정리해보도록 하겠습니다. 🙂
msys등을 이용하는 git가 완성도가 낮은 것 같아 안쓰고 있는데 이런 건 네이티브로 지원하나보네. hg는 확장이 있긴 하던데 검증이 안되어서 자제하고 있음.
뭐 나쁘지 않던데. msys자체도 그다지 많이 딸리는 구현은 아닌거 같아서. 🙂
일단 작동은 상당히 잘함. subversion에는 없는 stack관련 기능도 상당히 유용하고.
TortoiseGIT가 MsysGIT에 기반하고 있음. 완성도는 뭐. preview라고는 하는데 별문제없이 잘 사용중.