'2010/04/16'에 해당되는 글 1

  1. 2010/04/16 AlienBrain -> Mercurial 이주기
사용자 삽입 이미지

진리의 TortoiseHg



혼자서 보름정도 써보고 뻑 가서 회사에 세미나 하고, 팀에 도입해서 이제 거진 한달정도 써봤다. 결론부터 말하자면, AlienBrain, Perforce, SVN 이런거 쓰지 말고 무조건 옮겨타길 추천한다.

현재 현실적으로 선택 가능한 DVCS 에는 3가지 정도가 있다.

1. Git
2. Mercurial
3. Bazaar

셋 다 테스트 해봤는데, Windows 에서 쓸거라면 Mercurial 이 짱이다. Git 는 Windows 에서 쓸만한 물건이 못되는것 같다. 최근 구글 코드에서 공식적으로 Mercurial 을 지원하기 시작했는데, 관련해서 http://code.google.com/p/support/wiki/DVCSAnalysis 도 읽어볼만 하다.

여튼 Mercurial/DVCS 도입으로 인한 장점을 열거해 보자면...

1. Hg Repository Explorer 진짜 짱이다. 한눈에 누가 뭐하는지 다 보이고 코딩 스타일까지 파악할 수 있다. annotate/blame 볼 필요도 없어진다.
2. 릴리즈 관리 편해진다. 브랜치 기능 같은걸 '진짜로' 쓸 수 있다.
3. 다른 부분에 영향을 많이 주는 모듈을 소수 프로그래머가 작업 해야할때, 기존 모델들은 중앙저장소에 체킨한다음 '딴님들은 받아가지 마셈~' 이라고 광고하거나 수작업으로 파일을 퍼날라야 했지만 DVCS 에서는 관련 작업 하는 프로그래머들끼리 changeset 교환해서 작업하면 ok. 끝나면 다른이들에게 퍼주면 된다. (A,B 두 프로그래머가 메세지 헤더같은거 맘대로 고쳐서 지들끼리 push/pull 하면서 만들다가 중앙저장소에 push 하면 끝이다.
4. DB 깨짐, 섭따.. 이딴거 고민 안해도 된다. 인터넷 안되도 revision 올리고 commit 하면서 작업할 수 있다. 서버 백업도 필요 없다.
5. 설치도 간단하다. TortoiseHg 하나 깔면 끝. 서버따위가 없기 때문에 설정도 필요 없다.
6. 개인 저장소의 web serve 기능 참으로 훌륭하다.

단점은....

1. merge 가 안되는 바이너리 파일들 다루기는 곤란하다. 중앙 저장소가 없어서 lock control 이 안된다.
2. Visual Studio 플러긴이 부실하다.
3. commit 하고 난 다음에 중앙저장소로 쓰기로 약속한 머신에 push 를 해줘야 하는데 좀 번거롭다. (DVCS 적응 비용)

이외에는 딱히 모르겠다. 사실 2번은 SVN 도 제대로 안되던거고 3번은 commit 후에 자동으로 push 되게 하는 옵션 켜놓으면 ok.

여튼 무조건 옮겨타라. Windows 플랫폼 기준으로, 일단 돈이 있다면 TortoiseHg (공짜) + AraxisMerge ($250+) 를 추천한다. 현존 최강의 조합이라 할만하다. 울 회사 같은 경우는 AlienBrain 에 내장된 AraxisMerge 를 사용했다. 만약 회사에서 AraxisMerge 를 안사준다면 Beyond Compare 3 ($50) 를 추천한다. AraxisMerge 와 비슷하지만 가격이 1/5 이다. 회사에서 안사주면 사비로 사는것도 좋다. 프로그래밍으로 밥벌어 먹겠다면 이런건 하나 사줘야 되지 않을까..

그리고.. 성급하게 도입하려고 시도하면 에반겔리스트로 몰리기 쉽상이다. 처음엔 기존 SCM 과 공존을 도모하며 도입하는게 좋다. SVN 을 쓰고 있다면 SVN 은 기존대로 쓰고, Mercurial 을 개인 관리 용도로 쓰는것을 추천한다. 미리 혼자 충분히 써보고 장단점을 파악한 다음에 전파를 시도하길 권한다. 아마 두개를 병행해서 써보고 난 뒤라면 도저히 이전 모델을 쓰고싶지 않아질거다.

이하는 몇가지 팁

1. Windows 환경에서 중앙 저장소 서버를 돌릴거라면 Apache 에 mod_wsgi 로 띄우는걸 추천한다.
2. 여러 저장소를 하나의 서버에서 돌리려면 Publishing Repositories with hgwebdir.cgi 를 참조해야 하는데... 아마 그대로 따라해보면 안될거다. Win32 환경에서는 버그때문에 안되는거다. http://mercurial.selenic.com/bts/issue1875 에 보면 패치 있으니까 이걸로 hgwebdir_mod.py 다시 컴파일 해야한다. 파이썬 몰라도 pyc 파일 만들어 덮어 씌우는건 어렵지 않을거다. (사실 나도 루비빠라서 파이썬 모른다. -_-) => 4월1일에 나온 1.5.1 에서는 해결됨
3. 계정관리 하려면 HgLogin 을 써야 할텐데.. 그거 설정하기 힘들다. 그냥 Microsoft 에 있는 "고급 보안이 설정된 Windows 방화벽" 으로 보안 설정 하는게 편하다. 액티브 디렉토리의 컴퓨터/유저/그룹 단위로 IP 방화벽을 걸 수 있다.

... (생각나는데로 줄줄이 추가됩니다)



ps. 개인적으로 빨리 지르지 않아서 후회한 것들 리스트가 업데이트 되었다. 1. 노트북 2. 자동차 3. Mercurial
2010/04/16 00:32 2010/04/16 00:32