본문 바로가기
프로그래밍

SVN 사용방법및 관리

by violetoz 2013. 6. 10.
  1. SVN 설정하기

    1. 프로젝트 폴더에서 무시목록을 추가합니다.

    2. 폴더에서 우클릭 → TortoiseSVN → Setting(1) → GeneralSubversion 항목에

    Global ignore pattern 에 위의 ignore 목록을 추가한다(2).





2. 새로운 파일(폴더)추가 방법

1. SVN과 연동된 폴더안에 새로운 파일(폴더)를 생성하거나 이동시키면 그림과 같이 파일(폴더)? 표시가 나온다. 나와있는 표시대로 ? - 현재 SVN에 없는 파일(폴더) V – SVN서버에 업로드 되어있는 파일(폴더) ! - 현재 SVN서버에 있는 파일(폴더)에서 수정이 되엇거나 변경되었음을 알리는 표시이다.

2. ? 표시가 있는 파일(폴더)를 클릭후에 우클릭을 하게되면 아래 그림과같은 창이 나오는데 TortoiseSVN 목록을 클릭하면 여러 버튼이 나오는데 그중에서 + 표시가있는 Add... 버튼을 클릭한후에 디렉토리 설정후 OK버튼을 누르게되면 SVN서버에 추가된다.

3. 연동된 SVN서버 사용

1. SVN Update – SVN서버에 올라와 있는 파일을 내 컴퓨터에 내려받기

2. SVN Commit... - 현재 내 컴퓨터에 있는 파일을 SVN서버에 업로드하기

Commit을 할시에는 2번째 그림처럼 창이 하나 뜨는데 아래목록에는 SVN서버에 올라갈 파일(폴더)목록이고 위에 있는 목록에는 업데이트 로그를 남기면서 추가할 메시지를 넣을 수 있다.

변경된 사항이나 기타 추가사항등을 기재해주면 된다.



4. 그 외 Tortoise SVN 사용법

1.Show Log – SVN 서버에 Commit 하거나 업로드한 파일(폴더)의 기록을 볼수있다. 이 항목으로 버전 관리를 한다.

