<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>프로가 되자.</title>
		<link>http://b4you.net/blog/</link>
		<description>빗소리를 먹는 사람.</description>
		<language>ko</language>
		<pubDate>Wed, 01 Sep 2010 16:33:18 +0900</pubDate>
		<generator>Textcube 1.7.6 : Staccato</generator>
		<image>
		<title>프로가 되자.</title>
		<url>http://b4you.net/blog/attach/1/1048813320.gif</url>
		<link>http://b4you.net/blog/</link>
		<width>60</width>
		<height>60</height>
		<description>빗소리를 먹는 사람.</description>
		</image>
		<item>
			<title>Xcode 자동 완성 부분 disable 하기</title>
			<link>http://b4you.net/blog/255</link>
			<description>오랜만의 포스팅 입니다.&lt;br /&gt;
&lt;br /&gt;
Xcode에서 자동 완성이 귀찮을 경우 또는 수정이 필요한 경우 해당 keyword를 disable 할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
우선 Xcode 설치 디렉토리안의&lt;br /&gt;
&lt;br /&gt;
Applications/Xcode.app/Contents/PlugIns/TextMacros.xctxtmacro/Contents/Resources&lt;br /&gt;
&lt;br /&gt;
디렉토리로 이동하신 뒤&lt;br /&gt;
&lt;br /&gt;
(예: /Developer/Applications/Xcode.app/Contents/PlugIns/TextMacros.xctxtmacro/Contents/Resources)&lt;br /&gt;
&lt;br /&gt;
C.xctxtmacro 파일을 편집 해 주시면 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
위 파일을 열면..&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;{
  Identifier = c.block.if;
  BasedOn = c.block;
  Name = &quot;If Block&quot;;
  IsMenuItem = YES;
  OnlyAtBOL = YES;
  Command = &quot;if&quot;;
  Expressions = &quot;&amp;lt;#condition#&amp;gt;&quot;;
  CompletionPrefix = if;
  CycleList = (
      c.block.if,
      c.block.ifelse,
  );
},
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
와 같은 code block이 나오는데 이 부분을 적당히 검색 하셔서 삭제 또는 주석처리(/* ~ */) 하시면 됩니다.&lt;br /&gt;
&lt;br /&gt;
수정한 뒤 Xcode를 재시작 하면 제대로 적용된 것을 보실 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
이 부분을 이용하여 자기가 원하는 자동완성을 등록해도 됩니다.&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>iPhone Application</category>
			<category>Auto Completion</category>
			<category>Xcode</category>
			<category>자동 완성</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/255</guid>
			<comments>http://b4you.net/blog/255#entry255comment</comments>
			<pubDate>Mon, 09 Aug 2010 17:19:36 +0900</pubDate>
		</item>
		<item>
			<title>Android SDK 문제 해결</title>
			<link>http://b4you.net/blog/254</link>
			<description>Android SDK를 다운로드한 뒤 tools/android update sdk 를 실행하면&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Failed to fetch URL https://dl-ssl.google.com/andr oid/repository/repository.xml&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;와 같이 오류가 발생할 때가 있습니다.&lt;/div&gt;&lt;div&gt;이럴땐&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;~/.android/androidtool.cfg 파일을 열어&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;sdkman.force.http = true&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;라고 입력 한 뒤 재시도 하면 됩니다. (파일이 없으면 생성)&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>Ubuntu</category>
			<category>Android SDK</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/254</guid>
			<comments>http://b4you.net/blog/254#entry254comment</comments>
			<pubDate>Fri, 04 Dec 2009 10:19:10 +0900</pubDate>
		</item>
		<item>
			<title>Ubuntu 에서 man page 보기</title>
			<link>http://b4you.net/blog/253</link>
			<description>기본으로 설정 되어 있는 Ubuntu 환경에서는 man page가 보이지 않는다.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;이럴 경우 다음과 같은 package 추가를 통해 man page를 사용할 수 있다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;sudo apt-get install manpages-dev&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>Ubuntu</category>
			<category>man page</category>
			<category>Ubuntu</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/253</guid>
			<comments>http://b4you.net/blog/253#entry253comment</comments>
			<pubDate>Tue, 01 Dec 2009 17:46:53 +0900</pubDate>
		</item>
		<item>
			<title>Android 다운로드 시 “remote end hung up unexpectedly&quot; 오류가 발생할 때</title>
			<link>http://b4you.net/blog/252</link>
			<description>Android platform을 repo를 이용하여 git에서 다운로드 할 때 자꾸 remote end hung up unexpectedly 라는 오류가 나면서 접속이 끊기는 경우가 있습니다.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;이럴 땐 다음과 같은 방법으로 피해(?)를 최소화 할 수 있습니다:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;1. repo init 하여 초기화 해 놓은 디렉토리로 이동합니다.&lt;/div&gt;&lt;div&gt;2. vi .repo/repo/subcmds/sync.py 를 이용하여 sync.py 파일을 편집합니다&lt;/div&gt;&lt;div&gt;3. _Fetch를 검색하여 다음과 같이 수정합니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;  def _Fetch(self, projects):&lt;/div&gt;&lt;div&gt;    fetched = set()&lt;/div&gt;&lt;div&gt;    pm = Progress(&#039;Fetching projects&#039;, len(projects))&lt;/div&gt;&lt;div&gt;    for project in projects:&lt;/div&gt;&lt;div&gt;      pm.update()&lt;/div&gt;&lt;div&gt;      while True:&lt;/div&gt;&lt;div&gt;        if project.Sync_NetworkHalf():&lt;/div&gt;&lt;div&gt;          fetched.add(project.gitdir)&lt;/div&gt;&lt;div&gt;          break&lt;/div&gt;&lt;div&gt;        else:&lt;/div&gt;&lt;div&gt;          print &amp;gt;&amp;gt;sys.stderr, &#039;error: Cannot fetch %s&#039; % project.name&lt;/div&gt;&lt;div&gt;    pm.end()&lt;/div&gt;&lt;div&gt;    return fetched&lt;/div&gt;&lt;div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;기존의 소스와 달라진 점이 있다면&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&quot;while True:&quot;와 &quot;break&quot;를 추가한 것과 &quot;sys.exit(1)&quot; 을 삭제한 것이 다릅니다. 즉 그냥 소스 코드 다운로드 될 때 까지 무한 루프 돌겠다 이거죠.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;출처: &lt;a href=&quot;http://android.amberfog.com/?p=230&quot;&gt;http://android.amberfog.com/?p=230&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>Android</category>
			<category>Android</category>
			<category>repo</category>
			<category>프로그래밍</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/252</guid>
			<comments>http://b4you.net/blog/252#entry252comment</comments>
			<pubDate>Fri, 20 Nov 2009 10:21:17 +0900</pubDate>
		</item>
		<item>
			<title>putty에서 인증 과정 ppk로 대체하기</title>
			<link>http://b4you.net/blog/251</link>
			<description>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 17px; border-collapse: collapse; &quot;&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;putty에서 비밀번호 입력 과정을 ppk로 처리하는 방법 입니다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;-------------------------------------------------&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;원래 ssh는 private_key와 public_key인증 및 ssh_agent를&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;이용하여 서버에 패스워드 인증없이 접속이 가능하다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;Putty도 SSH1에서는 이기능을 사용할 수 있는 것으로 알려졌다.&lt;br&gt;하지만, 보안상의 이유로 SSH1 키 인증은 사용을 꺼려지고 있다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;Putty나름대로... SSH2에서도 PuttyGen을 이용하여 Private키를 생성하여&lt;br&gt;접속을 가능하게 하여고 했으나.. 아직까지는 개발이 진행되지는 않았다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;단 &lt;span style=&quot;font-weight: bold; &quot;&gt;Putty 0.53b&lt;/span&gt;의 Puttygen은 openssh에서 생성된 SSH2 private_key를&lt;br&gt;Putty 고유의 키로 변환하는 기능을 제공하는데..&lt;br&gt;이방식을 이용하면. SSH2로 Putty도 인증없이 접속이 가능하다!!!&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;&lt;span style=&quot;font-weight: bold; &quot;&gt;1. Private_key 생성하기.&lt;/span&gt;&lt;br&gt;Putty로 일단 접속하고자 하는 서버에 접속을 한다.&lt;br&gt;그리고 다음과 같이 키를 생성한다.&lt;br&gt;&lt;/p&gt;&lt;pre class=&quot;bb-code-block&quot; style=&quot;background-color: rgb(238, 238, 238); padding-top: 0.75em; padding-right: 1.5em; padding-bottom: 0.75em; padding-left: 1.5em; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); &quot;&gt;[admin@ns admin]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/admin/.ssh/id_rsa.
