레이블이 Svn인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Svn인 게시물을 표시합니다. 모든 게시물 표시

2013년 1월 10일 목요일

Subversion에서 Private Depot 사용하기(Mercurial을 이용)

Private Depot 얼마나 오랫동안 꿈꾸어 오던 것인지... -_-;

SVN과 같이 중앙 public depot을 사용하면 잘못된 코드를 체크인 했을때 그 때문에 피해를 입는 사람이 많다. 고로 제대로 작동안하는 코드를 집어넣으면 졸 욕을 쳐먹는다 -_-;

그래서 보통 코드가 제대로 돈다고 확인할때까지, 또는 코드를 보기 좋게 잘 다듬을 때까지 check-in을 안하곤 한다..... 이것의 문제는 한 1주일정도 체크인 없이 로컬 컴퓨터에서 계속 작업하는 경우가 있는데.. 그러다가 어느순간...

'아... 3일전에 만들어놨다가 제대로 안돌아서 지워버린 코드를 다시 쓰고 싶은데...'

라는 후회가 드는 경우가 있다는 것.... 이걸 미리 체크인 해놓았다면 단순히 버전 되돌리는 걸로 끝날 일... 중앙 depot시스템 때문에 못한거지... 퉤... - _-;

그래서 git이나 mercurial(hg)등의 DVCS (Distributed Version Control System)이 나름 각광을 받고 있었다. 하지만 게임개발을 하는 나에게 중앙서버가 없는 중구난방식의 분산 방식은 좀 별로였다. 내가 원한 것은 완전한 분산방식이 아니라.... 개인(private) depot에는 아무때나 내 맘대로 체크인 해놓고..... 나중에 준비가 되면 여태까지 해왔던 일들을 한번에 중앙 서버에 집어넣는 거였다. 한마디로 매일밤

"오늘까지 한 일. 어쩌구 저쩌구... 현재 컴파일은 안됨 ㅋㅋ"

이라는 commit log를 작성하고 싶었다고나 할까....

Perforce에서는 perforce sandbox를 사용하여 이 문제를 해결했었다. 하지만 Subversion을 사용할 때는 마땅히 어떻게 할 방법이 없었다. git-svn이라던가 hg-svn 등의 놈들이 있지만 이렇게 그다지 믿음이 가지 않았다. 난 모든간에 단순하고 간단한걸 좋아해서 이렇게 두가지 기능을 대충 합치는 프로그램을 안좋아한다. 사용하다가 말도 안되는 곳에 문제가 생겨서 골치만 아픈 경우가 너무 많거든...

하드디스크에 체크아웃 해둔 SVN 루트 디렉토리에 git이나 mercurial을 local depot를 만드는 법도 한 때 생각해봤으나.. 각 폴더마다 들어가 있던 .svn 폴더때문에 그것도 쉽지 않았다... 그래서 한동안 손을 들고 있었으나... 이게 왠일 SVN 1.7부터 폴더 구조가 바뀌었다. 이젠 루트폴더에 .svn폴더 하나만 넣는다.

이거 때문에 신나서 재빨리 시도해보았다.. 잘된다.. ㅠ_ㅠ

방법은 간단... 난 mercurial(HG)를 사용했다. 윈도우즈에서 git 쓸려면 SSH 설치며 뭐며 머리가 졸라 아픈데.. mercurial은 그냥 TortoiseHg만 깔면 된다.. 다른거 신경쓸거 하나도 없다...

모든간에 졸 간단한 방법:
  1. SVN checkout이 되어있는 root folder로 간다. SVN 버전이 1.7 미만이라면 1.7이상으로 업글한 뒤 현재 checkout 되어있는 소스트리를 최신버전으로 업데이트 해줘야 한다.
  2. 빈공간에 오른쪽 버튼을 누르고 TortoiseHg > Create Repository Here를 해준다.

  3. Init 대화창이 나오면. 뭐 다른 거 손 볼 필요 없다. 그냥 Create를 눌러준다.
  4. 이제 모든 파일이 제대로 보인다....

  5. 이제 private depot에 체크인 할때는 Hg Commit을... 중앙 depot에 체크인할때는 SVN Commit을 해주면 된다.
