이 파트에서 다루는 내용
브랜치와 태그의 실체switch로 작업선 변경merge와 mergeinfo릴리스 태그 운영
01
SVN 브랜치와 태그는 copy입니다
SVN에서 branch와 tag는 저장소 안의 디렉터리 복사입니다. 보통 trunk를 branches나 tags 아래로 copy해서 만듭니다.
Git tag처럼 특별히 불변 객체가 되는 것은 아니므로, 태그 경로에 커밋하지 않는다는 운영 규칙이 필요합니다.
svn copy <repo-url>/trunk <repo-url>/branches/feature-login -m "create feature-login branch"trunk에서 feature 브랜치 생성svn copy <repo-url>/trunk <repo-url>/tags/release-1.0.0 -m "tag release 1.0.0"현재 trunk 기준 릴리스 태그 생성svn copy -r 1234 <repo-url>/trunk <repo-url>/tags/release-1.0.0 -m "tag release 1.0.0 from r1234"특정 revision 기준 태그 생성02
switch는 working copy의 기준 URL을 바꿉니다
이미 checkout한 working copy를 다른 branch로 바꿀 때 switch를 사용할 수 있습니다. 다만 로컬 변경이 있는 상태에서 switch하면 충돌이 커질 수 있습니다.
svn info현재 working copy가 바라보는 URL 확인svn statusswitch 전 로컬 변경 여부 확인svn switch <repo-url>/branches/release-1.0현재 working copy를 release 브랜치로 전환svn switch <repo-url>/trunk다시 trunk 기준으로 전환안전 기준
switch 전에는 로컬 변경을 commit하거나 별도 백업하고, status가 깨끗한 상태에서 전환하는 편이 안전합니다.
03
merge는 브랜치 변경을 작업 사본에 적용합니다
SVN merge는 대상 branch의 변경을 현재 working copy에 적용합니다. 적용 후 바로 서버에 반영되는 것이 아니라, 변경된 working copy를 검토하고 commit해야 합니다.
merge 전에는 update로 기준을 맞추고, merge 후에는 status와 diff로 실제 반영 내용을 확인합니다.
svn updatemerge 전 현재 working copy 최신화svn merge <repo-url>/branches/feature-loginfeature-login 브랜치 변경을 현재 working copy에 병합svn statusmerge로 변경된 파일 확인svn diffmerge 결과 검토svn commit -m "merge feature-login into trunk"검토한 merge 결과를 서버에 커밋04
릴리스 태그는 배포 증거입니다
SVN 릴리스 태그는 운영 배포 기준 revision을 다시 찾기 위한 증거입니다. 태그 이름, 생성 revision, 배포 일시, 배포 산출물 경로가 운영 문서와 맞아야 합니다.
- 태그는 가능하면 특정 revision 기준으로 생성합니다.
- 태그 경로에는 일반 개발 커밋을 하지 않는다는 규칙을 둡니다.
- 배포 스크립트가 tag URL을 기준으로 export 또는 checkout하는지 확인합니다.
- 운영 장애 추적 시 tag 이름과 revision 번호를 함께 기록합니다.
svn export <repo-url>/tags/release-1.0.0 dist-releaseSVN 메타데이터 없이 릴리스 소스만 exportsvn log <repo-url>/tags/release-1.0.0 -l 1태그 생성 revision과 메시지 확인체크