하드 디스크에서만 잠자고 있던 MINT64 OS의 소스 코드를 어디엔가 올려야겠다는 생각이 번득 들어서 지난주 금요일부터 고민했습니다. 그러다가 GIT라는 분산 버전 관리 시스템을 알게 되었는데요, 리누즈 토발즈옹께서 리눅스 커널 개발에 쓰신다는 이야기를 듣고 혹해서 깔게 되었습니다.
그동안 서브버전을 쓰고 있었는데요, Tortoise SVN이 너무 편해서 GIT도 없나 찾아봤더니~!!! 역시 있더군요. 아래의 두 가지를 설치해주면 Tortoise SVN을 쓸 수 있습니다. >ㅁ<)-b
설치가 끝나면 탐색기에서 오른쪽 버튼을 눌렀을 때, 아래처럼 “Git XXX” 관련 메뉴가 나타납니다.
<TortoiseGIT 설치 후 메뉴>
여기서 “Git Clone…”를 클릭하면 Remote Repository에서 프로젝트 전체를 내려 받을 수 있습니다. 저는 MINT64 OS의 소스코드가 올라간 기념으로 아래와 같이 https://mint64os@code.google.com/p/mint64os/를 URL로 선택하고 Directory는 C:\MINT64로 했습니다.
<Clone 설정 화면>
위의 화면에서 OK를 누르면 암호를 입력하라고 나오는데요, 공개 프로젝트의 경우 그냥 엔터를 치시면 프로그래스바가 표시된 뒤에 C:\MINT64 디렉터리가 생성됩니다. ^^
이제 C:\MINT64 디렉터리에서 마음대로 작업을 한 뒤에, 어느 정도 성과가 나오면 다시 마우스 오른쪽 버튼을 눌러 메뉴를 표시하면 Git Commit -> “Master”… 항목이 보입니다. 이 항목을 클릭하면 Clone을 한 로컬 Repository(C:\MINT64 디렉터리)에 변경사항이 저장됩니다.
말은 Commit인데, 사실 Subversion의 Commit과는 조금 개념이 다르더라구요. Subversion의 Commit은 Remote Repository에 변경사항을 올리는 건데, GIT에서 이 작업은 Push라고 하더라구요. Push는 오른쪽 버튼을 눌러 “TortoiseGIT” 항목 -> 가장 위에 있는 “Push” 항목을 선택하면 됩니다. 단, Push 할 때는 암호가 필요합니다(설정에 따라서 필요하지 않는 경우도 있는지는 모르겠네요. ^^;;;)
조금 써보니까 Subversion과 큰 차이가 없어서, 그렇게 어렵거나 하지는 않더라구요. 이제 우리 모두 GIT와 MINT64 OS 프로젝트에 푸욱 빠져보아요. >ㅁ<)-b
개발자라면 한번쯤 소스 관리에 대해서 고민해 봤을 것이다. 특히나 수정이 잦은 프로그램이라면 더욱 더 버전 관리가 중요한데, 이걸 일일이 폴더나 날짜별로 관리하다가는 낭패를 보기 십상이다. 그래서 버전관리 프로그램을 사용하는데, 대표적인 것으로 소스세이프(Source Safe), CVS, Subversion 있다.
윈도우 프로그래머라면 소스세이프가 굉장히 유용한데(Visual Studio를 설치하면 자동으로 깔리므로... ㅡ_ㅡa..), 사용해보니 속도가 무지 느리고 VC 또한 한참 뒤에 뜨게하는 무시무시한 단점이 있어서 다른 것을 찾다가 서브버전을 선택하게 되었다.
서브버전의 장점은 인터넷에 잘 나오므로 굳이 이야기하지 않겠고, 실제 윈도우 버전 설치 및 설정에 대해서 알아보자.
1.Tortoise 서브버전(Subversion) 클라이언트 설치
1.1 Tortoise 서브버전(Subversion) 클라이언트 다운로드
서브버전 서버를 설치한다면서 왜 클라이언트를 설치하는 것일까? 그것은 서버 설치후 나머지 작업을 편리하게 할 수 있기 때문이다.
설치 과정은 아주 간단하다. 윈도우 인스톨 파일을 더블클릭해서 기본 옵션으로 설치하면 된다. "Next" 를 계속해서 클릭하여 완료하자.
2.3 서브버전(Subversion) 설정
2.3.1 서브버전(Subversion) 데이터 폴더 생성(Repository)
서버 설치가 끝났으니 데이터를 저장할 폴더를 생성해야한다. 저장소는 하드디스크의 특정 폴더로 하면 되고, 임의의 이름으로 선택 가능하다. 일단 D:\Repository로 해서 생성하자.
2.3.2 서비스(Service) 등록
서브버전 서버를 서비스로 등록하여 윈도우 부팅시에 자동으로 실행되도록 하자. 윈도우 서비스 등록은 sc.exe 프로세스로 등록가능하다. cmd.exe를 실행해서 아래와 같이 입력하도록 하자.
아래는 서브버전 서비스를 등록하고 서비스를 해제하는 명령이다.
서비스 등록 : sc create svn binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service -r D:\repository" displayname= "Subversion Server" depend= Tcpip start= auto
서비스 해제 : sc delete svn displayname= "Subversion Server"
별다른 문제가 없다면 성공적으로 등록했다는 메시지가 출력될 것이다.
2.3.3 방화벽(Firewall) 해제
서브버전은 TCP 3690 포트와 UDP 3690 포트를 사용한다. 윈도우 방화벽 및 Anti-Virus의 방화벽을 해제하도록 하자.
아래는 윈도우 방화벽에서 포트를 추가하는 방법이다. TCP와 UDP 각각 등록해서 모두 가능하도록 하자.
2.4 저장소(Repository) 생성
이제 서버 설정이 끝났으니 실제로 소스 또는 데이터를 관리할 저장소(Repository)를 생성해야 한다. 서브버전 관련 데이터는 D:\Repository 에 저장하기로 했으므로 하위 폴더에 저장소를 생성하자.
2.4.1 커맨드 라인(Command Line) 방식
cmd.exe 를 실행한 뒤 D:\Repository 폴더로 이동하여 아래와 같이 입력한다.
"C:\Program Files\Subversion\bin\svnadmin" create --fs-type fsfs test
위의 파란색으로 표시된 test를 유의해서 보자. test 대신에 생성을 원하는 폴더명으로 바꿔서 입력하면 된다.
아래는 위의 명령을 실행한 후 결과 화면이다.
2.4.2 Tortois Subversion 클라이언트를 사용한 방식
Tortois Subversion 클라이언트를 설치했다면 좀더 편한 방법으로 생성할 수 있다. 아래는 Tortoise Subversion 클라이언트를 통해 생성하는 방법이다.
D:\Repository 폴더에 생성할 저장소 이름(Test)의 폴더를 미리 생성한 후 Tortoise Subversion 클라이언트에서 "Create repository here"를 클릭하면 된다.
파일 시스템을 선택하는 다이얼로그가 뜨면 "Native filesystem(fsfs)"를 선택한 후 OK를 눌러서 생성하면 된다.
2.5 저장소 접근 설정
저장소를 생성하고 나면 아래와 같은 폴더와 파일들이 생긴다.
이 중에서 접근 권한을 제어하기위해서는 2개의 파일을 손봐야 하는데 다음 항목을 보자
2.5.1 svnserve.conf
### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository. (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)
### Visit http://subversion.tigris.org/ for more information.\
[general]
### These options control access to the repository for unauthenticated
### and authenticated users. Valid values are "write", "read",
### and "none". The sample settings below are the defaults.
anon-access = none <== 로그인 하지 않은 사용자는 아무것도 못하도록 한다.
auth-access = write
### The password-db option controls the location of the password
### database file. Unless you specify a path starting with a /,
### the file's location is relative to the conf directory.
### Uncomment the line below to use the default password file.
password-db = passwd <== ID와 Password를 저장하는 파일 이름
### The authz-db option controls the location of the authorization
### rules for path-based access control. Unless you specify a path
### starting with a /, the file's location is relative to the conf
### directory. If you don't specify an authz-db, no path-based access
### control is done.
### Uncomment the line below to use the default authorization file.
#authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa. The default realm
### is repository's uuid.
realm = KKAMAGUI Repository <== 접근했을 때 클라이언트에게 보여줄 저장소 메시지
위와 같이 파일을 수정한 다음 저장한다.
2.5.2 passwd
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
# harry = harryssecret
# sally = sallyssecret
kkamagui = 사용할 패스워드
위와 같이 ID = Password의 형태로 입력한 뒤 저장하면 된다.
3.간단한 서브버전(Subversion) 서버 테스트
테스트 방법은 간단하다. 탐색기에서 오른쪽 버튼을 눌러서 표시되는 메뉴에서 "Repo-Browser" 를 클릭하여 아래와 같은 창이 뜨면 서브버전 서버가 설치된 주소와 저장소 이름을 같이 입력해주면 된다.
이제 주소와 저장소의 이름을 입력하자. 주소를 kkamagui.egloos.com, 그리고 저장소를 test라고 가정하고 입력하면 아래와 같이 될 것이다.
"OK" 버튼을 누르면 실제 서버에 접속해서 저장소 정보를 얻어오는데, 아래와 같은 화면이 표시될 것이다. 실제로 정상적으로 접속이 된다면 "test" 항목 아래에 아무것도 표시되지 않을 것이지만 문제가 발생한다면 아래와 같이 에러메시지가 표시될 것이다.
위와 같은 에러 메시지가 표시되면 처음 단계부터 설정을 다시 한번 확인하자. 아무런 에러 메시지가 없다면 정상적으로 설치된 경우이므로 열심히 Check-out, commit, update를 반복하면 된다.
4.서브버전(Subversion) 서버를 설치하지 않고 로컬(Local)에서 소스 관리하기
서브버전 서버가 설치되어있어야 꼭 소스 버전 관리가 가능한 것일까? "답은 그렇지 않다" 이다.
Tortoise Subversion 클라이언트를 설치했다면 로컬에 저장소를 만들고 file:/// 키워드로 접근하여 소스 버전을 관리하는 것이 가능하다.
4.1 저장소 생성
위의 "2.4 저장소(Repository) 생성" 부분을 참고해서 로컬에 Tortoise를 이용하여 저장소를 생성하자. 그리고 파일들을 수정해서 특정 유저만 접근가능하도록 수정하자.
4.2 저장소 접근 테스트
위의 "3.간단한 서브버전(Subversion) 서버 테스트" 부분을 참고하여 "Repo-browser"를 실행하고 주소에 아래와 같이 입력한 후 OK를 누르자.
file:///d:\repository\test
정상적으로 실행되면 아래와 같은 화면이 표시될 것이다.
아무런 에러가 없으므로 정상적으로 실행되었음을 알 수 있다. 이렇게 함으로써 서버를 설치하지 않고도 로컬에서 소스 버전관리를 할 수 있다.
5.기타 팁
5.1 버전 관리시 무시할 파일 확장자 설정
소스를 컴파일해서 나오는 object 파일이나 기타 필요없는 부산물들은 버전관리를 할 필요가 없다. 그런 파일들을 일일이 수작업으로 제외하기는 상당히 귀찮은 작업인데, 다행이 Tortoise에서 이것을 편리하게 할 수 있는 옵션이 있다.
"Settings" 메뉴에 가면 아래와 같은 화면이 표시된다. 여기에 "Global Ignore Pattern" 항목에 무시할 파일의 확장자나 파일명을 입력하면 된다.