<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ioriy2k&#039;s Knowledgebase &#187; Subversion</title>
	<atom:link href="http://ioriy2k.pe.kr/archives/tag/subversion/feed" rel="self" type="application/rss+xml" />
	<link>http://ioriy2k.pe.kr</link>
	<description>ioriy2k의 여러가지 지식 저장소</description>
	<lastBuildDate>Wed, 16 May 2012 16:35:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Nautilus에서 Source Code를 Subversion으로 관리하자 : RabbitVCS (Part 3)</title>
		<link>http://ioriy2k.pe.kr/archives/3179</link>
		<comments>http://ioriy2k.pe.kr/archives/3179#comments</comments>
		<pubDate>Wed, 14 Sep 2011 00:00:35 +0000</pubDate>
		<dc:creator>ioriy2k</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Linux, Just For Fun]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://ioriy2k.pe.kr/?p=3179</guid>
		<description><![CDATA[Ubuntu Oneiric Ocelot 11.10에서 Test 완료 (2012-01-05) &#8220;Nautilus에서 Source Code를 Subversion으로 관리하자 : RabbitVCS&#8221;의 마지막 Post로 이전 Part 1, Part 2에 이어서 Branch/Tag, Merge에 대해서 설명하도록 하겠습니다. 예제를 가지고 설명하기 때문에 이전 Post를 간단하게 읽어보기를 권합니다. 14. Branch/Tag Project를 진행하다가 새로운 기능을 추가하기 위해서 Test를 위한 Project를 만들어야 할 때가 있습니다. Pilot Project로 Test하는 경우도 [...]]]></description>
			<content:encoded><![CDATA[<blockquote>
<ul>
<li>Ubuntu Oneiric Ocelot 11.10에서 Test 완료 (2012-01-05)</li>
</ul>
</blockquote>
<p>&#8220;Nautilus에서 Source Code를 Subversion으로 관리하자 : RabbitVCS&#8221;의 마지막 Post로 이전 <a href="http://ioriy2k.pe.kr/archives/2628" title="Nautilus에서 Source Code를 Subversion으로 관리하자 : RabbitVCS (Part 1)" target="_blank">Part 1</a>, <a href="http://ioriy2k.pe.kr/archives/2899" title="Nautilus에서 Source Code를 Subversion으로 관리하자 : RabbitVCS (Part 2)" target="_blank">Part 2</a>에 이어서 Branch/Tag, Merge에 대해서 설명하도록 하겠습니다. 예제를 가지고 설명하기 때문에 이전 Post를 간단하게 읽어보기를 권합니다. <img src='http://ioriy2k.pe.kr/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<h3>14. Branch/Tag</h3>
<p>Project를 진행하다가 새로운 기능을 추가하기 위해서 Test를 위한 Project를 만들어야 할 때가 있습니다. Pilot Project로 Test하는 경우도 있지만 현재 Project Source를 가지고 Test하면서 그 Code를 Subversion으로 관리하는 경우가 대부분일 것입니다.</p>
<p>이럴 때 사용하는 것이 Branch라는 기능입니다. Branch는 사실 기능이 아니라 개념으로써, 설명한 것과 같이 Project의 새 기능 추가 Test 등의 이유로 현재 Project 저장소에 있는 Code를 그대로 복제하여 새로운 곁가지 Project를 만드는 것을 의미합니다.</p>
<p>Branch Project를 통해서 새 기능을 추가하거나 Test한다고 하더라도 Trunk에 존재하는 최신 Source에 대해서는 영향이 미치지 않으며 나중에 Branch에 있는 Code를 Trunk에 통합할 수도 있습니다.</p>
<p>Hello Project의 Branch를 만들어 보면서 그 기능을 간단히 알아봅시다.</p>
<p><span id="more-3179"></span></p>
<div id="attachment_3149" class="wp-caption aligncenter" style="width: 294px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/14-RabbitVCS-Branche.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/14-RabbitVCS-Branche-284x300.png" alt="RabbitVCS - Branch" title="RabbitVCS - Branch" width="284" height="300" class="size-medium wp-image-3149" /></a><p class="wp-caption-text">RabbitVCS - Branch</p></div>
<p>Hello Project Folder 내의 Branches Folder에서 Mouse 오른쪽 Button Popup을 띄운 후, RabbitVCS -> Branch/Tag를 Click합니다.</p>
<div id="attachment_3150" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/15-BrancheAndTag-Dialog.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/15-BrancheAndTag-Dialog-300x240.png" alt="Branch/Tag Dialog" title="Branch/Tag Dialog" width="300" height="240" class="size-medium wp-image-3150" /></a><p class="wp-caption-text">Branch/Tag Dialog</p></div>
<p>Branch/Tag Dialog에서는 다음과 같은 내용을 설정할 수 있습니다. (위의 그림은 Hello Project의 trunk를 branches/hello-dev로 Branch 하는 경우를 나타냄)</p>
<ul>
<li>Repository : From &#8211; Source를 가져올 Project 저장소를 나타냅니다. To &#8211; 가져온 Source를 저장할 Directory를 설정합니다.</li>
<li>Create copy from : Source를 Project 저장소에서 가져올 때 어느 Source를 가져올 지를 결정하는 것으로 HEAD를 선택하면 최신을, Number를 선택하면 원하는 Revision을 가져올 수 있습니다.</li>
<li>Add message : Branch에 대한 Log Message를 입력합니다.</li>
</ul>
<div id="attachment_3151" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/16-Completed-branch.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/16-Completed-branch-300x176.png" alt="Completed branch" title="Completed branch" width="300" height="176" class="size-medium wp-image-3151" /></a><p class="wp-caption-text">Completed branch</p></div>
<p>Branch/Tag Dialog에서 설정한 후 확인을 누르면, 위의 그림과 같이 Hello Project의 Branch인 hello-dev가 생성됩니다.</p>
<div id="attachment_3152" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/17-branched-hello.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/17-branched-hello-300x193.png" alt="Branched hello" title="Branched hello" width="300" height="193" class="size-medium wp-image-3152" /></a><p class="wp-caption-text">Branched hello</p></div>
<p>Hello Project의 branches/hello-dev Folder안에 현재 trunk의 최신 Source인 test.c가 존재하는 것을 확인할 수 있습니다. 이제 Branch가 완료되었으니 hello-dev에서 새 기능을 위한 Code를 작성하면 됩니다.</p>
<div id="attachment_3153" class="wp-caption aligncenter" style="width: 304px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/18-RabbitVCS-Tag.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/18-RabbitVCS-Tag-294x300.png" alt="RabbitVCS - Tag" title="RabbitVCS - Tag" width="294" height="300" class="size-medium wp-image-3153" /></a><p class="wp-caption-text">RabbitVCS - Tag</p></div>
<p>이번에는 Tag에 대해서 알아보도록 하겠습니다. Project가 어느 정도 안정화 되어 Version Up을 할 경우 이것을 배포하거나 따로 Source를 관리할 필요가 생기게 됩니다. 이럴 때 사용하는 것이 Tag 기능으로 간단하게 현재 trunk의 Source를 복제하여 Project의 Tag Folder 안에 관리하는 것을 의미합니다. </p>
<p>Tag를 사용하기 위해서는 Branch와 동일하게 Project의 tags Folder 안에서 Mouse 오른쪽 Button Popup을 띄운 후, RabbitVCS -> Branch/Tag를 Click합니다.</p>
<div id="attachment_3154" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/19-BranchAndTag-Dialog.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/19-BranchAndTag-Dialog-300x240.png" alt="Branch/Tag Dialog" title="Branch/Tag Dialog" width="300" height="240" class="size-medium wp-image-3154" /></a><p class="wp-caption-text">Branch/Tag Dialog</p></div>
<p>Branch/Tag Dialog에서 Tag를 위해서는 Repository의 To에 대한 경로를 Project tags Folder내에 경로로 지정해 주면 됩니다. (위의 그림은 trunk의 현재 최신 Source를 tags/hello-1.0으로 복제하는 경우를 나타냄)</p>
<div id="attachment_3155" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/20-Completed-tag.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/20-Completed-tag-300x176.png" alt="Completed tag" title="Completed tag" width="300" height="176" class="size-medium wp-image-3155" /></a><p class="wp-caption-text">Completed tag</p></div>
<p>Tag가 완료되면 hello-1.0이 tags Folder 안에 생성됩니다.</p>
<div id="attachment_3157" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/21-tagged-hello.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/21-tagged-hello-300x193.png" alt="Tagged hello" title="Tagged hello" width="300" height="193" class="size-medium wp-image-3157" /></a><p class="wp-caption-text">Tagged hello</p></div>
<p>Tag 완료 후, tags/hello-1.0의 모습입니다. </p>
<div id="attachment_3158" class="wp-caption aligncenter" style="width: 298px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/22-Commit-branche-and-tag.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/22-Commit-branche-and-tag-288x300.png" alt="Commit branch and tag" title="Commit branch and tag" width="288" height="300" class="size-medium wp-image-3158" /></a><p class="wp-caption-text">Commit branch and tag</p></div>
<p>Branch와 Tag가 완료되었지만 여기서 끝난 것은 아닙니다. Project 저장소에는 Branch/Tag를 한 Source가 아직 등록되지 않았기 때문에 생성된 Folder를 Project 저장소에 등록하기 위해 반드시 Commit을 해야 합니다. </p>
<p>위의 그림은 Commit Dialog의 예로 Branch를 통해 hello-dev가, Tag를 통해 hello-1.0이 생성된 것을 Commit하는 모습입니다. Commit이 완료되면 Branch와 Tag로 생성된 Directory가 Project 저장소에 적용됩니다.</p>
<h3>15. Merge</h3>
<p>위에서 알아봤던 Branch 기능으로 새 Branch를 만들어 새 기능의 개발을 끝내게 되었다면, 이제 원래 Source Tree에 합쳐서 새 기능이 적용되도록 만들어야 할 것입니다. 이 경우에 사용하는 것이 바로 Merge 기능입니다.</p>
<p>이전에 Branch로 만들었던 hello-dev를 가지고 Merge 기능에 대해서 알아봅시다.</p>
<p>branches/hello-dev/test.c를 다음과 같이 Postfix 연산을 Function으로 따로 만들어 저장합시다.</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #993333;">int</span> postfix<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>a<span style="color: #009900;">&#41;</span> <br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">++;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #993333;">int</span> a <span style="color: #339933;">=</span> <span style="color: #0000dd;">7</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;a++ == %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> postfix<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>a<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<table width="100%">
<tr>
<td width="50%"><div id="attachment_3190" class="wp-caption aligncenter" style="width: 260px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/01-RabbitVCS-Commit-branched-source.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/01-RabbitVCS-Commit-branched-source-300x290.png" alt="RabbitVCS - Commit branched source" title="RabbitVCS - Commit branched source" width="250" height="240" class="size-medium wp-image-3190" /></a><p class="wp-caption-text">RabbitVCS - Commit branched source</p></div></td>
<td width="50%"><div id="attachment_3191" class="wp-caption aligncenter" style="width: 260px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/02-Commit-Dialog.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/02-Commit-Dialog-288x300.png" alt="Commit Dialog" title="Commit Dialog" width="250" height="260" class="size-medium wp-image-3191" /></a><p class="wp-caption-text">Commit Dialog</p></div></td>
</tr>
</table>
<p>이제 저장된 branches/hello-dev/test.c를 Commit하여 Project 저장소에 적용시킵니다.</p>
<div id="attachment_3192" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/03-RabbitVCS-Merge.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/03-RabbitVCS-Merge-300x234.png" alt="RabbitVCS - Merge" title="RabbitVCS - Merge" width="300" height="234" class="size-medium wp-image-3192" /></a><p class="wp-caption-text">RabbitVCS - Merge</p></div>
<p>이제 hello-dev와 trunk의 현재 Source를 합쳐보도록 하겠습니다. trunk Folder를 선택한 다음, Mouse 오른쪽 Button Popup에서 RabbitVCS -> Merge를 Click합니다.</p>
<div id="attachment_3193" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/04-Merge-Type.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/04-Merge-Type-300x269.png" alt="Merge Type" title="Merge Type" width="300" height="269" class="size-medium wp-image-3193" /></a><p class="wp-caption-text">Merge Type</p></div>
<p>Merge 과정을 위한 Dialog가 표시됩니다. Step1 에서는 Merge Type을 선택할 수 있는데 각 Type은 다음과 같습니다.</p>
<ul>
<li>Merge a range of revisions : 대상 Folder에 하나의 Source Tree를 병합합니다. 1개의 branch에서 원하는 revision의 변경부분만 대상 Folder에 통합할 수도 있습니다.</li>
<li>Merge two differenct trees : 대상 Folder에 2개의 다른 Source Tree를 병합합니다. 2개의 branch의 내용을 병합하기 위해서 사용합니다.</li>
</ul>
<p>여기에서는 1개의 branch를 병합하는 것이므로 Merge a range of revisions를 선택하고 앞으로를 누릅니다.</p>
<div id="attachment_3194" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/05-Merge-a-range-of-revisions.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/05-Merge-a-range-of-revisions-300x269.png" alt="Merge a range of revisions" title="Merge a range of revisions" width="300" height="269" class="size-medium wp-image-3194" /></a><p class="wp-caption-text">Merge a range of revisions</p></div>
<p>Step 2에서는 합칠 branch의 정보를 입력합니다. 각 Field에는 다음을 입력합니다.</p>
<ul>
<li>URL to merge from : 대상 Folder에 통합할 Branch의 Project 저장소 URL을 입력합니다.</li>
<li>Revision Range : 통합할 Branch에서 선택한 Revision만을 대상 Folder에 적용할 수 있습니다. comma(,)로 여러개를 입력할 수 있고, dash(-)는 범위를 나타냅니다. 옆의 돋보기 Icon을 Click하면 Commit Log를 통해서 원하는 Revision을 선택할 수 있도록 도와줍니다.
<p><div id="attachment_3195" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/06-Revision-Log.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/06-Revision-Log-300x237.png" alt="Revision Log" title="Revision Log" width="300" height="237" class="size-medium wp-image-3195" /></a><p class="wp-caption-text">Revision Log</p></div>
</li>
</ul>
<p>대부분의 경우 Branch가 된 시점에서 부터 최신 Revision까지를 적용하게 됩니다. Commit Log를 보니 Revision 6에서 branch가 되었기 때문에 Revision Range에 6-HEAD(Revision 6에서 최신 Revision까지)를 입력해서 병합해 봅시다. 모두 입력했다면 앞으로를 누릅니다.</p>
<div id="attachment_3196" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/07-Final-Options.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/07-Final-Options-300x269.png" alt="Final Options" title="Final Options" width="300" height="269" class="size-medium wp-image-3196" /></a><p class="wp-caption-text">Final Options</p></div>
<p>Step3에서는 Option을 설정할 수 있습니다. Recursive(하위 Folder까지 병합)는 반드시 선택합니다. Test Merge를 눌러서 Merge 설정이 제대로 되었는지 그리고 병합시 문제가 없는지를 Test해 봅시다.</p>
<div id="attachment_3197" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/08-Merge-Dry-Test.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/08-Merge-Dry-Test-300x176.png" alt="Merge Dry Test" title="Merge Dry Test" width="300" height="176" class="size-medium wp-image-3197" /></a><p class="wp-caption-text">Merge Dry Test</p></div>
<p>Test Merge가 제대로 수행이 되었다면 위와 같이 merge_completed Message가 표시될 것입니다. 이상이 없다면 확인을 누른 후, Merge Dialog에서 적용을 누릅니다.</p>
<div id="attachment_3198" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/09-Merge-Complete.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/09-Merge-Complete-300x176.png" alt="Merge Complete" title="Merge Complete" width="300" height="176" class="size-medium wp-image-3198" /></a><p class="wp-caption-text">Merge Complete</p></div>
<p>Test Merge가 성공적으로 끝났기 때문에 Merge도 위와 같이 정상적으로 이루어질 것입니다.</p>
<div id="attachment_3199" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/10-Nautilus-Merged-trunk-folder.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/10-Nautilus-Merged-trunk-folder-300x193.png" alt="Nautilus - Merged trunk folder" title="Nautilus - Merged trunk folder" width="300" height="193" class="size-medium wp-image-3199" /></a><p class="wp-caption-text">Nautilus - Merged trunk folder</p></div>
<p>Nautilus에서 병합된 trunk Folder를 확인해봤습니다. 저의 경우는 branch된 이후로 trunk의 Source가 변경되었기 때문에 Conflict가 발생했네요. 생성된 각 File은 다음과 같은 의미를 갖고 있습니다.</p>
<ul>
<li>test.c.merge-left.r6 : Merge Dialog에서 입력했던 Revision Range의 시작 Revision의 Source입니다.</li>
<li>test.c.merge-right.r15 : Merge Dialog에서 입력했던 Revision Range의 끝 Revision의 Source입니다.</li>
<li>test.c.working : 병합되기 전 대상 Folder에 존재한 Source입니다.</li>
</ul>
<p>Merge로 일어난 Conflict는 Update로 발생한 Conflict와 마찬가지로 해당 Source(여기서는 test.c)를 수정한 다음, Resolve 기능을 사용하면 문제가 해결됩니다.</p>
<div id="attachment_3200" class="wp-caption aligncenter" style="width: 298px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/11-Commit-Dialog.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/09/11-Commit-Dialog-288x300.png" alt="Commit Dialog" title="Commit Dialog" width="288" height="300" class="size-medium wp-image-3200" /></a><p class="wp-caption-text">Commit Dialog</p></div>
<p>Merge가 완료되었다면 Project 저장소에 적용하기 위해 Commit을 실행합니다. Commit까지 정상적으로 완료되었다면 Merge에 대한 모든 과정이 끝나게 됩니다.</p>
<h3>16. GEdit &#8211; RabbitVCS Plugin</h3>
<div id="attachment_3162" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/26-Gedit-RabbitVCS-Plugin.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/26-Gedit-RabbitVCS-Plugin-300x168.png" alt="Gedit - RabbitVCS Plugin" title="Gedit - RabbitVCS Plugin" width="300" height="168" class="size-medium wp-image-3162" /></a><p class="wp-caption-text">Gedit - RabbitVCS Plugin</p></div>
<p>마지막으로 Gedit를 위한 RabbitVCS Plugin을 소개합니다. RabbitVCS Plugin을 설치하면 Subversion으로 관리되는 Source를 Gedit로 편집할 경우 Gedit 상에서 RabbitVCS의 기능을 편리하게 사용할 수 있습니다.</p>
<p>설치를 위해서 Terminal에서 다음과 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> rabbitvcs-gedit</div></td></tr></tbody></table></div>
<div id="attachment_3163" class="wp-caption aligncenter" style="width: 242px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/27-Gedit-Preferences.png" rel="lightbox[3179]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/27-Gedit-Preferences-232x300.png" alt="Gedit - Preferences" title="Gedit - Preferences" width="232" height="300" class="size-medium wp-image-3163" /></a><p class="wp-caption-text">Gedit - Preferences</p></div>
<p>설치된 RabbitVCS Plugin을 사용하기 위해서는 Gedit를 실행한 다음, 편집 -> 기본 설정 -> 플러그인 Tab에서 RabbitVCS를 Check한 후 닫기를 누르면 됩니다.</p>
<h3>17. 마치면서&#8230;</h3>
<p>이상으로 RabbitVCS를 설치하는 방법과 각 기능에 대해서 간단하게 알아보았습니다. </p>
<p>Source Code를 Subversion으로 관리할 때 IDE에서 제공하는 기능을 주로 사용함과 동시에 Nautilus에서 편하게 관리할 수 있는 RabbitVCS를 사용한다면 좀 더 편리하게 Source를 관리할 수 있을 것이라 생각합니다. </p>
<p>그럼 즐거운 Programming 생활(?)이 되시길.. <img src='http://ioriy2k.pe.kr/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
  
<div class="wp_license">
<p><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/"><img src="http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png" alt="Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea" class="alignleft" style="margin-top:4px;" />
</a>This work  is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/">Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea</a>.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://ioriy2k.pe.kr/archives/3179/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nautilus에서 Source Code를 Subversion으로 관리하자 : RabbitVCS (Part 2)</title>
		<link>http://ioriy2k.pe.kr/archives/2899</link>
		<comments>http://ioriy2k.pe.kr/archives/2899#comments</comments>
		<pubDate>Wed, 07 Sep 2011 00:00:44 +0000</pubDate>
		<dc:creator>ioriy2k</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Linux, Just For Fun]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://ioriy2k.pe.kr/?p=2899</guid>
		<description><![CDATA[Ubuntu Oneiric Ocelot 11.10에서 Test 완료 (2012-01-05) 이번 Post에서는 Part 1에 이어서 RabbitVCS를 통해서 Nautilus에서 Source Code를 Subversion으로 관리하는 방법을 알아보도록 하겠습니다. 예제를 가지고 기능을 설명하기 때문에 이전 Post를 간단하게 읽어보는 것이 이해하기 쉬울 것입니다. 8. Diff Project의 Source를 고친 후에 고치기 전과 어느 부분이 변경되었는지 궁금할 때가 있습니다. 특히 Project의 Source가 방대할 경우 Commit [...]]]></description>
			<content:encoded><![CDATA[<blockquote>
<ul>
<li>Ubuntu Oneiric Ocelot 11.10에서 Test 완료 (2012-01-05)</li>
</ul>
</blockquote>
<p>이번 Post에서는 <a href="http://ioriy2k.pe.kr/archives/2628" target="_blank">Part 1</a>에 이어서 RabbitVCS를 통해서 Nautilus에서 Source Code를 Subversion으로 관리하는 방법을 알아보도록 하겠습니다. 예제를 가지고 기능을 설명하기 때문에 이전 Post를 간단하게 읽어보는 것이 이해하기 쉬울 것입니다. <img src='http://ioriy2k.pe.kr/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<h3>8. Diff</h3>
<p>Project의 Source를 고친 후에 고치기 전과 어느 부분이 변경되었는지 궁금할 때가 있습니다. 특히 Project의 Source가 방대할 경우 Commit Log를 작성할 때 어떤 부분을 변경했는지 제대로 기억나지 않거나, Source를 잘못 수정한 경우에 이전 Source와 차이점을 확인해야 할 필요가 생깁니다. 이럴 경우 Diff 기능을 사용하여 차이점을 확인할 수 있습니다.</p>
<p>이전 Post에서 Update 받았던 trunk/hello.c (Console에 Hello, World!를 출력하는 Code)를 다음과 같이 Function 호출을 사용하도록 고쳐봅시다.</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #993333;">void</span> hello<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello, World!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; hello<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p><span id="more-2899"></span></p>
<div id="attachment_3136" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/01-RabbitVCS-Diff.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/01-RabbitVCS-Diff-300x274.png" alt="RabbitVCS - Diff" title="RabbitVCS - Diff" width="300" height="274" class="size-medium wp-image-3136" /></a><p class="wp-caption-text">RabbitVCS - Diff</p></div>
<p>그 다음, 변경한 hello.c에 대한 차이점을 보기 위해서 hello.c를 선택한 다음, Mouse 오른쪽 Button Popup에서 RabbitVCS -> Diff를 선택하면 다음과 같은 5가지 Menu가 표시됩니다. (수정되지 않았을 경우에는 3가지)</p>
<ul>
<li>View diff against base : 작업하고 있는 Source의 현재 Revision의 수정되기 전 Code와 수정된 Code를 diff 명령을 통해 비교한 결과를 Gedit로 표시합니다. (수정되지 않은 경우에는 표시되지 않음)</li>
<li>View diff against previous revision : 현재 작업하고 있는 Source의 바로 이전 Revision의 Code와 수정된 Code를 diff 명령을 통해 비교한 결과를 Gedit로 표시합니다.</li>
<li>Compare with base : 작업하고 있는 Source의 현재 Revision의 수정되기 전 Code와 수정된 Code를 Meld 차이 보기 Program을 통해 차이를 비교하고 수정할 수 있습니다. (수정되지 않은 경우에는 표시되지 않음)</li>
<li>Compare with previous revision : 현재 작업하고 있는 Source의 바로 이전 Revision의 Code와 수정된 Code를 Meld 차이 보기 Program을 통해 차이를 비교하고 수정할 수 있습니다.</li>
<li>Show Changes : 선택한 Source를 각 Revision끼리 비교할 수 있습니다.</li>
</ul>
<div id="attachment_3137" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/02-Gedit-View-Diff.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/02-Gedit-View-Diff-300x242.png" alt="Gedit - View Diff against base" title="Gedit - View Diff against base" width="300" height="242" class="size-medium wp-image-3137" /></a><p class="wp-caption-text">Gedit - View Diff against base</p></div>
<p>RabbitVCS -> Diff -> View diff against base를 Click하면 위와 같이 diff 명령으로 작업하고 있는 Source의 현재 Revision의 수정되기 전 Code와 수정된 Code를 비교한 결과를 Gedit로 표시합니다. Console에서 사용하는 diff 명령에 익숙한 분이라면 내용에 대해서 이해할 수 있을 것 입니다.</p>
<div id="attachment_3138" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/03-Meld-Compare-with-base.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/03-Meld-Compare-with-base-300x230.png" alt="Meld - Compare with base" title="Meld - Compare with base" width="300" height="230" class="size-medium wp-image-3138" /></a><p class="wp-caption-text">Meld - Compare with base</p></div>
<p>RabbitVCS -> Diff -> Compare with base를 Click하면 위와 같이 Meld 차이 보기 Program을 통해서 작업하고 있는 Source의 현재 Revision의 수정되기 전 Code와 수정된 Code를 비교한 결과를 Visual하게 보여줍니다. </p>
<p>왼쪽에는 수정되기 전 Source를, 오른쪽은 수정된 Source를 나타내며 화살표는 어느 방향으로 변경된 부분을 적용할 지를 선택하는 기능을 합니다. Eclipse나 Winmerge, Windiff를 사용해 봤다면 사용법이 유사하기 때문에 쉽게 사용할 수 있을 것입니다.</p>
<h3>9. Add</h3>
<p>Import 시에 Project 저장소에 추가된 File 외에 새로운 File을 추가하려면 어떻게 해야 할까요? Add 기능을 사용하면 새로운 File을 Subversion으로 관리할 수 있도록 저장소에 추가할 수 있습니다.</p>
<p>다음과 같은 내용을 가진 test.c라는 file을 trunk Folder에 새로 작성해 봅시다.</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #993333;">int</span> a <span style="color: #339933;">=</span> <span style="color: #0000dd;">7</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;a++ == %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> a<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<div id="attachment_3139" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/04-RabbitVCS-Add.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/04-RabbitVCS-Add-300x263.png" alt="RabbitVCS - Add" title="RabbitVCS - Add" width="300" height="263" class="size-medium wp-image-3139" /></a><p class="wp-caption-text">RabbitVCS - Add</p></div>
<p>새로 만들어진 File은 Subversion으로 관리되는 Source Directory 안에 존재하지만, 실제 관리되고 있지는 않습니다. </p>
<p>이것을 저장소에 등록시켜 관리하기 위해서는 이 File이 포함된 Folder에서 Mouse 오른쪽 Button Popup을 띄운 후, RabbitVCS -> Add를 Click합니다.</p>
<div id="attachment_3140" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/05-Add-Dialog.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/05-Add-Dialog-300x244.png" alt="Add Dialog" title="Add Dialog" width="300" height="244" class="size-medium wp-image-3140" /></a><p class="wp-caption-text">Add Dialog</p></div>
<p>Add Dialog가 표시되면 저장소에서 관리되지 않는 File을 자동으로 검색해서 List로 위와 같이 보여 줍니다. 추가할 test.c를 선택한 다음, 확인을 누릅니다.</p>
<div id="attachment_3141" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/06-Completed-add.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/06-Completed-add-300x176.png" alt="Completed add" title="Completed add" width="300" height="176" class="size-medium wp-image-3141" /></a><p class="wp-caption-text">Completed add</p></div>
<p>확인을 누르면 위와 같이 추가가 완료되었다는 Dialog가 표시됩니다.</p>
<div id="attachment_3142" class="wp-caption aligncenter" style="width: 298px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/07-Commit-a-added-file.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/07-Commit-a-added-file-288x300.png" alt="Commit a added file" title="Commit a added file" width="288" height="300" class="size-medium wp-image-3142" /></a><p class="wp-caption-text">Commit a added file</p></div>
<p>추가가 완료되었지만 아직은 Project 저장소에 등록된 상태는 아니기 때문에 새 File을 Project 저장소에 Commit하는 과정이 필요합니다. Project Folder에서 Mouse 오른쪽 Popup에서 Commit을 선택하여 Commit을 수행합니다. </p>
<p>Commit Dialog를 보면 위와 같이 새로 추가된 File이 List에 표시되고 Commit이 완료되면 새로운 File을 추가하는 과정이 모두 완료됩니다.</p>
<h3>10. Delete</h3>
<p>Project를 계속 수행하다 보면 이전에는 필요했지만 필요가 없어져서 삭제해야 할 File이 존재할 것입니다. 하지만 Subversion을 통해 관리되고 있기 때문에 그냥 File System에서 삭제한다고 해서 Project 저장소에 적용이 되는 것은 아닙니다.</p>
<p>필요가 없어진 File을 Project 저장소에서도 삭제하기 위해서 Delete 기능을 사용합니다. Hello Project에서 trunk/hello.c를 삭제하는 경우를 통해서 Delete 기능에 대해 살펴보도록 하겠습니다.</p>
<div id="attachment_3143" class="wp-caption aligncenter" style="width: 281px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/08-RabbitVCS-Delete.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/08-RabbitVCS-Delete-271x300.png" alt="RabbitVCS - Delete" title="RabbitVCS - Delete" width="271" height="300" class="size-medium wp-image-3143" /></a><p class="wp-caption-text">RabbitVCS - Delete</p></div>
<p>먼저 삭제하고자 하는 File은 hello.c를 선택한 다음 Mouse 오른쪽 Button Popup에서 RabbitVCS -> Delete를 선택합니다.</p>
<div id="attachment_3144" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/09-Deleted.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/09-Deleted-300x193.png" alt="Nautilus - Deleted" title="Nautilus - Deleted" width="300" height="193" class="size-medium wp-image-3144" /></a><p class="wp-caption-text">Nautilus - Deleted</p></div>
<p>따로 Dialog가 표시되지 않고 바로 File이 삭제된 것을 확인할 수 있습니다.</p>
<div id="attachment_3145" class="wp-caption aligncenter" style="width: 298px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/10-Commit-a-deleted-file.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/10-Commit-a-deleted-file-288x300.png" alt="Commit a deleted file" title="Commit a deleted file" width="288" height="300" class="size-medium wp-image-3145" /></a><p class="wp-caption-text">Commit a deleted file</p></div>
<p>하지만 아직 Project 저장소에 적용이 된 것은 아니기 때문에 삭제 완료를 위해서 Commit을 수행해야 합니다. 삭제한 File이 들어있던 Folder를 선택한 다음 Mouse 오른쪽 Button Popup을 띄운 후, Commit을 Click합니다.</p>
<p>Commit Dialog에서는 위의 그림과 같이 아래쪽에 hello.c가 삭제된 상태인 것을 확인할 수 있습니다. 확인을 눌러 Commit이 성공적으로 수행되면 hello.c는 최종적으로 Project 저장소에서 삭제됩니다.</p>
<h3>11. Revert</h3>
<p>만약에 실수로 필요한 File을 Delete 기능을 통해 삭제하면 어떻게 해야 될까요? 이런 경우를 위해 Revert라는 기능이 존재합니다. Delete를 실행한 상태이지만, 아직 Commit을 하지 않아 Project 저장소에 적용이 되지 않았다면 Revert 기능을 사용해서 다시 원래대로 복구할 수 있습니다.</p>
<blockquote><p>Delete 후, Commit을 실행했다면 Revert로 복구되지 않습니다. 삭제되기 이전 Revision의 Source를 새로 Checkout 받아 삭제된 File을 작업하고 있는 Source에 다시 Add 기능을 통해 추가하여 Commit하는 방법밖에 없습니다.</p></blockquote>
<div id="attachment_3146" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/11-RabbitVCS-Revert.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/11-RabbitVCS-Revert-300x256.png" alt="RabbitVCS - Revert" title="RabbitVCS - Revert" width="300" height="256" class="size-medium wp-image-3146" /></a><p class="wp-caption-text">RabbitVCS - Revert</p></div>
<p>hello Project에서 실수로 trunk/test.c를 Delete 기능으로 삭제한 경우에 대해서 알아봅시다. Project Folder를 선택한 후, Mouse 오른쪽 Button Popup을 띄운 다음 RabbitVCS -> Revert를 Click합니다.</p>
<div id="attachment_3147" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/12-Revert-Dialog.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/12-Revert-Dialog-300x244.png" alt="Revert Dialog" title="Revert Dialog" width="300" height="244" class="size-medium wp-image-3147" /></a><p class="wp-caption-text">Revert Dialog</p></div>
<p>Revert Dialog가 표시되면서 Delete 기능으로 삭제되었지만 아직 Commit되지 않은 File의 목록을 보여줍니다. 이 중에서 복구할 File을 선택하고 확인을 누릅니다.</p>
<div id="attachment_3148" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/13-Completed-revert.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/13-Completed-revert-300x176.png" alt="Completed revert" title="Completed revert" width="300" height="176" class="size-medium wp-image-3148" /></a><p class="wp-caption-text">Completed revert</p></div>
<p>Revert가 완료되면서 삭제된 trunk/test.c가 복구되어 Folder에 존재하는 것을 확인할 수 있습니다.</p>
<h3>12. Cleanup</h3>
<div id="attachment_3159" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/23-Update-Locked-Directory.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/23-Update-Locked-Directory-300x176.png" alt="Update - Locked Directory" title="Update - Locked Directory" width="300" height="176" class="size-medium wp-image-3159" /></a><p class="wp-caption-text">Update - Locked Directory</p></div>
<p>RabbitVCS를 사용하다보면 위와 같은 Message가 표시되면서 Update나 Commit이 제대로 동작하지 않는 경우가 있습니다.</p>
<p>&#8220;~은/는 잠겨 있습니다&#8221; Message는 Subversion 저장소와 관련된 동작 중에 문제가 발생하여 제대로 처리되지 않은 경우에 발생합니다.</p>
<div id="attachment_3160" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/24-RabbitVCS-Cleanup.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/24-RabbitVCS-Cleanup-300x264.png" alt="RabbitVCS - Cleanup" title="RabbitVCS - Cleanup" width="300" height="264" class="size-medium wp-image-3160" /></a><p class="wp-caption-text">RabbitVCS - Cleanup</p></div>
<p>이 문제를 해결하기 위해서는 Cleanup이라는 기능을 사용합니다. 위와 같이 문제가 발생한 Folder를 선택한 다음, Mouse 오른쪽 Button Popup에서 RabbitVCS -> Cleanup을 Click합니다.</p>
<div id="attachment_3161" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/25-Complete-Cleanup.png" rel="lightbox[2899]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/25-Complete-Cleanup-300x176.png" alt="Completed cleanup" title="Completed cleanup" width="300" height="176" class="size-medium wp-image-3161" /></a><p class="wp-caption-text">Completed cleanup</p></div>
<p>Cleanup Dialog가 표시되면서 문제가 해결됩니다. 물론 Cleanup으로도 해결되지 않는 경우가 있습니다. 그런 경우에는 새로 Project를 Checkout 받은 다음, 문제가 되는 Source만 작업하는 Project Folder에 복사하거나, 문제가 생긴 Folder의 숨김 Folder인 .svn을 강제로 삭제한 후 Update하는 방법을 사용하면 됩니다.</p>
<h3>13. 마치면서&#8230;</h3>
<p>RabbitVCS을 사용하는데 필요한 기능들을 설명하다 보니 Post가 계속 길어지네요. 다음 Post에서는 마지막으로 Branch/Tag, Merge 기능에 대해서 살펴보도록 하겠습니다.</p>
  
<div class="wp_license">
<p><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/"><img src="http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png" alt="Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea" class="alignleft" style="margin-top:4px;" />
</a>This work  is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/">Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea</a>.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://ioriy2k.pe.kr/archives/2899/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nautilus에서 Source Code를 Subversion으로 관리하자 : RabbitVCS (Part 1)</title>
		<link>http://ioriy2k.pe.kr/archives/2628</link>
		<comments>http://ioriy2k.pe.kr/archives/2628#comments</comments>
		<pubDate>Mon, 01 Aug 2011 00:00:20 +0000</pubDate>
		<dc:creator>ioriy2k</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Linux, Just For Fun]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://ioriy2k.pe.kr/?p=2628</guid>
		<description><![CDATA[Ubuntu Oneiric Ocelot 11.10에서 Test 완료 (2012-01-05) RabbitVCS는 Version Control System인 Subversion을 위한 GUI Tool로 GNOME Desktop의 탐색기인 Nautilus와 연동하여 동작합니다. Windows에서 Windows 탐색기와 통합되어 동작하는 TortoiseSVN과 같은 Application을 사용해 본 사람이라면 쉽게 RabbitVCS를 사용할 수 있습니다. RabbitVCS라는 이름은 아마도 거북이를 뜻하는 TortoiseSVN의 Tortoise를 빗대어 토끼와 거북이 우화를 생각해서 지었는지도 모르겠네요. 이번 Post에서는 Nautilus에서 Source [...]]]></description>
			<content:encoded><![CDATA[<blockquote>
<ul>
<li>Ubuntu Oneiric Ocelot 11.10에서 Test 완료 (2012-01-05)</li>
</ul>
</blockquote>
<p><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/RabbitVCS-logo.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/RabbitVCS-logo.png" alt="" title="RabbitVCS logo" width="150" height="50" class="alignleft size-full wp-image-2943" /></a></p>
<p>RabbitVCS는 Version Control System인 Subversion을 위한 GUI Tool로 GNOME Desktop의 탐색기인 Nautilus와 연동하여 동작합니다. </p>
<p>Windows에서 Windows 탐색기와 통합되어 동작하는 TortoiseSVN과 같은 Application을 사용해 본 사람이라면 쉽게 RabbitVCS를 사용할 수 있습니다.</p>
<p>RabbitVCS라는 이름은 아마도 거북이를 뜻하는 TortoiseSVN의 Tortoise를 빗대어 토끼와 거북이 우화를 생각해서 지었는지도 모르겠네요. <img src='http://ioriy2k.pe.kr/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>이번 Post에서는 Nautilus에서 Source Code를 Subversion으로 간편하게 관리할 수 있도록 도와주는 RabbitVCS의 설치 및 사용방법에 대해서 알아보도록 하겠습니다.</p>
<p><span id="more-2628"></span></p>

<h3>1. RabbitVCS 설치</h3>
<p>RabitVCS를 설치해서 사용하기 이전에 Subversion Server가 구성되어 있어야 합니다. 기존에 설치된 Server가 없다면 <a href="http://ioriy2k.pe.kr/archives/2624" target="_blank">Ubuntu Natty Narwhal 11.04에서 Subversion Server 구성하기</a>를 참고하여 먼저 Subversion Server를 구성하기 바랍니다.</p>
<p>Server가 구성되었다면, 다음과 같이 Terminal에서 입력하여 RabbitVCS를 설치합니다. (Ubuntu Natty Narwhal 11.04의 경우)</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> add-apt-repository ppa:rabbitvcs<span style="color: #000000; font-weight: bold;">/</span>ppa &nbsp; &nbsp; <br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get update</span> &nbsp; &nbsp; &nbsp;<br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> rabbitvcs-core rabbitvcs-nautilus</div></td></tr></tbody></table></div>
<p>Ubuntu Oneiric Ocelot 11.10에서는 설치 Package가 변경되었습니다. Terminal에서 다음과 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> add-apt-repository ppa:rabbitvcs<span style="color: #000000; font-weight: bold;">/</span>ppa &nbsp; &nbsp; <br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get update</span> &nbsp; &nbsp; &nbsp;<br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> rabbitvcs-core rabbitvcs-nautilus3</div></td></tr></tbody></table></div>
<p>설치가 된 후, Nautilus를 재시작할 필요가 있습니다. 다음과 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span>nautilus <span style="color: #660033;">-q</span></div></td></tr></tbody></table></div>
<h3>2. Import</h3>
<p>설치가 완료되었으니 지금부터 하나씩 하나씩 필요한 기능들을 예제와 함께 설명해 보도록 하겠습니다.</p>
<div id="attachment_2904" class="wp-caption aligncenter" style="width: 253px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/01-hello-source-tree.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/01-hello-source-tree-243x300.png" alt="hello Source Tree" title="hello Source Tree" width="243" height="300" class="size-medium wp-image-2904" /></a><p class="wp-caption-text">hello Source Tree</p></div>
<p>예를 들어, 위와 같은 Source Tree가 있다고 가정해 봅시다. 위의 그림은 Hello라는 Project Folder 안에 branches, tags, trunk Folder가 존재하고 현재 작업하고 있는 Source인 hello.c가 trunk Folder안에 존재하는 구조를 나타냅니다.</p>
<p>Source Code를 Subversion으로 관리하기 위해서는 먼저 Source Code를 Import(Source Code를 Subversion의 Project 저장소에 처음으로 등록)해야 합니다. 그러기 위해서는 Subversion Server내에 Project 저장소를 생성해야 하는데 생성 방법은 Server가 어떻게 구성되어 있는지에 따라 다릅니다. 이에 대한 자세한 내용은 <a href="http://ioriy2k.pe.kr/archives/2624" target="_blank">Ubuntu Natty Narwhal 11.04에서 Subversion Server 구성하기</a>를 참고하기 바랍니다.</p>
<div id="attachment_2905" class="wp-caption aligncenter" style="width: 246px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/02-RabbitVCS-Import.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/02-RabbitVCS-Import-236x300.png" alt="RabbitVCS - Import" title="RabbitVCS -  Import" width="236" height="300" class="size-medium wp-image-2905" /></a><p class="wp-caption-text">RabbitVCS -  Import</p></div>
<p>Subversion Server내에 Hello Project를 위한 저장소가 만들어졌다면, 이제 Source Code를 Import 해 봅시다. </p>
<p>Nautilus에서 위의 그림과 같이 Import할 Folder를 Mouse 오른쪽 Button으로 선택한 후, RabbitVCS -> Import를 Click합니다.</p>
<div id="attachment_2906" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/03-Import-Dialog.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/03-Import-Dialog-300x222.png" alt="Import Dialog" title="Import Dialog" width="300" height="222" class="size-medium wp-image-2906" /></a><p class="wp-caption-text">Import Dialog</p></div>
<p>Hello Project Folder를 Import하기 위한 Dialog가 표시됩니다. Repository에는 방금 전에 만든 Project 저장소의 URL을 입력합니다. </p>
<p>URL은 Subversion Server의 Protocol이 어떻게 되어 있느냐에 따라 다른데 보통 다음과 같이 되어 있습니다. (위의 그림의 URL은 svn+ssh:// Protocol의 예)</p>
<ul>
<li>svn:// Protocol :
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">svn://&lt;passwd에 설정한 ID&gt;@&lt;Server Name 또는 Address&gt;/&lt;생성한 Project 저장소 이름&gt;</div></td></tr></tbody></table></div>
</li>
<li>svn+ssh:// Protocol :
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">svn+ssh://&lt;Server에 Login 가능한 ID&gt;@&lt;Server Name 또는 Address&gt;/&lt;Subversion 저장소 Directory&gt;/&lt;생성한 Project 저장소 이름&gt;</div></td></tr></tbody></table></div>
</li>
</ul>
<p>Import Message에는 Import 시에 Log에 기록될 Message를 적습니다. 그리고 확인을 눌러 Import를 시작합니다.</p>
<div id="attachment_2907" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/04-Import-Finished.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/04-Import-Finished-300x176.png" alt="Import - Finished" title="Import - Finished" width="300" height="176" class="size-medium wp-image-2907" /></a><p class="wp-caption-text">Import - Finished</p></div>
<p>URL이 제대로 입력되었다면 Password를 묻습니다. Password를 입력하면 위와 같이 Import가 성공적으로 완료될 것입니다.</p>
<h3>3. Checkout</h3>
<p>Import한 hello Project는 아직 Subversion으로 관리되어 있지 않습니다. Server에 올려진 작업본을 다시 내려받아야(Checkout) Subversion으로 Project를 관리할 수 있습니다.</p>
<div id="attachment_2908" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/05-RabbitVCS-Checkout.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/05-RabbitVCS-Checkout-300x190.png" alt="RabbitVCS - Checkout" title="RabbitVCS -  Checkout" width="300" height="190" class="size-medium wp-image-2908" /></a><p class="wp-caption-text">RabbitVCS -  Checkout</p></div>
<p>새로운 Project Folder에 Subversion Server에 등록된 Hello Project를 Checkout 받아 봅시다. 위의 그림과 같이 Mouse 오른쪽 Popup에서 Checkout을 Click합니다.</p>
<div id="attachment_2909" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/06-Checkout-Dialog.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/06-Checkout-Dialog-300x194.png" alt="Checkout Dialog" title="Checkout Dialog" width="300" height="194" class="size-medium wp-image-2909" /></a><p class="wp-caption-text">Checkout Dialog</p></div>
<p>Checkout Dialog에서 위의 그림과 같이 URL에 Import 시에 입력한 URL을 입력하고 확인을 눌러 Hello Project의 최신 Source Code를 Checkout 받아봅시다. </p>
<p>Checkout Dialog에서는 다음과 같은 것을 설정할 수 있습니다.</p>
<ul>
<li>Repository :<br />
URL &#8211; Subversion Project 저장소의 URL입니다. Import 시에 사용했던 URL과 동일합니다. URL 입력창 옆에 돋보기 Icon을 Click하면 다음과 같이 Repository Browser가 표시되면서 실제로 접속하여 URL의 유효여부를 확인할 수 있습니다.</p>
<div id="attachment_2910" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/07-Repository-Browser.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/07-Repository-Browser-300x237.png" alt="Repository Browser" title="Repository Browser" width="300" height="237" class="size-medium wp-image-2910" /></a><p class="wp-caption-text">Repository Browser</p></div>
<p>Destination &#8211; Checkout 받은 Source가 위치할 Folder를 지정합니다. Project명과 동일하지 않아도 상관없습니다.
</li>
<li>Options :<br />
Recursive &#8211; Check할 경우 Project 저장소 URL에 포함된 모든 Source Code를 가져옵니다.<br />
Omit Externals &#8211; Check할 경우 Project 저장소에 연계된 외부 저장소의 Source Code를 가져오지 않습니다.</li>
<li>Revision : Revision은 Project 저장소에 Source Code가 변경되는 것을 Count합니다. File마다 Revision이 적용되는 CVS와는 달리 Subversion에서는 Project 전체에 적용되며, Commit할 때 마다 증가합니다.<br />
HEAD &#8211; Project 저장소의 최신 Revision을 Checkout합니다.<br />
Number &#8211; Checkout 받기 원하는 Revision을 입력할 수 있습니다.</li>
</ul>
<div id="attachment_2911" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/08-Checkout-Finished.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/08-Checkout-Finished-300x176.png" alt="Checkout - Finished" title="Checkout - Finished" width="300" height="176" class="size-medium wp-image-2911" /></a><p class="wp-caption-text">Checkout - Finished</p></div>
<p>설정한 암호를 제대로 입력하면 위의 그림과 같이 Checkout이 완료됩니다.</p>
<div id="attachment_2912" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/09-Checkout-Directory.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/09-Checkout-Directory-300x190.png" alt="Checkout Directory" title="Checkout Directory" width="300" height="190" class="size-medium wp-image-2912" /></a><p class="wp-caption-text">Checkout Directory</p></div>
<p>Checkout이 완료된 후, Nautilus로 Checkout된 Folder를 확인하면 위의 그림과 같이 Check Icon이 Folder 옆에 붙어 있을 것입니다. 이 Icon은 Source Code가 변경되지 않은 상태라는 것을 의미합니다. (TortoiseSVN을 사용해 본 적이 있다면 쉽게 이해할 수 있을 것 같네요.)</p>
<div id="attachment_2913" class="wp-caption aligncenter" style="width: 300px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/10-hello.c-Properties.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/10-hello.c-Properties-290x300.png" alt="hello.c Properties" title="hello.c Properties" width="290" height="300" class="size-medium wp-image-2913" /></a><p class="wp-caption-text">hello.c Properties</p></div>
<p>trunk/hello.c의 속성을 보면 위의 그림과 같이 RabbitVCS에 대한 Tab이 추가되어 표시되어 있는 것을 알 수 있습니다. Subversion으로 관리되는 Source는 위와 같이 Nautilus의 속성 Dialog에서 세부 정보를 확인할 수 있습니다.</p>
<h3>4. Commit</h3>
<p>Commit은 Checkout 받은 Source Code를 변경한 후에 Project 저장소에 변경사항을 저장하는 기능입니다. Commit을 통해 Project 저장소에 접근하는 다른 개발자들은 Update 기능을 통해 변경사항이 적용되게 됩니다.</p>
<p>Commit을 할 때는 반드시 Update를 먼저 실행해서 Commit하기 전에 Project 저장소에 등록된 변경사항이 현재 작업하고 있는 Source Code에 적용되도록 해야 합니다. 여기서는 예를 들기 위해 Commit에 대해서 먼저 설명하겠습니다.</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello, World!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Checkout 받은 trunk/hello.c가 위와 같은 간단한 Code로 되어 있다고 가정합시다. 그런데 굳이 return을 해 줄 필요가 있을까 싶어서 return 구문을 뺀다면 다음과 같을 것입니다.</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello, World!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<div id="attachment_2916" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/13-Nautilus-modified-hello.c.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/13-Nautilus-modified-hello.c-300x190.png" alt="Nautilus - modified hello.c" title="Nautilus - Modified hello.c" width="300" height="190" class="size-medium wp-image-2916" /></a><p class="wp-caption-text">Nautilus - modified hello.c</p></div>
<p>Source Code를 변경하고 저장했다면 위의 그림과 같이 Nautilus에서 느낌표로 표시될 것입니다. (Subversion으로 관리되는 Source Folder에서 느낌표가 표시된다는 것은 변경된 Source Code가 존재한다는 의미입니다.)</p>
<div id="attachment_2917" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/14-RabbitVCS-Commit.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/14-RabbitVCS-Commit-300x283.png" alt="RabbitVCS - Commit" title="RabbitVCS - Commit" width="300" height="283" class="size-medium wp-image-2917" /></a><p class="wp-caption-text">RabbitVCS - Commit</p></div>
<p>이제 변경한 내용을 Project 저장소에 등록하기 위해서 Commit을 실행해 봅시다. Source Code의 최상위 Folder인 Hello folder위에서 Mouse 오른쪽 Button으로 Popup을 띄운 후, Commit을 Click합니다.</p>
<p>Commit을 실행할 때는 여러 Source Code를 수정하는 것이 대부분이므로 가급적 Checkout 받은 최상위 Folder에서 Commit을 실행하는 것이 좋습니다.</p>
<div id="attachment_2918" class="wp-caption aligncenter" style="width: 298px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/15-Commit-Dialog.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/15-Commit-Dialog-288x300.png" alt="Commit Dialog" title="Commit Dialog" width="288" height="300" class="size-medium wp-image-2918" /></a><p class="wp-caption-text">Commit Dialog</p></div>
<p>Commit Dialog가 표시되면 Add Message에서 Commit하는 내용에 대한 Message를 작성합니다. 가급적이면 변경사항에 대해서 다른 개발자들도 알 수 있도록 Message를 적어두는 것이 좋습니다. </p>
<p>Changed Files에는 변경된 Source Code가 표시됩니다. Check를 통해서 Commit하고자 하는 File을 선택할 수도 있습니다. 확인을 눌러 Commit을 진행합니다.</p>
<div id="attachment_2919" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/16-Commit-Finished.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/16-Commit-Finished-300x176.png" alt="Commit - Finished" title="Commit - Finished" width="300" height="176" class="size-medium wp-image-2919" /></a><p class="wp-caption-text">Commit - Finished</p></div>
<p>Commit을 위해 암호를 입력하면 위의 그림과 같이 Commit이 완료됩니다.</p>
<h3>5. Update</h3>
<p>Update는 현재 작업하고 있는 Source Code에 다른 개발자가 Project 저장소에 올린 변경사항을 적용하는 기능입니다. 다른 사용자가 Commit한 내용을 Update를 통해서 적용한다고 생각하면 됩니다.</p>
<div id="attachment_2920" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/17-Checkout-Revision-1.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/17-Checkout-Revision-1-300x194.png" alt="Checkout Revision 1" title="Checkout Revision 1" width="300" height="194" class="size-medium wp-image-2920" /></a><p class="wp-caption-text">Checkout Revision 1</p></div>
<p>Update를 Test하기 위해서 Checkout을 새로 받아 봅시다. URL에는 Import시에 작성한 Hello Project 저장소의 URL을, Destination에는 이전에 Checkout 받았던 hello Folder과 구분하기 위해서 hello2를 입력합니다.</p>
<p>그리고 방근 전의 Commit으로 Revision이 2가 되었으므로 최초의 Source Code를 얻기 위해서 Revision에 Number를 선택하고 1을 입력하고 확인을 누릅니다. </p>
<p>Revision Number를 잘 모르겠다면 Revision Number 입력창 옆에 돋보기를 누르면 아래와 같이 Log Dialog에서 Revision Table에서 원하는 Revision을 선택할 수 있습니다.</p>
<div id="attachment_2921" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/18-Log-Dialog.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/18-Log-Dialog-300x237.png" alt="Log Dialog" title="Log Dialog" width="300" height="237" class="size-medium wp-image-2921" /></a><p class="wp-caption-text">Log Dialog</p></div>
<div id="attachment_2922" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/19-hello.c-Revision-1.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/19-hello.c-Revision-1-300x242.png" alt="hello.c Revision 1" title="Gedit - hello.c Revision 1" width="300" height="242" class="size-medium wp-image-2922" /></a><p class="wp-caption-text">hello.c Revision 1</p></div>
<p>hello2/trunk/hello.c를 열어보면 맨 처음 Version(return을 없애지 않은 Code)의 hello.c의 내용인 것을 확인할 수 있습니다.</p>
<div id="attachment_2923" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/20-RabbitVCS-Update.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/20-RabbitVCS-Update-300x284.png" alt="RabbitVCS - Update" title="RabbitVCS - Update" width="300" height="284" class="size-medium wp-image-2923" /></a><p class="wp-caption-text">RabbitVCS - Update</p></div>
<p>hello2를 최신 Revision인 Revision 2로 Update 해 봅시다. hello2 Folder에서 Mouse 오른쪽 Popup을 연 뒤, Update를 Click합니다.</p>
<div id="attachment_2924" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/21-Update-Finished.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/21-Update-Finished-300x176.png" alt="Update - Finished" title="Update - Finished" width="300" height="176" class="size-medium wp-image-2924" /></a><p class="wp-caption-text">Update - Finished</p></div>
<p>암호를 입력하면 위의 그림과 같이 Update가 완료됩니다.</p>
<div id="attachment_2925" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/22-hello.c-Revision-2.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/22-hello.c-Revision-2-300x242.png" alt="hello.c Revision 2" title="Gedit - hello.c Revision 2" width="300" height="242" class="size-medium wp-image-2925" /></a><p class="wp-caption-text">hello.c Revision 2</p></div>
<p>Commit된 내용이 Source Code에 적용되었는 지 확인하기 위해서 hello2/trunk/hello.c를 확인하면 return 구문이 빠져있는 것을 확인할 수 있습니다.</p>
<h3>6. Resolve</h3>
<p>가끔씩 Source Code를 편집하다가 Update를 하게 되면 Source code 내용이 뒤엉켜(Conflicted) 문제가 발생하는 경우가 있습니다. 이번에는 이 경우를 어떻게 처리하는지에 대해서 알아보도록 하겠습니다.</p>
<div id="attachment_2926" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/23-Checkout-Revision-1.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/23-Checkout-Revision-1-300x194.png" alt="Checkout Revision 1" title="Checkout Revision 1" width="300" height="194" class="size-medium wp-image-2926" /></a><p class="wp-caption-text">Checkout Revision 1</p></div>
<p>Test를 위해서 먼저 위의 그림과 같이 Revision 1을 hello3 Folder에 Checkout 받습니다.</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello, World!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Checkout 받은 hello3/trunk/hello.c의 내용은 위와 같을 것입니다. 여기서 Revision 2로 Commit된 내용을 모르는 다른 개발자가 Return 구문이 필요하지 않다고 똑같이 생각해서 Revision 2로 Update하기 전에 다음과 같이 고쳤다고 생각해 봅시다.</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello, World!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>내용은 Revision 2와 같은 내용이지만 마지막 Return구문이 추가된 부분이 다르다는 것을 알 수 있습니다.</p>
<div id="attachment_2984" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/Update-Finished.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/08/Update-Finished-300x176.png" alt="Update - Finished (Conflicted)" title="Update - Finished (Conflicted)" width="300" height="176" class="size-medium wp-image-2984" /></a><p class="wp-caption-text">Update - Finished (Conflicted)</p></div>
<p>이제 이 hello3를 Update해 봅시다. Update를 할 경우 위와 같이 아무 문제가 없는 듯이 Update가 되네요. (TortoiseSVN의 경우 Conflicted가 발생하면 경고해주는 것에 비해서 불편한 부분입니다.)</p>
<div id="attachment_2929" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/26-Conflicted-After-Update.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/26-Conflicted-After-Update-300x190.png" alt="Conflicted after update" title="Nautilus - Conflicted after update" width="300" height="190" class="size-medium wp-image-2929" /></a><p class="wp-caption-text">Conflicted after update</p></div>
<p>하지만, Nautilus로 확인해 보면 위의 그림과 같이 hello.c에 Conflicted가 발생했다는 Icon이 표시됩니다. 그리고 못 보던 File인 hello.c.mine, hello.c.r1, hello.c.r2가 생겼습니다. 각 File은 다음과 같은 내용을 담고 있습니다.</p>
<ul>
<li>hello.c.mine : .mine이 확장자로 붙는 File은 Conflicted가 일어난 File이 Update 하기 전의 내용입니다.</li>
<li>hello.c.r1 : 현재 작업하는 Source의 Revision에서 해당 File의 내용입니다.</li>
<li>hello.c.r2 : Project 저장소의 최신 Revision에서 해당 File의 내용입니다.</li>
</ul>
<div id="attachment_2930" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/27-Conflicted-hello.c.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/27-Conflicted-hello.c-300x242.png" alt="Conflicted hello.c" title="Gedit - Conflicted hello.c" width="300" height="242" class="size-medium wp-image-2930" /></a><p class="wp-caption-text">Conflicted hello.c</p></div>
<p>Conlicted가 발생한 hello.c를 편집기로 열어보면 위와 같이 내용이 변경되어 있을 것입니다. </p>
<p><<<<<<에서 =======까지는 Update 받기 전의 Source에서 충돌이 발생한 변경된 부분을 의미하고, =======에서 >>>>>>>까지는 Project 저장소의 최신 Revision에서 해당 부분의 내용을 나타냅니다.</p>
<p>이제 Conflicted를 해결하려면 어떻게 하면 될까요? 먼저 hello.c의 충돌이 발생한 부분을 보고 개발자가 판단하여 Code를 먼저 수정해야 합니다. 위의 같은 상황에서 그냥 Return 구문을 쓰는 것이 좋겠다고 판단하여 다음과 같이 고쳤다고 가정해 보겠습니다.</p>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello, World!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<div id="attachment_2931" class="wp-caption aligncenter" style="width: 268px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/28-RabbitVCS-Resolve.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/28-RabbitVCS-Resolve-258x300.png" alt="RabbitVCS - Resolve" title="RabbitVCS - Resolve" width="258" height="300" class="size-medium wp-image-2931" /></a><p class="wp-caption-text">RabbitVCS - Resolve</p></div>
<p>Source Code 내용을 고쳤다면 그 다음에는 Conflicted 상태를 해제해야 합니다. 이것을 위해서 Resolve라는 기능을 사용합니다. Conflicted가 발생한 hello.c에서 Mouse 오른쪽 Popup을 띄운 후, RabbitVCS -> Resolve를 Click합니다.</p>
<div id="attachment_2932" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/29-Resolve-Dialog.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/29-Resolve-Dialog-300x244.png" alt="Resolve Dialog" title="Resolve Dialog" width="300" height="244" class="size-medium wp-image-2932" /></a><p class="wp-caption-text">Resolve Dialog</p></div>
<p>Resolve Dialog에서는 Conflicted 상태인 File을 표시해줍니다. 여기서 Conflicted 상태를 해제할 hello.c를 선택한 다음, 확인을 누릅니다.</p>
<div id="attachment_2933" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/30-Resolve-Finished.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/30-Resolve-Finished-300x176.png" alt="Resolve - Finished" title="Resolve - Finished" width="300" height="176" class="size-medium wp-image-2933" /></a><p class="wp-caption-text">Resolve - Finished</p></div>
<p>위와 같이 Resolve로 Conflicted 상태가 해제됩니다. Resolve 기능은 Subversion으로 Project를 관리하는 System 내에서의 문제를 해결해 주는 것이지 실제 Source Code의 문제는 해결해주지 못한다는 것을 유의하기 바랍니다. </p>
<p>(예를 들어 위에서 Conflicted 상태인 hello.c에 >>>>>>와 =======가 포함된 상태이더라도 Resolve를 실행하면 Conflicted가 아닌 상태로 만들 수 있습니다. 만약 그 File을 그대로 Commit한다면 다른 개발자들이 Update 받을 경우 피해를 입겠지요. <img src='http://ioriy2k.pe.kr/wordpress/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  )</p>
<div id="attachment_2934" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/31-Resolved-hello.c.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/31-Resolved-hello.c-300x190.png" alt="Nautilus - Resolved hello.c" title="Nautilus - Resolved hello.c" width="300" height="190" class="size-medium wp-image-2934" /></a><p class="wp-caption-text">Nautilus - Resolved hello.c</p></div>
<p>Resolve가 완료되면 Nautilus에서도 Conflicted 표시대신 수정되었다는 느낌표가 표시됩니다. 그리고 .mine, .r1, .r2는 자동으로 제거된 것을 알 수 있습니다.</p>
<div id="attachment_2935" class="wp-caption aligncenter" style="width: 298px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/32-Commit-Dialog.png" rel="lightbox[2628]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/32-Commit-Dialog-288x300.png" alt="Commit Dialog" title="Commit Dialog" width="288" height="300" class="size-medium wp-image-2935" /></a><p class="wp-caption-text">Commit Dialog</p></div>
<p>이제 변경된 Source를 Commit 해 봅시다. Commit을 실행하고 Message를 적은 다음 확인을 눌러 Commit을 완료하면 Resolve를 통해서 Conflicted를 해결하는 과정이 끝나게 됩니다.</p>
<h3>7. 마치면서&#8230;</h3>
<p>지금까지 RabbitVCS를 설치하는 방법과 Subversion으로 Source Code를 관리하기 위한 기본적인 기능에 대해서 알아보았습니다. 다음 Post에서는 나머지 기능인 Add, Delete, Cleanup 등에 대해서 알아보도록 하겠습니다.</p>
  
<div class="wp_license">
<p><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/"><img src="http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png" alt="Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea" class="alignleft" style="margin-top:4px;" />
</a>This work  is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/">Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea</a>.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://ioriy2k.pe.kr/archives/2628/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu Natty Narwhal 11.04에서 Subversion Server 구성하기</title>
		<link>http://ioriy2k.pe.kr/archives/2624</link>
		<comments>http://ioriy2k.pe.kr/archives/2624#comments</comments>
		<pubDate>Tue, 05 Jul 2011 00:00:27 +0000</pubDate>
		<dc:creator>ioriy2k</dc:creator>
				<category><![CDATA[Linux, Just For Fun]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Natty Narwhal]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://ioriy2k.pe.kr/?p=2624</guid>
		<description><![CDATA[Ubuntu 11.10 Oneiric Ocelot에서 Test 완료 (2011-12-05) Subversion은 CVS를 대체하기 위해 만들어진 형상관리 Tool(Version Control System)로 지금은 Apache Foundation에서 Project를 관리하고 있습니다. 간단하게 말하면, Subversion은 다수의 Programmer가 하나의 Project를 개발할 때 서로가 개발하는 부분에 대한 충돌이 없도록 Source를 관리하고 공유할 수 있게 도와주는 Software입니다. 물론 개인이 혼자 개발한다 하더라도, 현재 Source를 이전 Version으로 변경하고 싶을 [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
Ubuntu 11.10 Oneiric Ocelot에서 Test 완료 (2011-12-05)
</p></blockquote>
<p><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/svn-logo.png" alt="" title="svn logo" width="250" height="46" class="alignleft size-full wp-image-2664" /></p>
<p>Subversion은 CVS를 대체하기 위해 만들어진 형상관리 Tool(Version Control System)로 지금은 Apache Foundation에서 Project를 관리하고 있습니다.</p>
<p>간단하게 말하면, Subversion은 다수의 Programmer가 하나의 Project를 개발할 때 서로가 개발하는 부분에 대한 충돌이 없도록 Source를 관리하고 공유할 수 있게 도와주는 Software입니다. </p>
<p>물론 개인이 혼자 개발한다 하더라도, 현재 Source를 이전 Version으로 변경하고 싶을 때나 Backup을 위해서도 유용하게 사용됩니다.</p>
<p>이번 Post에서는 Ubuntu Natty Narwhal 11.04에서 Subversion Server를 구성하는 방법과 간단한 사용방법을 알아보도록 하겠습니다.</p>

<h3>1. Subversion 설치</h3>
<p>Ubuntu에서 Subversion을 설치하는 방법은 간단합니다. 아래와 같이 Terminal에서 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> subversion</div></td></tr></tbody></table></div>
<p><span id="more-2624"></span></p>
<p>Subversion Server를 구성하기 위해서는 Subversion을 사용할 계정을 위한 Group을 생성하고, Group의 Default 계정을 설정해야 합니다. 다음과 같이 Terminal에서 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> groupadd subversion<br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> usermod <span style="color: #660033;">-a</span> <span style="color: #660033;">-G</span> subversion www-data</div></td></tr></tbody></table></div>
<p>www-data는 기본적으로 System에 생성되어 있는 Login을 할 수 없는 User로 원래 Apache HTTP Server와 같은 Web Service를 위해 사용되는 계정입니다. 이 계정을 Default로 사용해서 Subversion 저장소를 생성하게 됩니다.</p>
<p>이제 Subversion 저장소(각 Project의 저장소가 저장될 최상위 Directory)를 아래와 같이 입력하여 생성합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">svn</span><br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> www-data:subversion <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">svn</span><br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> g+rws <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">svn</span></div></td></tr></tbody></table></div>
<p>Subversion 저장소의 위치는 취향에 따라 다른 곳에 설정해도 됩니다. 보통 /srv/svn, /usr/local/svn 등을 사용하는데 /home/svn을 대부분 많이 사용하는 것 같습니다.</p>
<p>이제 저장소의 위치도 지정했다면 Subversion을 사용해 봅시다. Subversion 저장소에 접근하는 Protocol에 따라 설정방법이 조금씩 차이가 있는데, 여기에서는 여러 Protocol 중 Subversion 고유 Protocol인 svn://와 SSH Tunneling을 이용하는 svn+ssh://일 경우에 대해서 알아보겠습니다.</p>
<h3>2. svn:// Protocol을 사용할 경우</h3>
<p>svn:// Protocol은 Subversion의 고유 Protocol로 이것을 사용하면 각 Project의 저장소에 Login하기 위해서 System의 계정이 아닌 따로 설정한 ID와 Password를 사용할 수 있습니다. 저장소에 접근하기 위해서 System 계정을 만들어 주지 않아도 되기 때문에 보안상 유리할 수 있습니다.</p>
<p>그리고 각 Project 저장소마다 따로 ID와 Password를 설정할 수 있기 때문에 각기 다른 사용자가 Subversion Server에 접근한다면 해당 사용자에게 원하는 Project 저장소에만 접근하도록 설정할 수 있습니다.</p>
<p>다만 svn:// Protocol을 사용하기 위해서는 Subversion의 Service Daemon인 svnserve가 항상 실행되어 있어야만 합니다.</p>
<h4>2.1 Init Script 생성</h4>
<p>앞서 언급한 대로 Subversion의 Service Daemon을 실행하기 위해서 Init Script를 만들어야 합니다. Init Script를 만들게 되면 나중에 Service를 실행하기 편리하며 System 시작 시에 자동으로 실행되도록 만들 수 있습니다.</p>
<p>Init Script를 따로 제공하지는 않으나 다른 Ubuntu User가 만들어 놓은 Script를 활용해서 설정해 봅시다. 아래와 같이 Terminal에서 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>odyniec.net<span style="color: #000000; font-weight: bold;">/</span>articles<span style="color: #000000; font-weight: bold;">/</span>ubuntu-subversion-server<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">svnserve</span> <span style="color: #660033;">-O</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">svnserve</span><br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">755</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">svnserve</span><br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">vi</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">svnserve</span></div></td></tr></tbody></table></div>
<p>Download한 Script는 Subversion 저장소가 다르게 되어 있으니 현재 설정에 맞춰 봅시다. 아래와 같이 되어 있는 것을,</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">DAEMON_ARGS</span>=<span style="color: #ff0000;">&quot;-d -r /usr/local/svn/repos&quot;</span></div></td></tr></tbody></table></div>
<p>다음과 같이 바꾼 후 저장하면 됩니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">DAEMON_ARGS</span>=<span style="color: #ff0000;">&quot;-d -r /home/svn&quot;</span></div></td></tr></tbody></table></div>
<p>이제 Subversion Server를 실행해 봅시다. 아래와 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> service <span style="color: #c20cb9; font-weight: bold;">svnserve</span> start</div></td></tr></tbody></table></div>
<p>작성한 Subversion Init Script를 시작 시에 자동으로 실행하려면 다음과 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> update-rc.d <span style="color: #c20cb9; font-weight: bold;">svnserve</span> defaults</div></td></tr></tbody></table></div>
<h4>2.2 방화벽 설정</h4>
<p>System에 UFW 방화벽이 동작하고 있다면 방화벽 설정을 해 주어야 외부에서 Server로 접속할 수가 있습니다. 방화벽을 사용하지 않는다면 이 부분은 넘겨도 됩니다.</p>
<p>Gufw를 사용하여 UFW 방화벽을 설정해 봅시다. 설치되어 있지 않다면 다음과 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> gufw</div></td></tr></tbody></table></div>
<div id="attachment_2522" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/06/Gufw-in-Dash.png" rel="lightbox[2624]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/06/Gufw-in-Dash-300x189.png" alt="Gufw in Dash" title="Gufw in Dash" width="300" height="189" class="size-medium wp-image-2522" /></a><p class="wp-caption-text">Gufw in Dash</p></div>
<p>Dash에서 시스템을 선택하고 방화벽 설정을 Click합니다.</p>
<div id="attachment_2653" class="wp-caption aligncenter" style="width: 281px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/Gufw.png" rel="lightbox[2624]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/Gufw-271x300.png" alt="Gufw" title="Gufw" width="271" height="300" class="size-medium wp-image-2653" /></a><p class="wp-caption-text">Gufw</p></div>
<p>Gufw가 실행되면 새로운 Rule을 추가하기 위해서 추가 Button을 누릅니다.</p>
<div id="attachment_2655" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/Gufw-Add-Rule-Subversion.png" rel="lightbox[2624]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/Gufw-Add-Rule-Subversion-300x115.png" alt="Gufw - Add Rule (Subversion)" title="Gufw - Add Rule (Subversion)" width="300" height="115" class="size-medium wp-image-2655" /></a><p class="wp-caption-text">Gufw - Add Rule (Subversion)</p></div>
<p>간단하게 Tab에서 Allow, In, Both를 선택하고 Subversion의 Service Port인 3690을 입력한 후, 추가를 누르면 외부에서 Server로 svn://을 사용해서 접근할 수 있게 됩니다.</p>
<h4>2.3 Project 저장소 생성</h4>
<p>이제 Project Source를 Import (저장소에 Source Code를 등록)하기 위해서 Project 저장소를 생성해 봅시다.</p>
<p>예를 들어, hello라는 Project에 대한 저장소를 만들기 원한다면 아래와 같이 Terminal에서 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">svnadmin</span> create <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>hello<br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> www-data:subversion <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>hello <span style="color: #660033;">-R</span><br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> g+rws <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>hello <span style="color: #660033;">-R</span></div></td></tr></tbody></table></div>
<p>위의 명령을 통해서 hello Project에 대한 저장소를 생성하고 적당한 권한을 부여했습니다. 그 다음, 저장소에 접근할 수 있는 ID와 Password를 설정하기 위해서 저장소의 설정을 변경해야 합니다. 아래와 같이 입력하여 수정합시다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">vi</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>hello<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span>svnserve.conf</div></td></tr></tbody></table></div>
<p>svnserve.conf의 중간쯤에 아래와 같이 되어 있는 부분을,</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;"># </span>password-db = <span style="color: #c20cb9; font-weight: bold;">passwd</span></div></td></tr></tbody></table></div>
<p>#을 제거하여 다음과 같이 변경하고 저장합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">password-db = <span style="color: #c20cb9; font-weight: bold;">passwd</span></div></td></tr></tbody></table></div>
<p>마지막으로 ID와 Password를 설정할 차례입니다. 아래와 같이 입력하여 설정합시다. (ID가 foo이고 Password가 bar인 경우의 예)</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">vi</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>hello<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #c20cb9; font-weight: bold;">users</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
foo = bar</div></td></tr></tbody></table></div>
<h4>2.4 Import</h4>
<p>Project 저장소를 생성했으니 Source Code를 Import해 봅시다.</p>
<p>예를 들기 위해서 hello라는 Project를 만들어 봅시다. Subversion Project 저장소에 Import하기 위한 Directory 구조인 branches, tags, trunk를 생성하고 trunk에 hello.c를 간단하게 작성합시다. 아래와 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> hello<br />
$ <span style="color: #7a0874; font-weight: bold;">cd</span> hello<br />
<span style="color: #666666;">hello$ </span><span style="color: #c20cb9; font-weight: bold;">mkdir</span> branches tags trunk<br />
<span style="color: #666666;">hello$ </span><span style="color: #7a0874; font-weight: bold;">cd</span> trunk<br />
<span style="color: #666666;">trunk$ </span><span style="color: #c20cb9; font-weight: bold;">vi</span> hello.c</div></td></tr></tbody></table></div>
<div class="codecolorer-container c blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello, World!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Source가 완성되었으니 Import를 해봅시다. import를 하기 위해서는 다음과 같이 입력해야 합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">svn import</span> <span style="color: #000000; font-weight: bold;">&lt;</span>Import할 Directory<span style="color: #000000; font-weight: bold;">&gt;</span> svn:<span style="color: #000000; font-weight: bold;">//&lt;</span><span style="color: #c20cb9; font-weight: bold;">passwd</span>에 설정한 ID<span style="color: #000000; font-weight: bold;">&gt;@&lt;</span>Server Name 또는 Address<span style="color: #000000; font-weight: bold;">&gt;/&lt;</span>생성한 Project 저장소 이름<span style="color: #000000; font-weight: bold;">&gt;</span></div></td></tr></tbody></table></div>
<p>hello Project를 이전에 생성한 hello Project 저장소로 Import하는 경우를 예로 들면 다음과 같습니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">trunk$ </span><span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>..<br />
$ <span style="color: #c20cb9; font-weight: bold;">svn import</span> hello svn:<span style="color: #000000; font-weight: bold;">//</span>foo<span style="color: #000000; font-weight: bold;">@</span>localhost<span style="color: #000000; font-weight: bold;">/</span>hello</div></td></tr></tbody></table></div>
<p>위와 같이 입력하면 vi가 표시되면서 Import에 대한 Log Message를 입력할 수 있습니다. Log Message를 적고 저장한 후 vi를 종료하면 ID에 대한 암호를 묻고, 제대로 입력했다면 저장소에 Source Code가 Import 됩니다.</p>
<h4>2.5 Checkout</h4>
<p>제대로 Project 저장소에 Import가 되었는지 확인하기 위해서 Checkout(저장소에 존재하는 최신의 Source를 Download)을 받아봅시다. </p>
<p>Checkout을 위한 명령어 구문은 다음과 같습니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">svn co</span> svn:<span style="color: #000000; font-weight: bold;">//&lt;</span><span style="color: #c20cb9; font-weight: bold;">passwd</span>에 설정한 ID<span style="color: #000000; font-weight: bold;">&gt;@&lt;</span>Server Name 또는 Address<span style="color: #000000; font-weight: bold;">&gt;/&lt;</span>생성한 Project 저장소 이름<span style="color: #000000; font-weight: bold;">&gt;</span></div></td></tr></tbody></table></div>
<p>위에서 예를 든 hello Project를 Checkout 받는 경우라면 다음과 같이 입력해야 합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">svn co</span> svn:<span style="color: #000000; font-weight: bold;">//</span>foo<span style="color: #000000; font-weight: bold;">@</span>localhost<span style="color: #000000; font-weight: bold;">/</span>hello</div></td></tr></tbody></table></div>
<p>제대로 Checkout 받았다면 hello Directory가 생기면서 그 안에 branches, tags, trunk Directory와 trunk/hello.c가 존재할 것입니다.</p>
<h3>3. svn+ssh:// Protocol을 사용할 경우</h3>
<p>svn+ssh:// Protocol은 Subversion Service Daemon을 실행하지 않고도 SSH protocol을 사용하여 Tunneling을 통해 Subversion Project 저장소에 접근할 수 있습니다.</p>
<p>보통의 경우 SSH Server를 구성하여 System을 관리하는 경우가 많기 때문에 특별한 설정없이 간단하게 Subversion Server를 구성할 수 있습니다. 또한 SSH의 Tunneling을 사용하기 때문에 암호화되어 Data가 전송되므로 안전합니다.</p>
<p>다만 각 Project 저장소마다 ID와 Password를 따로 만들어 줄 수 있는 svn:// Protocol과는 달리 System에 생성된 계정으로 접근하기 때문에 계정만 있다면 모든 Project 저장소에 접근할 수 있는 단점이 존재합니다. (굳이 구분하려 한다면 Project 저장소 Directory에 권한 설정으로 가능할 것 같네요.)</p>
<h4>3.1 OpenSSH Server 설치</h4>
<p>svn+ssh:// Protocol을 사용하기 위해서 OpenSSH Server를 설치합시다. 설치방법은 간단합니다. 다음과 같이 Terminal에서 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> openssh-server</div></td></tr></tbody></table></div>
<p>설치된 SSH Server가 System 시작 시에 자동으로 실행되게 하려면 다음과 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> update-rc.d <span style="color: #c20cb9; font-weight: bold;">ssh</span> defaults</div></td></tr></tbody></table></div>
<h4>3.2 방화벽 설정</h4>
<p>UFW 방화벽이 활성화 되어 있다면 SSH Server를 위해서 방화벽 설정을 해 주어야 합니다. 방화벽을 사용하지 않을 경우에는 이 부분을 건너뛰어도 좋습니다.</p>
<p>Gufw를 사용하여 UFW 방화벽을 설정해 봅시다. 설치되어 있지 않다면 다음과 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> gufw</div></td></tr></tbody></table></div>
<div id="attachment_2522" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/06/Gufw-in-Dash.png" rel="lightbox[2624]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/06/Gufw-in-Dash-300x189.png" alt="Gufw in Dash" title="Gufw in Dash" width="300" height="189" class="size-medium wp-image-2522" /></a><p class="wp-caption-text">Gufw in Dash</p></div>
<p>Dash에서 시스템을 선택하고 방화벽 설정을 누릅니다.</p>
<div id="attachment_2653" class="wp-caption aligncenter" style="width: 281px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/Gufw.png" rel="lightbox[2624]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/Gufw-271x300.png" alt="Gufw" title="Gufw" width="271" height="300" class="size-medium wp-image-2653" /></a><p class="wp-caption-text">Gufw</p></div>
<p>Gufw를 실행되면, Unlock을 눌러 Superuser 권한을 얻은 후, 추가 Button을 누릅니다.</p>
<div id="attachment_2654" class="wp-caption aligncenter" style="width: 310px"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/Gufw-Add-Rule-SSH.png" rel="lightbox[2624]"><img src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2011/07/Gufw-Add-Rule-SSH-300x115.png" alt="Gufw - Add Rule (SSH)" title="Gufw - Add Rule (SSH)" width="300" height="115" class="size-medium wp-image-2654" /></a><p class="wp-caption-text">Gufw - Add Rule (SSH)</p></div>
<p>편리하게 Tab에서 Allow, In, Service, SSH를 선택하고 추가 Button을 누르면 외부에서도 Server의 SSH Service에 접근할 수 있게 됩니다.</p>
<h4>3.3 Project 저장소 생성</h4>
<p>이제 Project 저장소를 생성해 봅시다. 위에서 만든 hello Project를 위한 저장소를 만들기 위해서는 다음과 같이 입력하면 됩니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">svnadmin</span> create <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>hello<br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> www-data:subversion <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>hello <span style="color: #660033;">-R</span><br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> g+rws <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>hello <span style="color: #660033;">-R</span></div></td></tr></tbody></table></div>
<p>Project 저장소를 만든 다음에 접근할 수 있는 계정을 생성해야 합니다. 예를 들어 foo라는 계정을 Subversion Project 저장소에 접근할 수 있도록 하려면 다음과 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> useradd <span style="color: #660033;">-g</span> subversion foo<br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">passwd</span> foo</div></td></tr></tbody></table></div>
<p>또는 기존에 System에 존재하는 계정을 Subversion Project 저장소에 접근하게 하려면 아래와 같이 입력하면 됩니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> usermod <span style="color: #660033;">-a</span> <span style="color: #660033;">-G</span> subversion <span style="color: #000000; font-weight: bold;">&lt;</span>subversion을 사용할 계정<span style="color: #000000; font-weight: bold;">&gt;</span></div></td></tr></tbody></table></div>
<h4>3.4 Import</h4>
<p>svn+ssh:// Protocol을 사용하기 위한 준비가 끝났습니다. 이제 Project Source를 Import해 봅시다. import 시에 명령 구문은 아래와 같습니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">svn import</span> <span style="color: #000000; font-weight: bold;">&lt;</span>Import할 Directory<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">svn</span>+ssh:<span style="color: #000000; font-weight: bold;">//&lt;</span>Server에 Login 가능한 ID<span style="color: #000000; font-weight: bold;">&gt;@&lt;</span>Server Name 또는 Address<span style="color: #000000; font-weight: bold;">&gt;/&lt;</span>Subversion 저장소 Directory<span style="color: #000000; font-weight: bold;">&gt;/&lt;</span>생성한 Project 저장소 이름<span style="color: #000000; font-weight: bold;">&gt;</span></div></td></tr></tbody></table></div>
<p>svn:// Protocol을 사용할 때와 다른 점은 Server Name과 Project 저장소 이름 사이에 Subversion 저장소의 System 경로를 적어야 한다는 것입니다. </p>
<p>예를 들어 위에 설정한 것 처럼 Subversion 저장소가 /home/svn이고, 생성한 Project 저장소 이름이 hello인 경우 다음과 같이 Terminal에서 입력해야 합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">svn import</span> hello <span style="color: #c20cb9; font-weight: bold;">svn</span>+ssh:<span style="color: #000000; font-weight: bold;">//</span>foo<span style="color: #000000; font-weight: bold;">@</span>localhost<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>hello</div></td></tr></tbody></table></div>
<p>위의 명령을 입력하면 처음으로 SSH Server에 접속할 경우 계속 접속할 것인지 여부를 묻는데 yes라고 입력한 후 접속할 계정의 비밀번호를 입력합니다. 이후 나머지 과정은 svn:// Protocol을 사용하여 Import할 때와 동일합니다.</p>
<h4>3.5 Checkout</h4>
<p>이번에는 Import한 Project Source를 Checkout 해 봅시다. 명령구문은 다음과 같습니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">svn co</span> <span style="color: #c20cb9; font-weight: bold;">svn</span>+ssh:<span style="color: #000000; font-weight: bold;">//&lt;</span>Server에 Login 가능한 ID<span style="color: #000000; font-weight: bold;">&gt;@&lt;</span>Server Name 또는 Address<span style="color: #000000; font-weight: bold;">&gt;/&lt;</span>Subversion 저장소 Directory<span style="color: #000000; font-weight: bold;">&gt;/&lt;</span>생성한 Project 저장소 이름<span style="color: #000000; font-weight: bold;">&gt;</span></div></td></tr></tbody></table></div>
<p>Import의 경우와 마찬가지로 여기서도 Server Name과 Project 저장소 이름 사이에 Subversion 저장소 Directory 경로가 포함되어야 합니다. 위에서 예로 Import한 hello Project를 Checkout하려면 아래와 같이 입력합니다.</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">svn co</span> <span style="color: #c20cb9; font-weight: bold;">svn</span>+ssh:<span style="color: #000000; font-weight: bold;">//</span>foo<span style="color: #000000; font-weight: bold;">@</span>localhost<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>hello</div></td></tr></tbody></table></div>
<h3>4. 마치면서&#8230;</h3>
<p>이상으로 Ubuntu Natty Narwhal 11.04에서 Subversion Server를 구성하는 방법을 알아봤습니다. 마지막으로 Subversion에 대한 자세한 정보를 얻기 원한다면 다음 Link를 방문해 보기 바랍니다.</p>
<ul>
<li>Apache Subversion Project : <a href="http://subversion.apache.org" target="_blank">http://subversion.apache.org</a></li>
<li>Version Control with Subversion (Free E-Book) : <a href="http://svnbook.red-bean.com" target="_blank">http://svnbook.red-bean.com</a></li>
<li>Version Control with Subversion 한국어 번역 : <a href="http://wiki.kldp.org/wiki.php/SubversionBook" target="_blank">http://wiki.kldp.org/wiki.php/SubversionBook</a></li>
</ul>
  
<div class="wp_license">
<p><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/"><img src="http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png" alt="Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea" class="alignleft" style="margin-top:4px;" />
</a>This work  is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/">Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea</a>.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://ioriy2k.pe.kr/archives/2624/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse 3.5 Galileo에서 Subclipse로 SVN 연동하기 (2) Subclipse 기능 알아보기</title>
		<link>http://ioriy2k.pe.kr/archives/343</link>
		<comments>http://ioriy2k.pe.kr/archives/343#comments</comments>
		<pubDate>Thu, 10 Dec 2009 15:01:13 +0000</pubDate>
		<dc:creator>ioriy2k</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Flex / AIR]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Builder]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Subclipse]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://ioriy2k.pe.kr/?p=343</guid>
		<description><![CDATA[이제 Project를 Checkout 받았으니 Eclipse를 통해서 Project source를 관리할 수 있습니다. Subclipse의 기본적인 개념은 Subversion의 그것과 동일합니다. Subversion을 잘 모른다면 KLDP의 Wiki page를 참고하면 도움이 될 것입니다. 간단하게 Subclipse의 주요 기능에 대해서 알아봅시다. 1. Team Synchronizing Perspective Team Synchronizing Perspective는 Eclipse IDE를 변경시켜 Subclipse에서 제공하는 CVS, SVN 등의 소스관리 툴과 연동을 위한 동작을 처리하기 위한 [...]]]></description>
			<content:encoded><![CDATA[<p>이제 Project를 Checkout 받았으니 Eclipse를 통해서 Project source를 관리할 수 있습니다. Subclipse의 기본적인 개념은 Subversion의 그것과 동일합니다. Subversion을 잘 모른다면 <a href="http://wiki.kldp.org/wiki.php/Subversion-HOWTO" target="_blank">KLDP의 Wiki page</a>를 참고하면 도움이 될 것입니다. 간단하게 Subclipse의 주요 기능에 대해서 알아봅시다.</p>
<p><span id="more-343"></span></p>

<h2>1. Team Synchronizing Perspective</h2>
<p>Team Synchronizing Perspective는 Eclipse IDE를 변경시켜 Subclipse에서 제공하는 CVS, SVN 등의 소스관리 툴과 연동을 위한 동작을 처리하기 위한 작업환경입니다.</p>
<p style="text-align: left;"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse19.jpg" rel="lightbox[343]"><img class="aligncenter" title="fb4-subclipse19" src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse19-300x270.jpg" alt="fb4-subclipse19" width="300" height="270" /></a></p>
<p style="text-align: left;">Perspective 를 변경하기 위해서는 Package Explorer에서 해당 Project위에서 Mouse 오른쪽 button으로 Popup을 띄운 후, Team-&gt;Synchronize with Repository를 클릭합니다.</p>
<p style="text-align: left;"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse20.jpg" rel="lightbox[343]"><img class="aligncenter" title="fb4-subclipse20" src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse20-300x151.jpg" alt="fb4-subclipse20" width="300" height="151" /></a></p>
<p style="text-align: left;">처음으로 Team Synchronizing Perspective를 실행한 경우 아래와 같은 Message가 표시됩니다. Yes를 클릭합니다.</p>
<p style="text-align: left;"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse21.jpg" rel="lightbox[343]"><img class="aligncenter" title="fb4-subclipse21" src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse21-300x225.jpg" alt="fb4-subclipse21" width="300" height="225" /></a></p>
<p style="text-align: left;">Team Synchronizing Perspective를 IDE에 설정한 화면입니다. 왼쪽에 Source관리를 위한 Synchronize View와 Task Repositories View가 표시됩니다. Synchronize View에서는 SVN의 각 동작을 처리할 수 있고, Task Repositories에서는 Local 저장소를등록하고 관리할 수 있습니다.</p>
<h2>2. Update</h2>
<p>Project를 저장소로 부터 Update 받기 위해서는, Package Explorer에서 Update 받을 Project의 Folder위에서 Popup을 띄운 후, Team-&gt;Update to HEAD 또는 Update to version을 클릭하면 됩니다.</p>
<p>여기서 Update to HEAD는 저장소에서 현재 최신의 Source를 Update하며, Update to version은 저장소에서 해당 Revision의 Source를 가지고 현재 Source를 Update합니다.</p>
<h2>3. Commit</h2>
<p>Project를 개발하다가 저장소에 변경된 내용을 저장하기 위해서는 Commit을 해야 합니다. Commit하기 전에는 먼저 저장소에 변경된 내용이 없는 지 확인하기 위해서 먼저 Update를 수행하는 것 좋습니다. 변경된 Source file은 Package Explorer에서 해당 Source의 Icon이 변경되어 있는 것으로 확인할 수 있습니다.</p>
<p>Commit을 하기 위해서는 Package Explorer에서 Commit할 Source가 존재하는 Project의 Folder위에서 Popup을 띄운 후, Team-&gt;Commit을 클릭합니다.</p>
<p style="text-align: left;"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse22.jpg" rel="lightbox[343]"><img class="aligncenter" title="fb4-subclipse22" src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse22-300x120.jpg" alt="fb4-subclipse22" width="300" height="120" /></a></p>
<p style="text-align: left;">클릭하면 위와 같은 Commit Dialog가 화면에 표시됩니다. 위에 Textarea에는 변경사항을 텍스트로 적을 수 있고 아래의 Tree에는 변경된 Source의 목록이 표시됩니다. 여기서 Check된 항목만 Commit되기 때문에 Commit시에 필요한 파일만 Commit할 수도 있습니다. OK를 누르게 되면 Commit이 완료됩니다.</p>
<h2>4. History</h2>
<p>저장소의 History를 확인할 수 있습니다. 누가 어떤 Source의 무슨 내용을 변경했는지에 대한 정보를 확인할 수 있습니다. 누가 저장소에 Source를 잘못 올려놓아서 Update를 했는데 Compile이 되지 않거나 문제가 생긴다면 추적하는데 사용할 수 있습니다.ㅋㅋ</p>
<p>Package Explorer에서 Project Folder위에서 Popup을 띄운 후, Team-&gt;Show History를 클릭하면 아래와 같이 History View가 아래에 표시됩니다.</p>
<p style="text-align: center;"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse23.jpg" rel="lightbox[343]"><img class="aligncenter" title="fb4-subclipse23" src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse23-300x82.jpg" alt="fb4-subclipse23" width="300" height="82" /></a></p>
<h2>5. Revert</h2>
<p>현재 변경된 Source의 수정된 내용을 무시하고 저장소에 저장된 이전 Source로 돌리고 싶을 때 사용합니다. Package Explorer에서 변경된 Source위에서 Popup을 띄우고 Team-&gt;Revert를 클릭하면 아래와 같이 Revert Dialog가 뜹니다.</p>
<p style="text-align: left;"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse24.jpg" rel="lightbox[343]"><img class="aligncenter" title="fb4-subclipse24" src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse24-300x279.jpg" alt="fb4-subclipse24" width="300" height="279" /></a></p>
<p style="text-align: left;">되돌릴 Source에 체크한 후 OK를 누르면 저장소의 최신버전으로 선택한 Source를 변경합니다.</p>
<h2>6. Branch/Tag 생성하기</h2>
<p>쉽게 이야기 하면 Branch는 현재 Project에서 다른 가지로 나와서 새로운 기능을 시도하는 등의 변종 Project를 의미하고, Tag는 현재 Project를 Release하는 시점의 Source를 보관하고 Version tag를 붙인 Source를 의미합니다. Branch와 Tag를 생성하기 위해서는, Branch와 Tag를 할 Folder의 상위 Folder를 선택한 후, Mouse 오른쪽 Popup에서 Team-&gt;Branch/Tag를 클릭합니다.</p>
<p style="text-align: left;"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse25.jpg" rel="lightbox[343]"><img class="aligncenter" title="fb4-subclipse25" src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse25-300x215.jpg" alt="fb4-subclipse25" width="300" height="215" /></a></p>
<p style="text-align: left;">Branch/Tag Dialog에서 Copy to URL에는 해당 Branch 또는 Tag가 저장될 저장소의 주소를 입력하고 Next를 클릭합니다.</p>
<p style="text-align: left;"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse26.jpg" rel="lightbox[343]"><img class="aligncenter" title="fb4-subclipse26" src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse26-300x215.jpg" alt="fb4-subclipse26" width="300" height="215" /></a></p>
<p style="text-align: left;">저장소의 어떤 Revision을 Branch 또는 Tag로 등록할지에 대해서 선택합니다. 위의 그림에서는 최신 Revision에 대하여 Branch/Tag를 등록하는 설정입니다. Next를 클릭합니다.</p>
<p style="text-align: left;"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse27.jpg" rel="lightbox[343]"><img class="aligncenter" title="fb4-subclipse27" src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse27-300x215.jpg" alt="fb4-subclipse27" width="300" height="215" /></a></p>
<p style="text-align: left;">마 지막으로 Comment를 작성하고 Finish를 클릭하면 저장소의 해당 위치에 Branch/Tag가 등록됩니다. 등록이 최종 완료되면 위와 같은 그림처럼 Package Explorer에서 해당 위치에 등록 된 것을 확인할 수 있습니다.</p>
<p style="text-align: center;"><a href="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse28.jpg" rel="lightbox[343]"><img class="aligncenter" title="fb4-subclipse28" src="http://ioriy2k.pe.kr/wordpress/wp-content/uploads/2009/12/fb4-subclipse28.jpg" alt="fb4-subclipse28" width="253" height="210" /></a></p>
<h2>7. 마치면서</h2>
<p>이상으로 Eclipse 3.5 Galileo에 설치된 Subclipse 1.6의 각 기능들을 간단하게 살펴보았습니다. Subclipse로 Eclipse에서 작업하는 모든 Project의 Source를 효율적으로 관리하시길 바랍니다.</p>
<p>&#8211; God Bless..</p>
  
<div class="wp_license">
<p><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/"><img src="http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png" alt="Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea" class="alignleft" style="margin-top:4px;" />
</a>This work  is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.0/kr/">Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea</a>.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://ioriy2k.pe.kr/archives/343/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 3/29 queries in 0.383 seconds using disk: basic
Object Caching 2457/2503 objects using disk: basic

Served from: ioriy2k.pe.kr @ 2012-05-20 10:19:27 -->