2. RePo-browser – SVN서버 브라우저에 접속하는 항목이다. 현재 서버주소(https://unitygame-pc:8443/svn/Project) 를 입력하고 접속하게되면 SVN서버에 접속한다.

3. Branch/tag, Merge, Switch – http://blog.naver.com/ywshin94?Redirect=Log&logNo=10111675976 여기 홈페이지에 가보면 자세하게 정리되어있다.

4. Relocate – 해당 서버의 주소가 바뀌거나 했을시에 주소변경용으로 사용된다.

5. Add – SVN서버에 Commit된 파일(폴더)외에 다른 파일(폴더)SVN서버에 추가할시에 사용된다.

6. Setting – ingnore 목록과 Tortoise SVN 설정을 할수 있다.



기본 기능들

  • import

우클릭 - TortoiseSvn - import 
기능 : 기존에 없던 새로운 소스를 저장소로 올리기 위한 기능.

질문 : import와 add 해서 commit하는 것과의 차이점은?
처음 소스버전을 import하지 않으면 commit 기능 자체가 안됨.
소스의 처음 버전을 저장소로 올려서 이제 시작하는 걸 알리는 기능이라고 생각하면 됨.

  • CheckOut

우클릭 - SVN Checkout
기능 : 특정버전의 전체 소스를 svn이 연결된 상태로 내려받기 위한 기능

  • Commit

우클릭 - SVN Commit
기능 : 기존 svn연결 된 소스에 수정된 소스를 새로운 revision으로 올리기 위한 기능.

질문 : 항상 add commit을 해야되나? commit시 자동 add가 되지 않는가?
에디터 상에서 파일을 추가할때는 (svn연결된 상태) 자동으로 add가 된 상태로 파일이 추가가 되며
탐색기 상에서는 파일을 생성 후 add를 해줘야 함.

  • Update

우클릭 - SVN Update
기능 : 수정된 소스를 특정 version으로 내려 받기 위한 기능. 
색상 : 보라(새로 추가된 파일), Dark red(삭제된 파일), 초록(정상merge된 파일), 빨강(중복 merge 소스가 존재), 블랙(일반 updated된 파일)

  • Resolving Conflicts

기능 : merge시 내가 수정하는 부분과 충돌이 일어난 경우. 유저에게 중복된 부분을 제공해 주고 직접 수정하도록 유도한다.

    <<<<<<< filename
        your changes
    =======
        code merged from repository
    >>>>>>> revision
  • 상태 정보창

각 상태별 아이콘에 대한 설명이 그림으로 잘 정리되어서 첨부. (svn_icon.png)

  • Revision Log

해당 폴더 우클릭 - TortoiseSvn - ShowLog
기능 : 해당 파일이나 폴더별 revision 및 상세 내용을 확인할 수 있다.

  • Diff

파일 및 폴더 우클릭 - TortoiseSvn -Diff
기능 : 버전이 다른 두파일이나 폴더의 차이점을 확인 가능.
한파일을 선택시에는 이전버전과의 차이점 비교 가능.
폴더의 경우는 export를 통해 같은 폴더를 비교해야지만 차이점 확인 가능

  • Ignore

파일 및 폴더 우클릭 - TortoiseSvn - Remove from Ignore List 
기능 : 특정 파일이나 폴더 및 패턴을 제외시킴으로써 commit 이나 import시 자동 제외되는 기능
.aspx를 제외시킨다든지 패턴을 제외시킬수 있음.

  • Delete, Moving

파일 및 폴더 우클릭 - TortoiseSvn - Delete
파일 및 폴더를 마우스 우클릭드래그 - 각각의 Move메뉴 노출
기능 : 파일 및 폴더를 삭제 가능함. 삭제후 commit을 통해 삭제 파일 반영 필수.
moving 기능을 통해서 svn에 연결된 그대로 폴더 및 파일을 이동 가능

  • Branching / Tagging

폴더 우클릭 - TortoiseSvn -Branch/Tag
기능 : trunk 루트 버전이외에 동일한 소스를 다른 용도로 사용하고 싶을 때 이용(서로 작업간 충돌없이 개인이 다른 버전으로 작업 후 merge하고 싶을때 이용)
trunk 소스와 동일하게 commit시 revision이 등록되며 다른 용도 사용 이후 기존 trunk버전과 merge를 통해서 통합하는 형태도 가능.

  • Merging

폴더 우클릭 - TortoiseSvn - Merge
기능 : 1. 파일이나 폴더별 기존 revision과의 merge를 하고 싶을 때 : Merge a range of revisions
2. branch버전과 기존 trunk버전을 merge하고 싶을 때 : Reintegrate a branch
3. 서로다른 트리의 소스를 merge를 하고 싶을 때 : Merge two different trees

  • Switch

파일 및 폴더 우클릭 - TortoiseSvn - Switch
기능 : 현재 trunk 버전을 사용중인데 branch버전의 작업이 필요할 때
전체 checkout을 받을 필요없이 일부분만 switch해서 빠르게 소스를 내려받을 수도 있는 장점이 있음.
참고 http://lethean.pe.kr/2009/02/06/using-subversion-switch-command/

  • Locking

파일 및 폴더 우클릭 - TortoiseSVN - Get Lock
기능 : lock이 걸린 파일은 commit이 불가능

  • Blame

파일만가능. 우클릭 - TortoiseSvn - Blame
기능 : 사용자별로 한 파일에 대해 각 버전별 어떤 부분을 어떻게 수정했는지 확인 가능

  • Export

우클릭 - TortoiseSvn - Export
기능 : 원하는 버전 소스를 svn 연결없이 단지 소스만 추출하는 기능

주요 기능들

  • 이전버전 rollback 후 그 버전으로 재 commit 방법 (중요 자주사용!)

단순 롤백을 한 경우에는 수정된 부분이 없기 때문에 전체를 재 commit할수가 없다.
Reverse Merge 를 이용!

1. TortoiseSVN - Merge - Merge a range of revisions - Reverse merge체크 - Revision range to merge 부분에 현재버전 빼기 롤백하고 싶은 버전을 입력해 준다.
첨부 파일 참조(svn_reverse_merge.png)
2. Next - merge depth - Ignore ancestry(변경기록무시함) 체크 후 Merge!!

ex) 현재 262버전이고 260버전으로 롤백하고 싶을 경우
261-262 버전을 reverse merge해 버리면 260버전으로 돌아가져 있고(261-262수정사항을 지워버리는 것), 이 상태로 commit을 하게 되면 
260버전내용의 263버전을 commit 할 수 있다.

혹시 롤백할 버전의 버전관리가 딱딱 맞아 떨어지지 않아서 원하는 부분만 롤백을 하고 싶은 경우!
롤백할 전체 소스상에서 Reverse Merge를 통하여 롤백하고 싶은 부분의 개별 revision만 "," 를 통해 지정!
그럼 원하는 revision의 내용만 롤백된 상태로 커밋이 가능!

  • branch + trunk Merge 방법

1. branch버전을 commit 후 trunk전체 소스에서 HEAD버전을 Merge!(branch내용의소스의 HEAD버전을 merge) : branch와 trunk 소스 두벌을 유지하는 형태
이 부분에서 만약 디스크 용량문제 등으로 인해 소스 한벌만 유지하는 형태라면
branch버전을 commit후 switch를 통해 trunck버전으로 전환한 후 merge의 1번기능(Merge a range of revisions) 을 통해 commit한 HEAD버전과 merge하는 형태도 가능.

2. merge 2번 기능- Reintegrate a branch
trunk소스 선택후 2번기능을 통해 branch버전과 merge

3. merge 3번기능 - Merge two different trees
먼저 branch버전을 commit해둔 후 저장소의 branch,trunk 소스끼리만 merge하는 형태


'프로그래밍' 카테고리의 다른 글

가비지컬렉션 과정  (0) 2014.05.02
VS2010 프로젝트속성 디렉토리 한방에추가하기  (0) 2013.06.18
비트맵에 대하여  (0) 2013.05.14
BMP 구조4  (0) 2013.05.14
스마트 포인터  (0) 2013.05.14