반응형

출처:

https://ko.wikipedia.org/wiki/%EA%B5%AC%EC%84%B1_%EA%B4%80%EB%A6%AC

http://pyrasis.com/main/Subversion-HOWTO

http://hotcoffee.tistory.com/entry/Tortoise-SVN-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EA%B8%B0%EB%B3%B8%EC%82%AC%EC%9A%A9%EB%B2%95

http://croute.me/308

http://redism.egloos.com/page/8

http://s2junn.tistory.com/52


형상 관리 툴은 개발하면서 변경 사항을 체계적으로 기록하고

자료를 백업하면서 두 동네간 일관성을 유지하기 위해서 사용한다.


그 중에서 회사에 있었을 때는 퍼포스(회사에선 이를 P4라고 했다.)를 사용해서

그걸 쓰고도 싶으나 상용이라 쓰지 못 하고,

자유 소프트웨어를 사용하기로 했다.


그 중 회사에서 설치는 해봤던 서브버전을 사용하기로 했다.

서브버전하고 깃의 차이점이라면 분산된 저장소에서는 깃이 유리하고

중앙에 몰린 경우에는 서브버전이 유리하다고 한다.

물론 내 개인적인 용도로만 사용할 것이므로 어느 것이든 사용해도 크게 상관은 없고.

서브버전을 선택한 가장 큰 이유는 이게 깃보다는 더 쉬울 꺼라고 해서이다.

뭐 이걸로도 이렇게 삽질했는데 더 어려운 거였으면 더 고생했겠지.


서브버전의 윈도우용으로 TortoiseSVN이 있다.

밑의 링크에서 다운받으면 된다.

많이 사용하는 소프트웨어여서 그런지는 몰라도 한글패치도 있다.

프로그램을 다운받은 뒤에 한글패치를 받으면 된다.


http://tortoisesvn.net/ 


msi 파일을 그대로 설치하면 SVN은 수월하게 깔린다.


그리고 사용하기 위해서는 저장소라는 것을 만들어줘야 한다.

쉽게 말하자면 서버부분이라고 생각하면 된다.

빈 폴더 하나를 생성한 다음 우클릭하여 TortoiseSVN->현재 위치에 저장소 생성을 클릭한다.




그리고 생성을 완료하였다면 다음 메시지가 뜰 것이다.





저 폴더 기본는 다음과 같다.

trunk - 프로젝트가 저장될 폴더

branches - 프로젝트 내부의 프로젝트가 저장될 폴더

tags - 버전별로 프로젝트가 저장될 폴더


뭐 이렇다고 하는데 나는 어차피 저장 말고는 그다지 관심이 없어서 안 써도 되나 그냥 생성해서 썼다.


구조를 만들었으면 저장할 프로젝트를 가져올 차례다.

저장할 프로젝트를 우클릭하여 TortoiseSVN->임포트를 클릭한다.





그러면 다음 메시지가 뜨는데 저장소의 URL을 적고 확인을 누르면

프로젝트 파일이 앞에서 말한 저장소의 DB에 저장된다.

저장소의 URL은 file:/// + 저장소 위치이다.

나는 로컬이라 하드디스크부터의 절대 경로를 입력했다.

로컬이 아니라면 서버의 IP주소를 입력하고 공유된 폴더명 등을 입력하면 될 것이다.



프로젝트의 크기에 따라 임포트되는데 시간이 걸리니 알아서 여가시간을 즐기길 바란다.


그리고 DB에 저장된 것을 파일로 받아야 할 것이다.

즉, 서버에 저장된 것을 다른 클라이언트가 받아서 사용하겠다는 뜻이다.

물론 내가 임포트했던 프로젝트는 영향을 받지 않는다.

안타깝게도 나는 이걸 지금 글쓰는 와중에 이해해서 어제는 고생을 하였다.


먼저 우클릭하여 SVN 체크아웃을 클릭한다.




그럼 다음과 같이 메뉴가 뜰 것이다.



저장소 URL에는 앞의 저장소과 같은 것을 적으면 되고,

