여러 사람이 참여하는 프로젝트에 version control system의 더할나위 없이 중요하다. 없으면 작업을 못할 정도라고나 할까... 하지만 혼자 개발을 할지라도 version control system은 많은 도움을 줄 수 있다. 여러 사람을 떠나서 개발하는 컴퓨터가 여러대일 경우라면 매우 유용하다. 또한 특정시점의 개발소스로 롤백을 하고 싶다거나..환경을 세팅하는데 매번 잘 안되었었는데 이번에 맘먹고 될때까지 해보았다.
 
여기서는 open source인 subversion의 사용법을 간단하게 정리하려고 한다. Subversion은 server side program이다. 보통의 경우 개발자는 tortoisesvn 같은 클라이언트 프로그램만 사용할 줄 알면 된다. Tortoisesvn은 GUI환경을 제공하고 윈도우탐색기에서 쉽게 사용할 수 있으므로 별로 설명이 필요 없을 정도 이다. Subversion의 site 주소는 아래와 같다. 
 subversion(server) site : http://subversion.tigris.org/
Download page로 가서 다운!

Setup-Subversion-1.6.3.msi
필자의 경우 위의 파일을 받았다. 

subversion을 윈도우에 세팅하고 사용하기 위해서 거치는 과정은 대략 다음과 같다.
1. subversion을 설치한다.
2. repository를 생성한다.
3. 설정파일 세팅, 유저 생성, 권한 설정을 한다.
4. svnserve.exe를 서비스에 등록한다.
5. 공유기 사용자라면 server로 사용되는 컴퓨터가 외부에서 접근할 수 있게 한다.(port forwarding, dmz 설정)
6. 방화벽 설정을 확인한다.
7. 유동IP를 가졌다면 DDNS에 등록한다.(dyndns, codns등등)
8. 테스트를 해보고 사용해본다.

실제 5번부터의 과정이 딱히 매뉴얼도 없고, 문제를 파악하는데 시간을 많이 빼앗겼다. 공유기 사용자가 아니라면 쉽게 할 것 같다. Subversion은 기본적으로 3690번 포트와 TCP 프로토콜을 사용하므로 공유기와 방화벽 설정을 할 때 참고하기 바란다. 실제 정리는 주제와 관련이 있는 4번과정까지 하고 8번으로 바로 넘어가겠다.

1. subversion 설치
msi 파일을 다운 받았다면 쉽게 설치 가능하다. 
(windows 95/98계열이면 설치 중에 path을 설정하는 등의 주의 사항이 나오는데 XP등의 유저라면 따로 할일은 없다.)

2. repository 생성방법
실행창을 열고 cmd를 실행하자. (Tortoisesvn을 설치했다면 이 과정을 윈도우탐색기에서도 편하게 할 수 있을 것이다.)
c:\...>svnadmin create "repository경로"
 ex) c:\>svnadmin create c:\svn_repository
그러면 지정된 경로에 repository가 만들어 진다. repository내부를 살펴 보면 conf 폴더가 있는데, 이 폴더안의 설정파일외에는 건드릴 곳은 없다고 보면된다.

3. 설정파일 세팅, 유저 생성, 권한 설정하기
conf/svnserve.conf 파일 예제
[general]
password-db = passwd
realm = my repository
anon-access = none
auth-access = write
auth-db = authz
#설명: 유저 설정 파일은 passwd이고, repository의 이름은 my repository, anonymous유저는 권한이없고(none), 인증받은 유저는 읽고 쓸수 있다.(write), 유저별 권한 설정 파일은 authz이다.

conf/passwd 파일 예제
[users]
user1 = abcd1234
#설명: user1 계정은 암호가 abcd1234이다.

conf/authz 파일 예제
[groups]
group1 = user1, user2
[/]
@group1 = rw
#설명: group1은 user1, user2를 포함한다. group1은 repository의 제일 상위 폴더([/])부터 rw권한을 가진다.
 
