티스토리 뷰

Application/Win32

SVN 사용법

알 수 없는 사용자 2008. 3. 27. 14:49

출처 : http://darkice.byus.net/aquamp/index.html?q=

 

별거 아닌 내용이지만, 내 경우는 SVN 에 익숙하지 않다보니(사실 매뉴얼을 제대로 안읽어서 그렇다. -_-;) 몇일 동안 삽질했다. 학교 연구실과 집을 드나들며, 자꾸 SVN 에 실패하고 대신 일일이 구글의 이메일로 자료를 보냈다.
SVN 은 나름대로 단순하지 않은 구조를 가진다. 매뉴얼이나 다름 없는 책만 해도 300페이지가 넘도록 있으며[1] 단순히 파일을 주고 받는 것에 그치지 않고 효과적으로 여러사람들이 코드를 공유할 수 있도록 특이한 방법을 사용한다. 자세한 설명이나 서버 세팅하는 법은 생략하고(사실 잘 모른다.) 그냥 내가 올리려는 파일들을 기준으로 클라이언트에서 어떻게 사용할 수 있는지에 대한 간단한 소개만 하려고 한다. 단, 여기서 설명하는 것은 윈도우 기준이고, 다른 곳에서는 방법은 많이 다르다. 하지만 용어는 같다!
일단 내가 SVN 서버에 올리려 하는 것은 다음의 폴더들이다.
TestProgram, FourierTest, SimpleFluidSimulator
올리려고 하는 주소는 https://hybrid.googlecode.com/svn/trunk/ 이다.
사실 위의 주소는 내가 사용하는 주소가 아니다. 원래 주소를 감추기 위해 hybrid 를 넣었다.[2]
1. 일단, 윈도우즈에서 편리하게 사용하기 위해 TortoiseSVN 을 설치한다. 이것은 Windows Explorer 에서 편리하게 사용할 수 있는 프로그램이다.

Array

2. 이 프로그램을 설치 후 바탕화면이나 Explorer 에서 오른쪽 버튼을 누르면 TortoiseSVN 이 생기는 것을 볼 수 있다. 거기서 Repo-browser 를 누른다.

Array

이것은 Repository Browser로 Repository 를 볼 수 있다. 현재는 비어 있는 상태다. 여기에 오른쪽 버튼을 눌러 'Add' 로 추가를 하거나 직접 Explorer 로 부터 드래그를 해서 추가를 할 수 있다.
3. 이상한 점이, 이렇게 넣으면 Repository 에는 제대로 들어가지만, 내 컴퓨터에서는 제대로 SVN 을 인식을 못한다. 일단은 이것을 백업하던지 해서 다른 곳으로 옮겨둔다. 올려보낸 자료를 다시 다운 받을 것이다. 이를 위해서 중복이 되지 않도록 지우거나 백업을 해야 한다는 말이다.[3]

Array

그 다음에 Checkout 을 한다. Checkout 은 서버에 있는 것을 내 컴퓨터로 다운 받는 것을 의미한다. 단, 같은 파일이 존재하면 안된다. 파일 이름이 겹치면 안된다. 그래서 위에서 백업을 한것이다. HEAD revision 과 Revision 의 차이는 매뉴얼을 참고한다. 일단은 HEAD revision 만 사용하면 된다.

Array

Checkout 을 하면 이런식으로 다운을 받게 된다. At revision 88 은, 현재 88번째 revision(수정)이라는 뜻이다. 이중 HEAD 는 제일 최신을 뜻하는 것이고, 이러한 구조는 사실상 트리 구조를 이루고 있다.(자세한 설명은 매뉴얼을 참고.)

Array

