SCM 추천 좀 부탁드립니다.
현재 centralized 형 SCM을 쓰고 있는데, 집에 인터넷이 하도 불안한 데다가 (이건 뭐 모바일 인터넷도 아니고..) 가끔 인터넷 안되는 곳으로 나가는 경우가 생겨서 decentralized 형을 생각하고 있습니다. 몇 가지 조사를 해보았는데 결국엔 쏙 맘에 드는 걸 아직 못 찾았습니다. 저랑 비슷한 고민을 한 분이 계시면 조언 부탁드립니다. 저의 기준은,
1. off-line에서도 commit 가능.
2. decentralized일 경우 특정 directory만 clone 가능
3. decentralized일 경우 누적 history를 다 받지 않는 clone 가능
4. Windows, UNIX 지원
5. 한글 지원
6. GUI client
7. Visual Studio plugin 지원.
좀 까다롭긴 하군요^^; 제가 지금까지 알아본 결과는 아래와 같습니다.
일단, 현재 쓰고 있는 SCM은 Perforce입니다. 상용 프로그램이지만 2명의 사용자까지는 무료로 사용할 수 있고, 한 컴퓨터 내에 서버를 여러 개 돌릴 수 있어서 (하지만 약간 귀찮아지긴 합니다만...) 저 제약이 그다지 크게 느껴지지는 않는데, 서버와 접속을 못하는 상황에서는 할 수 있는게 별로 없어서 문제입니다. Perforce Proxy라는게 있는데, 이거 설명을 보면 거의 stateless다. 라는 걸 보면 http proxy 정도의 물건이지, off-line에서 쓸 수 있는 것이 아닌 것 같습니다.
또 한글 문제가 있는데, unicode로 설정할 수 있는 옵션이 있긴 하지만, 원래 unicode를 감안하고 만든 것도 아니고 사용하는 곳이 많은 것 같지도 않아서 못 믿겠습니다-_-;
Perforce의 좋은 점은 P4Win이라는 GUI client가 있다는 거, 모든게 서버에서 관리된다는 거 - 예를 들면, 어떤 파일을 edit하고자 할 때에도 add할 때처럼 server에 허락을 받고 열어야 합니다. 이게 불편해 보이지만 상당히 좋은게 다른 사람 (제 경우엔 다른 컴퓨터에 있는 저-_-)이 뭘 edit하고 있는지 알 수 있어서 좋습니다. 그리고 Visual Studio plugin이 제공되구요^^; (상용이라 돈 되는 거에는 지원이 확실-_-)
CVS는 atomic commit이 안되기 때문에 일단 패스. SVN은 다른 프로젝트들 때문에 사용하고 있는데 .svn 디렉토리들이 디렉토리마다 생기더군요. 설정이 안 좋아서 그런건지는 몰라도 이점이 좀 크게 다가오는지라.. 이것도 패스.
decentralized 형으로 mercurial, bazaar 를 매뉴얼을 보거나 실행해 보았는데, off-line에서 일하는건 laptop에 clone을 만드는 것으로 가능한 것 같습니다만, 문제가 repository 중 특정 디렉토리만 clone하는 게 안되는 것 같습니다. laptop에 있는 clone는 길어야 몇 주 사용할 임시 저장소이라서 데이터를 많이 들고 다니기도 번거롭고 laptop 하드도 작구요. 그리고 clone을 뜰 때 모든 디렉토리에 모든 revision을 복원할 데이터를 다 가지고 있게 되는 것 같습니다. 임시 용도이기 때문에 최신 revision 정도만 들고 있었으면 좋겠는데요...
비슷한 종류로 git이 있는데, 이건 Windows에서 성능이 꽤 안 좋다고 해서 망설여지구요.
일단 마음 속에 끌리는 건 mercurial과 bazaar입니다만, 제 Perforce depot(repository랑 비슷한 개념입니다.)에 이미 파일이 2기가가 넘게 있는지라 전체 clone을 뜨는 건 바람직하지 않아보입니다. 이중에 1.5기가가 사진이라서 랩탑에 굳이 들고다닐 이유가 없는데 말이죠^^;
각 큰 디렉토리들을 별개의 repository로 분리하는 방법도 있겠지만, 이거는 그다지 마음에 들지 않아서 정 안되면 최후의 선택 정도로나 생각하고 있습니다. 조언 부탁드립니다. fork를 뜨라는 말은 가급적 안 하셨으면^^;
Git
Git의 경우 3번(history 받지 않기)은 git clone --depth 1 (숫자는 받아올 history 수이고 0은 안됩니다) 처럼 할 수 있습니다. (조금 찾기가 어렵습니다.)
Git에서 2번(subtree만 받기) 어떻게 하는지 아시는 분 계십니까?
Mercurial
Mercurial의 경우 인코딩 관련해서는 유니코드를 감안해 만들어서 기본값으로 잘 돌아가고, 필요한 경우 HGENCODING 환경 변수나 --encoding 명령행 옵션을 쓸 수 있습니다.
2번은 현재 안 됩니다. 진행 상황은 여기 있습니다.
http://www.selenic.com/mercurial/wiki/index.cgi/PartialClone
3번 역시 현재 안 됩니다. 진행 상황은 여기 있습니다.
http://www.selenic.com/mercurial/wiki/index.cgi/TrimmingHistory
감사합니다^^
저만 특별히 그런게 필요한 건 아니었나보군요. 그런데, 어째 둘 다 오래 전에 언급되었던 내용들인데 구현이 안 되었네요.
검색을 하다가
검색을 하다가 bzr에도 3번 비슷한 기능이 논의되었다는 걸 알게 되었습니다.
http://bazaar-vcs.org/HistoryHorizon
얘기가 나온지 꽤나 오래되었는데, 아직 별다른 소식이 없는 걸로 봐서 가까운 미래에 구현될 가능성은 없어 보이는군요^^;
음 순간 Supply Chain
음 순간 Supply Chain Management 솔루션 추천해달라는 것으로 오해했음...
근데 SCM이 뭔가요?
--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러
--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러
SCM
간단히 말해서 어떤 파일이 과거에 어땠고 이런저런 수정이 있었다는 것을 기록하기 위한 소프트웨어입니다. 주로 소프트웨어 개발할 때 쓰입니다. 이래야 뭐가 잘못되면 과거 내용으로 되돌리거나 어떤 변화가 있었는지를 보고 잘못된 점을 유추할 수도 있겠고, 너저분하게 백업_20071101, 백업_20071103 등을 만들 필요가 없기도 하구요. 하지만, 프로그래밍 용도가 아니어도 유용합니다. 저같은 경우 중요한 파일을 다 SCM으로 관리하고 있는데, 예전에 설정이나 문서를 어떻게 고쳤는지를 확인할 수도 있겠고, 백업할 때에는 SCM에 관리되는 것만 백업하니까 좋더군요.
혹시 처음 쓰시는 거라면, 그리고 제가 겪고 있는 문제가 별 문제가 되지 않는다면 Perforce를 추천하고 싶습니다.
댓글 달기