4. svnserve.exe를 서비스에 등록한다.
서비스에 등록하는 명령 예제는 다음과 같다.
c:\>sc create svnserver binpath= "\"C:/Program Files/Subversion/bin/svnserve.exe\" --service -r c:/svn_repository" displayname= "Subversion Server" depend= Tcpip start= auto
경로는 알맞게 수정하도록 하자. 경로를 입력할 때 Program Files 처럼 공백이 있는 경우 경로 전체를 \"를 써서 감싸준다. binpath=와 displayname=등의 =뒤에는 공백을 꼭 빠뜨리지 말고 적어줘야 한다.
서비스를 시작하거나 중지하기 위해서는 제어판-관리도구-서비스에서 조절하면 되고 아래의 명령어로도 가능하다.
c:\>net start 서비스이름(ex, svnserver)
c:\>net stop 서비스이름(ex, svnserver)

서비스를 삭제하는 명령어는 다음과 같다.
c:\>sc delete svnserver

8. 테스트를 해보고 사용해본다
공유기, 방화벽, ddns등의 설정을 마치고 4번과정의 svnserve의 -r옵션 뒤의 repository를 언제든지 사용할 수 있다. svn을 사용하는 것은 client프로그램을 사용하는 것을 말한다. tortoisesvn을 이용하는게 훨씬 편하다.
import, checkout, update, commit, add, revert등을 여러 pc에서 테스트 해보자.

references
1. http://svnbook.red-bean.com/