아, 정말 단순하고.. 깔끔한 방법이다.... 맘에 들어.. ㅠ_ㅠ

이 방법의 단점은 mercurial로 private depot에 체크인 했던 것은 changelist description을 자동으로 복사해올 방법이 없다는건데... 음.... 난 차라리 이 방법이 낫다. 매일 일하며 체크인 해 놨던 내용들을 쭈욱 살펴보면서 요약해서 적을 수 있으니까. 중앙서버까지 mercurial로 만들어 놓으면 local depot에 체크인 했던 changelist들이 전부다 개별적으로 submit된다. 맘에 안든다.... 뭐 collapse 익스텐션을 쓰면 이것도 해결 된다지만.. 역시 기본기능이 아닌 건 사람들이 그닥 많이 사용안하니 제대로 검증되지 않아서... 골치아픈 일이 많기 마련.... 따라서 extension은 그닥 쓰고 싶지 않아.....

어쨌든 이 방법 좋다... 만세~


2012년 5월 2일 수요일

내가 선택한 버전컨트롤 시스템(2012년 판)


작년에 영문 블로그에 제 개인적으로 사용하는 버전컨트롤 시스템은  Subversion이란 글을 올
렸었습니다. 근데 그 뒤에 Perforce에 두가지 변화가 생겨서 다시 한 번 생각을 하게되었지요. Perforce에 생긴 두가지 변화는 다음과 같습니다.
  • P4SandBox란 이름의 새 기능
  • 공짜버전의 한도가 20명 사용자, workspace 20개로 널럴해졌음

P4SandBox란 무엇인가?
이 새로운 기능이 Perforce 2012.1 에서 소개되었는데요. 이건 Git처럼 각 개인컴퓨터에서 local private 버전 컨트롤을 가능하게 해주는 기능입니다. 하지만 Git처럼 완전히 분산시스템은 아니고요. 중앙서버에 있는 depot을 개인 컴터 HDD에 mirror 복사를 해놓은 뒤 오프라인상태로 작업을 할 수 있게 해주는거지요. 그리고 나중에 중앙서버에 파일들을 checkin할 준비가 되면 그때까지 local 서버에 제출했었던 모든 파일들을 전부다 중앙서버에 올리는 겁니다. 또한 P4SandBox는 Stream이라는 게 있는데요. Git의 막강한 브랜치 시스템과 거의 비슷하게 작동하네요.

이 기능들에 대한 더 자세한 내용은 이 비디오를 참고하세요. 저보다 더 자세히 설명해 줍니다. ^_^

Background
게임업계에 대략 10년간 몸담았고 여러가지 오프소스 프로젝트를 주무르다보니 정말 다양한 버전컨트롤 시스템(VCS)를 만져봤답니다. 그냥 파일들을 손수 복사해주는 것부터 매우 값비싼 상용 프로그램 Perforce에 이르기 까지요.

제가 여태까지 집에서 써오던 버전 컨트롤 시스템은 Subversion이었습니다. 물론 더 나은 프로그램이 있다고 입에 침튀기시는 분들도 많았지만 그 분들이 맞다/틀리다곤 하지 않겠습니다. 제가 Subversion을 써왔던 이유는 (예전 블로그 글에도 밝혔듯이) 가장 간편하게 사용할수 있으면서도 제가 원하는 기능을 적당히 잘 지원하던 놈이었기 때문입니다. 하지만 내일부로 다시 Perforce로 돌아갈 계획입니다. 왜냐면 이제 Perforce가 더 제 필요를 잘 충족시켜 줄거거든요. 다음은 제가 개인프로젝트용으로 사용하는 VCS로부터 원하는 것과 시중에서 널리 사용되는 VCS들이 얼마나 그런 일을 잘 하는지를 목록으로 정리해논 것입니다.

