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

<channel>
	<title>Blog.Project13.pl &#187; git</title>
	<atom:link href="http://www.blog.project13.pl/index.php/tag/git/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blog.project13.pl</link>
	<description>The Blog of a Coder</description>
	<lastBuildDate>Sun, 05 Feb 2012 02:28:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>[Me] Git @ Academic IT Festival (SFI) 2011</title>
		<link>http://www.blog.project13.pl/index.php/project13/1304/me-git-academic-it-festival-2011/</link>
		<comments>http://www.blog.project13.pl/index.php/project13/1304/me-git-academic-it-festival-2011/#comments</comments>
		<pubDate>Fri, 06 May 2011 21:31:58 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[polish]]></category>
		<category><![CDATA[Project13]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[konrad malawski]]></category>
		<category><![CDATA[live coding]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[sfi]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=1304</guid>
		<description><![CDATA[It&#8217;s been a long time since the Academic IT Festival 2011 but I didn&#8217;t have the time to post about it somehow. Anyways, now just a quick recap about it :-) Aparently some people did really like it, see tweets bellow :-) I also got feedback that &#8220;not yet real programmers&#8221;, that is students, didn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a long time since the <a href="http://sfi.org.pl/edition-2011/" onclick="urchinTracker('/outgoing/sfi.org.pl/edition-2011/?referer=');">Academic IT Festival 2011</a> but I didn&#8217;t have the time to post about it somehow. Anyways, now just a quick recap about it :-)</p>
<p>Aparently some people did really like it, see tweets bellow :-) I also got feedback that &#8220;not yet real programmers&#8221;, that is students, didn&#8217;t really get what I was talking about. Well, most of them still uses SVN (well, if they do it&#8217;s a success anyways) as an SCP replacement so there&#8217;s not much they could complain in SVN about if they&#8217;re not making it work anyhow besides just storing files. :-) Some students apparoached me after the lecture and training (yeah, we also did a little git intro with laptops later on) and they were really fired up about it &#8211; even if not yet grasping git&#8217;s power, they felt something&#8217;s on and I am very happy to have invluenced even just a small group to such feelings and thinking.</p>
<p style="text-align: center;"><a href="http://www.blog.project13.pl/wp-content/uploads/2011/05/git_yay1.png"><img class="aligncenter size-full wp-image-1305" title="git_yay1" src="http://www.blog.project13.pl/wp-content/uploads/2011/05/git_yay1.png" alt="" width="501" height="277" /></a></p>
<p><a href="http://sfi.org.pl/edition-2011/speakers" onclick="urchinTracker('/outgoing/sfi.org.pl/edition-2011/speakers?referer=');">I have been invited</a> (via the Call for Papers I participated in) to present a polished up &#8220;Git. Tak. Po prostu.&#8221; speech <a href="http://sfi.org.pl/edition-2011/agenda-2011#git-tak-po-prostu" onclick="urchinTracker('/outgoing/sfi.org.pl/edition-2011/agenda-2011_git-tak-po-prostu?referer=');">at this years IT Festival</a>. It was a really great opportunity to show lot&#8217;s of people (primarily students, and to-be-students but also some currently working people) the joy and beauty of Git. The event was really nice (it&#8217;s constantly improving, since the last few editions I think) and I&#8217;ve had some fun with my pal from work etc. I&#8217;ve also got to know some of the speakers &#8211; really nice guys :-) Anyways, find bellow the video from the presentation recorded by my newly met pal <a href="http://kzubik.cba.pl" onclick="urchinTracker('/outgoing/kzubik.cba.pl?referer=');">kzubik</a> and the polished up slides (they&#8217;re a lot better than the previous ones).</p>
<p>Video:</p>
<p><iframe src="http://player.vimeo.com/video/22299510?portrait=0" width="551" height="413" frameborder="0"></iframe><br />
<a href="http://vimeo.com/22299510" onclick="urchinTracker('/outgoing/vimeo.com/22299510?referer=');">The video is uploaded to Vimeo</a></p>
<p>Slides:</p>
<p><iframe src="http://www.slideshare.net/slideshow/embed_code/7244954" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> </p>
<p><a href="http://www.slideshare.net/ktoso/git-tak-po-prostu-sfi-version" onclick="urchinTracker('/outgoing/www.slideshare.net/ktoso/git-tak-po-prostu-sfi-version?referer=');">http://www.slideshare.net/ktoso/git-tak-po-prostu-sfi-version</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/project13/1304/me-git-academic-it-festival-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[git] bisect + maven = automate &#8220;breaking&#8221; commit search</title>
		<link>http://www.blog.project13.pl/index.php/coding/1217/git-bisect-maven-automate-breaking-commit-search/</link>
		<comments>http://www.blog.project13.pl/index.php/coding/1217/git-bisect-maven-automate-breaking-commit-search/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 21:34:31 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[terminal heroes]]></category>
		<category><![CDATA[#maven]]></category>
		<category><![CDATA[bisect]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[runner]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=1217</guid>
		<description><![CDATA[Hey there guys. I hope some you enjoyed my presentation on SFI last weekend. The workshop was kinda chaotic (network problems mailny) but I&#8217;m sure some of you got convinced to use, or begin with trying out, git in yout next projects&#8230; :-) Well, that was all nice and cool but git (other DVCS have [...]]]></description>
			<content:encoded><![CDATA[<p>Hey there guys. I hope some you enjoyed my presentation on SFI last weekend. The workshop was kinda chaotic (network problems mailny) but I&#8217;m sure some of you got convinced to use, or begin with trying out, git in yout next projects&#8230; :-)</p>
<p>Well, that was all nice and cool but git (other DVCS have this too) has a lot more to offer! :-) Today we&#8217;ll look into git bisect and how to automate it&#8217;s execution using maven to look for a commit that breakes something. You may run ANY SCRIPT and even write your own and git will use it to test if a commit is &#8220;bad&#8221; or &#8220;good&#8221;. Ok, but let&#8217;s slowdown a little&#8230; What git bisect basically does is performing an binary search, between a range of commits you specify looking for &#8220;the first bad commit&#8221; you you can easily find what caused the bug and fix it. You can drive it by hand and after starting git bisect just test the commit by hand and tell git if it&#8217;s good or bad by &#8220;git bisect bad&#8221; &#8220;git bisect good&#8221;. Git is smart enough to find what commit he should &#8220;git checkout &#8230;&#8221; next to perform a binary search based on your anwsers. </p>
<p>Today we&#8217;ll learn how to make git cooperate with maven and find the first commit that introduced a test failure. See bellow for the full workflow you showcasing this:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames breakMe $ mvn org.apache.maven.plugins:maven-archetype-plugin:<span class="nu0">1.0</span>-alpha<span class="nu0">-7</span>:create -<span class="re2">DarchetypeGroupId=</span>org.apache.maven.archetypes -<span class="re2">DarchetypeArtifactId=</span>maven-archetype-quickstart -<span class="re2">DartifactId=</span>bisectfun -<span class="re2">DgroupId=</span>pl.project13</div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames breakMe $ <span class="kw2">ls</span></div>
</li>
<li class="li1">
<div class="de1">bisectfun &nbsp;mavenbisect.<span class="kw2">sh</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames breakMe $ <span class="kw3">cd</span> bisectfun<span class="sy0">/</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun $ <span class="kw2">mkdir</span> src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>resources<span class="sy0">/</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun $ git init .</div>
</li>
<li class="li1">
<div class="de1">Initialized empty Git repository <span class="kw1">in</span> <span class="sy0">/</span>tmp<span class="sy0">/</span>breakMe<span class="sy0">/</span>bisectfun<span class="sy0">/</span>.git<span class="sy0">/</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun $ git commit ^C</div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun $ vim .gitignore</div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun $ git add .</div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun $ git commit </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>master <span class="br0">&#40;</span>root-commit<span class="br0">&#41;</span> 5b46510<span class="br0">&#93;</span> &nbsp;Initial commit</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="nu0">4</span> files changed, <span class="nu0">78</span> insertions<span class="br0">&#40;</span>+<span class="br0">&#41;</span>, <span class="nu0">0</span> deletions<span class="br0">&#40;</span>-<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;create mode <span class="nu0">100644</span> .gitignore</div>
</li>
<li class="li1">
<div class="de1">&nbsp;create mode <span class="nu0">100644</span> pom.xml</div>
</li>
<li class="li1">
<div class="de1">&nbsp;create mode <span class="nu0">100644</span> src<span class="sy0">/</span>main<span class="sy0">/</span>java<span class="sy0">/</span>pl<span class="sy0">/</span>project13<span class="sy0">/</span>App.java</div>
</li>
<li class="li1">
<div class="de1">&nbsp;create mode <span class="nu0">100644</span> src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>java<span class="sy0">/</span>pl<span class="sy0">/</span>project13<span class="sy0">/</span>AppTest.java</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">********************************************************************************</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Git Achievement Unlocked<span class="sy0">!</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Master Author <span class="br0">&#40;</span>Level <span class="nu0">10</span><span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Made <span class="nu0">2</span>^Level commits using git commit. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">********************************************************************************</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ mvn <span class="kw3">test</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>INFO<span class="br0">&#93;</span> BUILD SUCCESSFUL</div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></div>
</li>
</ol>
</div>
<p>Ok up until now we&#8217;ve just created a simple repository we&#8217;ll be running the tests on. Let&#8217;s tag this state as &#8220;yeah it&#8217;s working here&#8221; just so that I don&#8217;t have to remeber the SHA-1 of this commit. </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ git tag wasOkHere</div>
</li>
</ol>
</div>
<p>And now we&#8217;ll run a script that does some random commit action, just so that bisect has a lot of commits to work on.</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ <span class="kw1">for</span> i <span class="kw1">in</span> <span class="br0">&#123;</span><span class="nu0">1</span>..<span class="nu0">50</span><span class="br0">&#125;</span>; <span class="kw1">do</span> fortune <span class="sy0">&gt;</span> src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>resources<span class="sy0">/</span>fortune<span class="re1">$i</span>; git add .; git commit -a -m <span class="st0">&#39;some commit&#39;</span>; <span class="kw1">done</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>master 20ae1c1<span class="br0">&#93;</span> some commit</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="nu0">1</span> files changed, <span class="nu0">3</span> insertions<span class="br0">&#40;</span>+<span class="br0">&#41;</span>, <span class="nu0">0</span> deletions<span class="br0">&#40;</span>-<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;create mode <span class="nu0">100644</span> src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>resources<span class="sy0">/</span>fortune1</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>master 64b779e<span class="br0">&#93;</span> some commit</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="nu0">1</span> files changed, <span class="nu0">15</span> insertions<span class="br0">&#40;</span>+<span class="br0">&#41;</span>, <span class="nu0">0</span> deletions<span class="br0">&#40;</span>-<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;create mode <span class="nu0">100644</span> src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>resources<span class="sy0">/</span>fortune2</div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ mvn clean <span class="kw3">test</span> <span class="sy0">&gt;</span> <span class="sy0">/</span>dev<span class="sy0">/</span>null <span class="nu0">2</span><span class="sy0">&gt;</span> <span class="sy0">/</span>dev<span class="sy0">/</span>null</div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ <span class="kw3">echo</span> <span class="re4">$?</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">0</span></div>
</li>
</ol>
</div>
<p>The tests are still passing&#8230; time to change that! We&#8217;ll break the build with the following commit. And then generate yet another 50 commits to &#8220;hide it&#8221;&#8230; ;-)</p>
<div class="geshi no bash">
<div class="head">ktoso@dynames bisectfun @ master $ echo &#8220;fail :D&#8221; >> src/test/java/pl/project13/AppTest.java</div>
<ol>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ <span class="kw3">echo</span> <span class="st0">&quot;fail :D&quot;</span> <span class="sy0">&gt;&gt;</span> src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>java<span class="sy0">/</span>pl<span class="sy0">/</span>project13<span class="sy0">/</span>AppTest.java </div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ <span class="kw3">echo</span> <span class="st0">&quot;fail :D&quot;</span> <span class="sy0">&gt;&gt;</span> src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>java<span class="sy0">/</span>pl<span class="sy0">/</span>project13<span class="sy0">/</span>AppTest.java </div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ git add .</div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ git commit </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>master 09a58fb<span class="br0">&#93;</span> <span class="kw3">let</span> it crash</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="nu0">1</span> files changed, <span class="nu0">3</span> insertions<span class="br0">&#40;</span>+<span class="br0">&#41;</span>, <span class="nu0">0</span> deletions<span class="br0">&#40;</span>-<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ <span class="kw1">for</span> i <span class="kw1">in</span> <span class="br0">&#123;</span><span class="nu0">1</span>..<span class="nu0">50</span><span class="br0">&#125;</span>; <span class="kw1">do</span> fortune <span class="sy0">&gt;</span> src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>resources<span class="sy0">/</span>fortune<span class="re1">$i</span>; git add .; git commit -a -m <span class="st0">&#39;some commit&#39;</span>; <span class="kw1">done</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>master f83cdae<span class="br0">&#93;</span> some commit</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="nu0">1</span> files changed, <span class="nu0">3</span> insertions<span class="br0">&#40;</span>+<span class="br0">&#41;</span>, <span class="nu0">3</span> deletions<span class="br0">&#40;</span>-<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>master 725c5ce<span class="br0">&#93;</span> some commit</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="nu0">1</span> files changed, <span class="nu0">4</span> insertions<span class="br0">&#40;</span>+<span class="br0">&#41;</span>, <span class="nu0">15</span> deletions<span class="br0">&#40;</span>-<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;rewrite src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>resources<span class="sy0">/</span>fortune2 <span class="br0">&#40;</span><span class="nu0">100</span><span class="sy0">%</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ <span class="kw1">for</span> i imvn clean <span class="kw3">test</span> <span class="sy0">&gt;</span> <span class="sy0">/</span>dev<span class="sy0">/</span>null <span class="nu0">2</span><span class="sy0">&gt;</span> <span class="sy0">/</span>dev<span class="sy0">/</span>null</div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ <span class="kw3">echo</span> <span class="re4">$?</span></div>
</li>
<li class="li1">
<div class="de1"><span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ <span class="kw3">echo</span> <span class="st0">&#39;!!!!!!!!!!!!!!OH NO IT FAILS!!!!!!!!&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">!!!!!!!!!!!!!!!!</span>OH NO IT FAILS<span class="sy0">!!!!!!!!</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ git tag failsHere</div>
</li>
</ol>
</div>
<p>Ok the test&#8217;s fail now. But suppose you didn&#8217;t know which commit introduced the bug (in our case made the test&#8217;s fail). You&#8217;d have to guess which one, or check them all or just work it out by looking at your current repository state. But since you&#8217;re doing small commits and do them often &#8211; it&#8217;ll be great if you found out which commit caused this failure. As it&#8217;s preferably small, it&#8217;ll be very easy to find out what change caused the build to fail. No is the time to use <strong>git bisect</strong>!</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ git bisect start</div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ git bisect bad failsHere </div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ git bisect good wasOkHere </div>
</li>
<li class="li1">
<div class="de1">Bisecting: <span class="nu0">50</span> revisions left to <span class="kw3">test</span> after this <span class="br0">&#40;</span>roughly <span class="nu0">6</span> steps<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>ca199e0cbd19e498eabf6196036313e206b00a7f<span class="br0">&#93;</span> some commit</div>
</li>
</ol>
</div>
<p>We&#8217;ve started bisect, and told him which commit we&#8217;re sure is working and which we&#8217;re sure is failing. Git will now checkout a commit he found &#8220;somewhat in the middle&#8221; and will continue to bisect (binary search) the commit history based on wether a commit is &#8220;good&#8221; or &#8220;bad&#8221;. We could just tell it git by hand by doing &#8220;git bisect good/bad&#8221; etc. But let&#8217;s <strong>git bisect run</strong> a script to do this for us :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> <span class="br0">&#40;</span>no branch<span class="br0">&#41;</span> $ git bisect run ..<span class="sy0">/</span>mavenbisect.<span class="kw2">sh</span></div>
</li>
<li class="li1">
<div class="de1">running ..<span class="sy0">/</span>mavenbisect.<span class="kw2">sh</span></div>
</li>
<li class="li1">
<div class="de1">Bisecting: <span class="nu0">25</span> revisions left to <span class="kw3">test</span> after this <span class="br0">&#40;</span>roughly <span class="nu0">5</span> steps<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>c8658db8e0c5df1d603a9a96ae7a04e71c4ba9d1<span class="br0">&#93;</span> some commit</div>
</li>
<li class="li1">
<div class="de1">running ..<span class="sy0">/</span>mavenbisect.<span class="kw2">sh</span></div>
</li>
<li class="li1">
<div class="de1">Bisecting: <span class="nu0">12</span> revisions left to <span class="kw3">test</span> after this <span class="br0">&#40;</span>roughly <span class="nu0">4</span> steps<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>ddc2100ab90d0624df74e81f17d7ed7ea0fc9a61<span class="br0">&#93;</span> some commit</div>
</li>
<li class="li1">
<div class="de1">running ..<span class="sy0">/</span>mavenbisect.<span class="kw2">sh</span></div>
</li>
<li class="li1">
<div class="de1">Bisecting: <span class="nu0">5</span> revisions left to <span class="kw3">test</span> after this <span class="br0">&#40;</span>roughly <span class="nu0">3</span> steps<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>31ba35661eecb7a96159e483954d315a63a3789d<span class="br0">&#93;</span> some commit</div>
</li>
<li class="li1">
<div class="de1">running ..<span class="sy0">/</span>mavenbisect.<span class="kw2">sh</span></div>
</li>
<li class="li1">
<div class="de1">Bisecting: <span class="nu0">2</span> revisions left to <span class="kw3">test</span> after this <span class="br0">&#40;</span>roughly <span class="nu0">2</span> steps<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>725c5cec8803b1e62dd36a3b74fd8c52d42e807c<span class="br0">&#93;</span> some commit</div>
</li>
<li class="li1">
<div class="de1">running ..<span class="sy0">/</span>mavenbisect.<span class="kw2">sh</span></div>
</li>
<li class="li1">
<div class="de1">Bisecting: <span class="nu0">0</span> revisions left to <span class="kw3">test</span> after this <span class="br0">&#40;</span>roughly <span class="nu0">1</span> step<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>f83cdaeb34072a6f9c9a63abf8bb8f2390b996de<span class="br0">&#93;</span> some commit</div>
</li>
<li class="li1">
<div class="de1">running ..<span class="sy0">/</span>mavenbisect.<span class="kw2">sh</span></div>
</li>
<li class="li1">
<div class="de1">Bisecting: <span class="nu0">0</span> revisions left to <span class="kw3">test</span> after this <span class="br0">&#40;</span>roughly <span class="nu0">0</span> steps<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>09a58fbf2821c4f66c003a65f19f6ff99f5ee37d<span class="br0">&#93;</span> <span class="kw3">let</span> it crash</div>
</li>
<li class="li1">
<div class="de1">running ..<span class="sy0">/</span>mavenbisect.<span class="kw2">sh</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">09a58fbf2821c4f66c003a65f19f6ff99f5ee37d is the first bad commit</div>
</li>
<li class="li1">
<div class="de1">commit 09a58fbf2821c4f66c003a65f19f6ff99f5ee37d</div>
</li>
<li class="li1">
<div class="de1">Author: Konrad Malawski <span class="sy0">&lt;</span>konrad .malawski<span class="sy0">@</span>project13.pl<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">Date: &nbsp; Wed Mar <span class="nu0">16</span> <span class="nu0">22</span>:<span class="nu0">02</span>:<span class="nu0">38</span> <span class="nu0">2011</span> <span class="nu0">+0100</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">let</span> it crash</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">:<span class="nu0">040000</span> <span class="nu0">040000</span> ef88527072e0b1532819a75f288a0e65a2737c6a 49083a7d820a731d5edad117a4af097bd9ffb444 M &nbsp; &nbsp; &nbsp;src</div>
</li>
<li class="li1">
<div class="de1">bisect run success</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> <span class="br0">&#40;</span>no branch<span class="br0">&#41;</span> $ git show 09a58fbf2821c4f66c003a65f19f6ff99f5ee37d</div>
</li>
<li class="li1">
<div class="de1">commit 09a58fbf2821c4f66c003a65f19f6ff99f5ee37d</div>
</li>
<li class="li1">
<div class="de1">Author: Konrad Malawski <span class="sy0">&lt;/</span>konrad<span class="sy0">&gt;&lt;</span>konrad .malawski<span class="sy0">@</span>project13.pl<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">Date: &nbsp; Wed Mar <span class="nu0">16</span> <span class="nu0">22</span>:<span class="nu0">02</span>:<span class="nu0">38</span> <span class="nu0">2011</span> <span class="nu0">+0100</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">let</span> it crash</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">diff</span> &#8211;git a<span class="sy0">/</span>src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>java<span class="sy0">/</span>pl<span class="sy0">/</span>project13<span class="sy0">/</span>AppTest.java b<span class="sy0">/</span>src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>java<span class="sy0">/</span>pl<span class="sy0">/</span>project13<span class="sy0">/</span>AppTest.java</div>
</li>
<li class="li1">
<div class="de1">index c6ffd44..b27c8b8 <span class="nu0">100644</span></div>
</li>
<li class="li1">
<div class="de1">&#8212; a<span class="sy0">/</span>src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>java<span class="sy0">/</span>pl<span class="sy0">/</span>project13<span class="sy0">/</span>AppTest.java</div>
</li>
<li class="li1">
<div class="de1">+++ b<span class="sy0">/</span>src<span class="sy0">/</span><span class="kw3">test</span><span class="sy0">/</span>java<span class="sy0">/</span>pl<span class="sy0">/</span>project13<span class="sy0">/</span>AppTest.java</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">@@</span> <span class="nu0">-36</span>,<span class="nu0">3</span> <span class="nu0">+36</span>,<span class="nu0">6</span> <span class="sy0">@@</span> public class AppTest</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;assertTrue<span class="br0">&#40;</span> <span class="kw2">true</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">+fail :D</div>
</li>
<li class="li1">
<div class="de1">+fail :D</div>
</li>
<li class="li1">
<div class="de1">+fail :D</div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> <span class="br0">&#40;</span>no branch<span class="br0">&#41;</span> $ git bisect reset </div>
</li>
<li class="li1">
<div class="de1">Previous HEAD position was 09a58fb&#8230; <span class="kw3">let</span> it crash</div>
</li>
<li class="li1">
<div class="de1">Switched to branch <span class="st0">&#39;master&#39;</span></div>
</li>
<li class="li1">
<div class="de1">ktoso<span class="sy0">@</span>dynames bisectfun <span class="sy0">@</span> master $ </div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;/</span>konrad<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p>Yeah, we&#8217;ve found our failing commit :-) You could use any script you want here, it just has to return 0 if git should think it&#8217;s a &#8220;good commit&#8221; and &#8220;not 0&#8243; if it&#8217;s a &#8220;bad commit&#8221;. I&#8217;ve even seen runners written in PHP running or spellcheckers &#8211; you name it&#8230; :-) Ok but how does this magical script that we&#8217;ve just run look like?</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0">#!/bin/sh</span></div>
</li>
<li class="li1">
<div class="de1">mvn clean <span class="kw3">test</span> <span class="sy0">&gt;</span> <span class="sy0">/</span>dev<span class="sy0">/</span>null <span class="nu0">2</span><span class="sy0">&gt;</span> <span class="sy0">/</span>dev<span class="sy0">/</span>null</div>
</li>
</ol>
</div>
<p>Whoa, that&#8217;s simple&#8230; :-) Keep on git hacking guys! See you soon, with some more git or java tips&#8230; :-) Oh and I&#8217;ll post my presentation (holefully with video) from SFI soon, so keep an eye out! :-)</p>
<p>PS: Yup, the <strong>code retreat</strong> we&#8217;re (SCKRK with a little help from the <a href="http://www.java.pl" onclick="urchinTracker('/outgoing/www.java.pl?referer=');">PolishJUG</a>) organizing got &#8220;sold out&#8221; after just 3h&#8230; ;-) Be sure to take a look and be quicker next time! <a href="http://coderetreat.sckrk.com" onclick="urchinTracker('/outgoing/coderetreat.sckrk.com?referer=');">http://coderetreat.sckrk.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/coding/1217/git-bisect-maven-automate-breaking-commit-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[terminal heroes] Display git branch in shell prompt (PS1)</title>
		<link>http://www.blog.project13.pl/index.php/fun/1198/terminal-heroes-display-git-branch-in-shell-prompt-ps1/</link>
		<comments>http://www.blog.project13.pl/index.php/fun/1198/terminal-heroes-display-git-branch-in-shell-prompt-ps1/#comments</comments>
		<pubDate>Sat, 26 Feb 2011 22:29:01 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[terminal heroes]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[branch]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[prompt]]></category>
		<category><![CDATA[ps1]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=1198</guid>
		<description><![CDATA[I don&#8217;t think I&#8217;ve blogged about this but I&#8217;ve seen this sometime ago and now decided to add it to my .bashrc for good. It&#8217;s a simple trick to make an awesome PS1 shell prompt, displaying the branch you are currently on (if you&#8217;re in a git versioned directory). Not that I&#8217;m forgetting what branch [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t think I&#8217;ve blogged about this but I&#8217;ve seen this sometime ago and now decided to add it to my .bashrc for good. It&#8217;s a simple trick to make an awesome PS1 shell prompt, displaying the branch you are currently on (if you&#8217;re in a git versioned directory). Not that I&#8217;m forgetting what branch I&#8217;m on, but I hope it&#8217;ll make me create more branches more often and never &#8220;just work on master&#8221; :-)</p>
<p><a href="http://www.blog.project13.pl/wp-content/uploads/2011/02/awesome-git-branch-in-shell.png"><img src="http://www.blog.project13.pl/wp-content/uploads/2011/02/awesome-git-branch-in-shell.png" alt="" title="awesome-git-branch-in-shell" width="530" class="aligncenter size-full wp-image-1211" /></a></p>
<p>The code comes from <a href="http://arnorehn.de/cgi-bin/weblog_basic/index.php?p=34" onclick="urchinTracker('/outgoing/arnorehn.de/cgi-bin/weblog_basic/index.php?p=34&amp;referer=');">http://arnorehn.de/cgi-bin/weblog_basic/index.php?p=34</a> so big kudos too him :-)</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0"># in your ~/.bashrc for example</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">alias</span> <span class="re2">gitka=</span><span class="st0">&#39;gitk &#8211;all&#39;</span> <span class="co0">#unrelated to this post, but very useful :-)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">function</span> formattedGitBranch <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">_branch=</span><span class="st0">&quot;$(git branch 2&gt;/dev/null | sed -e &quot;</span><span class="sy0">/</span>^\s<span class="sy0">/</span>d<span class="st0">&quot; -e &quot;</span>s<span class="sy0">/</span>^\<span class="sy0">*</span>\s<span class="sy0">//</span><span class="st0">&quot;)&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">test</span> -n <span class="st0">&quot;$_branch&quot;</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">echo</span> -e <span class="st0">&quot; @<span class="es0">\e</span>[0;32m $_branch&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#export PS1=&quot;\u@\h \W \[\e[m\]\$(formattedGitBranch) \[\e[1;32m\]\$ \[\e[m\]\[\e[0m\]&quot; </span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">export</span> <span class="re2">PS1=</span><span class="st0">&quot;<span class="es0">\u</span>@<span class="es0">\h</span> <span class="es0">\W</span><span class="es0">\[</span><span class="es0">\e</span>[m<span class="es0">\]</span><span class="es0">\$</span>(formattedGitBranch)<span class="es0">\[</span><span class="es0">\e</span>[0m<span class="es0">\]</span> <span class="es0">\$</span> &quot;</span></div>
</li>
</ol>
</div>
<p>Cheers and <b>happy hacking</b>!</p>
<p>PS: I&#8217;m waiting for my T-shirt and stickers (for training participants) to arrive from github. I&#8217;d love they make it in time for <a href="http://www.sfi.org.pl" onclick="urchinTracker('/outgoing/www.sfi.org.pl?referer=');">SFI</a> but I&#8217;m not sure if it&#8217;s even possible hmmm&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/fun/1198/terminal-heroes-display-git-branch-in-shell-prompt-ps1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Setup git on windows to use kdiff3 as it&#8217;s mergetool</title>
		<link>http://www.blog.project13.pl/index.php/coding/1192/setup-git-on-windows-to-use-kdiff3-as-its-mergetool/</link>
		<comments>http://www.blog.project13.pl/index.php/coding/1192/setup-git-on-windows-to-use-kdiff3-as-its-mergetool/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 23:04:22 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[mergetool]]></category>
		<category><![CDATA[Project13]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[training]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=1192</guid>
		<description><![CDATA[As I&#8217;ll be leading BOTH a presentation and a workshop about git at the upcomming Academic It Festival I&#8217;m preparing myselffor the most problematic of all problems&#8230; MS Windows! Just kidding ;-) But it&#8217;s highly probable that most users will have Windows installed on their notebooks so I&#8217;ll better be prepared :-) One of the [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;ll be leading BOTH a presentation and a workshop about git at the upcomming <a href="http://sfi.org.pl/edycja-2011/prelegenci" onclick="urchinTracker('/outgoing/sfi.org.pl/edycja-2011/prelegenci?referer=');">Academic It Festival</a> I&#8217;m preparing myselffor the most problematic of all problems&#8230; MS Windows! Just kidding ;-) But it&#8217;s highly probable that most users will have Windows installed on their notebooks so I&#8217;ll better be prepared :-) One of the things woth using for merges is&#8230; the mergetool. My favourite (besides intellij) is <strong>KDiff3</strong> it really rocks and usability and look and feel are on a very high standard.</p>
<p>As I&#8217;d rather show the participants around git and not just &#8220;how the hell do I use vimdiff?!&#8221; I&#8217;m posting this little snippet on howto use KDiff3 on windows. Of course we&#8217;re probably going to have quite simple conflicts that could easily be conflicted without tooling but it&#8217;s nice to have one prepared when you need one. So, this is what you need to run KDiff3 on windows as a mergetool (paste this inside of your <strong>.git/config </strong>file)</p>
<pre>
<code>[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false
</code>
</pre>
<p>And you&#8217;ll need to download kdiff3 for windows of course, this can be done on <a href="http://sourceforge.net/projects/kdiff3/files/kdiff3/0.9.95/" onclick="urchinTracker('/outgoing/sourceforge.net/projects/kdiff3/files/kdiff3/0.9.95/?referer=');">their sourceforga page</a>. And that&#8217;s basically it. I&#8217;ll reconfirm that this really works tomorrow as I&#8217;m getting somewhat tired already&#8230; Well then&#8230;</p>
<p><em>Gundam fighters set, ready&#8230;.. goooo!</em><br />
<em style="font-size:xx-small">* stupid quote from  G Gundam ;-)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/coding/1192/setup-git-on-windows-to-use-kdiff3-as-its-mergetool/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[release] maven-git-commit-id-plugin</title>
		<link>http://www.blog.project13.pl/index.php/fun/1174/release-maven-git-commit-id-plugin/</link>
		<comments>http://www.blog.project13.pl/index.php/fun/1174/release-maven-git-commit-id-plugin/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 15:25:18 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[#maven]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=1174</guid>
		<description><![CDATA[Yup, today I&#8217;m releasing yet another piece of cool free software! It solves a problem we&#8217;ve had at our company, the tester tometimes tested stuff that wasn&#8217;t deployed yet, and the developers thought it was deployed and this caused some weird situations sometimes. Using the plugin I&#8217;ve written, we&#8217;re able to expose &#8220;which version is [...]]]></description>
			<content:encoded><![CDATA[<p>Yup, today I&#8217;m releasing yet another piece of cool free software! It solves a problem we&#8217;ve had at our company, the tester tometimes tested stuff that wasn&#8217;t deployed yet, and the developers thought it was deployed and this caused some weird situations sometimes. Using the plugin I&#8217;ve written, we&#8217;re able to expose &#8220;which version is this?&#8221; using repository information from<strong> git </strong>in our webapps. Yes there are maven plugins that do this, but none of them supported git &#8211; so I wrote my own and hope you guys will find it as useful as we do!</p>
<p><strong>UPDATE</strong><br />
The plugin is now available from <strong>Sonatype Nexus</strong>!</p>
<pre>
    <repository>
        <id>sonatype-releases</id>
        <name>Sonatype Releases</name>
        <url>https://oss.sonatype.org/content/repositories/releases/</url>
    </repository>
</pre>
<p><strong>END OF UPDATE</strong></p>
<p>Now I&#8217;ll be a bit lazy and just paste the README I&#8217;ve prepared for <strong><a href="https://github.com/ktoso/maven-git-commit-id-plugin/" target="_blank" onclick="urchinTracker('/outgoing/github.com/ktoso/maven-git-commit-id-plugin/?referer=');">maven-git-commit-id-plugin on github</a></strong>.</p>
<div id="readme">
<div>
<h2>Maven plugin: git-commit-id-plugin</h2>
<p><strong>git-commit-id-plugin</strong> is a plugin quite similar to <a href="https://fisheye.codehaus.org/browse/mojo/tags/buildnumber-maven-plugin-1.0-beta-4" target="_blank" onclick="urchinTracker('/outgoing/fisheye.codehaus.org/browse/mojo/tags/buildnumber-maven-plugin-1.0-beta-4?referer=');">build-number maven plugin</a> for example but as buildnumber only supports svn (which is very sad) and  cvs (which is even more sad, and makes bunnies cry) I had to quickly  develop an git version of such a plugin. For those who don&#8217;t know the  previous plugins, let me explain what this plugin does:</p>
<h3>Sample scenario why this plugin is useful</h3>
<p>If you develop your maven project inside an git repository (which you  hopefully already are docing) you may want to know exactly what changeset is currently deployed online. Why is this useful? Well,  the tester won&#8217;t come to you screaming &#8220;heeey that bug ain&#8217;t fixed&#8221; of  course you&#8217;d reply &#8220;but I fixed it this morning!&#8221; and after some  searching you notice &#8220;oh&#8230; it&#8217;ll be online after the next deployment,  sorry tester&#8230; :-(&#8220;.</p>
<p>This scenario keeps repeating sometimes, thus you can state which  commit fixes/closes the bug, note this in JIRA etc and then the tester  will know if it&#8217;s already online (by the commit date for example).</p>
<h2>Usage</h2>
<h3>Getting the plugin</h3>
<p>I&#8217;ll be trying to get this plugin out to sonatype for others to use if more simply, for now it&#8217;s quickest to just:</p>
<pre><code>  git clone git://github.com/ktoso/maven-git-commit-id-plugin.git maven-git-commit-id-plugin
  cd maven-git-commit-id-plugin
  mvn install
</code></pre>
<p>and you&#8217;re ready to use it ;-) I&#8217;m also thinking about making this  github repo a maven repository, which would make the above step not  needed &#8211; but first let&#8217;s wait if sonatype let me in with this project,  k? ;-)</p>
<h3>Using the plugin</h3>
<p>It&#8217;s really simple to setup this plugin, here&#8217;s a sample pom that you may base your <strong>pom.xml</strong> on:</p>
<pre><code>   &lt;?xml version="1.0" encoding="UTF-8"?&gt;
   &lt;project xmlns="http://maven.apache.org/POM/4.0.0"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
       &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;

       &lt;groupId&gt;pl.project13.maven&lt;/groupId&gt;
       &lt;artifactId&gt;my-git-plugin-sample-app&lt;/artifactId&gt;
       &lt;packaging&gt;war&lt;/packaging&gt;
       &lt;version&gt;0.1&lt;/version&gt;
       &lt;name&gt;my-git-plugin-sample-app&lt;/name&gt;
       &lt;url&gt;http://www.blog.project13.pl&lt;/url&gt;

       &lt;parent/&gt;

       &lt;dependencies /&gt;

       &lt;build&gt;
           &lt;!-- GIT COMMIT ID PLUGIN CONFIGURATION --&gt;
           &lt;resources&gt;
               &lt;resource&gt;
                   &lt;directory&gt;src/main/resources&lt;/directory&gt;
                   &lt;filtering&gt;true&lt;/filtering&gt;
                   &lt;includes&gt;
                       &lt;include&gt;**/*.properties&lt;/include&gt;
                       &lt;include&gt;**/*.xml&lt;/include&gt;
                   &lt;/includes&gt;
               &lt;/resource&gt;
           &lt;/resources&gt;

           &lt;plugins&gt;
               &lt;plugin&gt;
                   &lt;groupId&gt;pl.project13.maven&lt;/groupId&gt;
                   &lt;artifactId&gt;git-commit-id-plugin&lt;/artifactId&gt;
                   &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
                   &lt;executions&gt;
                       &lt;execution&gt;
                           &lt;goals&gt;
                               &lt;goal&gt;revision&lt;/goal&gt;
                           &lt;/goals&gt;
                       &lt;/execution&gt;
                   &lt;/executions&gt;
                   &lt;configuration&gt;
                       &lt;prefix&gt;git&lt;/prefix&gt; &lt;!-- that's the default value --&gt;
                       &lt;dateFormat&gt;dd.MM.yyyy '@' HH:mm:ss z&lt;/dateFormat&gt; &lt;!-- that's the default value --&gt;
                       &lt;verbose&gt;true&lt;/verbose&gt; &lt;!-- false is default for this --&gt;
                       &lt;dotGitDirectory&gt;${project.basedir}/../.git&lt;/dotGitDirectory&gt; &lt;!-- required, you have to specify this path --&gt;
                   &lt;/configuration&gt;
               &lt;/plugin&gt;
               &lt;!-- END OF GIT COMMIT ID PLUGIN CONFIGURATION --&gt;

               &lt;!-- other plugins --&gt;
           &lt;/plugins&gt;
       &lt;/build&gt;
   &lt;/project&gt;
</code></pre>
<p>Based on the above part of a working POM you should be able to figure out the rest, I mean you are a maven user after all&#8230; ;-) Note that the resources filtering is important for this plugin to work, don&#8217;t omit it!</p>
<p>Now you just have to include such a properties file in your project under <code>/src/main/resources</code> (and call it <strong>git.properties</strong> for example) and maven will put the appropriate properties in the placeholders:</p>
<pre><code> git.branch=${git.branch}

 git.build.user.name=${git.build.user.name}
 git.build.user.email=${git.build.user.email}
 git.build.time=${git.build.time}

 git.commit.id=${git.commit.id}
 git.commit.user.name=${git.commit.user.name}
 git.commit.user.email=${git.commit.user.email}
 git.commit.message.full=${git.commit.message.full}
 git.commit.message.short=${git.commit.message.short}
 git.commit.time=${git.commit.time}
</code></pre>
<p>The <code>git</code> prefix may be configured in the plugin declaration above.</p>
<h3>Maven resource filtering + Spring = GitRepositoryState Bean</h3>
<p>You&#8217;ll most probably want to wire these plugins somehow to get easy  access to them during runtime. We&#8217;ll use spring as an example of doing  this. Start out with with adding the above steps to your project, next paste  this <strong>git-bean.xml</strong> into the <code>/src/main/resources/</code> directory (or any other, just adjust the paths later on):</p>
<pre><code>&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&gt;

    &lt;bean name="gitRepositoryInformation"&gt;
        &lt;property name="branch" value="${git.branch}"/&gt;
        &lt;property name="commitId" value="${git.commit.id}"/&gt;
        &lt;property name="commitTime" value="${git.commit.time}"/&gt;
        &lt;property name="buildUserName" value="${git.build.user.name}"/&gt;
        &lt;property name="buildUserEmail" value="${git.build.user.email}"/&gt;
        &lt;property name="commitMessageFull" value="${git.commit.message.full}"/&gt;
        &lt;property name="commitMessageShort" value="${git.commit.message.short}"/&gt;
        &lt;property name="commitUserName" value="${git.commit.user.name}"/&gt;
        &lt;property name="commitUserEmail" value="${git.commit.user.email}"/&gt;
    &lt;/bean&gt;

&lt;/beans&gt;
</code></pre>
<p>And here&#8217;s the source of the bean we&#8217;re binding here:</p>
<pre><code>package pl.project13.maven.example.git;

import org.codehaus.jackson.annotate.JsonWriteNullProperties;

/**
 * A spring controlled bean that will be injected
 * with properties about the repository state at build time.
 * This information is supplied by my plugin - &lt;b&gt;pl.project13.maven.git-commit-id-plugin&lt;/b&gt;
 *
 * @author Konrad Malawski
 */
@JsonWriteNullProperties(true)
public class GitRepositoryState {
  String branch;                  // =${git.branch}
  String commitId;                // =${git.commit.id}
  String buildUserName;           // =${git.build.user.name}
  String buildUserEmail;          // =${git.build.user.email}
  String buildTime;               // =${git.build.time}
  String commitUserName;          // =${git.commit.user.name}
  String commitUserEmail;         // =${git.commit.user.email}
  String commitMessageFull;       // =${git.commit.message.full}
  String commitMessageShort;      // =${git.commit.message.short}
  String commitTime;              // =${git.commit.time}

  public GitRepositoryState() {
  }

  /* Generate setters and getters here */
}
</code></pre>
<p>The source for it is also on the repo of this plugin. Of course, <em>feel free to drop out the jackson annotation</em> if you won&#8217;t be using it.</p>
<p>The last configuration related thing we need to do is to load up this bean in your appContext, so open up your <strong>applicationContext.xml</strong> or whatever you call it in your project and add these lines in the  section:</p>
<pre><code>&lt;context:property-placeholder location="classpath:*.properties" /&gt;
&lt;import resource="classpath:/git-bean.xml"/&gt;
</code></pre>
<p>Of course, you may adjust the paths and file locations as you please, no problems here&#8230; :-) <em>Now you&#8217;re ready to use your GitRepositoryState Bean!</em> Let&#8217;s create an sample <strong>Spring MVC Controller</strong> to test it out:</p>
<pre><code> @Controller
 @RequestMapping("/git")
 public class GitService extends BaseWebService {

     @Autowired
     GitRepositoryState gitRepoState;

     @RequestMapping("/status")
     public ModelAndView checkGitRevision() throws WebServiceAuthenticationException {
       ServerResponse&lt;GitRepositoryState&gt; response = new ServerResponse&lt;GitRepositoryState&gt;(gitRepoState);
       return createMAV(response);
     }
 }
</code></pre>
<p>Don&#8217;t mind the createMAV and responses stuff, it&#8217;s just example code.  And feel free to use constructor injection, it&#8217;s actually a better idea  ;-)</p>
<p>In the end <em>this is what this service would return</em>:</p>
<pre><code> {
     "branch" : "testing-maven-git-plugin",
     "commitTime" : "06.01.1970 @ 16:16:26 CET",
     "commitId" : "787e39f61f99110e74deed68ab9093088d64b969",
     "commitUserName" : "Konrad Malawski",
     "commitUserEmail" : "konrad.malawski@java.pl",
     "commitMessageFull" : "releasing my fun plugin :-)
                            + fixed some typos
                            + cleaned up directory structure
                            + added license etc",
     "commitMessageShort" : "releasing my fun plugin :-)",
     "buildTime" : "06.01.1970 @ 16:17:53 CET",
     "buildUserName" : "Konrad Malawski",
     "buildUserEmail" : "konrad.malawski@java.pl"
 }
</code></pre>
<p>That&#8217;s all folks! <strong>Happy hacking!</strong></p>
<h2>Configuration details</h2>
<p>Just a short recap of the available parameters&#8230;</p>
<p>Required parameters:</p>
<ul>
<li> <strong>dotGitDirectory</strong> &#8211; (required) the location of your .git  folder. Try to use ${project.basedir} as root for this, and navigate  using ../ to higher up folder to easily use this plugin in multi module  enviroments etc. An example would be: <code>${project.basedir}/../.git</code></li>
</ul>
<p>Optional parameters:</p>
<ul>
<li> <strong>prefix</strong> &#8211; (default: git) is the &#8220;namespace&#8221; for all exposed properties</li>
<li> <strong>dateFormat</strong> &#8211; (default: dd.MM.yyyy &#8216;@&#8217; HH:mm:ss z) is a  normal SimpleDateFormat String and will be used to represent  git.build.time and git.commit.time</li>
<li> <strong>verbose</strong> &#8211; (default: false) if true the plugin will print a summary of all collected properties when it&#8217;s done</li>
</ul>
<h2>License</h2>
<p>I&#8217;m releasing this plugin under the <strong>GNU Lesser General Public License 3.0</strong>. You&#8217;re free to use it as you wish, the license text is attached in the LICENSE file. You may contact me if you want this to be released on a different license, just send me an email konrad.malawski@java.pl :-)</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/fun/1174/release-maven-git-commit-id-plugin/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>git: &#8220;befriend&#8221; an existing and a remote branch</title>
		<link>http://www.blog.project13.pl/index.php/null/1145/git-befriend-an-existing-and-a-remote-branch/</link>
		<comments>http://www.blog.project13.pl/index.php/null/1145/git-befriend-an-existing-and-a-remote-branch/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 01:41:47 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[null]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[terminal heroes]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=1145</guid>
		<description><![CDATA[Ok, time for another quick post about git. By &#8220;befriend&#8221; in the title I mean &#8220;make them track the same changes&#8221; or something like &#8220;tell git that it&#8217;s the same branch&#8221;* (not the &#8220;same&#8221; but you can get the idea from that sentence). Bellow is an quick flow over why you might need such an [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, time for another quick post about git. By &#8220;befriend&#8221; in the title I mean &#8220;make them track the same changes&#8221; or something like &#8220;tell git that it&#8217;s the same branch&#8221;* (not the &#8220;same&#8221; but you can get the idea from that sentence). Bellow is an quick flow over why you might need such an operation:</p>
<pre>[ktoso@protos somerepo-v2]$ <strong>git remote \
                            add origin \
                            git@github.com:ktoso/somerepo.git</strong>
[ktoso@protos somerepo-v2]$ <strong>git pull</strong>
remote: Counting objects: 13, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 9 (delta 2), reused 9 (delta 2)
Unpacking objects: 100% (9/9), done.
From github.com:ktoso/somerepo
0b59dd3..87b0c22  master     -&gt; origin/master
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull &lt;repository&gt; &lt;refspec&gt;').

See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:
</pre>
<pre>[branch "master"]
remote = &lt;nickname&gt;
merge = &lt;remote-ref&gt;

[remote "&lt;nickname&gt;"]
url = &lt;url&gt;
fetch = &lt;refspec&gt;

See git-config(1) for details.</pre>
<p>Well, git has actually already told us what we might want to do. But can&#8217;t this be done easier? Of course~!</p>
<pre>[ktoso@protos somerepo-v2]$ <strong>git branch --set-upstream \
                                         master \
                                         origin/master</strong>
Branch <strong>master</strong> set up to track remote branch <strong>master from origin</strong>.
[ktoso@protos somerepo-v2]$ git pull
Updating 0b59dd3..87b0c22
Fast-forward
.......</pre>
<p>And now we can easily pull and push changes again, without the hassle of specifying the obvious each time we&#8217;d want to get/share some changes. :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/null/1145/git-befriend-an-existing-and-a-remote-branch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>git-hacking: pre-commit hook and custom command</title>
		<link>http://www.blog.project13.pl/index.php/fun/1076/git-hacking-pre-commit-hook-and-custom-command/</link>
		<comments>http://www.blog.project13.pl/index.php/fun/1076/git-hacking-pre-commit-hook-and-custom-command/#comments</comments>
		<pubDate>Sun, 21 Nov 2010 02:07:39 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[terminal heroes]]></category>
		<category><![CDATA[#eclipse]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[intellij]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[xsolve]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=1076</guid>
		<description><![CDATA[As my team is using a kinda weird source eclipse code formatter setup, that other IDEs can&#8217;t emulate in 100% I sometimes found myself committing in a file with only a few changed spaces. Of course, I could use &#8220;external-formatter&#8221; plugins etc but that&#8217;s no good. Running eclipse&#8217;s formatter each time I want to format [...]]]></description>
			<content:encoded><![CDATA[<p>As my team is using a kinda weird source eclipse code formatter setup, that other IDEs can&#8217;t emulate in 100% I sometimes found myself committing in a file with only a few changed spaces. Of course, I could use &#8220;external-formatter&#8221; plugins etc but that&#8217;s no good. Running eclipse&#8217;s formatter each time I want to format my source (_very_ often) proved to be too slow and really getting on my nerves.</p>
<p>So&#8230; Since I&#8217;ve started using <strong>git</strong>-svn at work, I do have an possibility to make things better now! The answer lies in client-side-<strong>hooks</strong> and <strong>git aliases</strong> (&#8220;custom commands&#8221;). First let&#8217;s write this as an simple bash script, that we&#8217;ll locate in the <strong>.git/hooks/</strong> folder:<br />
<script src="https://gist.github.com/708972.js?file=gistfile1.sh"></script> It&#8217;s a fairly simple script, so I wont bore you explaining it in detail &#8211; if in doubt, feel free to ask. We only need to place this script as &#8220;<strong>.git/hooks/pre-commit</strong>&#8221; and make it executable and git will take care of the rest for us. Oh and in case you&#8217;re wondering where that <strong>org.eclipse.jdt.core.prefs</strong> came from. It&#8217;s created by eclipse into the .settings folder when you check some option to &#8220;use formatter per project&#8221; &#8211; that&#8217;s the only time I had to fire up and click around in eclipse to get it&#8217;s formatter running &#8220;headless&#8221;. Ok, let&#8217;s check if it works&#8230; <script src="https://gist.github.com/708982.js?file=gistfile1.java"></script><br />
<script src="https://gist.github.com/708976.js?file=gistfile1.sh"></script> <script src="https://gist.github.com/708981.js?file=gistfile1.java"></script><br />
Yup, you can agree or not with the formatting rules &#8211; but what matters is that the whole team decided on it and that we keep it consistent throughout the whole project. This hook will definitely help with this. :-)  Step two for me was changing this into a git command, so that I wouldn&#8217;t launch eclipse each time I just do some quick local commiting. The solution is to drop the hook idea (although it&#8217;s quite nice) and create an custom git command. We do this by doing an alias like that:</p>
<pre>git config --global alias.eclipse-formatter '!~/git-hook-eclipse-formatter'</pre>
<p>The <strong>!command </strong>alias<strong> </strong>support is with us in git since 1.5.0 and it enables us to launch any program/script as an git command. Great, just what I wanted! Let&#8217;s now see what this command really did:</p>
<p><script src="https://gist.github.com/708977.js?file=gistfile1.sh"></script><br />
As you can see, adding an alias is as simple as adding it to your<strong> ~/.gitconfig</strong> or, if you want to setup the alias &#8220;per project&#8221;, to <strong>.git/config</strong> &#8211; pretty cool, ay? Also, this command will be included in bash-autocompletition suggestions! :-)</p>
<p>That&#8217;s it for today&#8230; <em>happy hacking!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/fun/1076/git-hacking-pre-commit-hook-and-custom-command/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[review] JavaCamp 5</title>
		<link>http://www.blog.project13.pl/index.php/project13/1089/review-javacamp-5/</link>
		<comments>http://www.blog.project13.pl/index.php/project13/1089/review-javacamp-5/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 02:11:51 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[polish]]></category>
		<category><![CDATA[Project13]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[JavaCamp]]></category>
		<category><![CDATA[JUG]]></category>
		<category><![CDATA[lombok]]></category>
		<category><![CDATA[meeting]]></category>
		<category><![CDATA[polishjug]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=1089</guid>
		<description><![CDATA[Yes, it&#8217;s time for another JavaCamp mini-review&#8230; :-) Without further intros, let&#8217;s get down do the presentations: Łukasz Lenart &#8211; “Nie samym kodem programista żyje” Łukasz&#8217;s presentation was not a technical one this time. He talked about how to be/become an effective programmer. A nice tip he noted was to carry a notebook and note [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img title="pjug3" src="http://www.blog.project13.pl/wp-content/uploads/2010/11/pjug3.jpg" alt="" width="126" height="157" /><br />
Yes, it&#8217;s time for another JavaCamp mini-review&#8230; :-) Without further intros, let&#8217;s get down do the presentations:</p>
<h2><a href="http://www.lenart.org.pl/" onclick="urchinTracker('/outgoing/www.lenart.org.pl/?referer=');"><strong>Łukasz Lenart</strong></a> &#8211; “Nie samym kodem programista żyje”</h2>
<p>Łukasz&#8217;s presentation was not a technical one this time. He talked about how to be/become an effective programmer. A nice tip he noted was to carry a notebook and note your ideas in it &#8211; i sometimes try to but did find myself forgetting some &#8220;amazing idea&#8221; due to the lack of discipline in carring such notebook (yeah, an paper-notebook&#8230; :-)) so it&#8217;s definitely something worth reminding. He also talked a little about Kaizen, <a href="http://zenhabits.net/zen-to-done-the-simple-productivity-e-book/" onclick="urchinTracker('/outgoing/zenhabits.net/zen-to-done-the-simple-productivity-e-book/?referer=');"><strong>ZenToDone</strong></a> and the <a href="http://www.pomodorotechnique.com/" onclick="urchinTracker('/outgoing/www.pomodorotechnique.com/?referer=');"><strong>Pomodoro</strong> Technique</a> which all kinda share the same idea but explain it a little bit differently. I also was quite happy to find out that I&#8217;m not the only one that gets slown down in development when actually being in the company &#8211; with lots of stuff happening around me. Admit it &#8211; we all work more productive when there&#8217;s noone bugging us ;-)</p>
<p>The most notable tips where the &#8220;<strong>alone-zone</strong>&#8221; (as explained in <a href="http://37signals.com/rework/" onclick="urchinTracker('/outgoing/37signals.com/rework/?referer=');">REWORK</a> (good book, I recommend it)) which is really great and I love it, but sometimes it&#8217;s hard to enforce &#8211; coding is usualy team work, ain&#8217;t it..? Using <strong>multiple desktops</strong> &#8211; and monitors at best, to seperate your work space from fun space. <strong>Cutting oneself off from the internet</strong> is, while extreme, very effective by the way. I noticed it quite a few times &#8211; there&#8217;s simply nothing distracting you &#8211; same goes for anything that might take your attention. By the way, I&#8217;m not really convinced about Pomodoro &#8211; what if you get into an v. nice flow and then the pomodoro snaps you out of it? I guess it may be more targeted at people working at bigger companies &#8211; not as myself in an small nice team and nowadays, mostly from home.</p>
<p>All in all he warmed up the audience perfectly and let&#8217;s hope some of theese tips help us become better programmers&#8230; :-)</p>
<ul>
<li>//TODO: watch on parleys.com</li>
<li>//TODO: download slides</li>
<li><a href="http://camp.java.pl/dl.php?f=jc5-1-nie-samym-kodem-pl-min.flv" onclick="urchinTracker('/outgoing/camp.java.pl/dl.php?f=jc5-1-nie-samym-kodem-pl-min.flv&amp;referer=');">download video</a></li>
</ul>
<h2><a onclick="alert('hey, youre already on my website... :-)')" href="#"><strong>Konrad Malawski</strong></a> &#8211;  “Git (tak. po prostu.)”</h2>
<p>The PJUG guys asked me to tell a little about git and I happily agreed to do it &#8211; thus, my first &#8220;public presentation&#8221;. Firstly I&#8217;d like to explain why the slides where so &#8220;weird&#8221;. It&#8217;s because I wanted them to be something like an &#8220;break&#8221;, and most of the session was live terminal typing. They were all hand drawn by me and my girlfriend, then scanned and recoloured in GIMP. Took a few evenings to prepare them, but I hope they where quite memorable, fun, and did point out the important aspects of what the next topic would be about &#8211; an 3 headed dragon as symbol for lots of HEADs in an git repo etc&#8230; ;-)</p>
<p><span id="click-git-slides-here">Click to show presentation</span></p>
<div id="git-slides-here" style="text-align: center;"><object id="__sse5689507" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slides-101106175416-phpapp01&amp;stripped_title=slides-5689507&amp;userName=ktoso" /><param name="name" value="__sse5689507" /><param name="allowfullscreen" value="true" /><embed id="__sse5689507" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slides-101106175416-phpapp01&amp;stripped_title=slides-5689507&amp;userName=ktoso" name="__sse5689507" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p><script type="text/javascript">// < ![CDATA[
// < ![CDATA[
// < ![CDATA[
$(document).ready(function(){
   $("#git-slides-here").hide();
   $("#click-git-slides-here").click(function(){
      $("#git-slides-here").slideToggle();
   });
});
// ]]&gt;</script></p>
<p>I&#8217;ve been preparing the flow of all examples before but during the presentation I missed out a few steps and made a <a href="http://www.blog.project13.pl/index.php/fun/1069/gitjavacamp-fix-1-when-does-git-see-an-rename-explicitly/">some stupid mistakes</a> (see my previous git post on this blog ;-). Well, it wasn&#8217;t anything world breaking I guess and I&#8217;d really like to thank the audience for such great support. We strayed a little of the path I&#8217;ve prepared sometimes, but that&#8217;s ok as it was interesting to interact with the audience during an presentation &#8211; not just stand there and &#8220;praise git to zee heavnz&#8221; ;-) Such interaction is something I (personally) really like in presentations, even if they break a little due to this :-)</p>
<p>All in all, we managed to go through all of git&#8217;s basic features and in the end even mentioned <strong>rebase</strong> &#8211; which can be used to change the history of ones commits (there&#8217;s also the very useful <a href="http://book.git-scm.com/3_distributed_workflows.html" onclick="urchinTracker('/outgoing/book.git-scm.com/3_distributed_workflows.html?referer=');">git commit &#8211;amend</a>), <a href="http://sitaramc.github.com/concepts/detached-head.html" onclick="urchinTracker('/outgoing/sitaramc.github.com/concepts/detached-head.html?referer=');"><strong>detached-HEADs</strong></a> and <strong>git-svn</strong>, which I didn&#8217;t use before as I feared a little to make a mess in the company svn-repo (and in all &#8220;my&#8221; projects I&#8217;m using git, so I never felt the need to use git-svn). Some guys sucessfully used it and really recommended it, thus&#8230; here I am, doing git svn dcommits on an daily basis&#8230; :-) I&#8217;m glad to have also learned something from this presentation, not just &#8220;showed what I had to show&#8221; :-) Now just a few links to very good resources about git:</p>
<ul>
<li><a href="http://nvie.com/posts/a-successful-git-branching-model/" onclick="urchinTracker('/outgoing/nvie.com/posts/a-successful-git-branching-model/?referer=');">A Successful Git Branching Model</a></li>
<li><a href="http://excess.org/article/2008/07/ogre-git-tutorial/" onclick="urchinTracker('/outgoing/excess.org/article/2008/07/ogre-git-tutorial/?referer=');">Very good </a><a href="http://excess.org/article/2008/07/ogre-git-tutorial/" onclick="urchinTracker('/outgoing/excess.org/article/2008/07/ogre-git-tutorial/?referer=');">video tutorial on git</a></li>
<li><a href="https://git.wiki.kernel.org/index.php/GitFaq" onclick="urchinTracker('/outgoing/git.wiki.kernel.org/index.php/GitFaq?referer=');">https://git.wiki.kernel.org/index.php/GitFaq</a></li>
<li><a href="http://git-plumbing-preso.heroku.com/" onclick="urchinTracker('/outgoing/git-plumbing-preso.heroku.com/?referer=');">http://git-plumbing-preso.heroku.com</a> &#8211; internals</li>
<li><a href="https://github.com/" onclick="urchinTracker('/outgoing/github.com/?referer=');">https://github.com/</a> &#8211; free opensource project hosting</li>
<li>and of course: <a href="http://git-scm.com/documentation" onclick="urchinTracker('/outgoing/git-scm.com/documentation?referer=');">http://git-scm.com/documentation</a></li>
</ul>
<p>After the presentation I made an small sms-contest where you could win an PJUG tshirt for guessing what github&#8217;s mascot is called like. I hope it was an nice positive accent to finish the session. Next up was the pizza and then 2 more Łukasz&#8217;s&#8230; :-)</p>
<ul>
<li>//TODO: watch on parleys.com</li>
<li><a href="http://camp.java.pl/dl.php?f=jc5-2-git-pl-slides.pdf" onclick="urchinTracker('/outgoing/camp.java.pl/dl.php?f=jc5-2-git-pl-slides.pdf&amp;referer=');">download slides</a></li>
<li><a href="http://camp.java.pl/dl.php?f=jc5-2-git-pl-min.flv" onclick="urchinTracker('/outgoing/camp.java.pl/dl.php?f=jc5-2-git-pl-min.flv&amp;referer=');">download video</a></li>
</ul>
<h2><strong>Łukasz Żmudziński</strong> &#8211; “Project Lombok &#8211; Cause We Hate Boilerplate!”</h2>
<p>Lombok, if you didn&#8217;t see it before is this -&gt; <a href="http://projectlombok.org/" onclick="urchinTracker('/outgoing/projectlombok.org/?referer=');">http://projectlombok.org/</a> It&#8217;s a &#8220;total hack&#8221;, as the author describes it (and he&#8217;s right ;-)) but it allows some funny compile time hacks while writing Plain Old Java Code. Łukasz showed us around all the annotations which Lombok provides and how they work, what code exactly would be generated by them etc. The most &#8220;let&#8217;s you write less code&#8221; annotation would be @Data, which at compile time would cause Lombok (&#8230;here comes the important part:) to write the <strong>source</strong> for all setters, getters and toString hashcodes etc &#8211; so javac in the end, thinks it&#8217;s just compiling plain odl java&#8230; Here&#8217;s a link on how it works: <a href="http://projectlombok.org/features/Data.html" onclick="urchinTracker('/outgoing/projectlombok.org/features/Data.html?referer=');">Data.html</a> The funny part about it is that it&#8217;s an compile time tool &#8211; much similar to <a href="http://www.springsource.org/roo" onclick="urchinTracker('/outgoing/www.springsource.org/roo?referer=');">Spring Roo</a> in that aspect if you ask me -  and what it actually modifies is the AST (AbstractSourceTree) that javac then uses to generate it&#8217;s bytecode&#8230; So no bytecode magic &#8211; just how I&#8217;d call it&#8230; source code injection during compile time? Yeah, weird stuff.</p>
<p>And if you ask me not really something I&#8217;d be using all over the place. Sure it&#8217;d spare me the writing of some getters and setters and some more tricks but in the end, it&#8217;s a problem for not supported IDEs. (How do you explain IDEA that this class really *will have* an setBla() method&#8230;?) While NetBeans and Eclipse do have plugins to enable them to unserstand lomboks annotations. It&#8217;s not really enough &#8211; what about static code analisis tools? They&#8217;d go nuts with code that calls methods which dont exist in the source etc :-) Nevertheless if was a fun topic and it definitely is an quite funny javac hack, but if I&#8217;d be desperate for such features&#8230; I&#8217;d go polyglot coding with groovy or scala etc&#8230; :-)</p>
<ul>
<li>//TODO: watch on parleys.com</li>
<li><a href="http://camp.java.pl/dl.php?f=jc5-3-lombok-pl-slides.pdf" onclick="urchinTracker('/outgoing/camp.java.pl/dl.php?f=jc5-3-lombok-pl-slides.pdf&amp;referer=');">download <strong>slides</strong></a></li>
<li><a href="http://camp.java.pl/dl.php?f=jc5-3-lombok-pl-min.flv" onclick="urchinTracker('/outgoing/camp.java.pl/dl.php?f=jc5-3-lombok-pl-min.flv&amp;referer=');">download <strong>video</strong></a></li>
</ul>
<h2><a href="http://czerpak.eu/blog/page/2/" onclick="urchinTracker('/outgoing/czerpak.eu/blog/page/2/?referer=');"><strong>Łukasz Czerpak</strong></a> &#8211; “Testy jednostkowe i integracyjne w przykładach”</h2>
<p>By now you probably noticed it&#8230; There where almost only Łukasz&#8217;s presenting on this Camp&#8230;! :-) Łukasz Czerpak&#8217;s topic was about, generally speaking, TDD. He focused (as the title suggests, if you can read polish ;-)) on unit and integration tests. The border between them is sometimes a little blury, but the definitions he have were nice and clear &#8211; 1 class = unit, long setup involved = integration. It&#8217;s as easy as that, yet sometimes during discussions with other coders these sometimes get confised. Next he went on to some examples of how TDD is useful and finally to a lot of code examples. As he&#8217;s using EJBs at his day job, this part was mostly covered &#8211; and very interesting (for me, who&#8217;d usually just use spring and be done with it).</p>
<p>The mocking framework he used in his examples was of course our Polish Mockito&#8230; :-) It&#8217;s really great and lot&#8217;s of fun to work with, unlike some other mocking frameworks out there. Although easymock would take the 2nd place if I&#8217;d were to make an ranking. I&#8217;ve also seen a little JMock but it doesn&#8217;t &#8220;feel good&#8221; &#8211; but if youre interested in pure &#8220;what X can do&#8221;, they all do offer the same things, so why bother with some cluttery syntax? :-)</p>
<p>Next, Łukasz showcased using glassfish as an embeded container which definitely is on my &#8220;good to know&#8221; list and then continued on to an very awesome JBoss library: <strong>Arquillian </strong>[<a href="http://jboss.org/arquillian" onclick="urchinTracker('/outgoing/jboss.org/arquillian?referer=');">arquillian homepage</a>] (see? It&#8217;s so cool I even had to mark it bold ;-)) It&#8217;s an lib which enables you to deploy (yes, &#8220;deploy&#8221; &#8211; perfect word choice) EJBs or even whole archives to an testing enviroment &#8211; which would then be started using an embeded container, although as seen on their homepage, they also support remote containers&#8230; interesting! Here&#8217;s another nice usecase of it: <a href="http://ocpsoft.com/seam/cdi-powered-unit-testing-using-arquillian/" onclick="urchinTracker('/outgoing/ocpsoft.com/seam/cdi-powered-unit-testing-using-arquillian/?referer=');">http://ocpsoft.com/seam/cdi-powered-unit-testing-using-arquillian/</a> The presentation was really well prepared and most probably the high</p>
<ul>
<li>//TODO: watch on <strong>parleys.com</strong></li>
<li>//TODO: download <strong>slides</strong></li>
<li><a href="http://camp.java.pl/dl.php?f=jc5-4-tdd-pl-min.flv" onclick="urchinTracker('/outgoing/camp.java.pl/dl.php?f=jc5-4-tdd-pl-min.flv&amp;referer=');">download <strong>video</strong></a></li>
</ul>
<h2>That&#8217;s all folks!</h2>
<p>We&#8217;ll be doing another JavaCamp in the near future (January perhaps&#8230;?). But for theese few weeks now we&#8217;ll be focusing on the upcomming GeeCON 2011 (Cracow) and kickstarting it&#8217;s call for papers <em>(yay, I&#8217;m it&#8217;s author ;p). </em> And if you&#8217;re interested in seeing all recordings on parleys.com and not just as videos &#8211; stay on your toes, because after Devoxx we&#8217;ll upload them there &#8211; I&#8217;ll update my blog then and we&#8217;ll write an quick news about it on java.pl In the mean time, you can go take a look at these and the previous (javacamp #4) recordings on <a href="http://camp.java.pl" onclick="urchinTracker('/outgoing/camp.java.pl?referer=');">camp.java.pl</a> &#8211; which I just quickly set up to allow you guys quick access to the movies&#8230;</p>
<p>Yup, that&#8217;s all I think&#8230; see you on <strong>GeeCON</strong> || JavaCamp <strong>#6</strong>! :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/project13/1089/review-javacamp-5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Git@JavaCamp: fix-1: When does git &#8220;see&#8221; an rename explicitly?</title>
		<link>http://www.blog.project13.pl/index.php/fun/1069/gitjavacamp-fix-1-when-does-git-see-an-rename-explicitly/</link>
		<comments>http://www.blog.project13.pl/index.php/fun/1069/gitjavacamp-fix-1-when-does-git-see-an-rename-explicitly/#comments</comments>
		<pubDate>Sun, 07 Nov 2010 01:37:56 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[git add]]></category>
		<category><![CDATA[git move]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[move]]></category>
		<category><![CDATA[mv]]></category>
		<category><![CDATA[pitfall]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=1069</guid>
		<description><![CDATA[Yup, it&#8217;s time for two follow ups to problems we encountered during my life examples. Why didn&#8217;t git see our &#8220;rename&#8221; as rename? Although yes it is true just as I said during the presentation that &#8220;git mv is just an alias&#8221; I&#8217;ve forgotten about that it&#8217;s an little bit bigger alias: git mv oldname [...]]]></description>
			<content:encoded><![CDATA[<p>Yup, it&#8217;s time for two follow ups to problems we encountered during my life examples. Why didn&#8217;t git see our &#8220;rename&#8221; as rename? Although yes it is true just as I said during the presentation that &#8220;git mv is just an alias&#8221; I&#8217;ve forgotten about that it&#8217;s an little bit bigger alias:</p>
<pre><code>
git mv oldname newname
        =
mv oldname newname
git add newname
git rm oldname</code></pre>
<p>Note that last line, git rm oldname is what we fotgot to do in our example, thus git was seeing an just the &#8220;new file&#8221; version of our operation. One line wrong, yet very important :-) Let&#8217;s check if it works this way:</p>
<p><code>[ktoso@homunculus test]$ ls<br />
jeden  typescript<br />
[ktoso@homunculus test]$ git init .<br />
Reinitialized existing Git repository in /home/ktoso/test/.git/<br />
[ktoso@homunculus test]$ cat jeden<br />
drugi pliczek<br />
[ktoso@homunculus test]$ echo 'dwadwa' &gt; dwa<br />
[ktoso@homunculus test]$ cat dwa<br />
dwadwa<br />
[ktoso@homunculus test]$ git add .<br />
[ktoso@homunculus test]$ git commit -m 'dodanie ich'<br />
[master (root-commit) a430782] dodanie ich<br />
2 files changed, 2 insertions(+), 0 deletions(-)<br />
create mode 100644 dwa<br />
create mode 100644 jeden<br />
create mode 100644 typescript<br />
[ktoso@homunculus test]$ git mv<br />
dwa         .git/       jeden       typescript<br />
[ktoso@homunculus test]$ <strong>git mv jeden nowy-jeden</strong><br />
[ktoso@homunculus test]$ git status<br />
# On branch master<br />
# Changes to be committed:<br />
#   (use "git reset HEAD &lt;file&gt;..." to unstage)<br />
#<br />
<strong>#       renamed:    jeden -&gt; nowy-jeden</strong><br />
#<br />
[ktoso@homunculus test]$ mv<br />
dwa         .git/       nowy-jeden  typescript<br />
[ktoso@homunculus test]$ <strong>mv dwa nowe-dwa</strong><br />
[ktoso@homunculus test]$ <strong>git add nowe-dwa</strong><br />
[ktoso@homunculus test]$ <strong>git rm dwa</strong><br />
rm 'dwa'<br />
[ktoso@homunculus test]$ git status<br />
# On branch master<br />
# Changes to be committed:<br />
#   (use "git reset HEAD &lt;file&gt;..." to unstage)<br />
#<br />
#       <strong>renamed:    dwa -&gt; nowe-dwa</strong><br />
#       renamed:    jeden -&gt; nowy-jeden<br />
#<br />
[ktoso@homunculus test]$ echo "problem Solved... :-)"<br />
</code>problem Solved&#8230; :-)</p>
<p>Yup, it actually detects the renames proppery. Even more, it would detect an &#8220;copy&#8221; action (this works even easier):</p>
<p><code>[ktoso@homunculus test]$ <strong>cp nowy-jeden nowy-jeden-jeden</strong><br />
[ktoso@homunculus test]$ <strong>git add .</strong><br />
[ktoso@homunculus test]$ git status<br />
# On branch master<br />
# Changes to be committed:<br />
#   (use "git reset HEAD &lt;file&gt;..." to unstage)<br />
#<br />
#       renamed:    dwa -&gt; nowe-dwa<br />
#       <strong>copied:     jeden -&gt; nowy-jeden</strong><br />
#       renamed:    jeden -&gt; nowy-jeden-jeden<br />
#       modified:   typescript<br />
#</code></p>
<p>I&#8217;m already converting all the presentations to MP4 files and they&#8217;ll be online soon I hope :-) Then I&#8217;ll also write an usual &#8220;review&#8221; as I always do with any confernce/meering. For now just a quick summary: An amazing attandee count, nice presentations and an very very nice crowd :-) Thanks a lot for all the talks, but let&#8217;s wair for my &#8220;review&#8221; with more informations about JC5&#8230; :-) (Oh, yes we&#8217;re allready planing JC6&#8230; ;-))</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/fun/1069/gitjavacamp-fix-1-when-does-git-see-an-rename-explicitly/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Git @ &#8220;Fridays at XSolve&#8221;</title>
		<link>http://www.blog.project13.pl/index.php/fun/758/git-fridays-at-xsolve/</link>
		<comments>http://www.blog.project13.pl/index.php/fun/758/git-fridays-at-xsolve/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 11:59:56 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[xsolve]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=758</guid>
		<description><![CDATA[I&#8217;m curently doing an internship (It&#8217;s called: &#8220;Poławiamy perły, szlifujemy diamenty&#8221; == &#8220;Pooling pearls, polishing diamonds&#8221; &#8212; very cool :-)) at XSolve &#8211; we&#8217;re doing some GWT coding and I really like it. The team is great and everyone is really helpful and fun to talk to &#8212; the company&#8217;s &#8220;look and feel&#8221; reminds me [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m curently doing an internship (It&#8217;s called: &#8220;<em><a href="http://praktyki-staze.xsolve.pl/" onclick="urchinTracker('/outgoing/praktyki-staze.xsolve.pl/?referer=');">Poławiamy perły, szlifujemy diamenty</a></em>&#8221; == &#8220;<em>Pooling pearls, polishing diamonds</em>&#8221; &#8212; very cool :-)) at <a href="http://xsolve.pl" onclick="urchinTracker('/outgoing/xsolve.pl?referer=');"><strong>XSolve</strong></a> &#8211; we&#8217;re doing some<em> GWT coding and I really like it</em>. The team is great and everyone is really helpful and fun to talk to &#8212; the company&#8217;s &#8220;look and feel&#8221; reminds me very much of Google by the way&#8230; It&#8217;s very friendly, everyone is calling others by their names and we often play together after some chunk of work. We&#8217;ve even stayed until 20:00 one time, while mounting some servers and having fun in the process &#8211; I actually didn&#8217;t mind staying so long thanks to this&#8230; :-)</p>
<p>Having that said&#8230; there is one thing I don&#8217;t like there&#8230; it&#8217;s SVN ;-) Of course I knew that I can&#8217;t be running from SVN all my life and that I&#8217;d end up using it someday in some company&#8230; As some may know, I&#8217;m a big Git (or mercurial) fan, thus &#8211; I kinda see what SVN is doring wrong. At XSolve we have this weekly-event called <strong>&#8220;Fridays at XSolve&#8221;</strong>, where one can present in a short 30min session, something he&#8217;s been interested in lately etc. It&#8217;s a really cool idea, that allows ideas do spread throughout the company &#8211; the <strong>HR</strong> team seems to really care to keep this atmosthere in the company&#8230; :-) This Friday I was given the honour and joy to be presenting Git &#8211; as we&#8217;ve been talking about it a few times during my first week here. Below is the presentation I&#8217;ve used:</p>
<div id="__ss_4721725" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Dlaczego Git to nie SVN?" href="http://www.slideshare.net/ktoso/dlaczego-git-to-nie-svn" onclick="urchinTracker('/outgoing/www.slideshare.net/ktoso/dlaczego-git-to-nie-svn?referer=');">Dlaczego Git to nie SVN?</a></strong><object id="__sse4721725" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=git4xsolve-100709124340-phpapp01&amp;rel=0&amp;stripped_title=dlaczego-git-to-nie-svn" /><param name="name" value="__sse4721725" /><param name="allowfullscreen" value="true" /><embed id="__sse4721725" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=git4xsolve-100709124340-phpapp01&amp;rel=0&amp;stripped_title=dlaczego-git-to-nie-svn" name="__sse4721725" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p>You can download <a href="http://www.slideshare.net/ktoso/dlaczego-git-to-nie-svn/download" onclick="urchinTracker('/outgoing/www.slideshare.net/ktoso/dlaczego-git-to-nie-svn/download?referer=');">the presentation</a> or the <a href="up.project13.pl/files/git4xsolve.tex">sources for the presentation here</a> as they are also a simple (I&#8217;ve made one about <a href="http://www.slideshare.net/ktoso/guava" onclick="urchinTracker('/outgoing/www.slideshare.net/ktoso/guava?referer=');">Guava</a> that&#8217;s a little more interesting from the TeX viewpoint) example of the <a href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBgQFjAA&amp;url=http%3A%2F%2Flatex-beamer.sourceforge.net%2F&amp;ei=Il04TNvQHNCVOOHVqYoK&amp;usg=AFQjCNGjVsJ5vBpYgmyyLJOFdVxBLBetPw&amp;sig2=qf-pljl_hjhbfJIPau0R5g" onclick="urchinTracker('/outgoing/www.google.com/url?sa=t_amp_source=web_amp_cd=1_amp_ved=0CBgQFjAA_amp_url=http_3A_2F_2Flatex-beamer.sourceforge.net_2F_amp_ei=Il04TNvQHNCVOOHVqYoK_amp_usg=AFQjCNGjVsJ5vBpYgmyyLJOFdVxBLBetPw_amp_sig2=qf-pljl_hjhbfJIPau0R5g&amp;referer=');">LaTeX beamer</a> &#8211; which apparently is also an favourite tool of some team members&#8230; :-) I&#8217;ve also talked a moment after the event with an v. good (so it seems) developer who knew really a lot about many different SCMs &#8211; we mentioned &#8220;<strong>cherry picking</strong>&#8221; which is really interesting but I don&#8217;t know much about it yet. If you don&#8217;t know much about Git &#8211; take a look at the above presentation, or better, start out your new (better) life with git by visiting these links:</p>
<ul>
<li><a href="http://www.youtube.com/watch?v=4XpnKHJAok8" target="_blank" onclick="urchinTracker('/outgoing/www.youtube.com/watch?v=4XpnKHJAok8&amp;referer=');">http://www.youtube.com/watch?v=4XpnKHJAok8</a> Linusa Torvalds on Git vs CVS/SVN</li>
<li><a href="http://whygitisbetterthanx.com/" target="_blank" onclick="urchinTracker('/outgoing/whygitisbetterthanx.com/?referer=');">http://whygitisbetterthanx.com</a> &#8211; why git is better than any other SCM ;-) A biased site obviously ;-)</li>
<li><a href="http://git.or.cz/course/svn.html" target="_blank" onclick="urchinTracker('/outgoing/git.or.cz/course/svn.html?referer=');">http://git.or.cz/course/svn.html</a> &#8211; side-by-side with SVN</li>
<li><a href="http://git-scm.com/" target="_blank" onclick="urchinTracker('/outgoing/git-scm.com/?referer=');">http://git-scm.com</a> &#8211; Git homepage</li>
</ul>
<p>The presentation worked quite well I guess &#8211; some team members who knew about Git/SVN/Mecurial/Bzr etc, where adding their bits of knowledge which really made the presentation a lot more than just a bunch of boring slides&#8230; ;-) All in all it was all of those: fun, interesting and yet another occasion for me to train presenting stuff (I&#8217;m still bad at it, but well&#8230; life is study, right? :-)) I&#8217;m really happy to have the opportunity to be working in such a environment &#8211; I&#8217;ll post whatever is inseresting on this blog (if I have the time to do so :&lt;), so keep an eye ot for some Java/GWT posts&#8230; :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/fun/758/git-fridays-at-xsolve/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