[ 출처 : http://leesort.tistory.com/11 ]

Subclipse를 Eclipse에 추가하기

Subclipse는 Subversion 지원을 Eclipse IDE에 추가하는 프로젝트이다. 우리는 Eclipse의 업데이트 매니저를 사용하여 Subclipse를 우리의 Eclipse IDE에 추가할 것이다. Eclipse의 Help 메뉴에서 Software Updates > Find and Install을 선택하여 업데이트 매니저를 연다.


그림 1. Eclipse 업데이트 매니저
Eclipse 업데이트 매니저 

소프트웨어 업데이트를 검색하기 위해 사용하는 것 외에도, 이 업데이트 매니저를 사용하여 Subclipse 같은 새로운 기능을 찾아서 설치할 수 있다. Search for new features to install이 선택되었는지 확인하고, Next를 클릭하여 계속 진행한다. Eclipse는 다음의 업데이트 매니저 패널을 디스플레이 한다.


그림 2. 업데이트 매니저 사이트
업데이트 매니저 사이트 

측정 기능을 찾았기 때문에, 기존 사이트의 체크를 해제하고, New Remote Site를 클릭하여 New Update Site 다이얼로그를 디스플레이 한다. (그림 3) 이것을 사용하여 Subclipse 업데이트 사이트를 리스트에 추가할 것이다.


그림 3. 새로운 업데이트 사이트 추가하기
새로운 업데이트 사이트 추가하기 

Name에 알맞은 것을 입력하고(Subclipse가 적당하다.), URL에 http://subclipse.tigris.org/update_1.0.x (현재 Subclipse 업데이트 사이트)를 입력한다. OK를 클릭하여 Subclipse 업데이트 사이트를 업데이트 매니저의 리스트에 추가한다.

업데이트 매니저 창에 Finish를 클릭하여 새로운 기능을 검색한다. 이 경우, 우리가 찾고 있는 새로운 기능은 Subclipse이다. 잠시 후에, 업데이트 매니저의 검색이 완료되고, 검색 결과가 디스플레이 된다.


그림 4. 설치할 새로운 기능
설치할 새로운 기능 

Subclipse를 체크하고(닫힌 삼각형을 클릭하여 이 기능에 정확이 무엇이 포함되었는지를 볼 수 있다.), Next를 클릭하여 기능의 라이센스 조건을 검색한다. 조건을 수락하고, Next를 클릭하여 여러분이 선택했던 기능을 검토한다. Finish를 클릭하여 Subclipse를 다운로드 및 설치한다.

업데이트 매니저는 Subversion 컴포넌트를 다운로드 한다. 설치하기 전에, Eclipse는 이 기능들이 디지털 서명이 되지 않았음을 경고할 것이다. (그림 5) 이것이 설치를 취소할 수 있는 마지막 기회이다. Install All을 클릭하여 설치를 계속 진행한다.


그림 5. Subclipse가 디지털 서명 되지 않았다. 
Subclipse가 디지털 서명 되지 않았다.  

Subversion이 설치되면, Eclipse는 IDE를 재시작 하여 새로운 기능을 활성화 해야 한다고 경고한다. (그림 6) Eclipse를 바로 재시작 한다.


그림 6. 새로운 기능 설치 후에 Eclipse 재시작 하기
새로운 기능 설치 후에 Eclipse 재시작 하기 

Eclipse를 재시작 하면, Subclipse가 설치되고 준비가 된다.

Mac OS X나 리눅스®에서 Eclipse를 실행한다면, JavaHL 라이브러리를 설치해야 하는데, 이것은 Subclipse FAQ의 Troubleshooting 섹션에 설명되어 있다. (참고자료) Subclipse를 사용하기 전에 이를 수행해야 한다.

빠른 테스트

설치를 완료하면 새로운 기능을 테스트 하는 것이 좋다. Subversion 저장소에서 Subclipse 카피를 체크하여 이것이 올바르게 설치되었는지를 확인한다.

Eclipse File 메뉴에서, Import를 선택하여 Import 매니저를 디스플레이 한다. (그림 7) SVN에서 Checkout Projects를 선택하고, Next를 클릭한다.


그림 7. Import 매니저
Import 매니저 

Select/Create Location 패널에서(그림 8), 새로운 위치를 만들고(아직 아무것도 설정하지 않았기 때문이다.), Next를 클릭하여 계속 진행한다. Next 버튼이 활성화 되지 않으면, Use existing repository location 옵션으로 전환하여, Create a new repository location으로 가서 Next 버튼을 실행한다.


그림 8. 새로운 저장소 위치 만들기
새로운 저장소 위치 만들기 

다음 섹션에서(그림 9), 저장소 URL(http://subclipse.tigris.org/svn/subclipse/)을 Url 필드에 추가하고, Next를 클릭한다. 잠시 후에, Eclipse는 사용자 ID와 패스워드를 묻는다. Subclipse 사이트에 대한 계정이 없다면, ID에는 guest를 패스워드는 공백으로 하고,Save Password 박스를 체크하고 OK를 클릭한다.


그림 9. 저장소 URL 추가하기
저장소 URL 추가하기 

Eclipse는 Subclipse 저장소에 폴더들을 디스플레이 한다. (그림 10) 트렁크를 확장하고, subclipse 폴더를 선택한 다음, Finish를 클릭하여 Subclipse 프로젝트의 소스 코드의 카피를 체크한다. 이것이 무엇인지 모르기 때문에, New Project 마법사가 뜨면 Simple > Project를 선택한다.


그림 10. Subclipse 저장소
Subclipse 저장소 



위로


기본적인 Subversion 연산

Subclipse를 성공적으로 설치했고, Subversion 서버용 지원을 Eclipse 설정에 추가했으며, 저장소에서 현재의 Subclipse 소스 코드를 다운로드 함으로써 Subclipse를 테스트 했다. 이제, 코드와 Subversion 저장소가 어떻게 실행되는지를 보자.

Subversion 작동 방법을 보기 전에, 저장소에 대해 잠깐 이야기 해보자. 이것은 port 8000에 dogma라고 하는 머신에 호스팅 되었으며, 필자는 필자의 developerWorks 기술자료와 연결된 새로운 developerWorks 코드용 저장소를 만들었다. 필자의 프로젝트를 직접 저장소의 루트에 놓을 것이다. 기타 저장소들은 개발 버전, 태그 브랜치에 맞게 trunk, tags, branches 라는 이름의 폴더를 갖지만, developerWorks 기술자료 코드를 태깅 또는 브랜칭 할 염려는 없다.

필자는 필자의 첫 번째 기술자료에서 두 개의 프로젝트, forkWork과 threadWork을 추가했다. 필자의 Eclipse 워크스페이스(그림 11)에는 developerWorks 기술자료에서 온 세 개의 다른 프로젝트들도 포함되어 있다. (getopt_demo, getopt_long_demo, readdir_demo).


그림 11. 나의 Eclipse C/C++ 프로젝트
나의 Eclipse C/C++ 프로젝트 

이제 실행을 시작해 보자.

프로젝트를 저장소에 추가하기

새로운 프로젝트를 Subversion 저장소에 추가하려면, 프로젝트를 오른쪽 클릭하고(Eclipse의 프로젝트 뷰 또는 Navigator 뷰), 메뉴에서 Team > Share Project를 선택한다. Eclipse는 Share Project 다이얼로그를 디스플레이 한다.


그림 12. Share Project 다이얼로그
Share Project 다이얼로그 

현재 Eclipse에서 지원되는 저장소 리스트에서 SVN을 선택하고 Next를 클릭한다. 다음 다이얼로그(그림 13)에서는 기존 저장소 위치를 선택하거나, 새로운 위치를 만들 수 있다.


그림 13. 저장소 위치 선택하기
저장소 위치 선택하기 

저장소가 이미 리스팅 되었다면, 이것을 선택하고, Finish를 클릭한다. 저장소가 리스팅 되지 않았다면, 추가한 후 계속 진행한다. (빠른 테스트 참조) Eclipse는 프로젝트와 같은 이름으로 저장소에 새로운 디렉토리를 만들고, 프로젝트에 모든 파일과 폴더 리스트를 디스플레이 한다.


그림 14. 프로젝트 콘텐트 추가하기
프로젝트 콘텐트 추가하기 

위 영역에 프로젝트를 설명하는 알맞은 코멘트를 입력한 다음, Select All을 클릭하여 프로젝트에서 모든 파일들을 체크한다. OK를 클릭하여 프로젝트에 체크하고, 현재 상태를 Subversion 저장소로 보낸다.

Subversion의 명령어와 아웃풋이 Console 뷰에 디스플레이 되는데, 주로 Eclipse 윈도우 아래에 보인다. 프로젝트에 Subclipse가 정확히 무엇을 하는지 알 수 있다.

프로젝트 업데이트

버전 관리 시스템의 핵심적인 기능 중 하나는 다른 개발자들이 개발을 진행하면서, 준비가 될 때마다 변경할 수 있는 기능이다. 변경 사항을 다운로드 하여, 로컬 카피에 통합시키려면, 프로젝트를 업데이트 해야 한다.

업데이트 하고자 하는 프로젝트를 오른쪽 클릭하고, 메뉴에서 Team > Update를 선택한다. Eclipse는 저장소에서 변경 사항을 검색하고, 로컬 카피와의 합병을 시도한다.

파일 또는 디렉토리 추가하기

파일을 프로젝트에 추가하면(그림 15), 이것은 버전 관리의 일부가 자동으로 되는 것이 아니다. 구체적으로 이것을 저장소에 추가해야 한다. 스크린샷을 보면, 필자가 ReadMe.txt 파일을 threadWork 프로젝트에 추가했음을 알 수 있다.


그림 15. 새로운 파일 추가하기
새로운 파일 추가하기 

새로운 파일을 추가한 다음, Team > Add to Version Control을 선택한다. 이것이 전부이다. 다음에 이 프로젝트에서 저장소에 변경 사항이 이루어지면, 새로운 파일이 추가된다.

파일 또는 디렉토리 삭제하기

프로젝트와 더 이상 관련이 없는 저장소에 파일을 추가했다면, 쉽게 삭제할 수 있다. 파일을 오른쪽 클릭한 후에 Delete를 선택한다. Team 메뉴가 필요 없으며, Subclipse가 파일에 자동으로 삭제 플래그를 달며, 이것을 프로젝트로부터 삭제한다. 다음에 저장소에 변경 사항을 만들면, 파일이 삭제된다.

파일 또는 디렉토리의 재명명

Subclipse의 컨트롤 아래에 있는 파일 또는 디렉토리를 재명명 하려면, 오른쪽 클릭을 하고, Rename을 선택한다. 엔트리 필드에 아이템의 새로운 이름을 입력하고 Enter를 클릭한다. 파일이 프로젝트에서 재명명 되고, rename 연산(새로운 이름에는 Add, 오래된 이름에는 Delete)은 다음 실행을 위해 대기한다. 그림 16은, main.c를 threadWork.c로 바꾼 후에 threadWork 프로젝트 모습이며, 아직 변경 사항을 실행하기 전이다. 작은 파란색 더하기 부호는 Subclipse가 새로운 파일을 추가했음을 나타낸다.


그림 16. 추가 또는 삭제인 경우에도 파일 재명명은 기본이다. 
추가 또는 삭제인 경우에도 파일 재명명은 기본이다.  

파일 무시하기

프로젝트가 파일을 만들거나, Subversion 저장소에 추가하고 싶지 않은 파일을 포함하고 있을 경우, Subclipse에 이를 무시하도록 명령할 수 있다. 버전 관리에서 배제하고자 하는 파일이나 디렉토리를 오른쪽 클릭한 다음, Team > Add to svn:ignore를 선택하여 Add to svn:ignore 다이얼로그를 디스플레이 한다.


그림 17. 버전 관리에 포함시키고 싶지 않은 리소스 무시하기
버전 관리에 포함시키고 싶지 않은 리소스 무시하기 

OK를 클릭하여 특정 파일을 프로젝트의 디렉토리용 svn:ignore 프로퍼티에 추가한다. Wildcard extension을 선택하여 현재 파일의 확장자를 가진 모든 파일들을 무시하거나, Custom pattern을 선택하여 고유의 와일드 카드를 추가하여 리스트를 무시한다. 무시 리스트에 이루어진 변경 사항은 다음에 변경 사항을 실행할 때 저장소에 추가된다.

변경 사항 실행하기

프로젝트를 변경 했다면, 코드 컴파일, 변경 사항 테스트를 실행하고, Subversion 저장소에 이를 위임해야 한다. 이것은 워크스테이션 자가 삭제의 경우 백업으로서 작동하고, 다른 개발자들이 로컬 카피들을 업데이트 하여 변경 사항을 포함시키도록 할 수 있다.

변경 사항을 실행하기 전에 프로젝트를 업데이트 하라. ("프로젝트 업데이트" 참조) 프로젝트를 오른쪽 클릭하고 메뉴에서 Team > Commit을 선택한다. Eclipse는 Commit 다이얼로그를 디스플레이 하는데(그림 18), 여기에는 변경 사항이 요약되어 있다.


그림 18. 저장소에 변경 사항 실행하기
저장소에 변경 사항 실행하기 

주의 깊게 살펴본다면, 프로퍼티 디렉토리에 프로퍼티 변화가 있었고(svn:ignore 프로퍼티를 추가하여 저장소에서 특정 파일들을 배제했다.), threadWork.c가 추가되면서 main.c가 삭제되었다. 이러한 변화 쌍들은 실제로 하나의 연산을 나타낸다. (파일 재명명)

저장소에서 빼고 싶다면, 리소스를 선택하지 않을 수 있다. 하나의 파일에서 작업을 부분적으로 마쳤고, 미완 변경 사항을 추가하고 싶지 않을 경우에 유용하다. 위 텍스트 필드에 알맞은 코멘트를 입력한 다음, OK를 클릭하여 변경 사항을 저장소에 추가한다.


[ 출처 : http://www.ibm.com/developerworks/kr/library/os-ecl-subversion/ ]

http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91
요기서 svn 1.4.6이 최신버전인 것 같습니다. 윈도우용 exe로 된 거-_-;
지가 알아서 설치해주는 버전으로 받아서 설치합니다.

설치하면 기본적으로 Program Files\Subversion\ 경로에 설치가 됩니다.

그 다음 저장소로 지정될 폴더를 만들어줍니다. 저는 C:\svn\mudchobo\ 경로를 생성했습니다.
그러면 이렇게 명령어를 써줘야합니다. svnadmin은 설치폴더에서 bin디렉토리에 있습니다.

svnadmin create --fs-type bdb C:\svn\mudchobo

fs옵션이 파일시스템 옵션인데 보통 bdb로 하는 것 같아요-_-; 잘 몰라요 검색 고고싱~

해당 폴더에서 conf폴더에 보면 설정파일이 있는데요. svnserve.conf파일에 아래내용을 추가합니다.
위에 예시가 있어서 주석만 지우셔도 돼요.
[general]
anon
-access = none
auth
-access = write
password
-db = passwd


설정 내용으로 보니, 익명접근자는 차단하고, 인증성공한사람은 쓰기권한이고, 비밀번호db는 passwd라는 파일에 있다라고 얘기하는 것 같습니다. 그러면 passwd에다가 계정을 추가해야합니다.
passwd파일을 열어봅시다.

[users]
# harry = harryssecret
# sally = sallyssecret
mudchobo
= 1234

해리가 샐리를 만났을 때 인가요? 어쨌든-_-; 앞에는 아이디고 뒤에는 비밀번호입니다.
저렇게 지정해 두면 저 계정으로 로그인 할 수 있습니다.

설정이 끝났네요. 오 완전 쉽네. 그 다음에 이 놈도 서버인 관계로 서버를 실행해놔야돼요.
해당 bin디렉토리에 있는 svnserve.exe파일이 서버 실행파일입니다.
svnserve -d -r c:\svn

요렇게 실행하게 되면, svn://localhost/mudchobo 로 접근이 됩니다.

이제 넷빈즈를 실행해봅시다.
넷빈즈는 이클립스처럼 subversive나 subclipse같은 플러그인 설치 없이 subversion Client를 내장하고 있습니다. 따로 플러그인 설치 안해도 됩니다.

프로젝트를 한번 만들어봅시다.
자바 프로젝트로 아무거나 한개 만든다음에, 프로젝트이름에 오른쪽 마우스를 클릭하고, Versioning선택하고, Import into Subversion Repository를 선택합니다.
Repository URL에는 svn://localhost/mudchobo 라고 합니다. 아까 우리가 만들었던 repository이름입니다.
User와 password는 passwd파일에 지정한 mudchobo와 1234를 넣어주면 됩니다.
Next를 누르면 Repository폴더를 작성하게 되는데 프로젝트명이랑 같게 해줍니다.
Specify the Message에다가 걍 뭐라고 써줍시다. 안써주면 Finish가 안돼요-_-;
Finish를 누르면 commit이 됩니다.

프로젝트를 지워버리고, 다시 가져오도록 해봅시다.
넷빈즈 메뉴에서 맨 위에 Versioning에 Subversion -> Checkout이 있습니다. 선택합니다.
Repository URL에 svn://localhost/mudchobo 아까 올렸던 주소를 쓰고,
User와 password에 mudchobo 1234를 넣습니다.
Repository Folders에 보면, 가져올 수 있는 폴더들이 보입니다.
방금 생성해서 커밋한 프로젝트가 있을 껍니다. 그걸 선택합시다. 
그러면 CheckOut이 되었습니다. Open Project를 해서 가져온 프로젝트를 열어봅시다.
그러면 된 겁니다-_-;

이상!-_-;





▒▒▒게임 방법▒▒▒
마우스를 사용하여 각종 아이템을 설치하여 적이 가로질러가지 못하게 막으세요!

+ Recent posts