윈도우즈 지원
전 MS빠입니다. 언제나 윈도우즈를 사용하지요. 게임 프로그래인 저로써는 사실 Linux를 사용할 필요를 못느낍니다. 운영체제를 하나만 사용할 수 있다면 그게 확실히 덜 골치거리겠지요?
  • Git(-2): 사실 전 Git을 꽤나 선호합니다. 특히 브랜칭을 처리하는 거 보면 아주 침을 질질 흘리죠. 문제는 .... Git을 윈도우즈에서 돌리려면 좀 피곤하죠. 제가 아는 한은 Cygwin이나 msysgit을 설치하는 건데 Cygwin은 사실 Linux를 에뮬레이션 하는 것과 다르지 않고, Cygwin을 윈도우즈 PC에 설치하는게 그닥 달갑지 않습니다. msysgit은 그보단 윈도우즈에 설치하기 쉽지만 SSH도 따로 설정해줘야 하고..... 한마디로 그냥 마우스 클릭 한번만으로 윈도우즈에 Git을 설치할 방법이 없단 거지요. 따라서 MS빠인 저에게는 좀... no-no입니다.
  • Perforce(+1): Perforce는 윈도우즈를 매우 잘 지원하죠. 윈도우즈용 서버/서비스 프로그램도 인스톨러를 통해 한번에 설치 가능합니다.
  • Subversion(+2): 사실 이건 매우 큰 surprise였는데요. 그리고 그게 바로 제가 Subversion을 지금까지 이용해온 이유기도 하구요. VisualSVN Server이란 프로그램이 있는데 마우스 한번 클릭으로 윈도우즈에 Subversion을 깔아줍니다. 알아서 https 액세스도 잡아주고 사용자 관리 및 뭐니 모두 매우 간단한 GUI 툴에서 잡아줄수가 있습니다. Perforce를 설치하는 것보다도 쉬워요 -_-;
(가끔 있는 일이지만) 다중의 사용자 지원
개인 VCS는 사실 제 스스로의 코드의 히스토리를 저장하고 백업을 보관하는 용도이지만 가끔 제 친구들도 제 코드를 받아보게 할 일이 있지요. 절 도와준다거나 할때요. 따라서 여러명의 사용자를 지원할 수 있어야 편합니다.

  • Git(+1): Git에서 여러 사용자 지원하는건 전혀 어렵지 않죠. 하지만 윈도우즈에서 각 사용자별로 액세스 컨트롤을 해주는 게 왕 짜증입니다.. 새로운 윈도우즈 사용자를 추가한 뒤, 각 사용자의 public키를 받아서 디렉토링 ㅔ넣어줘야 하죠.. 
  • Perforce(+1): 작년까지인가 Perforce는 공짜에 한도가 있었죠. 다음 중에 한 조건에서만공짜였습니다. i) 2명의 사용자와 5 개의 클라이언트 워크스페이스 또는 ii) 사용자 제한 없이 1000개 파일까지만. 하지만 이제는 20명의 사용자와 20개의 클라이언트 워크스페이스까지가 공짜입니다. 파일 수의 제한은 없구요. 하지만 새로운 P4SandBox기능을 쓰려면 각 사용자별로 2개의 워크스페이스가 필요합니다. (하나는 중앙서버용 하나는 local 미러용). 그리고 각 컴퓨터별로 이렇게 해줘야 하니 보통 사용자가 2대의 컴퓨터를 쓴다고 가정하면 한사람이 4개의 워크스페이스를 잡아먹죠. 따라서 결국에 5명의 사용자만 제대로 지원할 수 있다는 건데... 제 개인 프로젝트용으로는 이정도면 매우 충분한거 같습니다. 따라서 예전에 줬던 -1점을 +1 점으로 바꿨습니다.
  • Subversion(+2): 윈도우즈 지원 섹션에서 말씀드렸듯이 VisualSVN Server에서 GUI 툴을 통해 간단히 액세스 컨트롤을 할 수 있습니다. 너무너무 쉬워요~ 사용자 수 제한도 없고~  강추입니다.

