TortoiseSVN 초보자가이드 2005-03-23 광운대학교 K-NET 5 기조형렬 이문서의모든내용은 TortoiseSVN 1.1.3, Build 2502 버전을기준으로작성되었습니다. 이문 서는출처가명시된다면제한없이자유롭게사용될수있습니다. 차례 1. 무엇을설명하고있는문서인가?... 2 2. TortoiseSVN 설치하기... 2 2.1 TortoiseSVN 설치... 2 2.2 TortoiseSVN 한글언어팩설정하기... 3 3. TortoiseSVN 시작하기... 4 3.1 저장소생성하기... 4 3.2 작업용복사본가져오기 (SVN 체크아웃 )... 5 3.3 폴더및파일추가하기... 7 3.4 저장소에반영하기 (SVN 커밋 )... 9 3.5 파일수정하기... 11 3.6 폴더및파일삭제하기... 12 3.7 폴더및파일이름바꾸기... 12 3.8 폴더및파일이동하기... 13 3.9 수정사항되돌리기... 13 3.10 수정사항확인하기... 14 4. TortoiseSVN 속성다루기... 16 4.1 무시목록사용하기... 17 4.2 키워드사용하기... 19 5. TortoiseSVN 리비전다루기... 20 5.1 로그보기... 20 5.2 원하는리비전체크아웃하기... 21 5.3 익스포트... 21 5.4 저장소브라우저... 22 6. TortoiseSVN 여러사용자와사용하기... 23 6.1 업데이트하기 (SVN 업데이트 )... 23 6.2 충돌처리하기... 23 6.3 패치사용하기... 27 6.4 브랜치 / 태그사용하기... 29 7. 참고자료... 32 1/32
1. 무엇을설명하고있는문서인가? TortoiseSVN은 Subversion이라는버전컨트롤시스템을위한윈도우용클라이언트프로그램입니다. 여기서버전컨트롤시스템이란폴더및파일의모든수정내역을효율적으로기록하고관리하는시스템을의미합니다. 버전컨트롤시스템을사용하면언제든예전에수정하였거나삭제한파일을다시불러와확인할수있습니다. 또한여러사용자가동시에파일을열거나수정할경우발생할수있는모든문제들도처리하여줍니다. TortoiseSVN은이러한버전컨트롤시스템을사용자가쉽게사용할수있도록윈도우의쉘과통합된형태의인터페이스를제공하는클라이언트프로그램입니다. 게다가자체적으로로컬서버의기능도가지고있어따로 Subversion 서버를설치하지않고도사용할있다는장점을가지고있습니다. Subversion은새로운버전컨트롤시스템으로서 CVS라는유명한버전컨트롤시스템의단점을개선하여 CVS를대체하기위해만들어진프로그램입니다. 이문서는이러한버전컨트롤시스템을처음사용하는사용자가 TortoiseSVN을사용하여파일의버전을관리하고여러작업을수행할수있도록그시작을돕는문서입니다. 2. TortoiseSVN 설치하기 2.1 TortoiseSVN 설치 TortoiseSVN은 http://tortoisesvn.tigris.org/download.html에서 TortoiseSVN 설치프로그램과한글언어팩을다운로드받아설치할수있습니다. 설치는일반적인윈도우프로그램설치와동일합니다. 설치프로그램 한글언어팩 TortoiseSVN 다운로드페이지 2/32
TortoiseSVN 설치화면 TortoiseSVN 은오직윈도우탐색기에서마우스오른쪽버튼을클릭하여나오는메뉴를통해서만사용할수 있습니다. 다음은윈도우탐색기에서마우스오른쪽버튼을클릭하여나오는메뉴의모습입니다. 설치된 TortoiseSVN 2.2 TortoiseSVN 한글언어팩설정하기 TortoiseSVN 의한글언어팩을설치하였다면, 다음과같이언어를한글로설정할수있습니다. Settings 선택 3/32
한국어로선택함 3. TortoiseSVN 시작하기버전컨트롤시스템에서는원본파일을직접수정하여저장할수없습니다. 대신항상원본에대한복사본을얻어온후작업해야합니다. 복사본을얻어와새롭게추가하였거나원하는데로수정을하였다면이를다시원본에반영해야만원본이변경되게됩니다. 이러한일련의과정이버전컨트롤시스템을사용하는기본적인방법입니다. 여기서원본파일들에대한정보는저장소라는곳에저장이됩니다. 따라서항상버전컨트롤시스템을사용하기에앞서먼저저장소를생성해야합니다. 이문서에서는지역저장소만을사용합니다. 3.1 저장소생성하기 새로운폴더를생성하고 폴더안에서마우스오른쪽 버튼을클릭합니다. 현재위치에저장소생성을 선택합니다. 4/32
저장소의데이터를내장데이터베이스 (BDB) 를사용하여저장할지일반파일들 (FSFS) 을사용하여저장할지를결정합니다. 생성된저장소파일들의모습 * 저장소형식선택시참고사항버클리데이터베이스 (BDB) 의경우데이터베이스파일을여러사용자가동시에사용할때데이터베이스파일이깨지는경우가발생한다는보고가있습니다. 또한 BDB는읽기전용속성의저장소나네트워크공유에저장소를만들수없고, 프로그램의비정상종료시에도데이터베이스파일이깨질수있습니다. 반면에 FSFS의경우높은이식성과빠른속도를제공하지만, BDB에비해사용된기간이짧고모든버전정보가각각의일반파일들로저장되기때문에파일이많이생긴다는단점이있습니다. 여기서어떠한저장소를선택하든저장소의안정성에대해맹신해서는안됩니다. 데이터보호를위해항상저장소를주기적으로백업하는것이좋습니다. 3.2 작업용복사본가져오기 (SVN 체크아웃 ) 작업을하기위한복사본을가져오는작업을체크아웃 (checkout) 이라고합니다. 다음과같이체크아웃을해 서저장소로부터작업용복사본을가져옵니다. 윈도우탐색기에서마우스오 른쪽버튼을클릭한후 SVN 체크아웃 을선택합니다. 5/32
저장소의위치를입력합니다. 앞서생성했던저장소의경로에 file:/// 를앞에붙여입력합니다. 복사본을저장할디렉터리의위치를입력합니다. 해당위치에디렉터리가없을경우새로생성합니다. 체크아웃된폴더의모습 6/32
*.svn 폴더에대하여윈도우탐색기에서숨김파일및폴더를표시하도록설정하였다면저장소로부터체크아웃된모든폴더에대해다음과같은.svn이라는폴더가있는것을볼수있습니다. 숨김속성의.svn 폴더 이폴더는 TortoiseSVN 에의해내부적으로사용되는정보를저장하고있는폴더입니다. 따라서절대로 임의로수정하는일이있어서는안됩니다. 3.3 폴더및파일추가하기 먼저작업용복사본에원하는폴더및파일을추가합니다. 여기서는 trunk 폴더와 HelloTortoiseSVN.cs 라 는파일을추가하였습니다. 추가된폴더및파일 추가된폴더중가장최상위폴더의부모폴더안에서다음과같이마우스오른쪽버튼을클릭한후 TortoiseSVN -> 추가를선택합니다. 추가된폴더중가장최상위폴더 의부모폴더안에서마우스오른 쪽버튼을클릭합니다. 추가를선택합니다. 7/32
추가할폴더및파일 을확인하고선택합니 다. 추가된폴더및파일의변경된아이콘모습. 그러나아직저장소에파일이추가된것은아닙니다. 8/32
* 오버레이아이콘에대하여체크아웃된최상위폴더를포함하여작업용복사본에있는폴더와파일들의아이콘에다음과같은추가적인오버레이아이콘이표시되는것을볼수있습니다. 오버레이아이콘들 TortoiseSVN은체크아웃된폴더및파일들에대하여다음과같은오버레이아이콘을사용하여폴더및파일의상태를시각적으로표현합니다. 이를통하면직관적으로폴더및파일의상태를확인할수있습니다. 저장소로부터업데이트된후아무변경도없었다는것을나타냅니다. 파일이수정된후아직커밋되지않았다는것을나타냅니다. 업데이트중저장소와작업용복사본사이에충돌이발생했다는것을나타냅니다. ( 충돌에대한내용은이후에설명합니다.) 다음커밋시저장소에추가될폴더또는파일이라는것을나타냅니다. 다음커밋시저장소로부터삭제될폴더또는파일이라는것을나타내거나버전컨트롤되는파일이폴더에없다는것을나타냅니다. 3.4 저장소에반영하기 (SVN 커밋 ) 작업용복사본에서파일을추가, 수정또는삭제하는등의변경작업을했다고해도저장소에바로반영되는것은아닙니다. 모든변경작업은커밋 (commit) 을해야저장소에반영됩니다. 변경된항목중가장최상위항목의부모폴더안에서다음과같이마우스오른쪽버튼을클릭한후 SVN 커밋 을선택합니다. 추가된폴더중최상위폴더 의부모폴더안에서마우스 오른쪽버튼을클릭합니다. SVN 커밋 을선택합니다. 9/32
변경사항에대한로그 메시지를입력합니다. 각각의모든커밋작업 은리비전번호를증가 시킵니다. 저장소에반영된항목의 아이콘모습. 10/32
* 리비전번호에대하여폴더및파일을추가하거나수정하거나삭제하는등의모든변경사항에대한정보는리비전번호로관리됩니다. 리비전번호는커밋할당시의모든폴더와파일의구조및상태를나타내는버전정보입니다. 즉하나의파일을수정하고커밋하거나여러개의파일을수정하고커밋하거나또는기타어떠한변경작업을하고커밋하여도모두하나의리비전번호를증가시킨다는것을의미합니다. Subversion은이와같이모든변경사항들을하나의리비전번호로관리하고있습니다. 또한커밋작업시변경사항들이모두저장소에반영되거나또는모두반영되지않도록관리하고있습니다. 이는기존의파일단위로버전을관리하던 CVS와같은버전컨트롤프로그램에서여러파일들을동시에커밋하였을때프로그램에러및시스템에러또는네트워크에러등에의해커밋작업이비정상종료되었을경우커밋작업이모두취소되는것이아니라일부저장소에반영된채로중단되었던문제를해결한것입니다. 3.5 파일수정하기작업용복사본에서원하는파일들을수정합니다. 파일을수정하면파일의아이콘이변경되는것을볼수있습니다. 수정작업을완료하였다면수정된파일들을모두포함하는가장최상위폴더안에서마우스오른쪽버튼을클릭하여변경사항을저장소로커밋하면됩니다. 수정된파일들을모두포함하는가장최상위폴더안에서마우스오른쪽버튼을클릭합니다. SVN 커밋 을선택합니다. 11/32
3.6 폴더및파일삭제하기작업용복사본에서삭제할폴더및파일들을선택한후마우스오른쪽버튼을눌러나오는메뉴에서 TortoiseSVN -> 삭제를선택하여삭제한후커밋합니다. 삭제할폴더및파일을선택 한후마우스오른쪽버튼을 클릭합니다. 삭제를선택하여지운후 커밋합니다. 3.7 폴더및파일이름바꾸기 작업용복사본에서이름을바꿀폴더또는파일을선택한후마우스오른쪽버튼을눌러나오는메뉴에서 TortoiseSVN -> 이름바꾸기 를선택하여이름을변경한후커밋합니다. 이름을바꿀폴더또는파일 을선택한후마우스오른쪽 버튼을클릭합니다. 이름바꾸기 를선택합니다. 새이름을입력합니다. 기존이름의파일이삭제되고새이름의파일이추가된것을볼수있습니다. 폴더안에서마우스오른쪽버튼을클릭합니다. SVN 커밋 을선택합니다. 12/32
3.8 폴더및파일이동하기작업용복사본에서이동할폴더및파일들을선택한후마우스오른쪽버튼으로클릭드래그하여목적지폴더위에서오른쪽버튼을놓았을때나오는메뉴에서 Subversion에있는파일을여기로옮김을선택하여옮긴후커밋합니다. 이동할폴더및파일을선택한후목적지폴더로마우스오른쪽버튼클릭드래그앤드랍합니다. Subversion 에있는파일을여기로옮김을 선택합니다. 기존위치에있던폴더및파일들이삭제되고목적지폴더에추가된것을볼수있습니다. 폴더안에서마우스오른쪽버튼을클릭합니다. SVN 커밋 을선택합니다. 3.9 수정사항되돌리기작업용복사본에서아직커밋되지않은모든변경사항을취소하고자한다면모든변경사항을포함하고있는폴더안에서마우스오른쪽버튼을클릭하여나오는메뉴에서 TortoiseSVN -> 되돌리기를선택합니다. 취소하고자하는모든변경사항을포함하고있는폴더안에서마우스오른쪽버튼을클릭합니다. 되돌리기를선택합니다. 13/32
되돌릴항목을확인하고 선택합니다. 되돌려진항목의모습 3.10 수정사항확인하기작업용복사본에서아직커밋되지않은모든변경사항을커밋하기전에미리확인해볼수있습니다. 모든변경사항을포함하고있는폴더안에서마우스오른쪽버튼을클릭하여나오는메뉴에서 TortoiseSVN -> 수정내역확인을선택합니다. 14/32
확인하고자하는모든변경사항을포함하고있는폴더안에서마우스오른쪽버튼을클릭합니다. 수정내역확인을선택합니다. 변경사항을확인합니다. * TortoiseSVN 명령실행에대하여지금까지해온것처럼작업용복사본에서어떠한항목도선택하지않은상태로마우스오른쪽버튼을눌러나오는메뉴에서 TortoiseSVN 명령을실행하면이명령은해당폴더에대해서실행됩니다. 폴더에대한명령실행은대부분의경우폴더에포함된모든항목에대해서도영향을줍니다. trunk 폴더에대해서명령이 실행됩니다. 15/32
반면에특정항목을선택한후마우스오른쪽버튼을눌러나오는메뉴에서 TortoiseSVN 명령을실행하 면이명령은선택된항목에대해서만실행이됩니다. 선택된폴더및파일들에 대해서만명령이실행됩니 다. 4. TortoiseSVN 속성다루기 Subversion에서는저장소에저장된폴더및파일에대하여임의의이름 / 값형태로정보를설정할수있습니다. 이렇게설정되는정보를속성이라고합니다. 속성은아래와같이윈도우탐색기에서폴더또는파일의속성을선택하여나오는대화상자에서 Subversion 탭을선택하여설정할수있습니다. 속성도버전관리가되기때문에만약속성을추가, 수정또는삭제하였다면커밋을통해이를저장소에반영해야합니다. 속성을선택합니다. 16/32
설정된속성리스트 속성이름 체크하면현재폴더 하위의모든폴더및 파일로적용됩니다. 속성값 속성이름중 svn: 으로시작하는이름은 Subversion에의해예약된이름으로 Subversion에의해특별한의미로사용됩니다. 따라서임의의목적으로사용할수없습니다. 마찬가지로 tsvn: 으로시작하는이름은 TortoiseSVN에의해예약되었고 bugtraq: 으로시작하는이름은버그추적도구를위해예약되었기때문에임의로사용할수없습니다. 이들예약된속성이름의용도에대한자세한설명은관련도움말을참고하기바랍니다. 여기서는이들중자주사용되는두가지를소개하도록하겠습니다. 4.1 무시목록사용하기작업용복사본에서작업을하다보면그결과로자동으로생성되는폴더와파일들이존재할수있습니다. 예를들어텍스트에디터에서자동으로생성해주는백업파일이나컴파일러에의해컴파일된실행파일등이있습니다. 이러한폴더와파일들은대부분없어도되기때문에저장소에저장되지는않습니다. 그러나 TortoiseSVN은이러한불필요한파일들을구분할수없기때문에항상아직버전관리가되지않은다른중요한파일들과함께관리하고표시하여줍니다. 이러한불필요한폴더와파일들을무시하게하려면이런항목들을무시목록에추가하면됩니다. 아래그림과같이무시할폴더및파일들을선택한후마우스오른쪽버튼을눌러나오는메뉴에서 TortoiseSVN -> 무시목록에추가 -> [ 파일이름 ] 또는 *.[ 확장자 ] 를선택한후커밋합니다. 이때 *.[ 확장자 ] 형태를선택하면해당확장자의모든파일이무시됩니다. 17/32
무시목록에추가할폴더및 파일들을선택한후마우스 오른쪽버튼을클릭합니다. 무시목록에추가를사용하여무 시목록에추가한후커밋합니다. 무시목록은폴더의 svn:ignore 속성으로관리됩니다. 무시목록을설정한후무시목록에추가된폴더및파일들의부모폴더에서 Subversion 속성을보면다음과같이 svn:ignore 속성이름으로값이설정되어있는것을볼수있습니다. 따라서임의로 svn:ignore 속성을수정하면무시목록을마음대로관리할수있습니다. 특히무시목록은하위폴더에영향을주지않기때문에만약모든하위폴더에도같은무시목록을사용하고싶다면 svn:ignore 속성을수정하고반복 (C) 체크박스를체크하여적용한후커밋하면됩니다. 설정된무시목록 리스트 18/32
4.2 키워드사용하기키워드속성을사용하면텍스트파일에파일의리비전번호와마지막으로저장소에저장된시간등의정보를자동으로작성하도록할수있습니다. 예를들어다음과같이텍스트파일을작성합니다. $LastChangedDate$ $LastChangedRevision$ $LastChangedBy$ $HeadURL$ $Id$ 그다음해당텍스트파일의 svn:keywords 속성을아래와같이설정합니다. 그리고나서커밋하면텍스트파일의내용이아래와같이자동으로변경되는것을볼수있습니다. $LastChangedDate: 2005-03-14 23:03:08 +0900 (Mon, 14 Mar 2005) $ $LastChangedRevision: 14 $ $LastChangedBy: Administrator $ $HeadURL: file:///d:/svnroot/trunk/keywordtest.txt $ $Id: KeywordTest.txt 14 2005-03-14 14:03:08Z Administrator $ 키워드는 $Keyword$ 형식으로되어있는문자열로서 svn:keywords 속성설정여부에따라커밋시자동으로특정정보로대체됩니다. 텍스트파일에사용할수있는키워드는다음과같습니다. LastChangedDate LastChangedRevision LastChangedBy HeadURL 파일이커밋되어저장소에서변경되었던시점에서의마지막수정시간을나타냅니다. Date 로줄여쓸수있습니다. 파일이커밋되어저장소에서변경된후의리비전번호를나타냅니다. Revision 또는 Rev로줄여쓸수있습니다. 파일을커밋하여저장소로반영한사용자를나타냅니다. Author로줄여쓸수있습니다. 저장소에있는파일의가장최신버전의전체 URL을나타냅니다. URL로줄여쓸수있습니다. Id 이키워드는다른키워드들이나타내는정보를압축조합하여표시합니다. 19/32
5. TortoiseSVN 리비전다루기 5.1 로그보기지금까지기록된모든수정사항에대한로그를보려면로그를볼폴더및파일들을선택한후마우스오른쪽버튼을눌러나오는메뉴에서 TortoiseSVN -> 로그보기를선택합니다. 이경우선택된폴더및파일들에대한로그만표시됩니다. 만약모든로그를보고싶다면작업용복사본의최상위폴더를선택한후로그보기를실행하면됩니다. 로그를볼폴더및파일들을 선택한후마우스오른쪽버 튼을클릭합니다. 로그보기를선택합니다. 리비전리스트 리비전 로그메시지 해당리비전의 수정내역 리비전및파일에서마우스오른쪽버튼을눌러나오는메뉴로여러가지작업을수행할수있습니다. 20/32
5.2 원하는리비전체크아웃하기 SVN 체크아웃대화상자에서아래와같이체크아웃하기를원하는리비전번호를지정하면특정리비전을체크아웃할수있습니다. 체크아웃할리비전번호를 입력합니다. * TortoiseSVN 체크아웃과폴더에대하여 TortoiseSVN을사용하여체크아웃할때항상저장소의가장최상위폴더만을체크아웃할수있는것은아닙니다. TortoiseSVN의체크아웃된각각의폴더들은부모폴더와어떠한의존관계도없기때문에독립적으로존재할수있습니다. 따라서만약체크아웃되는폴더및파일들이상당히많이있다면작업에필요한폴더만지정해서체크아웃할수있습니다. 원하는폴더만체크아웃 할수있습니다. 5.3 익스포트 익스포트는.svn 폴더가없는복사본을저장소로부터가져옵니다. 윈도우탐색기에서마우스오른쪽버튼 을눌러나오는메뉴에서 TortoiseSVN -> 익스포트 를선택합니다. 익스포트 를선택합니다. 21/32
5.4 저장소브라우저저장소의폴더및파일의트리구조를확인하고직접수정및삭제등의작업을하고싶다면저장소브라우저를사용하면됩니다. 윈도우탐색기에서마우스오른쪽버튼을눌러나오는메뉴에서 TortoiseSVN -> 저장소브라우저를선택합니다. 저장소브라우저를선택합니다. 저장소 URL 을입력합니다. 여기를클릭하면리비전 을선택할수있습니다. 항목에서마우스오른쪽버튼을눌러나오는메뉴로여러가지작업을수행할수있습니다. 22/32
6. TortoiseSVN 여러사용자와사용하기 Subversion의저장소는동시에여러사용자에의해사용될수있습니다. 즉여러사용자가동일한저장소로부터동일한작업용복사본을받아수정작업등을거친후동시다발적으로커밋하여저장소를변경시킬수있습니다. 따라서저장소를혼자만사용하지않는다면다른사용자에의해커밋된저장소의변경사항을수시로확인하여자신의작업용복사본에반영해야합니다. 6.1 업데이트하기 (SVN 업데이트 ) 저장소로부터현재의작업용복사본을업데이트하려면업데이트할항목들을선택한후마우스오른쪽버튼을누르거나업데이트할모든항목들을포함하고있는폴더안에서마우스오른쪽버튼을눌러나오는메뉴에서 SVN 업데이트를선택합니다. 마우스오른쪽버튼을클릭하여나오는메뉴에서 SVN 업데이트를선택합니다. 6.2 충돌처리하기파일을수정한후커밋하거나업데이트할때이미다른사용자가해당파일을먼저수정하고커밋하였다면그리고서로의수정사항이안전하게병합될수없다면충돌이발생합니다. 충돌이발생하면자신의파일과저장소에저장된파일사이의충돌사항을확인하여해결해야합니다. 충돌된파일. 마우스로더블 클릭하면충돌사항을편집할 수있습니다. 충돌된파일과추가 로생성된파일들 23/32
Subversion 은충돌이발생할경우충돌된파일에대하여각각 3 개의추가적인파일을생성합니다. 생성되 는파일들은아래와같습니다. filename.ext.mine 저장소로커밋하려던사용자의원본파일입니다. filename.ext.roldrev filename.ext.mine 의수정전원본이되는파일입니다. filename.ext.rnewrev filename.ext.mine 과충돌을일으킨저장소에저장된새로운버전의파일입 니다. 충돌을해결하려면충돌된파일을선택한후마우스오른쪽버튼을눌러나오는메뉴에서 TortoiseSVN -> 충돌상황편집을선택합니다. 충돌상황편집을선택하면 TortoiseSVN은내부병합도구인 TortoiseMerge를실행하여충돌사항을확인하고편집할수있도록합니다. 그러나현재 TortoiseMerge는한글처리에문제가있습니다. 따라서여기서는 WinMerge라는외부병합도구를설정하여사용하였습니다. 충돌된파일을선택한 후마우스오른쪽버튼 을클릭합니다. 충돌상황편집을선택합니다. 관련파일을비교하여충돌사 항을확인하고수정합니다. 24/32
병합도구를사용하여충돌사항을확인하고편집을완료하였다면아래와같이 TortoiseSVN -> 충돌해결됨 을선택하여충돌상황처리를완료합니다. 충돌된파일을선택한 후마우스오른쪽버튼 을클릭합니다. 충돌해결됨을선택합니다. 충돌상황이해결되어파일의상태가변경되었습니다. * WinMerge에대하여 WinMerge는파일의비교및병합에사용되는오픈소스소프트웨어입니다. 현재 TortoiseSVN에서제공하고있는기본파일비교및병합프로그램인 TortoiseMerge가한글을제대로지원하고있지않기때문에 WinMerge를대신사용하면유용합니다. WinMerge는 http://winmerge.org에서다운로드받아설치할수있습니다. WinMerge 홈페이지 WinMerge를다운로드받아설치하였다면아래와같이 TortoiseSVN 설정대화상자의비교 / 병합탭에서 WinMerge를 TortoiseSVN의파일비교및병합작업에사용되는기본프로그램으로설정할수있습니다. 25/32
설정을선택합니다. %WinMerge 경로 %WinMergeU.exe %mine %base 를입력합니다. %WinMerge 경로 %WinMergeU.exe %mine %theirs %merged 를입력합니다. 위와같이설정을하였다면이제 WinMerge 는충돌상황해결을위한병합프로그램으로서사용될뿐아 니라파일비교가필요한다양한상황에서도사용됩니다. 예를들어아래와같이파일을수정한후 TortoiseSVN -> 비교를실행하면해당파일의현재수정사항을확인할수있습니다. 확인할파일을선택한후 마우스오른쪽버튼을클 릭합니다. 비교를선택합니다. WinMerge 를통해파일을 비교하고수정사항을확인 합니다. 26/32
6.3 패치사용하기패치는현재의작업용복사본에대한모든수정사항을저장하고있는파일입니다. 패치는주로저장소에대한쓰기권한이없는사용자가쓰기권한이있는관리자에게자신의수정사항을보내기위해사용합니다. 패치를생성하려면아래와같이수정사항을모두포함하고있는폴더안에서마우스오른쪽버튼을눌러나오는메뉴에서 TortoiseSVN -> 패치생성 을선택합니다. 수정사항을모두포함하고있 는폴더안에서마우스오른 쪽버튼을클릭합니다. 패치생성 을선택합니다. 생성할패치의이름을입력합니 다. 패치에는.diff 또는.patch 확장자를사용합니다. 관리자는패치를받은후아래와같이패치생성에사용된폴더와동일한폴더안에서 TortoiseSVN -> 패치 적용 을선택하여패치를적용할수있습니다. 패치생성에사용된폴더와동 일한폴더안에서마우스오 른쪽버튼을클릭합니다. 패치적용 을선택합니다. 27/32
적용할패치파일을선택합니다. 파일패치윈도우에서마우스오른쪽버튼을눌러나오는메뉴에서모두패치를선택한후 TortoiseMerge를종료합니다. 패치가적용된모습. 패치파일은속성에대한수정사항과바이너리파일에대한수정사항은포함하지않습니다. 따라서이와관 련된수정사항은따로전달하여수동으로적용해야합니다. 28/32
6.4 브랜치 / 태그사용하기저장소안에있는폴더및파일들에대하여따로복사본을만들어사용하고싶다면브랜치 / 태그를사용합니다. 이때이들복사본을어떻게사용하느냐에따라서브랜치또는태그로구분할수있습니다. 브랜치는새로운복사본을만들어기존폴더및파일들을건드리지않으면서테스트등의목적으로임의의수정작업을하고자할때사용합니다. 브랜치는관례에따라저장소의루트폴더아래의 branches라는폴더에서관리됩니다. 따라서먼저아래와같이 branches 폴더를생성합니다. branches 폴더를저장소의루트폴더아래에추가합니다. 이제브랜치를만들려면브랜치를만들폴더를선택한후마우스오른쪽버튼을눌러나오는메뉴에서 TortoiseSVN -> 브랜치 / 태그 를선택합니다. 여기서는 trunk 폴더를브랜치로만들었습니다. 브랜치를만들폴더를선택한후마우스오른쪽버튼을클릭합니다. 브랜치 / 태그 를선택합니다. 새로운브랜치에대한경로를 입력합니다. 29/32
확인을클릭합니다. 이제 branches 폴더안에서 SVN 업데이트를실행하면 branchtest_v0.0.1 이라는이름으로 trunk 폴더의복사본이생긴것을볼수있습니다. 태그는저장소의특정리비전을따로버전번호를부여하여기록하고자할때사용합니다. 예를들어프로젝트가버전 1.0.0 이되어배포될예정이라면아래와같이버전 1.0.0 프로젝트의태그를만들어관리할수있습니다. 태그도관례에따라 tags 폴더에서관리되기때문에태그를만들기전에먼저 tags 폴더를추가한후진행합니다. 태그는내부적으로브랜치와동일하기때문에만드는방법도브랜치와동일합니다. 태그를만들폴더를선택한 후마우스오른쪽버튼을클 릭합니다. 브랜치 / 태그 를선택합니다. 태그에대한경로를입력합니다. 그 이후작업은브랜치와동일합니다. 30/32
태그는한번만들었으면절대수정하지말아야합니다. 그러나만약버그등에의하여부득이태그를수정하여야한다면, 먼저해당태그에대한브랜치를만들어수정하고, 수정이완료되었을경우이를새로운태그로만드는방법을써야합니다. 예를들어위에서만든태그같은경우 release_v1.0.0의버그를수정해야한다면, 브랜치를만들어버그수정을완료한후 release_v1.0.1 이라는새로운태그를만들수있습니다. Subversion이브랜치 / 태그를만들때폴더와파일들을실제로복사하는것은아닙니다. 브랜치 / 태그는단지원본이되는폴더및파일들에대한링크만을저장합니다. 따라서복사본의증가에따른하드디스크용량증가문제를걱정하지않아도됩니다. * 저장소의폴더구조에대하여위에서본것처럼브랜치와태그는관례적으로 branches 폴더와 tags 폴더안에서관리한다고하였습니다. 이와비슷하게 Subversion은사용자가저장소의주요작업폴더및파일들을저장소에저장할때 trunk 라는폴더를만들어저장할것을권장하고있습니다. 따라서만약저장소에하나의프로젝트만있다면저장소의루트폴더는다음과같은세개의폴더를포함하게됩니다. /trunk /branches /tags 만약저장소에하나이상의프로젝트가있다면다음과같이각각의프로젝트별로 trunk, branches, tags 폴더를만들수있습니다. /engine/trunk /engine/branches /engine/tags /gui/trunk /gui/branches /gui/tags 또는다음과같이 trunk, branches, tags 폴더안에각각프로젝트폴더를만들수있습니다. /trunk/engine /trunk/gui /branches/engine /branches/gui /tags/engine /tags/gui 저장소에저장된프로젝트들이서로긴밀하게연관되어있다면두번째방법을사용하는것이편리합니 다. 저장소로부터체크아웃할때는 trunk 폴더, branches 폴더안의브랜치들, tags 폴더안의태그들 중필요한폴더만선택적으로체크아웃하여사용합니다. 31/32
7. 참고자료 http://tortoisesvn.tigris.org (TortoiseSVN 홈페이지 ) http://subversion.tigris.org (Subversion 홈페이지 ) http://svnbook.red-bean.com (Subversion 온라인책 ) http://winmerge.org (WinMerge 홈페이지 ) TortoiseSVN 도움말 32/32