참고 사이트 - 여기여기 문닫았네열 ㅜㅜ 문제시 연락 주시면 삭제하겠습니다.
SVN 설정 및 사용법
1. 형상 관리 툴?
처음에는 형상 관리 툴이란 것이 정말 어디에 써야하는지 몰랐습니다.
이 툴에 대한 정확하고 자세한 설명은 인터넷을 써핑하시면 그림과 함께 좋은 정보를 구하실 수 있으니, 여기서는 사용하면 뭐가 좋은지 짧은 제 경험을 통해 소개하겠습니다.
간단히 말하자면, 버젼 관리를 용이하게 해준다. 라는 것이 제가 느낀 가장 큰 이점이었습니다.
기간이 짧고, 소스코드가 얼마 되지 않는 간단한 프로그램이라면 별 문제가 없습니다만,
프로젝트 기간이 대단히 길고, 동시에 여러개의 코딩 프로젝트를 진행하며, 프로젝트가 수백 수천 개의 파일로 이루어져있을 경우.
어느 날 느끼게 됩니다. 내가 어딜 어떻게 고쳤고, 왜 그렇게 고쳤는지를 모른다는 것을.
그래서 사람들은 그날 수정한 사항들을 별도의 메모장에 기록하고, 그날 까지 작성한 코드들을 아카이빙하여 날짜와 함께 라벨링하여 보관합니다.
하지만, 메모장의 기록으로는 버젼과 버젼별 사이의 차이점을 찾기도 쉽지 않고, 매번 기록 및 아카이빙 작업을 해주는 것 역시 번거로운 일입니다. 이러한 작업들을 어느정도 자동으로 수행해주고 편의를 제공해주는 것이 형상 관리 툴이라고 할 수 있습니다.
이런 점 말고도 여러 사람이 함께 프로젝트를 진행한 경우에도, 다른 사람이 수정한 사항을 쉽게 확인할 수 있고, 누구의 잘못을 통해 문제가 발생했는지 추적하기도 용이하다는 점도 있습니다.
1-1. Subversion 설치
다양한 형상관리 툴이 리눅스에 제공되지만, 그 중에 무료인 subversion(이하 svn)을 설치하였습니다.
- svn 설치 여부 확인.
svn --version
- subversion 설치
apt-get install subversion
- 리눅스 사용자로 svn 유저를 추가 및 비밀번호 설정
adduser svn
passwd svn
- 저장소 생성.
svnadmin create --fs-type fsfs /home/svn/[저장소이름]
svn은 svn 서버로 운영되며, 서버 내의 저장소에 각 버젼 별 코드를 유지합니다. svn 사용자들은 여기서 코드를 다운로드 받고 수정 후 다시 저장소의 코드를 업데이트 하며, 또는 저장소 내 특정 버젼의 코드를 복원할 수도 있습니다.
- 디렉토리 생성 확인
svn list svn://localhost/[저장소이름]
[root@centos ~]$ svn list svn://127.0.0.1/branches/ tags/ trunk/ |
- SVN 서버 확인
svn checkout svn://127.0.0.1/
- 기본 디렉토리 만들기
export SVN_EDITOR=/usr/bin/vim
svn mkdir svn://127.0.0.1/trunk
svn mkdir svn://127.0.0.1/branches
svn mkdir svn://127.0.0.1/tags
- 설정 파일 추가/수정
vi /home/svn/[저장소이름]/conf/svnserve.conf
[general]
anon-acceess = none ; 익명 사용자 권한 설정. none은 접근 권한 없음, 이외에 read, write 가능
auth-access = write ; 인증 사용자 권한 설정. none, read, write 가능
password-db = passwd ; 인증에 사용될 패스워드 설정 파일 이름 설정
authz-db = authz ; 사용자 권한 데이터 베이스 파일 이름 설정
realm = [저장소이름] ; 저장소 이름 설정
아무나 코드를 다운로드 받아 보면 안되기 때문에 익명사용자 권한은 없음으로, 인증 사용자는 쓰기 가능으로 설정했습니다.
- 사용자 및 비밀번호 설정
vi /home/svn/[저장소이름]/conf/passwd
[users]
[사용자이름] = [비밀번호]
아쉽게도 기본적으로 비밀번호가 암호화 되어서 제공되지 않습니다.
- 접근 권한 파일 설정
vi /home/svn/[저장소이름]/conf/authz
[groups]
group1 = user1, user2
group2 = user3, user4, user5
[[저장소이름]:/]
@group1 = rw
@group2 = r
[[저장소이름]:/subfolder]
- svn 시작
svnserve 명령어를 통해서 SVN서버를 실행해 줍니다. 접근할때는 svn://프로토콜로 접속하고 URL뒤에 각 레파지토리명까지 적어주어서 접근합니다.
svnserve -d -r /home/svn/
- 정상 동작 확인
ps -aux | grep svnserve
netstat -ant | grep 3690
- 리눅스 시작 시 자동으로 실행 되도록 추가
vi /etc/init.d/subversion
#! /bin/bash
- SVN 종료
killall svnserve
위 명령어를 통해서 SVN서버를 종료할 수 있습니다.
2. 기본 커맨드 및 활용법
2-1. 소스 업로드
작업할 소스 코드들을 svn에 최초로 올리는 작업을 수행할 것입니다.
cd [업로드 하고자 하는 소스 코드들이 있는 폴더]
svn import svn://localhost/[저장소이름]/trunk
이후 vim이 실행되면 ':q'와 '계속(C)'을 선택 후 암호를 입력하면 소스 코드 들이 trunk 밑에 올라가게 됩니다.
2-2. 소스 코드 최초 내려 받기
이제 작업할 소스 코드들을 svn에서 내려받습니다.
이미 소스 코드가 자기 컴퓨터에 있는데 왜 또 받는지 궁금하실 분도 계실 겁니다.
소스 코드를 svn에서 내려 받는 것은 checkout이라고 하는데, 이를 수행하지 않으면 svn 서버와 자기 컴퓨터 내의 로컬 소스 코드들이 연동되지 않아 svn의 기능을 이용할 수 없습니다. 쉽게 바인딩한다고 생각하시면 되겠습니다.
처음 해보시는 분들께서는 기존 소스코드의 손실이 염려되니 이전 소스코드가 저장된 폴더가 아닌 새로운 폴더에 checkout하시기 바랍니다.
cd [소스코드를 svn에게서 내려받을 폴더로 이동]
svn checkout svn://localhost/[저장소이름]/trunk 또는 자신이 받고자 하는 폴더가 trunk 하위 폴더에 위치하면
trunk뒤에 추가 경로를 입력하시면 됩니다.
2-3. 소스 수정
이제 내려 받은 소스코드를 신나게 수정합니다. 이건 이제까지 해오던 대로 vi이든 다른 프로그램이든 사용하시면
되겠습니다.
2-4. 소스 업데이트
이제 자신이 할 수정 작업이 모두 완료되었습니다.
그렇다면 소스를 업데이트 해야 합니다. 소스 업데이트란, 현재 자신이 이전에 받은 소스 버젼(이후 리비젼=revision)보다 svn 서버 저장소의 리비젼이 최신일 경우, 자신의 로컬 소스를 업데이트 해줌을 의미합니다.
이는 여러 사람이 하나의 소스 코드를 동시 수정하는 등, 공동 프로젝트를 진행할 때 반드시 선행되어야 하는 작업입니다.
svn update
아마 여기서 자신이 수정한 부분과 다른 사람이 수정한 부분이 동일한 파일일 경우 뭔가 작업을 해주어야 할 것입니다.
아마 merge라는 커맨드를 통해 이를 수행할 것 같은데 이는 아직 해보지 못했습니다. 이후 알아보고 업데이트 하겠습니다.
예)
user@linux:~/project$svn update
U linux-2.6.35-s4210/rr.sh
U linux-2.6.35-s4210/README
업데이트 된 리비전12.
2-5. 소스 커밋
이제 다른 사람이 업데이트 한 것도 자신의 코드에 반영했으니, 자신의 코드를 서버의 저장소에 반영할 일만 남았습니다.
svn commit
commit 명령어 이후 파일 이름을 적으면 특정 파일만 올릴 수도 있습니다. 위와 같이 쓸 경우는 명령이 실행된 폴더의 하위 폴더 내의 모든 변경 파일들이 commit됩니다.
커밋이라 함은 자신의 로컬 소스 코드를 저장소의 코드에 반영하여, 저장소 코드의 리비젼을 증가시킴을 말합니다. 즉 버젼업이란 뜻입니다.
예)
user@linux:~/project$svn commit
전송중 linux-2.6.35-s4210/arch/arm/include/asm/unistd.h
전송중 linux-2.6.35-s4210/arch/arm/kernel/calls.S
전송중 linux-2.6.35-s4210/arch/arm/kernel/rr_pmu.S
전송중 linux-2.6.35-s4210/kernel/sys.c
파일 데이터 전송중....
커밋된 리비전 13.
2-6. 기타 사항
그밖의 커맨드 들에 대해 알아보겠습니다.
svn diff [리비전번호]:[리비전번호]
이렇게 하면 저장소에 올렸던 두 리비전 소스코드의 차이를 확인 할 수 있습니다.
이를 통해 매번 소스 코드의 변경을 메모장에 적어두고 확인할 필요 없이 쉽게 버젼 별 소스 코드의 차이를 확인할 수 있게 되었습니다.
- svn 저장소에 새 파일 추가
svn add [파일 이름]
만약 작업하다가 새로운 파일을 생성하였다면, 저장소에도 올려줘야 합니다. 이때 사용하는 커맨드입니다.
- svn 저장소에서 파일 삭제
svn delete [폴더/파일]
add와 마찬가지로 더이상 사용하지 않게 된 파일을 저장소에서 삭제할 때 사용합니다. 이 삭제 작업은 다음 커밋 때 이루어집니다.
- 특정 리비전으로 돌아갈 때
svn update -r [리비전번호]
수정이 잘 못되었던가, 기타 여러 이유로 이전 버젼의 소스 코드로 돌아가고 싶을 경우에 사용합니다.
위의 명령을 통해 로컬 작업 파일을 해당 리비전의 소스코드로 변경할 수 있습니다.
하지만, 아직 svn 서버 저장소의 리비전은 최신의 것으로 저장되어 있기 때문에, svn 서버 저장소의 소스 코드도 이전 리비전으로 복원하기 위해서는, 로컬 파일을 update를 통해 복원 후 커밋 해주어야합니다.
댓글