비용
아무래도 공짜가 좋죠.. 공짜가 최고 -_-d

  • Git(+1): 공짜
  • Perforce(0): 특정 조건하에 공짜. 하지만 최근들에 그 제한이 완화되었음. 따라서 점수를 -1에서 0점으로 바꿨습니다.
  • Subversion(+1): 역시 공짜

GUI 클라이언트
Perforce만큼 멋진 GUI 클라이언트가 없습니다. 사실 P4V 보단 P4Win이 좋았지만 P4Win은 더이상 안나오니.. 중얼중얼...P4V도 충분히 좋아요~  물론 GUI 클라이언트로 할 수 없는 일은 컴맨드 라인을 쓰지만 거의 대부분 GUI 클라이언트를 사용하는 것이 훨씬 빠르고 훨씬 쉽더라구요.
  • Git(-1): 아직 공짜이면서도 쓸만한 GUI 클라이언트를 못찾았습니다. 몇개 개발중인건 봤는데 아직 맘놓고 쓸만큼 자리잡은 놈들이 없어요. 그나마 TortoiseGit이 좀 쓸만하지만 P4V처럼 진정한 GUI클라이언트가 아니지요.
  • Perforce(+2): P4Win은 죽여주고, P4V도 매우 좋습니다. ㄱㄱㅑ~
  • Subversion(+1): SmartSVN이란 프로그램을 한동안 써왔습니다. 프로 버전을 사지 않으면 좀 기능에 제한이 있지만 사실 공짜버전만으로도 충분히 쓸수있습니다. 공짜 버전에서 제공하지 않는 기능이 있다면 그냥 TortoiseSVN으로 해주면 되고, 그것도 안되면 컴맨드라인을 쓰면 되죠. 하지만 거의 SmartSVN만 쓰시고 사실 겁니다... ㅎㅎ
브랜칭
브랜칭... 꽤 멋진 놈이죠... 전 이거 사랑합니다. 코드가지고 장난칠 때(실험적인걸 할 때 라고 읽어주십쇼 -_-) 기존 코드에 깽판치고 싶지 않다면 이만한 놈이 없죠.
  • Git(+2): Gt의 막강한 브랜칭 지원 매우 사랑스럽습니다. 다른 디렉토리로 파일을 복사할 필요가 없죠. 따라서 코드에서 파일 경로를 참조하는걸 바꿔줄 필요조차 없습니다. 예를들어 Awesome이란 이름의 라이브러리가 있는데 이 라이브러리를 브랜칭을 하고 싶다고 해보죠. Git에서는 그냥 다른 브랜치로 switch한 뒤 코드만 빌드하면 됩니다. 하지만 다른 소스컨트롤 시스템에서는 이 라이브러리를 다른 디렉토리로 복사해야하니 코드에서 라이브러리의 경로까지 다시 고쳐줘야 하죠...
  • Perforce(+2): 바로 위 Git에서 말씀드렸듯이 다른 폴더로 브랜칭을 해야하는 거 참 귀찮습니다. 그리고 Perforce는 중앙관리시스템이다 보니 그 수많은 파일들을 브랜칭 하는것도 되게 느리죠. 네트워크 스피드가 아무래도 HDD속도보단 느리니까요. 하.지.만. 이제 세상이 바뀌었습니다. P4SandBox를 이용하면 브랜칭이 Git의 브랜칭과 거의 같아집니다. 샌드박스안에서 모든게 이뤄지거든요. 중앙서버에 접속할 필요조차 없이... 따라서 점수를 -2에서 +2로 바꿨습니다.
  • Subversion(-1): 속도는 빠릅니다. 하지만 다른 디렉토리로 브랜칭 해야하는거... 흠냐.. 여전히 맘에 안듭니다.

최종 점수
점수를 다 더해보니 이렇게 나옵니다.
다시 한번 말씀드리는데 이건 제 개인적인 용도에 맞게 산출해낸 점수입니다. 대형 게임회사용이 아니에요. 따라서 여기다 "하지만 Perforce가 사용자 200명도 쉽게 지원하니 최고야!" 따위의 답글을 남기신다면 잠드시기 전에 이 비디오를 2시간동안 보게 만들겠습니다. -_-;