SVN
SVN은 SubVersion의 단어의 줄임말로 중앙집중관리식 형상관리 소스 툴이다.
현재는 형상관리를 위해 대부분 Git을 사용하지만, Git 이전에 사용되었던 툴이 SVN이다.
소스 코드를 관리하는 방식이나 히스토리를 관리하는 방법은 다르겠지만, 오래된 소프트웨어의 경우 아직까지 SVN만이 지원되고 있어 간단한 사용 방법에 대해 정리하려한다.
사용 방법
SVN Client 설치
mac의 경우 homebrew를 이용하여 subversion을 설치하자. brew install subversion
window의 경우 TortoiseSVN 를 설치한다.
checkout: SVN 저장소 다운로드
svn 저장소의 내용을 로컬 파일시스템으로 가져오기위해 checkout 명령을 사용한다.
checkout을 통해 저장소의 특정 디렉터리나 전체를 로컬 디렉터리로 복사한다.
git clone
과 비슷하나 저장소의 특정 디렉터리만 가져올 수 있다는 점이 다른점인것 같다.
$ svn checkout https://{svn저장소} {저장할 로컬 경로}
status: 작업 상태 확인
status
명령을 통해 svn 작업 상태를 확인할 수 있다.
저장소와 비교하여 변경된 파일이있는지, 충돌이 있는지 등을 확인할 수 있다.
git status
과 비슷한 명령.
$ svn status
? .git
? .gitignore
? .idea
A pom.xml
D C test-web
> local unversioned, incoming dir add upon update
상태와 파일명이 표시되며 상태의 경우 ?
는 SVN 추적하지 않는 파일, A
는 추가된 파일, D
는 삭제된 파일을 의미한다.
추적되지 않는 파일의 경우 add
명령을 통해 추적하도록 할 수있다. 사용법은 git 과 유사하다.
- svn add * : 디렉터리 내 전체 파일 추적
- svn add {filename} : 특정 파일 추적
C
의 경우 충돌이 있다는 의미이며 resolve
명령을 통해 충돌을 해결할 수 있다.
commit: 변경사항 저장소에 반영
commit
명령을 통해 변경한 내용을 svn 저장소에 반영할 수 있다.
git commit; git push
와 동일하다.
git의 경우 로컬 브랜치와 원격 브랜치가 분리되어 관리되기에 commit
만 수행한경우 로컬 브랜치에만 변경사항이 반영된다.
$ svn commit -m "add new code"
추가 pom.xml
추가 test-web/pom.xml
...
파일 데이터 전송중 .................done
Committing transaction...
커밋된 리비전 17.
-m
옵션으로 커밋 메시지를 입력한다.
결과와 함께 리비전 정보도 보여준다.
리비전 정보별 메시지를 보고싶다면 log
명령을 이용하여 확인가능하다.
$ svn log
------------------------------------------------------------------------
r16 | ckddn9496 | 2024-08-15 22:46:25 +0900 (2024-08-15, 목) | 1 개의 행
add new code
------------------------------------------------------------------------
r15 | ckddn9496 | 2024-08-15 19:41:22 +0900 (2024-08-15, 목) | 1 개의 행
create groovy gradle project
...
resolve: 충돌 해결
파일을 열어 수동으로 충돌을 해결할 수도 있다.
<<<<<<< .mine
로컬 변경 내용
=======
다른 사용자의 변경 내용
>>>>>>> .rNEWREV
---
$ svn resolve --accept working {충돌을 수정한 파일명}
파일을 삭제하여서 수동으로 해결이 불가능한 경우는 resolve
명령을 통해 cli와 함께 충돌을 해결하는것도 가능하다.
$ svn resolve
Searching tree conflict details for 'test-web' in repository:
Checking r2... done
Tree conflict on 'test-web':
A new directory appeared during update to r15; it was added by nb13215 in r2.
An unversioned item was found in the working copy.
Subversion is not smart enough to resolve this tree conflict automatically!
See 'svn help resolve' for more information.
Select: (p) Postpone, (r) Mark as resolved, (h) Help, (q) Quit resolution: r
Tree conflict at 'test-web' marked as resolved.
https://svnbook.red-bean.com/en/1.6/svn.ref.svn.c.resolve.html
update: 저장소 내용 업데이트
update
명령을 통해 저장소의 내용을 로컬로 업데이트 가능하다.
$ svn update
사용할 수 있는 다른 명령들도 많으니 다른 기능이 필요하다면 아래의 cheatSheet를 참고하자.
https://www.cheat-sheets.org/saved-copy/subversion-cheat-sheet-v1.pdf