기본 개념의 이해

  • 소스 코드 버전 관리 도구: 동시 개발, 소스 충돌 회피
  • 레파지토리(repository): 저장소. 소스 코드가 버전별로 모두 저장.
  • 작업 복사본(working copy): 저장소에서 내려받은 소스 코드 작업 복사본. 로컬 작업 공간(working space)
  • 리비전(revision): 갱신 번호. 매번 수정이 발생할 때마다 증가.
  • 브랜치(branch): 가지 뻗어나가기, 여러 버전의 동시 진행 및 통합(merge)
  • 트렁크(trunk): 개발 가지들 가운데 가장 중심이 되는 줄기.
  • 태그(tags): 개발 버전의 스냅샷.
  • Import: 최초로 레파지토리에 자료를 올림. (레파지토리 중심 관점)
  • Export: 레파지토리에서 자료를 내려 받음. 버전 관리 정보 제외. (레파지토리 중심 관점)
  • Checkout: 레파지토리에서 자료를 내려 받음. 버전 관리 정보 포함.
  • Commit: 작업 영역에서의 변경내역을 레파지토리에 실제 반영하는 명령어.

초기 설정

  • 저장소 설정: [관리자 설정사항]
    # fsfs 파일시스템 타입
    $ svnadmin create --fs-type fsfs repo_name
    # bdb 버클리 디비 타입
    $ svnadmin create --fs-type bdb repo_name
    • 통상적으로 /var/svn 또는 /var/repos 위치에 저장소 디렉토리를 설정, 그 아래에서 저장소 생성
    • 아파치 DAV를 사용하여 svn에 접속할 경우에는 chown -R apache repo_name 또는 chmod -R a+w repo_name 실행.
  • 기본 디렉토리 구조 설정: trunk, branches, tags
    $ svn mkdir http://svn_server.com/svn/repo_name/project_name/trunk
    $ svn mkdir http://svn_server.com/svn/repo_name/project_name/branches
    $ svn mkdir http://svn_server.com/svn/repo_name/project_name/tags
    • 별도로 압축해서 배포하지 않는 웹 프로젝트인 경우에는 trunk, branches, tags 구조 생략 가능.
    • 통상 repo_name 까지는 관리자가 생성해서 알려줌. 그 아래 프로젝트 단위 이하 구조는 개발자가 생성.
    • repository 단위로 리비전(revision) 번호가 매겨지므로, 너무 큰 단위로 저장소를 설정하지 않는 것이 좋음.
    • 완전히 별개의 프로젝트인 경우에는 가급적 별도의 레파지토리를 설정하는 것이 좋음.
  • svn import: 최초로 레파지토리에 자료를 올림. (레파지토리 중심 관점)
    # project_name 디렉토리를 지정하는 경우
    $ svn import project_name http://svn_server.com/svn/repo_name/project_name/trunk
    # project_name 디렉토리를 지정하지 않는 경우. 현재 디렉토리 전체가 올라감.
    $ svn import http://svn_server.com/svn/repo_name/project_name/trunk
    • 별도로 trunk, branches, tags 구조를 설정하지 않은 경우에는 그냥 project_name 까지만 지정.
  • svn checkout (co) : 작업 영역으로 레파지토리 내용을 내려받음. 작업 복사본(WC: working copy) 생성.
    # project_name 이라는 디렉토리 새로 생성
    $ svn checkout http://svn_server.com/svn/repo_name/project_name/trunk project_name
    # 또는 마지막 인수를 입력하지 않으면 URL의 최종단인 basename으로 디렉토리가 생성됨.
    # 아래 예에서는 trunk 라는 디렉토리가 새로 생성됨.
    $ svn checkout http://svn_server.com/svn/repo_name/project_name/trunk
  • 기본 편집기 설정: commit 명령 실행시에 -m "메시지" 옵션을 지정하지 않으면 Editor가 뜸. 이때 사용할 편집기를 설정.
    # .profile 또는 .bash_profile안에 추가
    SVN_EDITOR=/usr/bin/vim
    export SVN_EDITOR

주의 사항

  • svn이 걸려있는 디렉토리에서 작업을 할 경우에는 반드시 svn 명령만을 사용해서 파일 변경/삭제 작업을 수행해야 함. 파일 생성후에도 svn add 명령으로 저장소 추가를 예약해놓아야 함.
  • 디렉토리 역시 svn mkdir 명령으로 생성하거나 svn add 로 추가를 예약해야 함. 디렉토리 변경/삭제 역시 svn 명령 사용해야 함.
  • svn 걸려있는지 아닌지 구별하는 방법: svn이 걸려있는 디렉토리에는 .svn 이라는 숨겨진 디렉토리가 있음.
  • 파일 관련 시스템 명령어(cp, mv, rm)를 그대로 사용할 경우에는 svn 체계에 혼선이 생겨서 이후 변경 내용이 반영되지 못하는 문제가 발생함
  • 모든 svn 관련 작업 이후에는 svn commit 명령을 실행해줘야 svn 저장소에 반영이 됨

주요 명령어

  • svn help : 상세 사용법 출력. svn help subcommand 도 가능.
  • svn add : 새로 생성한 파일이나 디렉토리를 저장소에 추가 예약
  • svn mkdir : 디렉토리 새로 생성
  • svn delete (del, remove, rm) : 파일이나 디렉토리를 삭제 (로컬과 저장소 둘다)
  • svn move (mv, rename, ren) : 파일이나 디렉토리를 이동하거나 이름 변경
  • svn copy (cp) : 파일이나 디렉토리 복사
  • svn update (up) : 작업 영역을 저장소 정보에 맞춰서 업데이트.
  • svn commit (ci) : 작업 영역의 변경 내역을 저장소에 저장.
  • svn status (st) : 상태 보기
  • svn log : 로그 기록 확인
  • svn diff : 차이점 확인
  • svn dump : 저장소 내용을 덤프해서 파일에 저장
  • svn load : 덤프 파일 내용을 저장소에 쏟아넣음
    # 저장소 백업
    $ cd /var/svn
    $ svnadmin dump repo_name > repo_name.dump
    # 저장소 복구
    $ cd /var/svn
    $ svnadmin create repo_name
    $ svnadmin load repo_name < repo_name.dump

참고 링크

출처 : http://blog.naver.com/joycestudy?Redirect=Log&logNo=100045501722

 SVN HOWTO
http://wiki.kldp.org/wiki.php/Subversion-HOWTO#s-5.5


+ Recent posts