4. 그러면 이렇게 현재 내 컴퓨터에 체크 표시가 된 상태로 다운이 받아져있다.(이 디렉토리 안을 살펴보면 숨겨진 디렉토리로 .svn 이라는 디렉토리가 있다. Explorer 는 이것으로 SVN 에 관한 정보를 다룬다.
시험삼아 FourierTest 안에 있는 main.cpp 를 수정한 후 저장해봤다.

Array

그러면 위와 같이 main.cpp 를 담고 있는 FourierTest 디렉토리에 체크표시대신 느낌표가 표시된다. 물론 이 안에 있는 main.cpp 파일도 느낌표로 보여지게 된다.
5. 이때 이 디렉토리나 실제 main.cpp 파일에서 오른쪽 버튼을 눌러서 할 수 있는 행동은 다음과 같다.
Commit : 내 컴퓨터에서 Repository 로 저장하는 것을 의미한다.
Update : 이것은 Repository 의 변경사항을 내 컴퓨터에 적용시키는 것을 의미한다. 지금은 내가 main.cpp 파일을 변경 했기 때문에, Update 를 해도 아무런 변화가 일어나지 않는다.(내가 아닌 다른 사람이 Repository 를 변경시켰을 때, Update 를 적용할 수 있다.)
Revert : Commit 전에 방금 내가 한 수정을 취소할때 사용된다. 즉, 아직 Commit 을 하지 않았다면, 현재 Repository 에는 내가 수정한 내용이 적용되지 않았을 것이다. 이때 Revert 하면, Repository 에 있는 수정전의 내용이 내 컴퓨터로 적용된다.
Update to revision # : 원하는 번호의 Revision 으로 되돌릴 수 있는 기능이다.(최신 Revision 은 HEAD 이다. 실수로 잘못 수정을 한 후 Commit 을 했더라도, 그 HEAD 이전의 Revision 으로 되돌릴 수 있다.)
Lock/Unlock : 이름만으로도 유추할 수 있듯이, Lock 을 걸면 다른 사람이 이것을 변경할 수 없다.(정확히 말하면 읽기는 가능하니까, 수정을 해도 Commit 이 안되는 것이다.) 이것은 Unlock 이 될 때까지 지속되는데, 이것이 일종의 문제이다. (사람의 실수로) Unlock 이 장시간 안되면 효율적인 작업에 문제가 생길 수 있다.(그렇기 때문에, Repository 는 revision 등의 기능과 함께 Tree 구조를 구성한다.)
6. 작업을 하다가 새로운 파일을 만들 수 있다.
그 럴때는 그러한 파일이나 디렉토리에서 오른쪽 버튼을 눌러 Add 를 누른다 . 그렇게 업로드를 시키면 파일이나 디렉토리에는 위의 느낌표 마냥 + 표시가 나온다.(앞에서는 Add를 눌러도 +가 생기지 않아 다시 Checkout 을 해야만 했다. 그 차이는 아래에 다시 설명하겠다.)

Array

(파일마다 +가 보이는 것을 확인할 수 있다. 이때, .svn 은 숨겨진 디렉토리이고, ETC와 Ankh.load 처럼 SVN 에 추가 된 파일과 추가되지 않은 파일이 같은 곳에 존재할 수 있다.)
이 +의 뜻은 Repository 에는 없다는 의미로, Commit 을 하면 Repository 에 새로 추가가 될 예정이라는 뜻이다. 일일이 모든 파일을 선택해 Commit 하거나, 간단하게 이전 디렉토리로 가서 디렉토리 통채로 Commit 을 할 수도 있다.(당연히 Commit 이 적용될 파일들만 알아서 적용된다.)
7. 이 정도면 기본적으로 SVN의 기능들은 잘 활용할 수 있다. 그중에 문제가 됐던 것 하나가 있었다.
처 음에는 Explorer 에서는 Add를 할수도 없었고, Repository 에서 Add를 했는데도 귀찮게 다시 Checkout 을 해서 받아와야만 했다. 하지만 나중에는 알아서 + 표시가 되서 편하게 사용할 수 있었다. 이 차이는 현재 디렉토리에 .svn 의 유무에 따라 달라진다. 즉, .svn 가 있으면 현재 그 디렉토리는 서버의 Repository 와 연결이 되어 있으므로, Add를 하면 알아서 Repository 의 어느 주소로 들어갈지 안다는 말이다. 그렇기 때문에 + 표시가 되어 Commit 으로 간편하게 해결이 되는 것이다.
이것은 아마 내가 SVN 를 사용하는데 미숙함이 있지 않았나 생각이 드는데, 나로써는 별다른 방법이 없었다.
8. 두번째로 남길 팁은, Ankh 에서 제작한 Visual Studio .NET Addon 인 AnkhSVN[4] 이다. 이것을 사용하면, 위에서 사용한 Subvision 을 그대로 .NET 에서 같이 활용할 수 있다.(비슷하게 작동한다.) 단, 위의 TortoiseSVN 없이 이것만 사용하기에는 다소 불편한 점이 있었다. 그래서 위의 방법으로 SVN 을 잘 세팅 해놓은 후 AnkhSVN 을 활용하는 것을 추천한다. 이것을 추가하면, 다음과 같이 .NET 에도 SVN 의 상태를 확인할 수 있다.

Array

위와 같이 친절하게 파일과 솔루션에 모두 표시가 된다. 물론 여기서도 Update 나 Commit 이 가능하고, Diff 를 통해 소스 비교까지 할 수 있다.(이 Diff 기능이 TortoiseSVN 에도 있는지는 잘 모르겠다.)
결 론적으로... SVN 는 사실상 그렇게 간단한 형태는 아니었다. 그렇기 때문에 매뉴얼을 자세히 읽고 시작하는게 필수였지만, 300페이지나 되는 매뉴얼을 자세히 읽기는 쉬운 일이 아니다.(당장은 필요 없는 기능들도 많고..) 그렇기 때문에 일단 초보자 수준에서 따라하기 쉬운 내용을 적었다. 아무리 RTFM 이라지만, 처음에 헤메는 것을 조금 덜고자 길지만 캡쳐해가며 주욱 적어보았다. (역시 이런건 적고나면 더더욱 아무것도 아니다. -_-; 난 헤맸는데 ㅜ_ㅜ) 참고로 이 이외에도 더 많은 기능들이 있으니, 관심이 있는 사람은 CollabNet, Wikipedia - Subversion, Tigris.org 등을 참고한다.