SVN(subversion)?SVN 은 버전 관리 시스템이며 CVS 의 단점을 보안 하기위해 만들어진 시스템입니다.
SVN 을 기준으로 업데이트하고 서버에 업로드하는 형식으로 사용자가 언제 어떤 부분을 수정을 했는지에 대한 모든 소스의 로그가 남고 간단히 예전 버전으로 돌리기도 가능합니다.
더 자세한건 위키피디아를 참고 하세요.
http://ko.wikipedia.org/wiki/서브버전
SVN 구조
대략.. 아래 처럼 된다는 거만 알고 있으면 될듯 합니다.
1. SVN 설치SVN 설치는 yum 으로 설치를 진행 합니다.
[root@ruo91 ~]# yum install -y subversion
2. SVN 사용자 추가SVN 을 사용할 사용자를 추가 합니다.
[root@ruo91 ~]# adduser svn
[root@ruo91 ~]# passwd svn
Changing password for user svn.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
3. 저장소(Repository) 만들기svnadmin 으로 해당 저장소를 만들어 줍니다.
[root@ruo91 ~]# svnadmin create --fs-type fsfs /home/svn/repos
repos 디렉토리 사용자/그룹 위임 설정을 합니다.
[root@ruo91 ~]# chown -R svn:svn /home/svn/repos
[root@ruo91 ~]# ls -al /home/svn/repos
합계 36
drwxr-xr-x 7 svn svn 4096 10월 24 05:35 .
drwx------ 4 svn svn 4096 10월 24 05:35 ..
-rw-r--r-- 1 svn svn 229 10월 24 05:35 README.txt
drwxr-xr-x 2 svn svn 4096 10월 24 05:35 conf
drwxr-xr-x 2 svn svn 4096 10월 24 05:35 dav
drwxr-sr-x 5 svn svn 4096 10월 24 05:35 db
-r--r--r-- 1 svn svn 2 10월 24 05:35 format
drwxr-xr-x 2 svn svn 4096 10월 24 05:35 hooks
drwxr-xr-x 2 svn svn 4096 10월 24 05:35 locks
4. SVN 설정 파일 추가/수정
기본 설정
[root@ruo91 ~]# vi /home/svn/repos/conf/svnserve.conf
[general]
# 익명 사용자 읽기 사용 여부
anon-access = read
# 인증 사용자 쓰기 사용 여부
auth-access = write
# 인증에 사용될 패스워드 설정 파일
password-db = passwd
사용자/비밀번호 설정
[root@ruo91 ~]# vi /home/svn/repos/conf/passwd
[users]
# svn 사용자의 비밀번호를 지정
# 사용자ID = 비밀번호 이런식..
svn = 123456
5. SVN 시작
[root@ruo91 ~]# svnserve -d -r /home/svn/
정상작동 확인
[root@ruo91 ~]# ps -aux | grep svnserv
root 2233 0.0 0.0 11592 796 ? Ss 05:55 0:00 svnserve -d -r /home/svn/
[root@ruo91 ~]# netstat -ant | grep 3690
tcp 0 0 :::3690 :::* LISTEN
시스템 부팅시 자동으로 SVN 이 시작 되게 하려면 아래와 같이 합니다.
yum 으로 설치시에는 /etc/rc.d/init.d/subversion 실행 스크립트가 생성되지 않으므로 수동으로 추가 해줘야 합니다.
subversion 스크립트 작성
[root@ruo91 ~]# vi /etc/rc.d/init.d/subversion
#!/bin/bash
. /etc/rc.d/init.d/functions
[ -x /usr/bin/svnserve ] || exit 1
RETVAL=0
prog="svnserve"
desc="Subversion server"
OPTIONS="--threads --root /home/svn"
start() {
echo -n $"Starting $desc ($prog): "
daemon $prog -d $OPTIONS
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
echo
}
stop() {
echo -n $"Shutting down $desc ($prog): "
killproc $prog
RETVAL=$?
[ $RETVAL -eq 0 ] && success || failure
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
RETVAL=$?
;;
condrestart)
[ -e /var/lock/subsys/$prog ] && restart
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart}"
RETVAL=1
esac
exit $RETVAL
EOF
시스템 부팅시 자동으로 시작
[root@ruo91 ~]# chkconfig subversion on
6. SVN 기본 디렉토리 만들기소스 코드를 관리하기 위해서는 trunk , branches, tags 를 만들어 줘야 합니다.
필자는 Bash 쉘 사용자이므로 자신의 홈 디렉토리의 .bash_profile 을 아래와 같이 export 걸어 줬습니다.
[root@ruo91 ~]# vi ~/.bash_profile
SVN_EDITOR=/usr/bin/vim
export SVN_EDITOR
export 를 걸지 않으면 아래와 같이 나옵니다.
[root@ruo91 ~]# svn mkdir svn://192.168.0.28/repos/trunk
svn: 로그 메시지를 구하기 위해 외부 프로그램을 사용할 수 없습니다.
SVN_EDITOR 환경변수를 설정하시거나 --message (-m) 또는 --file (-F) 옵션을 사용하세요.
svn: 환경변수 SVN_EDITOR, VISUAL, EDITOR 중 하나는 설정하거나, 'editor-cmd' 를 구성화일에
명시해야합니다.
아래처럼 trunk 디렉토리를 만들어 주면 vim 에디터가 자동으로 나오게 됩니다.
[root@ruo91 ~]# svn mkdir svn://서버IP/repos/trunk
[root@ruo91 ~]# svn mkdir svn://192.168.0.28/repos/trunk
--이 줄 이하는 자동으로 제거됩니다--
A svn://192.168.0.28/repos/trunk
~
~
~
~
~
"svn-commit.tmp" 4L, 75C 1,0-1 모두
이때 :q 를 눌러 에디터에서 빠져 나옵니다.
:q
C 를 눌러 나옵니다.
로그 메시지가 변경되지 않았거나 지정되지 않았습니다
취소(A), 계속(C), 수정(E)
C
인증 영역을 사용하기 위해 root 사용자의 암호와 svn 사용자의 암호를 입력 해줍니다. (암호는 보안상 보이지 않음)
인증 영역(realm): <svn://192.168.0.28:3690> dbd294f2-a62a-422d-a146-2ff0ab99c42c
'root'의 암호:
인증 영역(realm): <svn://192.168.0.28:3690> dbd294f2-a62a-422d-a146-2ff0ab99c42c
사용자명:svn
'svn'의 암호:
커밋된 리비전 1.
branches 디렉토리 만들기 (trunk 와 반복..)
[root@ruo91 ~]# svn mkdir svn://192.168.0.28/repos/branches
로그 메시지가 변경되지 않았거나 지정되지 않았습니다
취소(A), 계속(C), 수정(E)
C
커밋된 리비전 2.
tags 디렉토리 만들기
[root@ruo91 ~]# svn mkdir svn://192.168.0.28/repos/tags
로그 메시지가 변경되지 않았거나 지정되지 않았습니다
취소(A), 계속(C), 수정(E)
C
커밋된 리비전 3.
위에서 만든 디렉토리를 확인 합니다.
[root@ruo91 ~]# svn list svn://192.168.0.28/repo
sbranches/
tags/
trunk/
7. 저장소 사용필자는 원격 작업을 윈도우에서 하기 때문에 윈도우용 SVN 클라이언트(TortoiseSVN)를 이용했습니다.
다운로드는
http://tortoisesvn.net/ 에서 받으시고 설치 하세요.
TortoiseSVN 설치가 완료 되면 윈도우의 빈공간 오른쪽 마우스를 누르게 되면 아래와 같이 SVN Checkout 가 보입니다. 이것을 눌러줍니다.
체크아웃 설정창이 보이며 Repository URL 은 SVN 서버를 입력 해줍니다.
그 아래 체크아웃 후 저장 될 디렉토리를 원하는 곳으로 입력 해줍니다.
체크아웃 후 지정 된 디렉토리에 저장이 되었습니다.
이후 trunk 에 몇가지 파일을 만들어 줍니다.
빈공간에 마우스 우클릭하여 SVN Commit 을 눌러 줍니다.
Commit 화면이며 파일을 모두 체크 후 확인을 눌러 줍니다.
사용자 인증 창이 뜨며 SVN 서버에서 설정한 svn 사용자의 비밀번호를 입력 해줍니다.
인증 성공 후 Commit 이 완료 됩니다.
서버에서 체크아웃 해보면 Commit 이 정상적으로 완료 되었음을 볼수 있습니다.
[root@ruo91 ~]# svn checkout svn://192.168.0.28/repos repos
A repos/trunk
A repos/trunk/Hello.c
A repos/trunk/Hello.tar
A repos/branches
A repos/tags
체크아웃된 리비전 4.