Your public key has been saved in /home/admin/.ssh/id_rsa.pub.
The key fingerprint is:
ff:a5:10:ad:c8:7a:4f:40:42:69:df:c3:00:d3:a3:5b &amp;lt;a href=&quot;mailto:admin@ns.foobar.net&quot;&amp;gt;admin@ns.foobar.net&amp;lt;/a&amp;gt;
[admin@ns admin]$&lt;/pre&gt;&lt;br&gt;이 때 암호는 입력하지 않아도 된다. 나중에 따로 지정할 수 있기 때문이다.&lt;br&gt;자 생성된 Public Key를 authorized_keys로 옮기고..&lt;br&gt;서버가 키로 접속이 가능한지 테스트 해본다.&lt;pre class=&quot;bb-code-block&quot; style=&quot;background-color: rgb(238, 238, 238); padding-top: 0.75em; padding-right: 1.5em; padding-bottom: 0.75em; padding-left: 1.5em; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); &quot;&gt;[admin@ns admin]$ mv .ssh/id_rsa.pub .ssh/authorized_keys
[admin@ns admin]$ ssh localhost
The authenticity of host &#039;localhost (127.0.0.1)&#039; can&#039;t be established.
RSA key fingerprint is 89:79:86:1b:cb:fc:a0:05:9c:65:88:b5:4c:1b:7f:c8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added &#039;localhost&#039; (RSA) to the list of known hosts.
Last login: Sun Jan 11 00:43:26 2004 from 192.168.0.25
[admin@ns admin]$&lt;/pre&gt;&lt;br&gt;자 다음과 같이 패스워드를 묻지 않고 접속이 가능하다면..&lt;br&gt;일단계 성공이다. 만약... 위의 방법으로 접속이 실패했다면...&lt;br&gt;sshd가 인증키로 인증을 허용하지 않기 때문이다.&lt;br&gt;이럴 경우.&lt;br&gt;sshd_config(보통은 /etc/ssh/sshd_config)에 다음 두줄이 포함되어 있는지 확인하자.&lt;br&gt;&lt;pre class=&quot;bb-code-block&quot; style=&quot;background-color: rgb(238, 238, 238); padding-top: 0.75em; padding-right: 1.5em; padding-bottom: 0.75em; padding-left: 1.5em; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); &quot;&gt;PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys&lt;/pre&gt;&lt;br&gt;주석처리되어 있으면 주석을 풀어주고, 없으면 추가해 놓은 후...&lt;br&gt;서버를 재시작하고.. 다시 위의 방법으로 시도해본다.&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;이부분에 관련된 자세한 내용은 아래의 링크를 참조해보라.&lt;br&gt;&lt;a href=&quot;http://wiki.kldp.org/wiki.php/DocbookSgml/SSH-KLDP#AEN87&quot;  class=&quot;bb-url&quot; style=&quot;text-decoration: none; font-weight: bold; color: rgb(51, 153, 204); &quot;&gt;인증키 사용하기&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;&lt;span style=&quot;font-weight: bold; &quot;&gt;2. Key를 가져와 Putty의 PPK로 변환하기..&lt;/span&gt;&lt;br&gt;자 psftp나 다른 ssh2 sftp가 지원되는 클라이언트로 생성한 private_key를 가져온다. 여기서는 putty와 함께 포함된 psftp를 사용했다.&lt;br&gt;&lt;/p&gt;&lt;pre class=&quot;bb-code-block&quot; style=&quot;background-color: rgb(238, 238, 238); padding-top: 0.75em; padding-right: 1.5em; padding-bottom: 0.75em; padding-left: 1.5em; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); &quot;&gt;C:\Program Files\HangulPuTTY&amp;gt;psftp &amp;lt;a href=&quot;mailto:admin@ns.foobar.net&quot;&amp;gt;admin@ns.foobar.net&amp;lt;/a&amp;gt;
사용자 이름 &quot;admin&quot;으로 시도합니다.
&amp;lt;a href=&quot;mailto:admin@ns.foobar.net&quot;&amp;gt;admin@ns.foobar.net&amp;lt;/a&amp;gt; 의 비밀번호:
Remote working directory is /home/admin
psftp&amp;gt; get ./.ssh/id_rsa
remote:/home/admin/.ssh/id_rsa =&amp;gt; local:id_rsa
psftp&amp;gt;exit
C:\Program Files\HangulPuTTY&amp;gt;&lt;/pre&gt;&lt;br&gt;이젠 puttygen을 이용하여 putty의 고유 개인키 포멧인 ppk로 변환할 차례이다. puttygen을 실행하면... 오른쪽 하단부분에 load라는 버튼이 보일 것이다.&lt;br&gt;그걸 클릭한 후.. 받아온 id_rsa파일을 열자. 파일형식이 ppk로 지정되어 있음으로... 모든 파일보기로 고쳐야 읽을 수 있을 것이다.&lt;br&gt;그럼 Succe... convert save어쩌고 하는 메세지 박스를 볼 수 있는데..&lt;br&gt;내용은 성공적으로 openssh 개인키를 가져오는 데 성공했고..&lt;br&gt;이 키를 사용하려면... 다시 ppk로 저장해야 한다는 내용을 설명하는 것이다.&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;자.. 이제.. load 및에 있는 save private key를 눌러...&lt;br&gt;Putty Private key=ppk로 저장한다.&lt;br&gt;이때 패스워드를 넣지 않으면.. 경고가 뜨는데..&lt;br&gt;개인의 취향대로 한다. 넣어둘 경우... pagent를 이용하면..&lt;br&gt;나중에 역시 패스워드 없이 접속이 가능해진다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;&lt;span style=&quot;font-weight: bold; &quot;&gt;3. putty 설정..&lt;/span&gt;&lt;br&gt;여기서는 iputty(한글 Putty)를 기준으로 한다. 영어와 한글의 차이일뿐&lt;br&gt;100% 동일하리라 믿는다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;일단 putty를 실행시킨후,&lt;br&gt;호스트 이름과 저장된 세션에 적절한 내용을 입력한다.(물론 프로토콜은 ssh로 해야한다.!!!)&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;왼쪽의 하단 부분에 &quot;접속&quot; 을 클릭한다음.. 계정명을 입력한다.&lt;br&gt;입력했으면 &quot;접속&quot; 및의 SSH-&amp;gt;인증을 클릭하고...&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;인증키 파일에 전에 생성한 ppk파일 경로를 지정한다.&lt;br&gt;다시 세션을 클릭한후.. 저장을 눌러 세션을 저장한다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;자 대망의 Password 인증없이 접속할 차례다.&lt;br&gt;떨리는 마음으로 열기을 눌러 보자!!!&lt;br&gt;약간의 지연과 함께... 다음과 같은 메세지가 나오면 성공한 것이다!!!&lt;br&gt;&lt;/p&gt;&lt;pre class=&quot;bb-code-block&quot; style=&quot;background-color: rgb(238, 238, 238); padding-top: 0.75em; padding-right: 1.5em; padding-bottom: 0.75em; padding-left: 1.5em; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); &quot;&gt;사용자 이름 &quot;admin&quot;으로 시도합니다.
에이전트로 인증되었습니다: 공개 키 &quot;imported-openssh-key&quot;
Last login: Tue Jan 13 03:05:24 2004 from 192.168.0.25
[admin@ns admin]$&lt;/pre&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;만약 ... ppk에 암호를 지정했던 사람들은 암호를 물어 볼것이다.&lt;br&gt;그럴 경우 원 암호가 아니라, ppk에 지정된 암호를 입력하면...된다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;&lt;span style=&quot;font-weight: bold; &quot;&gt;4. pagent를 이용하기.&lt;/span&gt;&lt;br&gt;이 부분은 ppk에 암호를 지정한 사람들에게만 해당된다.&lt;br&gt;pagent를 실헹하면 오른쪽 트레이에 모자를 쓴 putty의 아이콘이 등록된다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;오른쪽 마우스클릭하면.. addkey라는 것이 보일 것이다.&lt;br&gt;이를 클릭하면 키를 지정할 수 있는 창이 열린다.&lt;br&gt;해당 키를 지정하면.. 키의 암호를 묻는데...&lt;br&gt;이때 PPK의 암호를 입력한다.&lt;br&gt;그 다음 putty로 해당 세션으로 접속을 시도하면...&lt;br&gt;더이상 암호를 묻지 않는다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;자 putty로 서버를 관리하던 많은 사람들이여...&lt;br&gt;이제 보다 편리하게 서버를 관리하자!!..&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;끝으로 한글 putty를 개발하고 계신 perky님께 감사의 말씀을 드리면서...&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;&lt;span style=&quot;font-weight: bold; &quot;&gt;ps.. &lt;/span&gt;&lt;br&gt;추가로.. 아까 생성한 id_rsa.pub = authorized_keys도&lt;br&gt;재활용이 가능하다. 일단 psftp등으로 로컬로 복사받은 다음...&lt;br&gt;매 서버마다 위의 과정으로 매번 키를 생성하지 말고..&lt;br&gt;원격 접속이 필요한 서버에 pscp를 이용하여 복사해 넣으면 된다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;&lt;code class=&quot;bb-code&quot;&gt;C:\Program Files\HangulPuTTY&amp;gt;pscp authorized_keys admin@anotherhost:.ssh/authorized_keys&lt;/code&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;아니면.. 생성된 호스트에서..&lt;br&gt;&lt;code class=&quot;bb-code&quot;&gt;[admin@ns admin]$scp ~/.ssh/authorized_keys admin@anotherhost:.ssh/authorized_keys&lt;/code&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;&lt;span style=&quot;font-weight: bold; &quot;&gt;ps2&lt;/span&gt;&lt;br&gt;접속지연은 접속자의 호스트네임을 채크하는 것 때문에 그렇다.&lt;br&gt;접속자의 호스트네임 및 IP를 /etc/hosts 파일에 등록하면..&lt;br&gt;지연속도를 줄일 수 있다.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.5em; margin-bottom: 0.9em; &quot;&gt;출처: &lt;a href=&quot;http://kldp.org/node/28907&quot;&gt;http://kldp.org/node/28907&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>컴퓨터 이야기</category>
			<category>putty</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/251</guid>
			<comments>http://b4you.net/blog/251#entry251comment</comments>
			<pubDate>Mon, 09 Nov 2009 20:25:45 +0900</pubDate>
		</item>
		<item>
			<title>Reverse SSH Tunneling</title>
			<link>http://b4you.net/blog/249</link>
			<description>&lt;div&gt;[ A(1.1.1.1) &amp;lt;-&amp;gt; NAT ] &amp;lt;-&amp;gt; B(2.2.2.2)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;위와 같은 구조로 되어 있는 네트워크 망 에서 NAT망 안에 있는 A에서 B로 SSH접속하는 것은 매우 간단합니다. 그냥 SSH로 접속하면 되기 때문이죠.&lt;/div&gt;&lt;div&gt;그런데 B에서 A로 접속한다면?&lt;/div&gt;&lt;div&gt;이러한 경우 Reverse SSH 접속으로 포트 포워딩을 해서 접속할 수 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;1. tunneling&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;ssh -R &amp;lt;터널링 할 포트&amp;gt;:localhost:&amp;lt;로컬 포트&amp;gt; &amp;lt;B에 있는 계정&amp;gt;@2.2.2.2 &lt;/code&gt;&lt;/pre&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;터널링 할 포트&amp;gt;: B에 열릴 포트 입니다. 예를 들어서 1234라고 한다면 B에 1234/TCP 포트가 LISTEN상태로 됩니다.&lt;/div&gt;&lt;div&gt;&amp;lt;로컬 포트&amp;gt;: B와 연결 될 A의 포트 입니다.&lt;/div&gt;&lt;div&gt;&amp;lt;B에 있는 계정&amp;gt;: B로 접속 가능한 SSH 계정 입니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;예:&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;A-server$ ssh -R 1234:localhost:22 accessdenied@example.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;example.com 서버에 accessdenied계정으로 접속 하면서 localhost의 22번 포트를 example.com의 1234포트로 터널링&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;2. connect&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;1번 과정을 거치면 &amp;nbsp;A에서 B로 일반적인 SSH와 같은 접속이 됩니다. 여기서 일반 SSH 접속과 다른 점이 한 가지 있다면 B에 1234포트가 열린다는 것이죠.&lt;/div&gt;&lt;div&gt;B에서 A로 접속할 땐 단순히 &amp;lt;터널링 할 포트&amp;gt;로 SSH 하시면 됩니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;예:&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;B-server$ ssh localhost -p 1234&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;B에서 그냥 localhost의 1234번 포트로 SSH 접속하면 터널링 된 포트를 통해 A로 SSH 접속이 가능합니다.&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>컴퓨터 이야기</category>
			<category>SSH</category>
			<category>tunneling</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/249</guid>
			<comments>http://b4you.net/blog/249#entry249comment</comments>
			<pubDate>Fri, 16 Oct 2009 11:24:41 +0900</pubDate>
		</item>
		<item>
			<title>Git vs SVN</title>
			<link>http://b4you.net/blog/248</link>
			<description>SVN을 사용하다 Git로 오니 상당히 헤메게 되네요.&lt;div&gt;지나가다 좋은 자료가 있어 업로드 합니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Gulim; font-size: medium; line-height: normal; &quot;&gt;&lt;div style=&quot;font-family: Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); background-position: initial initial; &quot;&gt;&lt;table border=&quot;1&quot; summary=&quot;Navigation links&quot; class=&quot;header&quot; width=&quot;100%&quot; style=&quot;margin-left: 0em; margin-right: 0em; border-top-style: solid; border-right-style: none; border-bottom-style: solid; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0.4em; padding-right: 1em; padding-bottom: 0.4em; padding-left: 1em; margin-top: 0em; margin-bottom: 0em; font-size: 1em; font-weight: bold; border-top-width: 2px; border-top-color: rgb(17, 34, 68); border-bottom-width: 2px; border-bottom-color: rgb(17, 34, 68); color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(170, 221, 238); background-position: initial initial; &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; &quot;&gt;&lt;a href=&quot;http://git.or.cz/index.html&quot;  id=&quot;top&quot; style=&quot;text-decoration: none; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; font-weight: bold; float: left; margin-top: 0em; margin-right: 0em; margin-bottom: 0em; margin-left: 0em; display: inline; background-position: initial initial; &quot;&gt;&lt;img src=&quot;http://git.or.cz/git-logo.png&quot; width=&quot;72&quot; height=&quot;27&quot; alt=&quot;Git&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/a&gt;&lt;span class=&quot;menu&quot; style=&quot;text-align: right; display: block; &quot;&gt;&lt;a href=&quot;http://git.or.cz/index.html&quot;  style=&quot;text-decoration: none; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; font-weight: bold; background-position: initial initial; &quot;&gt;Home&lt;/a&gt;&amp;nbsp;| &lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/&quot;  style=&quot;text-decoration: none; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; font-weight: bold; background-position: initial initial; &quot;&gt;Documentation&lt;/a&gt;&amp;nbsp;| &lt;a href=&quot;http://git.or.cz/gitwiki&quot;  style=&quot;text-decoration: none; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; font-weight: bold; background-position: initial initial; &quot;&gt;Wiki&lt;/a&gt;&amp;nbsp;| &lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/&quot;  style=&quot;text-decoration: none; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; font-weight: bold; background-position: initial initial; &quot;&gt;Download Site&lt;/a&gt;&amp;nbsp;| &lt;a href=&quot;http://git.kernel.org/?p=git/git.git;a=summary&quot;  style=&quot;text-decoration: none; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; font-weight: bold; background-position: initial initial; &quot;&gt;Git&#039;s Gitweb&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1 style=&quot;font-size: 2em; text-align: center; margin-top: 1.4em; margin-right: 1.4em; margin-bottom: 1.4em; margin-left: 1.4em; font-weight: normal; &quot;&gt;Git - SVN Crash Course&lt;/h1&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Welcome to the Git version control system! Here we will briefly introduce you to Git usage based on your current Subversion knowledge. You will need the latest &lt;a href=&quot;http://git.or.cz/&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;Git&lt;/a&gt;&amp;nbsp;installed; There is also a potentially useful &lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;tutorial&lt;/a&gt;&amp;nbsp;in the Git documentation.&lt;/p&gt;&lt;ul class=&quot;toc&quot;&gt;&lt;li style=&quot;margin-top: 0em; margin-bottom: 0em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;a href=&quot;http://git.or.cz/course/svn.html#read&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;How to Read Me&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;margin-top: 0em; margin-bottom: 0em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;a href=&quot;http://git.or.cz/course/svn.html#know&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;Things You Should Know&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;margin-top: 0em; margin-bottom: 0em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;a href=&quot;http://git.or.cz/course/svn.html#commit&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;Commiting&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;margin-top: 0em; margin-bottom: 0em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;a href=&quot;http://git.or.cz/course/svn.html#browse&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;Browsing&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;margin-top: 0em; margin-bottom: 0em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;a href=&quot;http://git.or.cz/course/svn.html#branch&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;Tagging and Branching&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;margin-top: 0em; margin-bottom: 0em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;a href=&quot;http://git.or.cz/course/svn.html#merge&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;Merging&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;margin-top: 0em; margin-bottom: 0em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;a href=&quot;http://git.or.cz/course/svn.html#remote&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;Going Remote&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;margin-top: 0em; margin-bottom: 0em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;a href=&quot;http://git.or.cz/course/svn.html#share&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;Sharing the Work&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: center; &quot;&gt;&lt;table class=&quot;relnotes&quot; style=&quot;margin-left: auto; margin-right: auto; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center; &quot;&gt;&lt;p style=&quot;margin-left: 0.4em; margin-right: 0.4em; text-align: justify; margin-top: 0em; margin-bottom: 0em; &quot;&gt;If you are just after tracking someone else&#039;s project, this get you started quickly:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: auto; margin-right: auto; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 437px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); margin-top: 0em; margin-bottom: 0em; &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 120px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git clone &lt;em&gt;url&lt;/em&gt;&lt;br&gt;git pull&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn checkout &lt;em&gt;url&lt;/em&gt;&lt;br&gt;svn update&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h2 id=&quot;read&quot; style=&quot;font-size: 1.2em; margin-top: 2em; margin-left: 1em; margin-right: 1em; font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(17, 34, 68); &quot;&gt;How to Read Me&lt;/h2&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;In those small tables, at the left we always list the Git commands for the task, while at the right the corresponding Subversion commands you would use for the job are listed. If you are in hurry, just skimming over them should give you a good idea about the Git usage basics.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Before running any command the first time, it&#039;s recommended that you at least quickly skim through its manual page. Many of the commands have very useful and interesting features (that we won&#039;t list here) and sometimes there are some extra notes you might want to know. There&#039;s a quick usage help available for the Git commands if you pass them the &lt;code&gt;-h&lt;/code&gt;&amp;nbsp;switch.&lt;/p&gt;&lt;h2 id=&quot;know&quot; style=&quot;font-size: 1.2em; margin-top: 2em; margin-left: 1em; margin-right: 1em; font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(17, 34, 68); &quot;&gt;Things You Should Know&lt;/h2&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;There are couple important concepts it is good to know when starting with Git. If you are in hurry though, you can skip this section and only get back to it when you get seriously confused; it should be possible to pick up with just using your intuition.&lt;/p&gt;&lt;ul&gt;&lt;li style=&quot;margin-top: 0.5em; margin-bottom: 0.5em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;b&gt;Repositories.&lt;/b&gt;&amp;nbsp;With Subversion, for each project there is a single repository at some detached central place where all the history is and which you checkout and commit into. Git works differently, each copy of the project tree (we call that the &lt;em&gt;working copy&lt;/em&gt;) carries its own repository around (in the &lt;code&gt;.git&lt;/code&gt;&amp;nbsp;subdirectory in the project tree root). So you can have local and remote branches. You can also have a so-called &lt;em&gt;bare repository&lt;/em&gt;&amp;nbsp;which is not attached to a working copy; that is useful especially when you want to publish your repository. We will get to that.&lt;/li&gt;&lt;li style=&quot;margin-top: 0.5em; margin-bottom: 0.5em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;b&gt;URL.&lt;/b&gt;&amp;nbsp;In Subversion the &lt;em&gt;URL&lt;/em&gt;&amp;nbsp;identifies the location of the repository and the path inside the repository, so you organize the layout of the repository and its meaning. Normally you would have &lt;code&gt;trunk/&lt;/code&gt;, &lt;code&gt;branches/&lt;/code&gt;&amp;nbsp;and &lt;code&gt;tags/&lt;/code&gt;&amp;nbsp;directories. In Git the &lt;em&gt;URL&lt;/em&gt;&amp;nbsp;is just the location of the repository, and it always contains branches and tags. One of the branches is the default (normally named master).&lt;/li&gt;&lt;li style=&quot;margin-top: 0.5em; margin-bottom: 0.5em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;b&gt;Revisions.&lt;/b&gt;&amp;nbsp;Subversion identifies revisions with ids of decimal numbers growing monotonically which are typically small (although they can get quickly to hundreds of thousands for large projects). That is impractical in distributed systems like Git. Git identifies revisions with SHA1 ids, which are long 160-bit numbers written in hexadecimal. It may look scary at first, but in practice it is not a big hurdle - you can refer to the latest revision by &lt;code&gt;HEAD&lt;/code&gt;, its parent as &lt;code&gt;HEAD^&lt;/code&gt;&amp;nbsp;and its parent as &lt;code&gt;HEAD^^ = HEAD~2&lt;/code&gt;&amp;nbsp;(you can go on adding carrets), cut&#039;n&#039;paste helps a lot and you can write only the few leading digits of a revision - as long as it is unique, Git will guess the rest. (You can do even more advanced stuff with revision specifiers, see the &lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;git-rev-parse manpage&lt;/a&gt;&amp;nbsp;for details.)&lt;/li&gt;&lt;li style=&quot;margin-top: 0.5em; margin-bottom: 0.5em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;b&gt;Commits.&lt;/b&gt;&amp;nbsp;Each commit has an &lt;em&gt;author&lt;/em&gt;&amp;nbsp;and a &lt;em&gt;committer&lt;/em&gt;&amp;nbsp;field, which record who and when &lt;em&gt;created&lt;/em&gt;&amp;nbsp;the change and who &lt;em&gt;committed&lt;/em&gt;&amp;nbsp;it (Git is designed to work well with patches coming by mail - in that case, the author and the committer will be different). Git will try to guess your realname and email, but especially with email it is likely to get it wrong. You can check it using &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git config -l&lt;/code&gt;&amp;nbsp;and set them with:&lt;pre style=&quot;padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; text-align: left; margin-top: 0.5em; margin-right: 4em; margin-bottom: 0.5em; margin-left: 4em; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(204, 221, 238); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); font-weight: bold; background-position: initial initial; &quot;&gt;git config --global user.name &quot;Your Name Comes Here&quot;
