참고: 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







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
  - 완벽하게 표준화된 파일을 다룰 때만 사용할 것.
    - 템플릿 파일 커밋 -> 버전관리되지 않는 파일에 복사
    - 사용자들이 버전관리되지 않는 파일을 수정할 수 있음



*




Posted by bloodguy
,