체크아웃 받을 디렉토리는 서버에 있는 파일을 받아서 저장할 위치를 쓰면 된다.

그리고 확인을 누르면 서버에 저장된 파일을 지정한 위치에 내려받을 것이다.


반영은 다음과 같이 한다.


먼저 로컬(아까 우리가 임포트했던 프로젝트)과

SVN 서버에서 내려받은 프로젝트(이하 SVN 클라이언트)를

문서 관리 툴을 이용해 비교하여 추가된 부분만 SVN 서버로 옮긴다.

물론 SVN 클라이언트에서 바로 작업을 해도 되나 로컬에서 아직 완성되지 않은 것들이

잘못하여 서버로 올라갈 수 있으므로 이렇게 하는 것이 좋을 것이다.

뭐 회사에서도 이런 식으로 작업을 하였고, 거기에다가 프로젝트 경로 바꾸기가 귀찮아서 나두었다.


사실 의도는 서버를 통해 SVN 클라이언트를 관리하고 싶었으나

그렇게 하자니 수정을 하기에 너무 번거로워서 생각을 바꿔

로컬 -> SVN  서버에서 내려받은 프로젝트 -> 서버 순으로 프로젝트를 관리하는 것으로 바꿨다.


여튼 잡소리가 길었는데 다시 돌아가서 변경이 되었다면 다음과 같이 아이콘이 바뀔 것이다.



초록색 체크는 서버와 클라이언트의 파일이 같음을 의미하고,

빨간색 느낌표는 서버와 클라이언트 간 파일이 다름을 뜻한다.




그리고 우클릭하여 SVN 커밋을 누른다.

SVN 커밋은 클라이언트의 내용을 서버에 반영하는 것이고,

SVN 업데이트는 서버의 내용을 클라이언트에 반영하는 것이다.



그럼 커밋 확인 메시지가 뜬다.

확인을 누르기 전에 대상 파일을 우클릭하여 작업하기 위해 꺼냈던 것과 비교를 눌러보자.


그러면 서버의 해당 파일과 클라이언트의 파일을 비교해볼 수 있다.

그리고 확인을 하면 서버에도 클라이언트에서 작업한 내용이 반영된다.


여기에서 로그 이야기를 하지 않았는데 작업한 내용이 어떤지를 알기 위해서는

당연히 뭘 했는지 써야 한다.

물론 최근 메시지에 당연히 쓸 수 있다.

그러나 처음에 쓰지 않으면 나중에 편집할려고 해도

리비전 속성을 바꿀 수 없다면서 불가능하고 알린다.


그럴 때는 출처의 마지막 링크에도 나와있지만 SVN 서버의 hooks 폴더로 들어가

pre-revprop-change.bat 파일을 만들고 내용은 다음과 같이 한다.


@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5

:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME

:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION

:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY

goto :eof

:ERROR_EMPTY
echo Empty svn:log messages are not allowed. >&2
goto ERROR_EXIT

:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT

:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1


이렇게 하고 저장을 하면 처음에 변경 내용을 입력하지 않았어도 나중에 사용할 수 있게 된다.


일단 여기까지가 내가 SVN을 이용하면서 알아낸 것이다.

추후 더 필요하다면 더 적어봐야겠다.


P.S -

이것은 기본적인 내용은 아니지만 글을 쓰면서 해보다보니

SVN 서버의 이름을 이상하게 붙여서 URL을 바꿔야할 필요성을 느꼇다.


http://junho85.tistory.com/10


위의 링크에도 나와있지만 SVN은 저장소 URL을 바꿀 수 있다.


일단 먼저 서버명을 원하는 이름, 위치로 바꾼다.



클라이언트 폴더를 우클릭하고 TortoiseSVN->저장소 URL 변경을 클릭한다.


대상 URL에 앞에서 바꾼 서버의 주소를 입력하면 그 주소로 변경이 완료된다.



고생하면서 알게 된 만큼 좀 오래 써먹어야 겠다.

반응형
Posted by 애콜라이트
l

free counters