git config --global user.email you@yourdomain.example.com
&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;margin-top: 0.5em; margin-bottom: 0.5em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;b&gt;Commands.&lt;/b&gt;&amp;nbsp;The Git commands are in the form &lt;code&gt;git command&lt;/code&gt;. You can interchangeably use the &lt;code&gt;git-command&lt;/code&gt;&amp;nbsp;form as well.&lt;/li&gt;&lt;li style=&quot;margin-top: 0.5em; margin-bottom: 0.5em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;b&gt;Colors.&lt;/b&gt;&amp;nbsp;Git can produce colorful output with some commands; since some people hate colors way more than the rest likes them, by default the colors are turned off. If you would like to have colors in your output:&lt;pre style=&quot;padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; text-align: left; margin-top: 0.5em; margin-right: 4em; margin-bottom: 0.5em; margin-left: 4em; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(204, 221, 238); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); font-weight: bold; background-position: initial initial; &quot;&gt;git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;margin-top: 0.5em; margin-bottom: 0.5em; margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;b&gt;Visualize.&lt;/b&gt;&amp;nbsp;You may find it convenient to watch your repository using the &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;gitk&lt;/code&gt;&amp;nbsp;repository as you go.&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;commit&quot; style=&quot;font-size: 1.2em; margin-top: 2em; margin-left: 1em; margin-right: 1em; font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(17, 34, 68); &quot;&gt;Commiting&lt;/h2&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;For the first introduction, let&#039;s make your project tracked by Git and see how we get around to do daily development in it. Let&#039;s &lt;code&gt;cd&lt;/code&gt;&amp;nbsp;to the directory with your project and initialize a brand new Git repository with it:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git init&lt;br&gt;git add .&lt;br&gt;git commit&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svnadmin create &lt;em&gt;repo&lt;/em&gt;&lt;br&gt;svn import &lt;em&gt;file://repo&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;code&gt;git init&lt;/code&gt;&amp;nbsp;will initialize the repository, &lt;code&gt;git add .&lt;/code&gt;&amp;nbsp;will add all the files under the current directory and &lt;code&gt;git commit&lt;/code&gt;&amp;nbsp;will create the initial import, given that repositories are coupled with working copies.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Now your tree is officially tracked by Git. You can explore the &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;.git&lt;/code&gt;&amp;nbsp;subdirectory a bit if you want, or don&#039;t if you don&#039;t care. Do some random changes to your tree now - poke into few files or such. Let&#039;s check what we&#039;ve done:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git diff&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn diff | less&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;That&#039;s it. This is one of the more powerful commands. To get a diff with an specific revision and path do:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git diff &lt;em&gt;rev&lt;/em&gt;&amp;nbsp;&lt;em&gt;path&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn diff -r&lt;em&gt;rev&lt;/em&gt;&amp;nbsp;&lt;em&gt;path&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Git embeds special information in the diffs about adds, removals and mode changes:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git apply&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;patch -p0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;That will apply the patch while telling Git about and performing those &quot;meta-changes&quot;.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;There is a more concise representation of changes available:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git status&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn status&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;This will show the concise changes summary as well as list any files that you haven&#039;t either ignored or told Git about. In addition, it will also show at the top which branch you are in.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;While we are at the status command, over time plenty of the &quot;Untracked files&quot; will get in there, denoting files not tracked by Git. Wait a moment if you want to add them, run &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git clean&lt;/code&gt;&amp;nbsp;if you want to get rid of all of them, or add them to the &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;.gitignore&lt;/code&gt;&amp;nbsp;file if you want to keep them around untracked (works the same as the &lt;code&gt;svn:ignore&lt;/code&gt;&amp;nbsp;property in SVN).&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;To restore a file from the last revision:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git checkout &lt;em&gt;path&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn revert &lt;em&gt;path&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;You can restore everything or just specified files.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;So, just like in SVN, you need to tell Git when you add, move or remove any files:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git add &lt;em&gt;file&lt;/em&gt;&amp;nbsp;&lt;br&gt;git rm &lt;em&gt;file&lt;/em&gt;&amp;nbsp;&lt;br&gt;git mv &lt;em&gt;file&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn add &lt;em&gt;file&lt;/em&gt;&lt;br&gt;svn rm &lt;em&gt;file&lt;/em&gt;&lt;br&gt;svn mv &lt;em&gt;file&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;You can also recursively add/remove whole directories and so on; Git&#039;s cool!&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;So, it&#039;s about time we commit our changes. Big surprise about the command:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git commit -a&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn commit&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;to commit all the changes or, as with Subversion, you can limit the commit only to specified files and so on. A few words on the commit message: it is &lt;em&gt;customary&lt;/em&gt;&amp;nbsp;to have a short commit summary as the first line of the message, because various tools listing commits frequently show only the first line of the message. You can specify the commit message using the &lt;code&gt;-m&lt;/code&gt;&amp;nbsp;parameter as you are used, but you can pass several &lt;code&gt;-m&lt;/code&gt;&amp;nbsp;arguments and they will create separate paragraphs in the commit message:&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;If you don&#039;t pass any &lt;code&gt;-m&lt;/code&gt;&amp;nbsp;parameter or pass the &lt;code&gt;-e&lt;/code&gt;&amp;nbsp;parameter, your favorite &lt;code&gt;$EDITOR&lt;/code&gt;&amp;nbsp;will get run and you can compose your commit message there, just as with Subversion. In addition, the list of files to be committed is shown.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;And as a bonus, if you pass it the &lt;code&gt;-v&lt;/code&gt;&amp;nbsp;parameter it will show the whole patch being committed in the editor so that you can do a quick last-time review.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;By the way, if you screwed up committing, there&#039;s not much you can do with Subversion, except using some enigmatic &lt;code&gt;svnadmin&lt;/code&gt;&amp;nbsp;subcommands. Git does it better - you can amend your latest commit (re-edit the metadata as well as update the tree) using &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git commit --amend&lt;/code&gt;, or toss your latest commit away completely using &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git reset HEAD^&lt;/code&gt;, this will not change the working tree.&lt;/p&gt;&lt;h2 id=&quot;browse&quot; style=&quot;font-size: 1.2em; margin-top: 2em; margin-left: 1em; margin-right: 1em; font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(17, 34, 68); &quot;&gt;Browsing&lt;/h2&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Now that we have committed some stuff, you might want to review your history:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git log&lt;br&gt;git blame &lt;em&gt;file&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn log | less&lt;br&gt;svn blame &lt;em&gt;file&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;The log command works quite similar in SVN and Git; again, &lt;code&gt;git log&lt;/code&gt;&amp;nbsp;is quite powerful, please look through its options to see some of the stuff it can do.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;The blame command is more powerful as it can detect the movement of lines, even with file copies and renames. But there is a big chance that you probably want to do something different! Usually, when using annotate you are looking for the origin of some piece of code, and the so-called &lt;em&gt;pickaxe&lt;/em&gt;&amp;nbsp;of Git is much more comfortable tool for that job (&lt;code&gt;git log -S&lt;em&gt;string&lt;/em&gt;&lt;/code&gt;&amp;nbsp;shows the commits which add or remove any file data matching &lt;em&gt;string&lt;/em&gt;).&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;You can see the contents of a file, the listing of a directory or a commit with:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git show &lt;em&gt;rev&lt;/em&gt;:&lt;em&gt;path/to/file&lt;/em&gt;&amp;nbsp;&lt;br&gt;git show &lt;em&gt;rev&lt;/em&gt;:&lt;em&gt;path/to/directory&lt;/em&gt;&amp;nbsp;&lt;br&gt;git show &lt;em&gt;rev&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn cat &lt;em&gt;url&lt;/em&gt;&amp;nbsp;&lt;br&gt;svn list &lt;em&gt;url&lt;/em&gt;&amp;nbsp;&lt;br&gt;svn log -r&lt;em&gt;rev&lt;/em&gt;&amp;nbsp;&lt;em&gt;url&lt;/em&gt;&amp;nbsp;&lt;br&gt;svn diff -c&lt;em&gt;rev&lt;/em&gt;&amp;nbsp;&lt;em&gt;url&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 id=&quot;branch&quot; style=&quot;font-size: 1.2em; margin-top: 2em; margin-left: 1em; margin-right: 1em; font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(17, 34, 68); &quot;&gt;Tagging and branching&lt;/h2&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Subversion marks certain checkpoints in history through copies, the copy is usually placed in a directory named tags. Git tags are much more powerful. The Git tag can have an arbitrary description attached (the first line is special as in the commit case), some people actually store the whole release announcements in the tag descriptions. The identity of the person who tagged is stored (again following the same rules as identity of the committer). You can tag other objects than commits (but that is conceptually rather low-level operation). And the tag can be cryptographically PGP signed to verify the identity (by Git&#039;s nature of working, that signature also confirms the validity of the associated revision, its history and tree). So, let&#039;s do it:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git tag -a &lt;em&gt;name&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn copy http://example.com/svn/trunk http://example.com/svn/tags/&lt;em&gt;name&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;To list tags and to show the tag message:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git tag -l&lt;br&gt;git show &lt;em&gt;tag&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn list http://example.com/svn/&lt;em&gt;tags/&lt;/em&gt;&amp;nbsp;&lt;br&gt;svn log --limit 1&amp;nbsp;http://example.com/svn/tags/&lt;em&gt;tag&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Like Subversion, Git can do branches (surprise surprise!). In Subversion, you basically copy your project to a subdirectory. In Git, you tell it, well, to create a branch.&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git branch &lt;em&gt;branch&lt;/em&gt;&amp;nbsp;&lt;br&gt;git checkout &lt;em&gt;branch&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn copy http://example.com/svn/trunk http://example.com/svn/branches/&lt;em&gt;branch&lt;/em&gt;&amp;nbsp;&lt;br&gt;svn switch http://example.com/svn/branches/&lt;em&gt;branch&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;The first command creates a branch, the second command switches your tree to a certain branch. You can pass an extra argument to &lt;code&gt;git branch&lt;/code&gt;&amp;nbsp;to base your new branch on a different revision than the latest one.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;You can list your branches conveniently using the aforementioned &lt;code&gt;git-branch&lt;/code&gt;&amp;nbsp;command without arguments the listing of branches. The current one is denoted by an &quot;*&quot;.&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git branch&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn list http://example.com/svn/branches/&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;To move your tree to some older revision, use:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git checkout &lt;em&gt;rev&lt;/em&gt;&amp;nbsp;&lt;br&gt;git checkout &lt;em&gt;prevbranch&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn update -r &lt;em&gt;rev&lt;/em&gt;&lt;br&gt;svn update&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;or you could create a temporary branch. In Git you can make commits on top of the older revision and use it as another branch.&lt;/p&gt;&lt;h2 id=&quot;merge&quot; style=&quot;font-size: 1.2em; margin-top: 2em; margin-left: 1em; margin-right: 1em; font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(17, 34, 68); &quot;&gt;Merging&lt;/h2&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Git supports merging between branches much better than Subversion - history of both branches is preserved over the merges and repeated merges of the same branches are supported out-of-the-box. Make sure you are on one of the to-be-merged branches and merge the other one now:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git merge &lt;em&gt;branch&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;&lt;em&gt;(assuming the branch was created in revision 20 and you are inside a working copy of trunk)&lt;/em&gt;&amp;nbsp;&lt;br&gt;svn merge -r 20:HEAD http://example.com/svn/branches/&lt;em&gt;branch&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;If changes were made on only one of the branches since the last merge, they are simply replayed on your other branch (so-called &lt;em&gt;fast-forward merge&lt;/em&gt;). If changes were made on both branches, they are merged intelligently (so-called &lt;em&gt;three-way merge&lt;/em&gt;): if any changes conflicted, &lt;code&gt;git merge&lt;/code&gt;&amp;nbsp;will report them and let you resolve them, updating the rest of the tree already to the result state; you can &lt;code&gt;git commit&lt;/code&gt;&amp;nbsp;when you resolve the conflicts. If no changes conflicted, a commit is made automatically with a convenient log message (or you can do &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git merge --no-commit&lt;em&gt;branch&lt;/em&gt;&lt;/code&gt;&amp;nbsp;to review the merge result and then do the commit yourself).&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Aside from merging, sometimes you want to just pick one commit from a different branch. To apply the changes in revision &lt;em&gt;rev&lt;/em&gt;&amp;nbsp;and commit them to the current branch use:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git cherry-pick &lt;em&gt;rev&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn merge -c &lt;em&gt;rev&lt;/em&gt;&amp;nbsp;&lt;em&gt;url&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 id=&quot;remote&quot; style=&quot;font-size: 1.2em; margin-top: 2em; margin-left: 1em; margin-right: 1em; font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(17, 34, 68); &quot;&gt;Going Remote&lt;/h2&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;So far, we have neglected that Git is a &lt;em&gt;distributed&lt;/em&gt;&amp;nbsp;version control system. It is time for us to set the record straight - let&#039;s grab some stuff from remote sites.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;If you are working on someone else&#039;s project, you usually want to &lt;em&gt;clone&lt;/em&gt;&amp;nbsp;its repository instead of starting your own. We&#039;ve already mentioned that at the top of this document:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git clone &lt;em&gt;url&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn checkout &lt;em&gt;url&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Now you have the default branch (normally &lt;code&gt;master&lt;/code&gt;), but in addition you got all the remote branches and tags. In clone&#039;s default setup, the default local branch tracks the &lt;em&gt;origin&lt;/em&gt;&amp;nbsp;remote, which represents the default branch in the remote repository.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;&lt;em&gt;Remote branch&lt;/em&gt;, you ask? Well, so far we have worked only with local branches. Remote branches are a mirror image of branches in remote repositories and you don&#039;t ever switch to them directly or write to them. Let me repeat - you never mess with remote branches. If you want to switch to a remote branch, you need to create a corresponding local branch which will &quot;track&quot; the remote branch:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git checkout --track -b &lt;em&gt;branch&lt;/em&gt;&amp;nbsp;origin/&lt;em&gt;branch&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn switch &lt;em&gt;url&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;You can add more remote branches to a cloned repository, as well as just an initialized one, using &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git remote add &lt;em&gt;remote&lt;/em&gt;&amp;nbsp;&lt;em&gt;url&lt;/em&gt;&lt;/code&gt;. The command &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git remote&lt;/code&gt;&amp;nbsp;lists all the remotes repositories and &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git remote show &lt;em&gt;remote&lt;/em&gt;&lt;/code&gt;&amp;nbsp;shows the branches in a remote repository.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Now, how do you get any new changes from a remote repository? You fetch them: &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git fetch&lt;/code&gt;. At this point they are in your repository and you can examine them using &lt;code&gt;git log &lt;em&gt;origin&lt;/em&gt;&lt;/code&gt;&amp;nbsp;(&lt;code&gt;git log HEAD..&lt;em&gt;origin&lt;/em&gt;&lt;/code&gt;&amp;nbsp;to see just the changes you don&#039;t have in your branch), diff them, and obviously, merge them - just do &lt;code&gt;git merge &lt;em&gt;origin&lt;/em&gt;&lt;/code&gt;. Note that if you don&#039;t specify a branch to fetch, it will conveniently default to the tracking remote.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Since you frequently just fetch + merge the tracking remote branch, there is a command to automate that:&lt;/p&gt;&lt;table class=&quot;ccmd&quot; style=&quot;margin-left: 1em; margin-right: 1em; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-width: initial; border-color: initial; width: 1089px; font-family: monospace; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(17, 34, 68); border-right-color: rgb(17, 34, 68); border-bottom-color: rgb(17, 34, 68); border-left-color: rgb(17, 34, 68); &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;g&quot; style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; width: 381px; font-weight: bold; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(153, 204, 221); color: rgb(17, 34, 68); background-position: initial initial; &quot;&gt;git pull&lt;/td&gt;&lt;td style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; padding-left: 2em; padding-right: 2em; &quot;&gt;svn update&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 id=&quot;share&quot; style=&quot;font-size: 1.2em; margin-top: 2em; margin-left: 1em; margin-right: 1em; font-weight: bold; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(17, 34, 68); &quot;&gt;Sharing the Work&lt;/h2&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Your local repository can be used by others to &lt;em&gt;pull&lt;/em&gt;&amp;nbsp;changes, but normally you would have a private repository and a public repository. The public repository is where everybody pulls and you... do the opposite? &lt;em&gt;Push&lt;/em&gt;&amp;nbsp;your changes? Yes! We do &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git push &lt;em&gt;remote&lt;/em&gt;&lt;/code&gt;&amp;nbsp;which will push all the local branches with a corresponding remote branch - note that this works generally only over SSH (or HTTP but with special webserver setup). It is highly recommended to setup a SSH key and an SSH agent mechanism so that you don&#039;t have to type in a password all the time.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;One important thing is that you should push only to remote branches that are not currently checked out on the other side (for the same reasons you never switch to a remote branch locally)! Otherwise the working copy at the remote branch will get out of date and confusion will ensue. The best way to avoid that is to push only to remote repositories with no working copy at all - so called &lt;em&gt;bare&lt;/em&gt;&amp;nbsp;repositories which are commonly used for public access or developers&#039; meeting point - just for exchange of history where a checked out copy would be a waste of space anyway. You can create such a repository. See &lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#setting-up-a-public-repository&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;Setting up a public repository&lt;/a&gt;&amp;nbsp;for details.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;Git can work with the same workflow as Subversion, with a group of developers using a single repository for exchange of their work. The only change is that their changes aren&#039;t submitted automatically but they have to push (however, you can setup a post-commit hook that will push for you every time you commit; that loses the flexibility to fix up a screwed commit, though). The developers must have either an entry in htaccess (for HTTP DAV) or a UNIX account (for SSH). You can restrict their shell account only to Git pushing/fetching by using the &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git-shell&lt;/code&gt;&amp;nbsp;login shell.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;You can also exchange patches by mail. Git has very good support for patches incoming by mail. You can apply them by feeding mailboxes with patch mails to &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git am&lt;/code&gt;. If you want to &lt;em&gt;send&lt;/em&gt;patches use &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git format-patch&lt;/code&gt;&amp;nbsp;and possibly &lt;code class=&quot;g&quot; style=&quot;font-family: monospace; font-weight: bold; &quot;&gt;git send-email&lt;/code&gt;. To maintain a set of patches it is best to use the &lt;strong&gt;StGIT&lt;/strong&gt;&amp;nbsp;tool (see the &lt;a href=&quot;http://git.or.cz/course/stgit.html&quot;  style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;StGIT Crash Course&lt;/a&gt;).&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; margin-right: 2em; text-align: justify; &quot;&gt;If you have any questions or problems which are not obvious from the documentation, please contact us at the &lt;strong&gt;Git mailing list&lt;/strong&gt;&amp;nbsp;at &lt;a href=&quot;mailto:git@vger.kernel.org&quot; style=&quot;text-decoration: underline; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; &quot;&gt;git@vger.kernel.org&lt;/a&gt;. We hope you enjoy using Git!&lt;/p&gt;&lt;div class=&quot;footer&quot; style=&quot;padding-top: 0.4em; padding-right: 1em; padding-bottom: 0.4em; padding-left: 1em; margin-top: 4em; margin-right: 0em; margin-bottom: 0em; margin-left: 0em; font-size: 0.7em; border-top-width: 2px; border-top-style: solid; border-top-color: rgb(17, 34, 68); border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: rgb(17, 34, 68); color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(170, 221, 238); background-position: initial initial; &quot;&gt;&lt;span class=&quot;menu&quot; style=&quot;text-align: right; display: block; &quot;&gt;This page is maintained by Petr Baudis. Please email me at &lt;a href=&quot;mailto:pasky@suse.cz&quot; style=&quot;text-decoration: none; color: rgb(17, 34, 68); background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; font-weight: bold; background-position: initial initial; &quot;&gt;pasky@suse.cz&lt;/a&gt;&amp;nbsp;with patches, suggestions and comments.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;출처: http://git.or.cz/course/svn.html&lt;/div&gt;&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>프로젝트 관리</category>
			<category>Git</category>
			<category>SVN</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/248</guid>
			<comments>http://b4you.net/blog/248#entry248comment</comments>
			<pubDate>Tue, 13 Oct 2009 14:36:35 +0900</pubDate>
		</item>
		<item>
			<title>Ubuntu 버전 확인</title>
			<link>http://b4you.net/blog/247</link>
			<description>&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;cat /etc/issue&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;span style=&quot;font-family: Times; font-size: medium; line-height: normal; &quot;&gt;&lt;div style=&quot;padding-bottom: 0px; font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px; line-height: 1.4em; background-color: rgb(255, 255, 255); &quot;&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;lsb_release -a&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>Ubuntu</category>
			<category>Ubuntu</category>
			<category>버전 확인</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/247</guid>
			<comments>http://b4you.net/blog/247#entry247comment</comments>
			<pubDate>Mon, 12 Oct 2009 15:18:39 +0900</pubDate>
		</item>
		<item>
			<title>iPhone 버전 판별하기</title>
			<link>http://b4you.net/blog/246</link>
			<description>iPhone 개발을 하다 보면 컴파일 시 버전을 판단해야 되는 경우가 있습니다.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;단순히 버전만을 체크할 경우&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;#define __IPHONE_2_0     20000  &lt;div&gt;#define __IPHONE_2_1     20100  &lt;/div&gt;&lt;div&gt;#define __IPHONE_2_2     20200  &lt;/div&gt;#define __IPHONE_3_0     30000&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;와 같은 매크로를 사용하면 됩니다. (Availability.h에 선언되어 있습니다)&lt;/div&gt;&lt;div&gt;즉 다음과 같이..&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;#ifdef __IPHONE_3_0&lt;/div&gt;&lt;div&gt;// 3.0일 때 처리&lt;/div&gt;&lt;div&gt;#endif&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;하면 되죠.&lt;/div&gt;&lt;div&gt;그런데 &quot;현재 버전&quot;의 &quot;이상&quot;, 즉 &quot;2.2 이상에서만&quot;이라는 조건은 여러개의 항목들을 전부 조합하여 사용할 수도 있지만, 다음과 같은 방법을 이용하여 판단할 수 있습니다&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;#if defined(__IPHONE_3_0) &amp;amp;&amp;amp; (__IPHONE_OS_VERSION_MAX_ALLOWED &amp;gt;= __IPHONE_3_0)&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;__IPHONE_OS_VERSION_MIN_REQUIRED는 현재 버전에서 지원되는 최소 버전이며, __IPHONE_OS_VERSION_MAX_ALLOWED는 현재 버전에서 지원되는 최대 버전입니다.&lt;/div&gt;&lt;div&gt;따라서 __IPHONE_OS_VERSION_MAX_ALLOWED를 이용하면 &quot;현재 버전에서 지원되는 최대 버전&quot; 이하/이상 등의 조건을 사용할 수 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;이 때 주의할 점은, 2.0의 경우 __IPHONE_3_0이라는 매크로가 정의 되어 있지 않기 때문에 defined()를 이용하여 정의 되어 있는지 먼저 검사하여야 정확한 버전 비교가 됩니다.&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>iPhone Application</category>
			<category>iPhone 버전</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/246</guid>
			<comments>http://b4you.net/blog/246#entry246comment</comments>
			<pubDate>Wed, 30 Sep 2009 11:23:44 +0900</pubDate>
		</item>
		<item>
			<title>Mac OS X의 키 설정을 윈도우 같이 하기</title>
			<link>http://b4you.net/blog/245</link>
			<description>Windows만 사용하시다 Mac OS X로 넘어오시면.. 가장 처음 적응 안되는 것 중 하나가 단축키 입니다.&lt;br&gt;이러한 단축키를 Windows 같이 &quot;비슷하게&quot; 변경할 수 있는데요.. 다음과 같이 설정 해 주시면 됩니다.&lt;br&gt;&lt;br&gt;* 일반 응용 프로그램에서 키보드 배치 변경하기&lt;br&gt;1. DefaultKeyBinding.dict 파일 편집 (없으면 생성)&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;$ vi ~/Library/KeyBindings/DefaultKeyBinding.dict&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;2. 다음과 같이 입력&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;{&lt;br&gt;    /* home */&lt;br&gt;    &quot;\UF729&quot; = &quot;moveToBeginningOfLine:&quot;;&lt;br&gt;    &quot;$\UF729&quot; = &quot;moveToBeginningOfLineAndModifySelection:&quot;;&lt;br&gt;&lt;br&gt;    /* end */&lt;br&gt;    &quot;\UF72B&quot; = &quot;moveToEndOfLine:&quot;;&lt;br&gt;    &quot;$\UF72B&quot; = &quot;moveToEndOfLineAndModifySelection:&quot;;&lt;br&gt;&lt;br&gt;    /* page up/down */&lt;br&gt;    &quot;\UF72C&quot; = &quot;pageUp:&quot;;&lt;br&gt;    &quot;\UF72D&quot; = &quot;pageDown:&quot;;&lt;br&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;* 터미널(terminal) 응용 프로그램에서 키보드 배치 변경하기&lt;br&gt;1. 터미널 실행&lt;br&gt;2. 환경설정-설정-키보드로 이동&lt;br&gt;3. home, end, page up, page down을 다음과 같은 값으로 변경&lt;br&gt;home: \033[1~&lt;br&gt;end: \033[4~&lt;br&gt;page up: \033[5~&lt;br&gt;page down: \033[6~&lt;br&gt;shift page down: &quot;버퍼에서 다음 페이지로 스크롤&quot;&lt;br&gt;shift page up: &quot;버퍼에서 이전 페이지로 스크롤&quot;&lt;br&gt;- 참고&lt;br&gt;&amp;nbsp; - \033은 &quot;esc&quot;키를 누르면 나옵니다&lt;br&gt;&amp;nbsp; - 기존에 &quot;작업&quot; 부분이 &quot;버퍼에서~&quot;로 되어 있는 항목은 &quot;문자열을 셀로 보내기:&quot;로 변경한 뒤 키를 입력하셔야 합니다.&lt;br&gt;&lt;br&gt;이렇게 수동으로 설정해 주시거나 다음 파일을 받으신 뒤 실행합니다.&lt;br&gt;&lt;br&gt;&lt;div style=&quot;text-align: center;&quot;&gt;terminal 설정 파일 다운로드&lt;/div&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a class=&quot;extensionIcon&quot; href=&quot;http://b4you.net/blog/attachment/1306852363.xxx&quot;&gt;&lt;img src=&quot;http://b4you.net/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; /&gt; AccessDenied Style.terminal&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;참고:&lt;br&gt;http://theeye.pe.kr/entry/how-to-mapping-keyboard-home-end-pgup-pgdown&lt;br&gt;http://fplanque.com/dev/mac/mac-osx-terminal-page-up-down-home-end-of-line&lt;br&gt;&lt;br&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>Mac OS X</category>
			<category>Keyboard layout setting</category>
			<category>Mac OS X</category>
			<category>Terminal</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/245</guid>
			<comments>http://b4you.net/blog/245#entry245comment</comments>
			<pubDate>Wed, 02 Sep 2009 16:14:21 +0900</pubDate>
		</item>
		<item>
			<title>Objective-C에서 oneway keyword</title>
			<link>http://b4you.net/blog/244</link>
			<description>retain과 release를 overriding 하려다 보니.. release에서 oneway라는 키워드가 보이네요. 다음과 같이 말이죠.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;- (oneway void)release;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;무슨 말인지 찾아보니 &quot;The Objective-C 2.0 Programming Language&quot; PDF 파일에&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&quot;Synchronous and Asynchronous Messages&lt;/div&gt;&lt;div&gt;Consider first a method with just a simple return value:&lt;/div&gt;&lt;div&gt;- (BOOL)canDance;&lt;/div&gt;&lt;div&gt;When a canDance message is sent to a receiver in the same application, the method is invoked and the&lt;/div&gt;&lt;div&gt;return value provided directly to the sender. But when the receiver is in a remote application, two underlying&lt;/div&gt;&lt;div&gt;messages are required—one message to get the remote object to invoke the method, and the other message&lt;/div&gt;&lt;div&gt;to send back the result of the remote calculation. This is illustrated in the figure below:&lt;/div&gt;&lt;div&gt;&amp;lt;Figure 12-2&amp;gt;&lt;/div&gt;&lt;div&gt;Most remote messages are, at bottom, two-way (or “round trip”) remote procedure calls (RPCs) like this one.&lt;br&gt;&lt;/div&gt;&lt;div&gt;The sending application waits for the receiving application to invoke the method, complete its processing,&lt;/div&gt;&lt;div&gt;and send back an indication that it has finished, along with any return information requested. Waiting for&lt;/div&gt;&lt;div&gt;the receiver to finish, even if no information is returned, has the advantage of coordinating the two&lt;/div&gt;&lt;div&gt;communicating applications, of keeping them both “in sync.” For this reason, round-trip messages are often&lt;/div&gt;&lt;div&gt;called synchronous. Synchronous messages are the default.&lt;/div&gt;&lt;div&gt;However, it’s not always necessary or a good idea to wait for a reply. Sometimes it’s sufficient simply to&lt;/div&gt;&lt;div&gt;dispatch the remote message and return, allowing the receiver to get to the task when it can. In the meantime,&lt;/div&gt;&lt;div&gt;the sender can go on to other things. Objective-C provides a return type modifier, oneway, to indicate that&lt;/div&gt;&lt;div&gt;a method is used only for asynchronous messages:&lt;/div&gt;&lt;div&gt;- (oneway void)waltzAtWill;&lt;/div&gt;&lt;div&gt;Although oneway is a type qualifier (like const) and can be used in combination with a specific type name,&lt;/div&gt;&lt;div&gt;such as oneway float or oneway id, the only such combination that makes any sense is oneway void.&lt;/div&gt;&lt;div&gt;An asynchronous message can’t have a valid return value.&quot;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;라고 되어 있습니다.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;요 글에 의하면 일반적으로 Objective-c 에서 remote에 있는 receiver에게 message를 전달하는 방식은 synchronous 방식이라고 합니다. 즉, 메서드를 호출하면 return 결과를 받을 때 까지 멈춘다(blocking) 이거죠.&lt;/div&gt;&lt;div&gt;하지만 굳이 remote 호출 시 대기 할 필요가 없는 메서드는 asynchronous 하게 호출하도록 할 수 있습니다.&lt;/div&gt;&lt;div&gt;이럴 때 사용되는 keyword가 oneway이며, 위의 release와 같은 경우 asynchronous 하게 호출된다고 할 수 있겠습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;RPC를 통한 remote 호출을 해본적이 없어서 자세한 예는 들기 힘드네요. 나중에 호출해볼 수 있는 좋은 기회가 있었으면~&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>Objective-C</category>
			<category>Objective-C</category>
			<category>oneway</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/244</guid>
			<comments>http://b4you.net/blog/244#entry244comment</comments>
			<pubDate>Thu, 27 Aug 2009 16:56:26 +0900</pubDate>
		</item>
		<item>
			<title>iPhone Simulator에 사진 넣기</title>
			<link>http://b4you.net/blog/243</link>
			<description>&lt;div&gt;iPhone Simulator에서는 화면 캡쳐가 되질 않습니다.&lt;/div&gt;&lt;div&gt;덕분에 사진을 이용해서 무엇인가를 해야될 때 난감한데요, 이럴 땐 아래와 같은 과정을 거쳐 iPhone에 이미지를 넣을 수 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;1. 다음의 경로를 확인합니다. 만약 없을 경우 생성합니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;~/Library/Application Support/iPhone Simulator/User/Media/DCIM/100APPLE&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;2. 이미지 파일을 IMG_0000.JPG와 같은 이름으로 복사합니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;3. 이 때 photo library를 보면 이미지가 들어간걸 보실 수 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;4. 이렇게 하면 thumbnail 이미지가 안나오는데, 추가하시려면 임의로 96*96짜리 이미지를 만든 뒤 IMG_0000.THM과 같은 이름으로 같은 경로에 저장합니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;참고: http://iphonedevelopment.blogspot.com/2008/11/adding-photos-to-iphone-library.html&lt;/div&gt;&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>iPhone Application</category>
			<category>iPhone Simulator</category>
			<category>이미지</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/243</guid>
			<comments>http://b4you.net/blog/243#entry243comment</comments>
			<pubDate>Mon, 24 Aug 2009 15:39:19 +0900</pubDate>
		</item>
		<item>
			<title>iPhone 응용 프로그램 배포 시 code-sign 오류 날 경우</title>
			<link>http://b4you.net/blog/242</link>
			<description>&lt;div&gt;iPhone 응용 프로그램을 배포하기 위해 distribution 으로 잘 컴파일을 하고&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;웹 페이지나 Application Loader를 통해 배포를 하려고 하면 자꾸 code sign verification이 실패하여 업로드를 할 수 없다고 나오는 경우가 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Application Loader를 기준으로 보자면..&lt;/div&gt;&lt;div&gt;&quot;Verifying iTunes Connect application...&quot; 메시지가 나온 뒤 &quot;Application failed codesign verification.  Please see the console log for additional details&quot; 이라는 메시지가 나오면서 업로드가 되지 않습니다.&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;원인은 응용 프로그램을 zip 형태로 압축할 때 zip 파일이 제대로 압축되지 않는다는 것 입니다만;&lt;/div&gt;&lt;div&gt;이러한 현상이 왜 발생하는지는 모르겠지만, 가끔 파일들이 몇 개가 빠져서 압축이 됩니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;해결 방법은 간단합니다. 응용 프로그램 패키지에서 오른쪽 누르고 &quot;정보 입수(get info)&quot;를 선택하여 주시면 용량이 나옵니다. 이 상태에서 압축을 하면 정상적으로 압축이 되네요.&lt;/div&gt;&lt;div&gt;(정보 입수 할 때 한번 해당 패키지 내의 파일들을 다시 읽어서 무엇인가가 cache역할을 하는 정보가 갱신되는 것 같습니다)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;이 현상을 테스트 해보려면.. 패키지를 압축하신 뒤 다시 압축을 풀어보시면 원래 패키지와 용량이 같지 않은 것을 발견하실 수 있습니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;이런!@_#)!$&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>iPhone Application</category>
			<category>Application Loader</category>
			<category>iPhone 개발</category>
			<category>MacOSX 압축</category>
			<category>패키징</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/242</guid>
			<comments>http://b4you.net/blog/242#entry242comment</comments>
			<pubDate>Fri, 21 Aug 2009 17:29:05 +0900</pubDate>
		</item>
		<item>
			<title>UITableView에서 swipe 시 (드래그 시) delete 하기</title>
			<link>http://b4you.net/blog/241</link>
			<description>&lt;DIV&gt;iPhone에서 table view 목록에서 왼쪽-&amp;gt;오른쪽 또는 오른쪽-&amp;gt;왼쪽으로 swipe 하였을 때 삭제가 나오게 하는 UI가 있습니다. 다음과 같이 말이죠.&lt;BR&gt;&lt;/DIV&gt;


&lt;DIV&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://b4you.net/blog/attach/1/1053508741.png&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;480&quot; width=&quot;320&quot; /&gt;&lt;/div&gt;&lt;/DIV&gt;
이 기능을 구현 하려면 UITableViewDelegate, UITableViewDataSource 두 가지 delegate를 구현한 뒤, 다음과 같은 코드를 작성하여 주시면 됩니다. &lt;BR&gt;

&lt;DIV&gt;&lt;BR&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath&lt;BR&gt;{&lt;BR&gt;return UITableViewCellEditingStyleDelete;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath&lt;BR&gt;{&lt;BR&gt;// 여기서 항목 삭제&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath&lt;BR&gt;{&lt;BR&gt;return YES;&lt;BR&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;tableView:commitEditingStyle:forRowAtIndexPath: 에서 [indexPath row]를 이용하여 table view에 있는 셀의 index (0-based) 값을 얻을 수 있는데, DB에서 삭제한다거나 메모리/파일에서 삭제 하면 됩니다.&lt;/DIV&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>iPhone Application</category>
			<category>delete</category>
			<category>swipe</category>
			<category>UITableView</category>
			<category>삭제 버튼</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/241</guid>
			<comments>http://b4you.net/blog/241#entry241comment</comments>
			<pubDate>Mon, 17 Aug 2009 11:45:27 +0900</pubDate>
		</item>
		<item>
			<title>Xcode에서 자동으로 생성되는 template 수정하기</title>
			<link>http://b4you.net/blog/240</link>
			<description>&lt;P&gt;Xcode에서 객체를 새로 생성하면 다음과 같이 자동으로 code가 입력되어 있는 것을 보실 수 있습니다.&lt;BR&gt;&lt;BR&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;#import &quot;TestClass.h&quot;&lt;/P&gt;
&lt;P&gt;@implementation TestClass&lt;/P&gt;
&lt;P&gt;- (id)initWithFrame:(CGRect)frame {&lt;BR&gt;    if (self = [super initWithFrame:frame]) {&lt;BR&gt;        // Initialization code&lt;BR&gt;    }&lt;BR&gt;    return self;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;- (void)drawRect:(CGRect)rect {&lt;BR&gt;    // Drawing code&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;- (void)dealloc {&lt;BR&gt;    [super dealloc];&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;@end&lt;/code&gt;&lt;/pre&gt;&lt;BR&gt;&lt;BR&gt;개인적으로 괄호 여는 스타일, 들여쓰기가 default로 공백이라는 점 등등 마음에 안드는 점이 한두개가 아닌데요, 아래의 경로에서 이러한 자동 생성되는 코드를 수정할 수 있습니다.&lt;BR&gt;&lt;BR&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/File Templates&lt;/code&gt;&lt;/pre&gt; &lt;BR&gt;&lt;BR&gt;안에 보시면..&lt;BR&gt;&lt;BR&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://b4you.net/blog/attach/1/1166734615.png&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;468&quot; width=&quot;610&quot; /&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;위의 그림에서와 같이 iPhone OS의 Cocoa Touch Class, Code Signing등의 디렉토리를 보실 수 있습니다.&lt;BR&gt;여기서는 Cocoa Touch Class의 Objective-C class에 있는 UIView 클래스의 기본 코드를 수정 하도록 하겠습니다.&lt;BR&gt;&lt;BR&gt;우선 &lt;BR&gt;&lt;BR&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/File Templates/Cocoa Touch Class/Objective-C class/UIView subclass.pbfiletemplate&lt;/code&gt;&lt;/pre&gt;&lt;BR&gt;&lt;BR&gt;로 이동한 뒤, class.h와 class.m 파일을 수정합니다. (만일의 사태에 대비하여 수정 전 백업 해두세요)&lt;BR&gt;기본적으로 아래와 같이 되어 있는 코드를..&lt;BR&gt;&lt;BR&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;//&lt;BR&gt;//  «FILENAME»&lt;BR&gt;//  «PROJECTNAME»&lt;BR&gt;//&lt;BR&gt;//  Created by «FULLUSERNAME» on «DATE».&lt;BR&gt;//  Copyright «YEAR» «ORGANIZATIONNAME». All rights reserved.&lt;BR&gt;//&lt;BR&gt;«OPTIONALHEADERIMPORTLINE»&lt;BR&gt;@implementation «FILEBASENAMEASIDENTIFIER»&lt;/P&gt;
&lt;P&gt;- (id)initWithFrame:(CGRect)frame {&lt;BR&gt;    if (self = [super initWithFrame:frame]) {&lt;BR&gt;        // Initialization code&lt;BR&gt;    }&lt;BR&gt;    return self;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;- (void)drawRect:(CGRect)rect {&lt;BR&gt;    // Drawing code&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;- (void)dealloc {&lt;BR&gt;    [super dealloc];&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;@end&lt;/code&gt;&lt;/pre&gt;&lt;BR&gt;&lt;BR&gt;다음과 같이 변경하였습니다&lt;BR&gt;&lt;BR&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;//&lt;BR&gt;//  «FILENAME»&lt;BR&gt;//  «PROJECTNAME»&lt;BR&gt;//&lt;BR&gt;//  Created by «FULLUSERNAME» on «DATE».&lt;BR&gt;//  Copyright «YEAR» «ORGANIZATIONNAME». All rights reserved.&lt;BR&gt;//&lt;BR&gt;«OPTIONALHEADERIMPORTLINE»&lt;BR&gt;@implementation «FILEBASENAMEASIDENTIFIER»&lt;BR&gt;&lt;BR&gt;- (id)initWithFrame:(CGRect)frame&lt;BR&gt;{&lt;BR&gt;        if (self = [super initWithFrame:frame])&lt;BR&gt;        {&lt;BR&gt;                // Initialization code&lt;BR&gt;        }&lt;BR&gt;        return self;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;- (void)drawRect:(CGRect)rect&lt;BR&gt;{&lt;BR&gt;        // Drawing code&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;- (void)dealloc&lt;BR&gt;{&lt;BR&gt;        [super dealloc];&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;@end&lt;/code&gt;&lt;/pre&gt;&lt;BR&gt;&lt;BR&gt;변경하고 나서 UIView 클래스를 생성하면 깔끔한 코드가 나옵니다.&lt;BR&gt;나머지 클래스들도 동일한 방법으로 수정하시면 됩니다.&lt;/P&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>iPhone Application</category>
			<category>Objective-C template</category>
			<category>Xcode</category>
			<author>(장현준)</author>
			<guid>http://b4you.net/blog/240</guid>
			<comments>http://b4you.net/blog/240#entry240comment</comments>
			<pubDate>Mon, 10 Aug 2009 13:46:00 +0900</pubDate>
		</item>
	</channel>
</rss>
