설치


리눅스

1
2
3
4
5
// 데비안 계열
sudo apt-get install subversion

// 레드햇 계열
sudo yum install subversion


윈도우 : TortoiseSVN

https://tortoisesvn.net/downloads.html

커맨드라인에서 사용 가능하게끔 하려면 command line client tools 옵션을 적용해야 합니다.


1
2
brew options subversion
brew install (OPTIONS) subversion


기타 OS

https://subversion.apache.org/packages.html



명령어


자주 사용하는 명령어

명령어 설명 옵션 옵션설명
svn checkout [URL][PATH] 원격 repository에서 소스를 받아옵니다.    
svn add [파일/디렉토리] 버전관리 대상으로 파일을 등록합니다.
원격 repository에 올리러면 추가로 commit을 해야합니다.
   
svn commit 변경사항을 원격 repository에 적용합니다. -m commit 메세지
svn update 원격 repository의 변경사항을 local에 업데이트받습니다. -r 특정 revision으로 되돌림
svn delete [파일/디렉토리] 파일을 버전관리 대상에서 제거합니다.
디렉토리를 commit을 하더라도 이 파일은 예외가 됩니다.
   
svn revert [파일/디렉토리] 대상의 로컬에서의 변경사항을 취소합니다.
repo로부터 받아온 내용으로 원복합니다.
   
svn info [파일/디렉토리] 대상 파일/디렉토리의 URL 경로나 마지막 수정일자 등
정보를 제공합니다.
   
svn log [로컬디렉토리] 로컬의 로그를 보여줍니다.    
svn status [파일/디렉토리] commit되지 않는 local의 변경사항을 확인합니다.    
svn diff [파일 혹은 리비전] 소스의 변경사항을 확인합니다.
자세한 사용법은 이하 참고
-r revision 지정
svn cleanup svn 오류가 발생할 시 사용합니다.
오류나 불필요한 파일의 삭제 등이 진행됩니다.
   
svn list [svn repo url] 해당 svn repository에 포함된
파일과 디렉토리 리스트를 반환합니다.
   


SVN 디렉토리 생성 관련

명령어 설명 옵션 옵션설명
svnadmin create [디렉토리] 대상 디렉토리를 svn 저장소로 만듭니다.    
svn import [가져올파일/dir] [svn path] 기존의 파일이나 디렉토리를 svn에 추가합니다.
최초 1회에만 진행.
-m 메세지 남기기
필수


예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# checkout  
$ svn checkout 111.111.1.1:9000/src

# add / delete
$ svn add ./image
$ svn add ./icon/fabicon.png
$ svn delete ./image

# commit
$ svn commit -m "add file transfer function"

# update
$ svn update           # 최신 revision으로 업데이트
$ svn update -r 1      # revision 1로 업데이트 (혹은 되돌림)

# status
$ svn status ./
$ svn status ./src/main.java

# dfii
$ svn diff 파일        # repository의 파일과 로컬의 현재 파일 차이를 확인
$ svn diff -r 1:2     # revision 1과 2의 차이를 확인
$ svn diff -r 1 파일   # revision 1과 현재 파일의 차이를 확인
$ svn diff -r 1       # revision 1과 현재 디렉토리의 차이를 확인



SVN repository 경로

구분 경로
로컬에서 SVN을 사용할 경우 file:///path/to/repository
원격 SVN 서버를 사용할 경우 svn:/hostname/path/to/repository
HTTP를 사용할 경우 http://hostname/path/to/repository



예제


(1) SVN repository 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
### repository 디렉토리 만들기
$ cd C:\Users\USER\Desktop\test_workspace\
$ mkdir 2_svn
$ cd ./2_svn
$ dir
>>> 없음

### 디렉토리를 svn repository로 만들기
$ svnadmin create ./

### svn 디렉토리가 되면 내부에 svn 관련 파일이 생성됨
$ dir
>>> conf
>>> db
>>> format
>>> hooks
>>> locks
>>> README.txt


(2) 기존 존재하는 파일을 svn repository로 가져오기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
### svn 디렉토리 만들기
$ mkdir 2_svn
$ cd ./2_svn
$ svnadmin create ./

### svn info, URL 확인
--- 로컬에서 SVN을 사용할 경우  file:///path/to/repository
--- 원격 SVN 서버를 사용할 경우 svn:/hostname/path/to/repository
--- HTTP를 사용할 경우         http://hostname/path/to/repository

$ svn info file:///C:/Users/USER/Desktop/test_workspace/svn/2_svn
>>> Path: 2_svn
>>> URL: file:///C:/Users/USER/Desktop/test_workspace/svn/2_svn
>>> Relative URL: ^/ (상대경로)
>>> Repository Root: file:///C:/Users/USER/Desktop/test_workspace/svn/2_svn
>>> Repository UUID: 8d111c46-0b4d-ea46-b76f-e0d7c70dfc40
>>> Revision: 0
>>> Node Kind: directory
>>> Last Changed Rev: 0
>>> Last Changed Date: 2023-07-30 21:26:47 +0900 (일, 30 7 2023)

### 기존 폴더
$ cd ../1_existed_dir
$ dir
>>> test1.png
>>> test2.png
>>> 01.mov

### 사전 용량 확인
$ cd ..
$ dir /s 1_existed_dir
>>> ... 152,145,607 바이트

$ dir /s 2_svn
>>> ... 47,553 바이트

### ★ 기존의 폴더 내 파일을 svn으로 가져오기 ★
$ svn import ./1_existed_dir file:///C:/Users/USER/Desktop/test_workspace/svn/2_svn -m "svn init"

### 용량 확인
$ dir /s 2_svn
>>> ... 146,591,995 바이트


(3) checkout

1
2
3
4
5
6
7
8
9
10
11
12
13
### local의 디렉토리 만들기
$ mkdir 3_local

### checkout
$ svn checkout file:///C:/Users/USER/Desktop/test_workspace/svn/2_svn ./3_local
>>> ... Checked out revision 1.

### checkout 결과 보기
$ dir 3_local
>>> test1.png
>>> test2.png
>>> 01.mov
>>> 152,145,607 바이트


(4) add, commit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
### local에서 작업
$ cd 3_local
$ mkdir example

### add 없이 commit
$ svn commit ./ -m "commit1"
>>> 변경사항인 "mkdir (= add folder)"이 적용되지 않음

### add 후 commit
$ svn add ./example
>>> A example

$ svn commit ./ -m "commit2"
>>> Adding example
>>> committing transaction ...
>>> Committed revision 2.

$ svn log ./
>>> r3 | USER | 2023-07-30 22:04:51 +0900 (일, 30 7 2023) | 1 line
>>> r2 | USER | 2023-07-30 22:04:26 +0900 (일, 30 7 2023) | 1 line
>>> commit2
>>> r1 | USER | 2023-07-30 21:59:55 +0900 (일, 30 7 2023) | 1 line
>>> svn init



Reference

https://onestone-note.tistory.com/36
https://typingdog.tistory.com/99
윈도우 cmd에서 SVN 사용 : 링크
맥 svn 설치 : 링크
svn cleanup : https://itlearningcenter.tistory.com/entry/%E3%80%90SVN%E3%80%91TortoiseSVN-clean-up
명령어 : https://signpen.net/2515287
명령어 : https://starplaying.tistory.com/460