참고: http://www.red-bean.com/fitz/presentations/2006-06-28-AC-EU-Subversion-best-practices.pdf
내용을 직접 보고 들은게 아니라 파워포인트 형식의 문서만 번역하다 보니 모자라거나 혼동되는 부분이 상당하다...
Server
* 어떤 서버를 사용할 것인가?
svnserver: 빠르다. 가볍다. 셋업이 간편하다.
svn+ssh: sshd를 이미 사용하고 있다면 좋은 선택이 된다.
Apache HTTP Server
- 통합환경을 구성할 수 있는 가능성을 제공한다.
- 웹브라우저에서 바로 repository를 볼 수 있다.
- 네트웍 공유로 Repository를 사용할 수 있다.
- 커스텀 로깅이 가능하다 (svnserve 에 곧 추가될 예정)
* Repository의 수는 하나가 좋은가 여러개가 좋은가?
- repository는 가급적 하나인 것이 좋다. (사용자, 코드의 공유측면이나 유지보수비용의 관점에서)
- 아래의 경우라면 여러개를 사용하는 것이 좋다
- 접근제어가 필요할 때
- 데이터 타입이 다를 때
* 인증정책
- 가능하다면 None 으로 하는 것이 좋다.
- 신뢰를 북돋아 줄 수 있다.
- SubVersion 에서 뭔가를 완벽히 지울 수는 없다는 것을 기억하라. (=얼마든지 복구가능하므로 쫄지 말고 열어두라)
* Repository Browsing Tools
- ViewVC, Trac .. 과 같은 것들이 있다.
* Hook Scripts
- 커밋 전 (Pre-commit hooks)
- 트랜잭션을 수정하려 하지 말 것
- 맞춤법 검사 정도의 스크립트면 좋음
- 커밋 후 (Post-commit hooks)
- 백그라운드로 돌릴 것 (pre-commit-script.py &)
- 커밋내용을 메일로 보내는 정도의 스크립트면 좋음
* Locking/Reserved Checkouts
- 항상 모든 파일에 락을 걸지 말 것
- Merge가 일어날 가능성이 없는 파일들만 Lock을 걸 것
- 커뮤니케이션을 위해 svn:needs-lock 프로퍼티를 사용할 것
* Autoversioning
- 코딩이 필요없는 프로젝트, 나눠져 있는 Repository 등에 좋음.
- 전통적인 프로젝트에는 좋지 않음.
* Repository Maintenance
- 백업: dump, hotcopy
- 히스토리 말소는 피해야 함
- 만약 히스토리 말소를 해야 한다면 차라리 선택적 덤프를 하라
Client
* 코드리뷰를 활성화 시킴
- 커밋을 자주 하라.
- 분산된 작은 단위로 커밋하라.
- 일관된 로그 메세지를 남기라.
- 커밋 이메일을 팀 전체에 보내라.
* Branches
- 브랜치 따는 걸 두려워하지 마라.
- 유용한 브랜칭
- 작은 태스크 단위의 브랜치 (금방 trunk로 병합될)
- 중간단위의 feature 브랜치
- 긴 릴리즈 단위의 브랜치
- 릴리즈 정책을 세우자.
* Merge Tracking
- 사람의 손으로 해야한다.
- Merge 내역을 로그메세지에 남기자.
* Standardize on One Locale
- 파일명, 로그메세지는 전부 UTF-8 로 하자.
* Use Autoprops
- 안된다. 서버는 그것을 클라이언트에 보낼 수가 없다.
- 유용한 autoprops (svn:mine-type, svn:eol-style, svn:needs-lock)
* Cool Client Tricks
- 반쯤 작업이 진행되었을 때 브랜칭하자.
- In-place "import"
$ cd dataset/
$ svn mkdir URL
$ svn checkout URL .
$ svn add *
$ svn commit
$ svn mkdir URL
$ svn checkout URL .
$ svn add *
$ svn commit
Common Use-Cases
* Mixing and Matching Components
- svn:externals
- 'svn switch' on empty directories
* Managing a website in SubVersion
- working copy를 website 로 서비스할 것.
- httpd 가 .svn/ 디렉토리로 접근하는 것을 막을 것.
- working copy를 업데이트 시키기 위해 post-commit hook 스크립트를 작성할 것.
* Use svnversion
- $Revision$은 당신이 생각하는 대로 동작하지 않는다.
- svnversion은 빌드 시스템과 함께 동작하기 위해 디자인되었다.
* Use a Template
- 완벽하게 표준화된 파일을 다룰 때만 사용할 것.
- 템플릿 파일 커밋 -> 버전관리되지 않는 파일에 복사
- 사용자들이 버전관리되지 않는 파일을 수정할 수 있음
*
'버전관리' 카테고리의 다른 글
[Mercurial] TortoiseHG를 이용한 버전관리 (0) | 2010.10.06 |
---|---|
[Mercurial] TortoiseHG 설치 (2) | 2010.10.06 |
[SVN] TortoiseSVN으로 로컬에서 버전관리하기 (2) | 2009.10.20 |
Git, Mercurial 사이에서 구글이 고민한 내용 (2) | 2009.10.01 |
SubVersion에서 하지 말아야 할 10가지 (0) | 2009.10.01 |