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/repos
branches/
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.