<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>git &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/git/</link>
	<description>Feed of posts on WordPress.com tagged "git"</description>
	<pubDate>Tue, 24 Nov 2009 11:17:25 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[OpenquickIT: Extjs dashboard, tabs and Catalyst]]></title>
<link>http://poisonbit.wordpress.com/2009/11/24/openquickit-extjs-dashboard-tabs-and-catalyst/</link>
<pubDate>Mon, 23 Nov 2009 23:26:29 +0000</pubDate>
<dc:creator>poisonbit</dc:creator>
<guid>http://poisonbit.wordpress.com/2009/11/24/openquickit-extjs-dashboard-tabs-and-catalyst/</guid>
<description><![CDATA[Here I show a video, of the state of the draft work in the OpenquickIT github repository. Each tab i]]></description>
<content:encoded><![CDATA[Here I show a video, of the state of the draft work in the OpenquickIT github repository. Each tab i]]></content:encoded>
</item>
<item>
<title><![CDATA[Min första annons]]></title>
<link>http://khsfoto.wordpress.com/2009/11/23/min-forsta-annons/</link>
<pubDate>Mon, 23 Nov 2009 09:13:44 +0000</pubDate>
<dc:creator>flocken</dc:creator>
<guid>http://khsfoto.wordpress.com/2009/11/23/min-forsta-annons/</guid>
<description><![CDATA[Frågar du mig har den traditionella annonsen fortfarande en plats  - OM: - du har en kanal att sätta]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Frågar du mig har den traditionella annonsen fortfarande en plats  - OM:</p>
<p>- du har en kanal att sätta den i som når din målgrupp. Ex &#8211; din målgrupp är nyföretagare i Kronoberg och kanalen är ett nyhetsbrev som skickas ut till endast dem, med massor av matnyttig information för nyblivna företagare.</p>
<p>- Den kan förväntas ge en bra ROI  - return of investment. Överdrivet exempel: En annons som kostar 20 000, om du vill sälja anteckningsblock för 20 kr st till nystartade företag i Kronoberg, är knappast en rimlig investering. Då skulle man ju behöva sälja 1000 block till en förhållandevis liten målgrupp för att överhuvudtaget täcka kostnaden.</p>
<p>- Det inte är för många som vill sälja samma sak som du till samma målgrupp, i samma kanal.</p>
<p><strong>Mycket annat spelar såklart roll om en annons ska bli en succé eller inte, men min första annons får åtminstone godkänt på alla tre punkter ovan och jag hoppas på att förvalta mitt utrymme väl. Vad tycks?</strong></p>
<p><strong><a href="http://khsfoto.wordpress.com/files/2009/11/annonsgitorut_webb1.jpg"><img class="alignnone size-full wp-image-37" title="annonsgitorut_webb" src="http://khsfoto.wordpress.com/files/2009/11/annonsgitorut_webb1.jpg" alt="" width="500" height="750" /></a></strong></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[OpenquickIT gets login form]]></title>
<link>http://poisonbit.wordpress.com/2009/11/21/openquickit-gets-login-form/</link>
<pubDate>Sat, 21 Nov 2009 18:25:05 +0000</pubDate>
<dc:creator>poisonbit</dc:creator>
<guid>http://poisonbit.wordpress.com/2009/11/21/openquickit-gets-login-form/</guid>
<description><![CDATA[Some controller, some plugins, some helper script, some template, some online generators, and voilá:]]></description>
<content:encoded><![CDATA[Some controller, some plugins, some helper script, some template, some online generators, and voilá:]]></content:encoded>
</item>
<item>
<title><![CDATA[Organize your projects in a git repository]]></title>
<link>http://instcode.wordpress.com/2009/11/21/organize-your-projects-in-a-git-repository/</link>
<pubDate>Sat, 21 Nov 2009 09:31:56 +0000</pubDate>
<dc:creator>instcode</dc:creator>
<guid>http://instcode.wordpress.com/2009/11/21/organize-your-projects-in-a-git-repository/</guid>
<description><![CDATA[My current problem is I have quite a lot of projects and they are either under active development or]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>My current problem is I have quite a lot of projects and they are either under active development or developed in the past but only a few projects are kept in version control (Google Code SVN). Now I need a local VCS that helps me to keep track of changes of all those projects.</p>
<p>The first VCS candidate comes in mind, a centralized VCS, that is SVN. It&#8217;s not hard to organize my projects in an SVN repository:</p>
<pre>Repository
&#124;_ trunk
&#124;     &#124;_ Project-A
&#124;     &#124;      &#124;_ README
&#124;     &#124;      &#124;_ ...
&#124;     &#124;
&#124;     &#124;_ Project-B
&#124;     &#124;      &#124;_ trunk
&#124;     &#124;      &#124;      &#124;_ LICENSE
&#124;     &#124;      &#124;      &#124;_ ...
&#124;     &#124;      &#124;_ branches
&#124;     &#124;      &#124;_ tags
&#124;     &#124;_ ...
&#124;
&#124;_ branches
&#124;_ tags
</pre>
<p>This structure represents 2 most common ways to manage multiple projects in an SVN repository. That is, a project may have either monolithic layout (e.g. Project-A) or project structural layout (e.g. Project-B) and all of them can be put in trunk. In order to work on these projects, I simply check them out to my current working folder (e.g. Eclipse workspace):</p>
<blockquote><p>svn checkout /path/to/repository/trunk/Project-A /path/to/workspace/Project-A<br />
svn checkout /path/to/repository/trunk/Project-B/trunk /path/to/workspace/Project-B</p></blockquote>
<p>Now, what I have in my workspace are:</p>
<pre>Workspace
&#124;_ Project-A
&#124;      &#124;_ .svn
&#124;      &#124;_ README
&#124;      &#124;_ ...
&#124;_ Project-B
&#124;       &#124;_ .svn
&#124;       &#124;_ LICENSE
&#124;       &#124;_ ...
&#124;_ ...
</pre>
<p>With this directory structure, I can start working on any projects and Eclipse IDE doesn&#8217;t bother to complain anything about wrong projects location. All changes from an individual project would be easily contributed back to the repository by issuing svn commit commands&#8230; And that is what I really want!</p>
<p>So the SVN is fit very well in this situation and I do think for a single developer project, SVN is the best source control out there. However, as you would have heard, git is awesome! Let give it a try&#8230;</p>
<p>How git helps me to reach my goal? How can I keep track of all changes in place? How to organize all those projects in a git repository so I can easily clone them to my workspace later on?</p>
<p>I asked this problem to a guy who claims to be an advanced git user and he told me something like: You had better understand the concepts behind git and forget what central VCS gave you, dude! Oh geeeeze!! I had known &#38; understood git&#8217;s philosophy since I first heard about git! Now I just want to know which techniques be used to get my work done! Right now, I have found a few solutions but none of them really have convinced me yet.</p>
<p>Solution 1: Branching ~ very stupid &#38; ugly</p>
<pre>Repository
&#124;_ .git
&#124;     &#124;_ objects
&#124;     &#124;_ refs
&#124;     &#124;    &#124;_ heads
&#124;     &#124;          &#124;_ master
&#124;     &#124;          &#124;_ Project-A
&#124;     &#124;          &#124;_ Project-B
&#124;     &#124;          &#124;_ ...
&#124;     &#124;
&#124;     &#124;_ config
&#124;     &#124;_ ...
&#124;_ ...
</pre>
<p>The repository is a big git repository because it holds all of my projects&#8217; data inside. However, again, what I want is a way to clone them, one by one, into my workspace folder. To obtain this, each project should have its own branch and the master branch should be empty all the time so whenever I want to add a project to the repository, I can do:</p>
<ul>
<li>Create a new branch from the empty master.</li>
<li>Name it as the specified project&#8217;s name.</li>
<li>Add that project to that branch.</li>
<li>Commit changes.</li>
</ul>
<p>Quite number of steps but we can do easily though. However, what happens if we try cloning project by project to the workspace folder for working:</p>
<pre>Workspace
&#124;_ Project-A
&#124;       &#124;_ .git
&#124;       &#124;     &#124;_ objects
&#124;       &#124;     &#124;_ refs
&#124;       &#124;     &#124;    &#124;_ heads
&#124;       &#124;     &#124;          &#124;_ master
&#124;       &#124;     &#124;          &#124;_ Project-A
&#124;       &#124;     &#124;          &#124;_ Project-B
&#124;       &#124;     &#124;
&#124;       &#124;     &#124;_ config
&#124;       &#124;     &#124;_ HEAD (content: refs: refs/heads/Project-A)
&#124;       &#124;
&#124;       &#124;_ README
&#124;       &#124;_ ...
&#124;
&#124;_ Project-B
&#124;       &#124;_ .git (HEAD: refs: refs/heads/Project-B)
&#124;       &#124;_ LICENSE
&#124;       &#124;_ ...
&#124;_ ...
</pre>
<p>Opps! Each project now carries a whole structural of the original repository with it. The different is the HEAD of each repository refers to a specific *project&#8217;s name* branch whereas the HEAD of the original repository can point to any branch. I know if we specify local repository type in clone command (don&#8217;t remember exactly, though), git will create symbolic links to remote repository instead of replicating it over and over. Actually, my developing environment is mainly on Windows and we still have ability to create symbolic links (junction &#8211; sysinternal) but I doubt if msysgit could do the trick or I have to do it manually and&#8230; repository management explodes! No, I want a solution but I don&#8217;t need this ugly one!</p>
<p>Solution 2: Git Superproject</p>
<p>The superproject serves for another purposes but let&#8217;s see whether it can help. First off, I have to create our project repositories in somewhere (e.g workspace). After that, I go to the central repository and add those repositories as its sub-modules. It is now so called &#8220;super-project&#8221;.</p>
<pre>Workspace
&#124;_ Project-A
&#124;       &#124;_ .git
&#124;       &#124;_ README
&#124;       &#124;_ ...
&#124;
&#124;_ Project-B
&#124;       &#124;_ .git
&#124;       &#124;_ LICENSE
&#124;       &#124;_ ...
&#124;_ ...
</pre>
<blockquote><p>git submodule add /path/to/workspace/Project-A Project-A<br />
git submodule add /path/to/workspace/Project-B Project-B</p></blockquote>
<pre>Repository
&#124;_ .git
&#124;_ .gitmodules
&#124;_ Project-A
&#124;       &#124;_ .git
&#124;       &#124;_ README
&#124;       &#124;_ ...
&#124;
&#124;_ Project-B
&#124;       &#124;_ .git
&#124;       &#124;_ LICENSE
&#124;       &#124;_ ...
&#124;_ ...
</pre>
<p>Well, if I commit some changes in the workspace projects&#8217; repositories and I want them to be updated in my central repository, I have to go to that repository and do git pull for all sub modules (aha, cronjob script)&#8230; So it still introduces the same problem here: repository management explodes! This time, I even have to do more tedious works that git should be responsible for. Git superproject is absolutely not designed for doing this task!</p>
<p>Solution 3: Individual Project Repository &#8211; Yes, I named it!</p>
<pre>Repository
&#124;_ Project-A.git
&#124;       &#124;_ objects
&#124;       &#124;_ refs
&#124;       &#124;_ config
&#124;       &#124;_ ...
&#124;_ Project-B.git
&#124;       &#124;_ objects
&#124;       &#124;_ refs
&#124;       &#124;_ config
&#124;       &#124;_ ...
&#124;_ ...
</pre>
<p>The repository in this case is just a normal directory which contains a bunch of git repositories. Each repository is one of my projects. So, if I check out Project-A, or Project-B&#8230; one by one to my workspace folder, I will get this directory structure:</p>
<pre>Workspace
&#124;_ Project-A
&#124;       &#124;_ .git
&#124;       &#124;_ README
&#124;       &#124;_ ...
&#124;
&#124;_ Project-B
&#124;       &#124;_ .git
&#124;       &#124;_ LICENSE
&#124;       &#124;_ ...
&#124;_ ...
</pre>
<p>Elegant &#38; straight forward! One big disadvantage is we still cannot keep track of all changes from different projects in place although we can do it for individual project very well. If you had developed a similar type of project like an Eclipse RCP project which comprises of different plugins, and each plugin is an individual Java project, you would have wanted to see all those changes in the parent project rather than the plugin projects! This solution doesn&#8217;t achieve all my wants but I guess I should stick with it anyway. Of course, I will continue seeking for another way and it would be my pleasure to know your solution.</p>
<p>That&#8217;s said, git is not good enough for such kind of demand&#8230; but wait, git guys, I did choose git over svn because it&#8217;s cool, and it makes me cool <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ! Hopefully, as the time being, I can gain more experience in git and who knows, I will blame myself for such a stupid post <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Os Melhores Podcasts de Tecnologia para Desenvolvedores  ]]></title>
<link>http://andrefaria.com/2009/11/20/os-melhores-podcasts-de-tecnologia-para-desenvolvedores/</link>
<pubDate>Fri, 20 Nov 2009 14:32:29 +0000</pubDate>
<dc:creator>andrefaria</dc:creator>
<guid>http://andrefaria.com/2009/11/20/os-melhores-podcasts-de-tecnologia-para-desenvolvedores/</guid>
<description><![CDATA[Um dos maiores problemas da sociedade moderna é a dificuldade de locomoção diária, a maioria das pes]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Um dos maiores problemas da sociedade moderna é a dificuldade de locomoção diária, a maioria das pessoas passa horas em seus carros, ou em meios de transporte públicos para irem de lugar a outro. Há alguns anos atrás quando morava na zona norte de São Paulo e trabalha na zona sul, essa era minha realidade. Uma vez que naquela época passar por isso era inevitável procurei formas de fazer com esse tempo pudesse de alguma forma torna-se produtivo, foi então que comecei a ouvir à podcasts.</p>
<div class="wp-caption aligncenter" style="width: 410px"><a href="http://www.flickr.com/photos/dantaylor/87397283/"><img class=" " title="iPod FM radio remote por dan taylor" src="http://farm1.static.flickr.com/41/87397283_ebc7fbaadc.jpg" alt="iPod FM radio remote por dan taylor" width="400" height="300" /></a><p class="wp-caption-text">iPod FM radio remote por dan taylor</p></div>
<p>De acordo com a Wikipedia, Podcasting é uma forma de publicação de arquivos de mídia digital (áudio, vídeo, foto, etc.) pela Internet, através de um feed RSS, que permite aos utilizadores acompanhar a sua atualização. Assim, é possível o acompanhamento e/ou download automático do conteúdo de um podcast.</p>
<p>Neste post apresentarei os podcasts aos quais escuto e os episódios principais para que você ouça. Sugiro que você utilize o iTunes para inscrever-se nos podcasts e sincronizar com seu iPod.</p>
<h2>Desenvolvimento Ágil</h2>
<div class="wp-caption aligncenter" style="width: 410px"><a href="http://www.flickr.com/photos/pcalcado/2268593480/in/set-72157604854195771/"><img class=" " title="por pcalcado" src="http://farm3.static.flickr.com/2050/2268593480_68100bfa7c.jpg" alt="por pcalcado" width="400" height="300" /></a><p class="wp-caption-text">por pcalcado</p></div>
<h4>Podcast da ImproveIt</h4>
<p><span style="font-weight:normal;">por Vinícius Teles<br />
<a href="http://improveit.com.br/podcast">http://improveit.com.br/podcast<br />
</a>Português</span></p>
<ul>
<li><a href="http://improveit.com.br/podcast/improvecast-13-entrevista-alisson-vale-experiencias-ageis">Entrevista com Alisson Vale da Phidelis</a></li>
<li><a href="http://improveit.com.br/podcast/improvecast-11-entrevista-alexandre-magno-fdd-scrum-experiencias-ageis">Entrevista com Alexandre Magno na Série Experiências Ágeis</a></li>
<li><a href="http://improveit.com.br/podcast/improvecast-8-entrevista-carlos-barbieri-mpsbr">Entrevista com Carlos Barbieri sobre o MPS.BR</a></li>
<li><a href="http://improveit.com.br/podcast/improvecast-19-entrevista-ancar-experiencias-ageis">Entrevista com a equipe da Ancar na Série Experiências Ágeis</a></li>
</ul>
<h4>AgilCast</h4>
<p><span style="font-weight:normal;">Por AgilCoop<br />
<a href="http://agilcoop.incubadora.fapesp.br/portal/agilcast">http://agilcoop.incubadora.fapesp.br/portal/agilcast<br />
</a>Português</span></p>
<ul>
<li><a href="http://agilcoop.incubadora.fapesp.br/portal/agilcast/episodios/Agilcast03-Testes.mp3">Uma Visão Geral Sobre Scrum</a></li>
<li><a href="http://agilcoop.incubadora.fapesp.br/portal/agilcast/episodios/Agilcast03-Testes.mp3">Testes Automatizados</a></li>
<li><a href="http://agilcoop.incubadora.fapesp.br/portal/agilcast/episodios/Agilcast04-bds-ageis.mp3">Bancos de dados ágeis e refatoração de bancos de dados</a></li>
</ul>
<h4>Agile Toolkit Podcast<br />
<span style="font-weight:normal;"><a href="http://agiletoolkit.libsyn.com">http://agiletoolkit.libsyn.com</a><br />
Inglês</span></h4>
<ul>
<li><a href="http://agiletoolkit.libsyn.com/index.php?post_id=537344">Tom Goulet &#8211; Cucumber, Ruby and the transition to Generalizing Specialist (2009)</a></li>
<li><a href="http://agiletoolkit.libsyn.com/index.php?post_id=530103">Jim Miller &#8211; The Product Owner Role and Business Alignmnet</a></li>
<li><a href="http://agiletoolkit.libsyn.com/index.php?post_id=482372">Tips and Advice &#8211; Retrospectives</a></li>
</ul>
<h4>ThoughtWorks Podcast</h4>
<p><span style="font-weight:normal;"><a href="http://www.thoughtworks.com/what-we-say/podcasts.html">http://www.thoughtworks.com/what-we-say/podcasts.html</a><br />
Inglês</span></p>
<h2>Open Source</h2>
<h4><strong>FLOSS Weekly</strong></h4>
<p><span style="font-weight:normal;">por Leo Laport, Jono Bacon e Randal Schwartz<br />
Inglês</span></p>
<ul>
<li><a href="http://twit.tv/floss87">Entrevista com Kent Beck sobre Extreme Programming (XP)</a></li>
<li><a href="http://twit.tv/floss88">Entrevista com Linus Torvalds, o criador do Linux e do Git</a></li>
<li><a href="http://twit.tv/floss79">Entrevista com David Heinemeier Hansson criador do Ruby On Rails</a></li>
<li><a href="http://twit.tv/floss73">Entrevista com Tim O&#8217;Reilly, fundador e CEO da  O&#8217;Reilly Media</a></li>
<li><a href="http://twit.tv/floss55">Entrevista com John Resig criador e líder do Projeto jQuery</a></li>
<li><a href="http://twit.tv/floss36">Entrevista com Jan Lehnardt evangelista do projeto CouchDB</a></li>
<li><a href="http://twit.tv/floss34">Entrevista com  Jacob Kaplan-Moss criador do Django</a></li>
<li><a href="http://twit.tv/floss33">Entrevista com Bruno Souza sobre o OpenJDK</a></li>
<li><a href="http://twit.tv/floss27">Entrevista com Ward Cunningham inventor do Wiki e grande Personalidade da Comunidade Ágil</a></li>
<li><a href="http://twit.tv/floss26">Entrevista com  D. Richard Hipp criador do SQLite</a></li>
<li><a href="http://twit.tv/floss23">Entrevista com Nate Koechley sobre o Yahoo User Interface Library (YUI)</a></li>
<li><a href="http://twit.tv/floss19">Entrevista com Junio Hamano, Mantenedor do Git</a></li>
<li><a href="http://twit.tv/floss12">Entrevista com Rasmus Lerdorf, criador do PHP</a></li>
<li><a href="http://twit.tv/floss11">Entrevista com Guido van Rossum, Criador do Python</a></li>
<li><a href="http://twit.tv/floss7">Entrevista com o fundador da Wikipedia, Jimmy Wales</a></li>
</ul>
<h2>Java</h2>
<div class="wp-caption aligncenter" style="width: 410px"><a href="http://www.flickr.com/photos/amloq/302981047/"><img class=" " title="HorecaExpo - Java por bramloquet" src="http://farm1.static.flickr.com/107/302981047_6e74b21ecb.jpg" alt="HorecaExpo - Java por bramloquet" width="400" height="300" /></a><p class="wp-caption-text">HorecaExpo - Java por bramloquet</p></div>
<h4>JavaPosse</h4>
<p><span style="font-weight:normal;">Por Tor Norbye, Carl Quinn, Dick Wall e Joe Nuxoll<br />
Inglês<br />
<a href="http://www.javaposse.com"> http://www.javaposse.com</a></span></p>
<h4>Java Technology Insider</h4>
<p><span style="font-weight:normal;">Inglês<br />
<a href="http://www.javaworld.com/podcasts/jtech/"> http://www.javaworld.com/podcasts/jtech</a></span></p>
<ul>
<li><a href="http://www.javaworld.com/podcasts/jtech/2008/100708jtech.html">Rod Johnson: SpringSource and the future of Spring (2008)</a></li>
</ul>
<h4>Grails Podcast</h4>
<p><span style="font-weight:normal;">Por Glen Smith e Sven Haiges<br />
<a href="http://grailspodcast.com"> http://grailspodcast.com</a></span></p>
<h2>Ruby</h2>
<div class="wp-caption aligncenter" style="width: 410px"><a href="http://www.flickr.com/photos/nez/177722693/"><img class=" " title="Ruby on Rails por Andrew*" src="http://farm1.static.flickr.com/74/177722693_8aca6c7e82.jpg" alt="Ruby on Rails por Andrew*" width="400" height="320" /></a><p class="wp-caption-text">Ruby on Rails por Andrew*</p></div>
<h4>Rails Envy</h4>
<p><span style="font-weight:normal;">Por Jason Seifer e Gregg Pollack<br />
Inglês<br />
<a href="http://railsenvy.com"> http://railsenvy.com</a></span></p>
<h4>Rails Podcast</h4>
<p><span style="font-weight:normal;">por Geoffrey Grosenbach<br />
Inglês<br />
<a href="http://podcast.rubyonrails.com/"> http://podcast.rubyonrails.com/</a></span></p>
<ul>
<li><a href="http://podcast.rubyonrails.com/programs/1/episodes/david_heinemeier_hansson">Entrevista com David Heinemeier Hansson (2005)</a></li>
<li><a href="http://podcast.rubyonrails.com/programs/1/episodes/dave_thomas">Entrevista com Dave Thomas (2005)</a></li>
<li><a href="http://podcast.rubyonrails.com/programs/1/episodes/chad_fowler">Entrevista com Chad Fowler (2005)</a></li>
<li><a href="http://podcast.rubyonrails.com/programs/1/episodes/obie_fernandez">Entrevista com Obie Fernandez (2006)</a></li>
<li><a href="http://podcast.rubyonrails.com/programs/1/episodes/dave_thomas_and_mike_clark">Entrevista com Dave Thomas e Mike Clark (2006)</a></li>
</ul>
<h4>Rubiverse Podcast</h4>
<p><span style="font-weight:normal;">Por Mike Moore<br />
Ingles<br />
<a href="http://rubiverse.com"> http://rubiverse.com</a></span></p>
<ul>
<li><a href="http://rubiverse.com/podcasts/8-dave-hoover-on-software-craftsmanship">Dave Hoover on Software Crafsmanship (2009)</a></li>
<li><a href="http://rubiverse.com/podcasts/6-obie-fernandez-on-rails-maturity-model">Obie Fernandez on the Rails Maturity Model (2009)</a></li>
<li><a href="http://rubiverse.com/podcasts/5-ola-bini-on-polyglot-programming">Ola Bini on Polyglot Programming (2008)</a></li>
</ul>
<h2>JavaScript</h2>
<h4>jQuery Podcast</h4>
<p><span style="font-weight:normal;">Português<br />
<a href="http://blog.jquery.com/2009/11/13/announcing-the-official-jquery-podcast/"> http://blog.jquery.com/2009/11/13/announcing-the-official-jquery-podcast/</a></span></p>
<h2>Gadgets</h2>
<h4>GeekBrief TV</h4>
<p><span style="font-weight:normal;">por Cali Lewis<br />
Inglês<br />
<a href="http://www.geekbrief.tv"> http://www.geekbrief.tv</a></span></p>
<h2>Software</h2>
<div class="wp-caption aligncenter" style="width: 410px"><a href="http://www.flickr.com/photos/gesteves/2103477382/"><img class=" " title="Desk por Guillermo Esteves" src="http://farm3.static.flickr.com/2134/2103477382_ddce67a270.jpg" alt="Desk por Guillermo Esteves" width="400" height="300" /></a><p class="wp-caption-text">Desk por Guillermo Esteves</p></div>
<h4>Pragmatic Podcasts</h4>
<p><span style="font-weight:normal;">por Pragmatic Bookshelf<br />
Inglês<br />
<a href="http://www.pragprog.com/podcasts"> http://www.pragprog.com/podcasts</a></span></p>
<ul>
<li><a href="http://www.pragprog.com/podcasts/show/26">Chad Fowler on the Passionate Programmer</a></li>
<li><a href="http://www.pragprog.com/podcasts/show/20">Fred Daoud on Stripes</a></li>
<li><a href="http://www.pragprog.com/podcasts/show/19">Chad Fowler Finding the Jagged Edges</a></li>
<li><a href="http://www.pragprog.com/podcasts/show/13">Andy Hunt on Pragmatic Wetware</a></li>
</ul>
<h4>Software Engineering Radio</h4>
<p><span style="font-weight:normal;">por Software Engineering Radio<br />
<a href="http://www.se-radio.net"> http://www.se-radio.net</a><br />
Inglês</span></p>
<ul>
<li><a href="http://www.se-radio.net/podcast/2009-11/episode-148-software-archaeology-dave-thomas">Software Archaelogy with Dame Thomas</a></li>
<li><a href="http://www.se-radio.net/podcast/2009-06/episode-139-fearless-change-linda-rising">Fearless Change with Linda Rising</a></li>
<li><a href="http://www.se-radio.net/podcast/2009-06/episode-138-learning-part-development-allan-kelly">Learning as a Part of Development with Allan Kelly</a></li>
<li><a href="http://www.se-radio.net/podcast/2009-06/episode-137-sql-jim-melton">SQL with Jim Melton</a></li>
<li><a href="http://www.se-radio.net/podcast/2009-04/episode-133-continuous-integration-chris-read">Continuous Integration with Chris Read</a></li>
<li><a href="http://www.se-radio.net/podcast/2009-04/episode-132-top-10-architecture-mistakes-eoin-woods">Top 10 Architecture Mistakes with Eoin Woods</a></li>
<li><a href="http://www.se-radio.net/podcast/2009-02/episode-127-usability-joachim-machate">Usability with Joachim Machate</a></li>
<li><a href="http://www.se-radio.net/podcast/2008-08/episode-106-introduction-aop">Introduction to AOP with Christa Schwanninger e Iris Groher</a></li>
<li><a href="http://www.se-radio.net/podcast/2008-07/episode-105-retrospectives-linda-rising">Retrospectives with Linda Rising</a></li>
<li><a href="http://www.se-radio.net/podcast/2008-07/episode-103-10-years-agile-experiences">10 years of Agile Experiences</a></li>
<li><a href="http://www.se-radio.net/podcast/2008-03/episode-89-joe-armstrong-erlang">Joe Armstrong on Erlang</a></li>
<li><a href="http://www.se-radio.net/podcast/2008-02/episode-86-interview-dave-thomas">Interview Dave Thomas</a></li>
<li><a href="http://www.se-radio.net/podcast/2008-01/episode-84-dick-gabriel-lisp">Dick Gabriel on Lisp</a></li>
<li><a href="http://www.se-radio.net/podcast/2008-01/episode-83-jeff-deluca-feature-driven-development">Jeff DeLuca on Feature Driven Development</a></li>
<li><a href="http://www.se-radio.net/podcast/2007-12/episode-81-interview-erich-gamma">Interview Erich Gamma</a></li>
<li><a href="http://www.se-radio.net/podcast/2007-10/episode-70-gerard-meszaros-xunit-test-patterns">Gerard Meszaros on XUnit Test Patterns</a></li>
<li><a href="http://www.se-radio.net/podcast/2007-06/episode-59-static-code-analysis">Static Code Analysis with Jonathan Aldrich</a></li>
<li><a href="http://www.se-radio.net/podcast/2007-02/episode-46-refactoring-pt-1">Refactoring Pt. 1</a></li>
<li><a href="http://www.se-radio.net/podcast/2007-05/episode-55-refactoring-pt-2">Refactoring Pt. 2</a></li>
<li><a href="http://www.se-radio.net/podcast/2006-11/episode-37-extreme-programming-pt-1">eXtreme Programming Pt.1</a></li>
<li><a href="http://www.se-radio.net/podcast/2007-01/episode-43-extreme-programming-pt2">eXtreme Programming Pt.2</a></li>
<li><a href="http://www.se-radio.net/podcast/2006-10/episode-31-agile-documentation">Agile Documentation</a></li>
<li><a href="http://www.se-radio.net/podcast/2006-08/episode-26-interview-jutta-eckstein">Interview Jutta Eckstein</a></li>
<li><a href="http://www.se-radio.net/podcast/2006-03/episode-8-interview-eric-evans">Interview Eric Evans</a></li>
<li><a href="http://www.se-radio.net/podcast/2006-01/episode-1-patterns">Patterns</a></li>
</ul>
<h4>Elegant Code</h4>
<p><span style="font-weight:normal;">por Elegant Code Community<br />
<a href="http://elegantcode.com"> http://elegantcode.com</a><br />
Inglês</span></p>
<ul>
<li><a href="http://elegantcode.com/2009/08/31/code-cast-31-agile-for-families">Agile for Families</a></li>
<li><a href="http://elegantcode.com/2009/07/23/code-cast-28-jim-wierich">Entrevista com Jim Wierich o Criador do Rake (Ruby)</a></li>
<li><a href="http://elegantcode.com/2008/12/12/code-cast-17-david-laribee-on-lean-kanban">David Laribee on Lean / Kanban</a></li>
<li><a href="http://elegantcode.com/2008/09/30/cast-cast-15-uncle-bob-martin/">Uncle Bob Martin on Clean Code</a></li>
<li><a href="http://elegantcode.com/2008/08/27/code-cast-12-alan-shalloway/">Alan Shalloway on Lean</a></li>
<li><a href="http://elegantcode.com/2008/05/13/elegant-code-cast-8-is-online/">Entrevista com Jarod Ferguson</a></li>
<li><a href="http://elegantcode.com/2008/03/30/elegant-code-cast-6-is-up/">Entrevista com Darrel Carver</a></li>
<li><a href="http://elegantcode.com/2008/03/02/elegant-code-cast-4-is-up/">Entrevista com Scott Nichols</a></li>
<li><a href="http://elegantcode.com/2008/01/13/elegant-code-cast-2-online/">Entrevista com Scott Schimanski</a></li>
</ul>
<h4>Google Developer Podcast</h4>
<p><span style="font-weight:normal;"><a href="http://code.google.com/p/google-developer-podcast/downloads/list">http://code.google.com/p/google-developer-podcast/downloads/list</a><br />
Inglês</span></p>
<h4>Hearding Code</h4>
<p><span style="font-weight:normal;"><a href="http://herdingcode.com">http://herdingcode.com</a><br />
Inglês</span></p>
<h2>Tecnologia</h2>
<h4>IT Conversations</h4>
<p><span style="font-weight:normal;"><a href="http://itc.conversationsnetwork.org">http://itc.conversationsnetwork.org</a><br />
Inglês</span></p>
<h4>net@Night</h4>
<p><span style="font-weight:normal;">por Amber MacArthur e Leo Laport<br />
<a href="http://www.twit.tv/natn"> http://www.twit.tv/natn</a></span></p>
<h4>Twit &#8211; This Week in Tech</h4>
<p><span style="font-weight:normal;">por  Leo Laporte, Jeff Jarvis, Baratunde Thurston, e John C. Dvorak<br />
<a href="http://www.twit.tv/twit"> http://www.twit.tv/twit</a></span></p>
<h4>MacBreak Weekly</h4>
<p><span style="font-weight:normal;">por Leo Laporte, Don McAllister, Paul Kent, and Andy Ihnatko<br />
<a href="http://www.twit.tv/mbw"> http://www.twit.tv/mbw</a></span></p>
<h4>This Week in Google</h4>
<p><span style="font-weight:normal;">por Leo Laporte, Gina Trapani, Jeff Jarvis e Mary Hodder<br />
<a href="http://www.twit.tv/twig"> http://www.twit.tv/twig</a></span></p>
<h4>SitePoint Podcast</h4>
<p><span style="font-weight:normal;">inglês<br />
<a href="http://www.sitepoint.com/podcast"> http://www.sitepoint.com/podcast </a></span></p>
<h2>Empreendedorismo e Negócios</h2>
<h4>37 Signals Podcast</h4>
<p><span style="font-weight:normal;">por 37 Signals<br />
Inglês<br />
<a href="http://37signals.com/podcast"> http://37signals.com/podcast</a></span></p>
<h4>Max Gehringer (CBN)</h4>
<p><span style="font-weight:normal;">por Max Gehringer<br />
Português<br />
<a href="http://cbn.globoradio.globo.com/servicos/podcast/NOME.htm"> http://cbn.globoradio.globo.com/servicos/podcast/NOME.htm</a></span></p>
<h4>Mundo Corporativo (CBN)</h4>
<p><span style="font-weight:normal;">por Heródoto Barbeiro<br />
Português em Áudio<br />
<a href="http://cbn.globoradio.globo.com/servicos/podcast/NOME.htm"> http://cbn.globoradio.globo.com/servicos/podcast/NOME.htm</a></span></p>
<h4>The Startup Success Podcast</h4>
<p><span style="font-weight:normal;"><a href="http://startuppodcast.wordpress.com">http://startuppodcast.wordpress.com</a><br />
Inglês</span></p>
<h4>TED Talks</h4>
<p><span style="font-weight:normal;">por TED Talks<br />
Inglês<br />
<a href="http://www.ted.com"> http://www.ted.com</a></span></p>
<p>Se você quiser incluir algum outro podcast nesta lista, deixe um comentário. Espero que seja Útil!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GIT 1.6.5.3]]></title>
<link>http://gitlog.wordpress.com/2009/11/20/git-1-6-5-3/</link>
<pubDate>Fri, 20 Nov 2009 10:57:20 +0000</pubDate>
<dc:creator>FelipeC</dc:creator>
<guid>http://gitlog.wordpress.com/2009/11/20/git-1-6-5-3/</guid>
<description><![CDATA[The latest maintenance release GIT 1.6.5.3 is available at the usual places: http://www.kernel.org/p]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>The latest maintenance release GIT 1.6.5.3 is available at the<br />
usual places:</p>
<pre>http://www.kernel.org/pub/software/scm/git/</pre>
<pre>git-1.6.5.3.tar.{gz,bz2}                      (source tarball)
git-htmldocs-1.6.5.3.tar.{gz,bz2}             (preformatted docs)
git-manpages-1.6.5.3.tar.{gz,bz2}             (preformatted docs)</pre>
<p>The RPM binary packages for a few architectures are found in:</p>
<pre>RPMS/$arch/git-*-1.6.5.3-1.fc9.$arch.rpm      (RPM)</pre>
<h1>Git v1.6.5.3 Release Notes</h1>
<h2>Fixes since v1.6.5.2</h2>
<ul>
<li>
<p>
info/grafts file didn&#8217;t ignore trailing CR at the end of lines.
</p>
</li>
<li>
<p>
Packages generated on newer FC were unreadable by older versions of<br />
   RPM as the new default is to use stronger hash.
</p>
</li>
<li>
<p>
output from &#8220;git blame&#8221; was unreadable when the file ended in an<br />
   incomplete line.
</p>
</li>
<li>
<p>
&#8220;git add -i/-p&#8221; didn&#8217;t handle deletion of empty files correctly.
</p>
</li>
<li>
<p>
&#8220;git clone&#8221; takes up to two parameters, but did not complain when<br />
   given more arguments than necessary and silently ignored them.
</p>
</li>
<li>
<p>
&#8220;git cvsimport&#8221; did not read files given as command line arguments<br />
   correctly when it is run from a subdirectory.
</p>
</li>
<li>
<p>
&#8220;git diff &#8211;color-words -U0&#8243; didn&#8217;t work correctly.
</p>
</li>
<li>
<p>
The handling of blank lines at the end of file by &#8220;git diff/apply<br />
   &#8211;whitespace&#8221; was inconsistent with the other kinds of errors.<br />
   They are now colored, warned against, and fixed the same way as others.
</p>
</li>
<li>
<p>
There was no way to allow blank lines at the end of file without<br />
   allowing extra blanks at the end of lines.  You can use blank-at-eof<br />
   and blank-at-eol whitespace error class to specify them separately.<br />
   The old trailing-space error class is now a short-hand to set both.
</p>
</li>
<li>
<p>
&#8220;-p&#8221; option to &#8220;git format-patch&#8221; was supposed to suppress diffstat<br />
   generation, but it was broken since 1.6.1.
</p>
</li>
<li>
<p>
&#8220;git imap-send&#8221; did not compile cleanly with newer OpenSSL.
</p>
</li>
<li>
<p>
&#8220;git help -a&#8221; outside of a git repository was broken.
</p>
</li>
<li>
<p>
&#8220;git ls-files -i&#8221; was supposed to be inverse of &#8220;git ls-files&#8221; without -i<br />
   with respect to exclude patterns, but it was broken since 1.6.5.2.
</p>
</li>
<li>
<p>
&#8220;git ls-remote&#8221; outside of a git repository over http was broken.
</p>
</li>
<li>
<p>
&#8220;git rebase -i&#8221; gave bogus error message when the command word was<br />
   misspelled.
</p>
</li>
<li>
<p>
&#8220;git receive-pack&#8221; that is run in response to &#8220;git push&#8221; did not run<br />
   garbage collection nor update-server-info, but in larger hosting sites,<br />
   these almost always need to be run.  To help site administrators, the<br />
   command now runs &#8220;gc &#8211;auto&#8221; and &#8220;u-s-i&#8221; by setting receive.autogc<br />
   and receive.updateserverinfo configuration variables, respectively.
</p>
</li>
<li>
<p>
Release notes spelled the package name with incorrect capitalization.
</p>
</li>
<li>
<p>
&#8220;gitweb&#8221; did not escape non-ascii characters correctly in the URL.
</p>
</li>
<li>
<p>
&#8220;gitweb&#8221; showed &#8220;patch&#8221; link even for merge commits.
</p>
</li>
<li>
<p>
&#8220;gitweb&#8221; showed incorrect links for blob line numbers in pathinfo mode.
</p>
</li>
</ul>
<p>Other minor documentation updates are included.</p>
<pre>Changes since v1.6.5.2 are as follows:

Björn Gustavsson (1):
      git-clone.txt: Fix grammar and formatting

Björn Steinbrink (1):
      pre-commit.sample: Diff against the empty tree when HEAD is invalid

Clemens Buchacher (1):
      modernize fetch/merge/pull examples

Daniel Barkalow (2):
      Require a struct remote in transport_get()
      Allow curl helper to work without a local repository

Dmitry V. Levin (1):
      Makefile: add compat/bswap.h to LIB_H

Gerrit Pape (1):
      help -i: properly error out if no info viewer can be found

Gisle Aas (2):
      More precise description of 'git describe --abbrev'
      Fix documentation grammar typo

Giuseppe Bilotta (1):
      gitweb: fix esc_param

Jakub Narebski (1):
      gitweb: Do not show 'patch' link for merge commits

Jan Krüger (1):
      rebase -i: more graceful handling of invalid commands

Jari Aalto (3):
      Documentation/fetch-options.txt: order options alphabetically
      Documentation/git-pull.txt: Add subtitles above included option files
      Documentation/merge-options.txt: order options in alphabetical groups

Jeff King (6):
      cvsimport: fix relative argument filenames
      push: always load default config
      add-interactive: handle deletion of empty files
      ls-files: unbreak "ls-files -i"
      push: fix typo in usage
      format-patch: make "-p" suppress diffstat

Johannes Schindelin (3):
      blame: make sure that the last line ends in an LF
      help -a: do not unnecessarily look for a repository
      diff --color-words -U0: fix the location of hunk headers

Jonathan Nieder (4):
      clone: detect extra arguments
      Add intermediate build products to .gitignore
      check-ref-format: update usage string
      merge: do not setup worktree twice

Junio C Hamano (22):
      apply --whitespace=fix: fix handling of blank lines at the eof
      apply --whitespace=fix: detect new blank lines at eof correctly
      apply.c: split check_whitespace() into two
      apply --whitespace=warn/error: diagnose blank at EOF
      apply --whitespace: warn blank but not necessarily empty lines at EOF
      diff.c: the builtin_diff() deals with only two-file comparison
      diff --whitespace=warn/error: obey blank-at-eof
      diff --whitespace=warn/error: fix blank-at-eof check
      diff --color: color blank-at-eof
      core.whitespace: split trailing-space into blank-at-{eol,eof}
      diff --whitespace: fix blank lines at end
      diff.c: shuffling code around
      diff.c: split emit_line() from the first char and the rest of the line
      diff.c: emit_add_line() takes only the rest of the line
      diff -B: colour whitespace errors
      info/grafts: allow trailing whitespaces at the end of line
      gc --auto --quiet: make the notice a bit less verboase
      receive-pack: run "gc --auto --quiet" and optionally "update-server-info"
      clone: fix help on options
      diff --color-words: bit of clean-up
      check-ref-format -h: it does not know the --print option yet
      Git 1.6.5.3

Markus Heidelberg (1):
      t4034-diff-words: add a test for word diff without context

Petr Baudis (1):
      gitweb: Fix blob linenr links in pathinfo mode

Sebastian Schuberth (1):
      Do not try to remove directories when removing old links

Stephen Boyd (1):
      git-add.txt: fix formatting of --patch section

Thomas Rast (1):
      Quote ' as \(aq in manpages

Todd Zullinger (1):
      Makefile: Ensure rpm packages can be read by older rpm versions

Vietor Liu (1):
      imap-send.c: fix compiler warnings for OpenSSL 1.0</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[SIGTERMer's Whim-Based-Log: Git on the FTDI wave...]]></title>
<link>http://gatog.wordpress.com/2009/11/20/sigtermers-whim-based-log-git-on-the-ftdi-wave/</link>
<pubDate>Fri, 20 Nov 2009 10:50:41 +0000</pubDate>
<dc:creator>sigtermer</dc:creator>
<guid>http://gatog.wordpress.com/2009/11/20/sigtermers-whim-based-log-git-on-the-ftdi-wave/</guid>
<description><![CDATA[Before I start, an announcement that should make any electronics enthusiast explode with joy. Any pe]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Before I start, an announcement that should make any electronics enthusiast explode with joy.<br />
Any person who has dealt with a computer related project would tell you how incredibly helpful and *indispensable* the parallel port can be. It has this great reputation due to the fact that it&#8217;s is extremely easy to deal with both in circuits (IO lines can be connected directly to 74{LS}* &#8211; TTL compatible) and programming.<br />
The trusty parallel, however, has been in a recession ever since the USB came out. Today, it&#8217;s difficult to find a PC motherboard with an parallel port, and you can definitely forget about laptops with the PP.</p>
<p>Many USB solutions exist, but nearly none are as practical and universal as the good-old PP. and until recently, my only option was my old Compaq Armada PP2060.</p>
<p><a href="http://media.adnanalliance.org/images/misc/out.png"><img src="http://media.adnanalliance.org/images/misc/out.png" alt="" title="git-gpl2" class="aligncenter size-full" /></a></p>
<p>It turns out that FTDI (<a href="http://www.ftdichip.com/Products/FT232R.htm">link</a>) manufactures usb-serial converters which can be operated in bit-bang mode! this means that you can get up to 8 general purpose I/O lines. The main selling points for me was that it&#8217;s 3.95$ (<a href="http://www.sparkfun.com/commerce/product_info.php?products_id=650">link</a>), there is a breakout board (<a href="http://www.sparkfun.com/commerce/product_info.php?products_id=718">link</a>), and most importantly, <strong>there is a library for it for linux!</strong><br />
expect a detailed tutorial in the near future <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> </p>
<p>Now on to whats been happening this past week:</p>
<h3>git</h3>
<p><a href="http://gatog.wordpress.com/files/2009/11/git-gpl2.png"><img class="alignright size-full wp-image-198" title="git-gpl2" src="http://gatog.wordpress.com/files/2009/11/git-gpl2.png" alt="" width="183" height="106" /></a><br />
The comes a point in every programmer&#8217;s life when he/she realizes that he/she needs some sort of source code management. I was no exception. So I started looking for scm software. while searching, I came across git. I read a little about it and had the false assumption that it&#8217;s main feature was that Torvalds wrote it, which is not much of a reason for anything. so I decided on svn. recently, I came across a youtube video in which Linus talked about git (<a href="http://www.youtube.com/watch?v=4XpnKHJAok8">link</a>). It opened my eyes on several issues with svn that i wasn&#8217;t aware of. he also mentioned some of the futures that got me searching for a SCM system in the first place. It seems that i might be switching to git soon! <del>of course, that is if I ever get around to actually learning it  <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_rolleyes.gif' alt=':roll:' class='wp-smiley' />  </del> never mind, switched already <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
for more information, see the video (<a href="http://www.youtube.com/watch?v=4XpnKHJAok8">link</a>) and vist git (<a href="http://git-scm.com">link</a>).</p>
<h3>Google Wave</h3>
<p><a href="http://gatog.wordpress.com/files/2009/11/200px-googlewave.png"><img class="alignright size-full wp-image-202" title="200px-Googlewave" src="http://gatog.wordpress.com/files/2009/11/200px-googlewave.png" alt="" width="200" height="161" /></a><br />
Wave is interesting to say the least. a couple of days ago, I was invited by anxious.nut to google wave. To be honest, a did not expect this. after all, I wasn&#8217;t invited to gmail when it was invitation only -even though one person offered to invite me verbally, and I certainly didn&#8217;t do anything to get invited to this one. but i guess it helps to know a hardcore geek.<br />
Anyways, The interface is designed in a simplistic manner; you get for boxes for wave lists, and for the wave itself. plus two more for contacts and navigation. Waves can be edited simultaneously (like google docs) and can be viewed at deferent point in its history (can single-step from the wave&#8217;s start up to its current state). I suppose it has its uses.<br />
Anyways, being who we are (myself, and Anxious), we decided to test if it could be used for programming (you know, real time collaboration). suffice to say, it&#8217;s not for code development. it would of been fun if more people joined in though. my googlewave id is SIGTERMer [at] googlewave [dot] com.</p>
<h5>A Pleasant Surprise&#8230;</h5>
<p>It turns out that we have a close ubuntu repository here in Kuwait! It&#8217;s provided by qualtynet (<a href="http://ubuntu.qualitynet.net">link</a>) and is synced every 4 hours. I haven&#8217;t switch repos yet but if it&#8217;s faster, and everything checks out, I will.<br />
Thanks Qualtynet <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h5>link dump</h5>
<p>Last but not least, some of the more interesting sites I&#8217;ve stumbled across this week<br />
- Dirty Coding Tricks (<a href="http://www.gamasutra.com/view/feature/4111/dirty_coding_tricks.php">link</a>)</p>
<p>Until next time,<br />
<strong>SIGTERMer</strong></p>
<div style="text-align:center;"><img src="http://media.adnanalliance.org/images/misc/SIGTERMer.png" alt="" /></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[OpenquickIT: The extensible IT control pannel.]]></title>
<link>http://poisonbit.wordpress.com/2009/11/20/openquickit-the-extensible-it-control-pannel/</link>
<pubDate>Fri, 20 Nov 2009 01:43:34 +0000</pubDate>
<dc:creator>poisonbit</dc:creator>
<guid>http://poisonbit.wordpress.com/2009/11/20/openquickit-the-extensible-it-control-pannel/</guid>
<description><![CDATA[Well, here we go: http://wiki.github.com/poisonbit/OpenquickIT This is a &#8220;release early, relea]]></description>
<content:encoded><![CDATA[Well, here we go: http://wiki.github.com/poisonbit/OpenquickIT This is a &#8220;release early, relea]]></content:encoded>
</item>
<item>
<title><![CDATA[Head to head comparison between Subversion, Git and Mercurial]]></title>
<link>http://animeshdas.wordpress.com/2009/11/19/head-to-head-comparison-between-subversion-git-and-mercurial/</link>
<pubDate>Thu, 19 Nov 2009 14:51:02 +0000</pubDate>
<dc:creator>Animesh Das</dc:creator>
<guid>http://animeshdas.wordpress.com/2009/11/19/head-to-head-comparison-between-subversion-git-and-mercurial/</guid>
<description><![CDATA[View this document on Scribd]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><object id="22758516" name="22758516" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%">
<param name="movie" value="http://documents.scribd.com/ScribdViewer.swf?document_id=22758516&access_key=key-1ekb6845ynffe0mxdypi&page=&version=1&auto_size=true&viewMode="><param name="quality" value="high"><param name="play" value="true"><param name="loop" value="true"><param name="scale" value="showall"><param name="wmode" value="opaque"><param name="devicefont" value="false"><param name="bgcolor" value="#ffffff"><param name="menu" value="true"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><param name="salign" value="">
<embed src="http://documents.scribd.com/ScribdViewer.swf?document_id=22758516&access_key=key-1ekb6845ynffe0mxdypi&page=&version=1&auto_size=true&viewMode=" name="22758516_object" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle"  height="500" width="100%"></embed>
</object>
<div style="font-size:10px;text-align:center;width:100%"><a href="http://www.scribd.com/doc/22758516">View this document on Scribd</a></div> 
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[SmartGit 1 Milestone 7 build 2 ☆☆☆]]></title>
<link>http://macin.wordpress.com/2009/11/19/smartgit-1-milestone-7-build-2/</link>
<pubDate>Thu, 19 Nov 2009 11:35:08 +0000</pubDate>
<dc:creator>kabbala</dc:creator>
<guid>http://macin.wordpress.com/2009/11/19/smartgit-1-milestone-7-build-2/</guid>
<description><![CDATA[SmartGit 1 Milestone 7b2 (2009-11-17) syntevo GmbH (독일) SmartSVN 제작사에서 내놓은 JGit 기반의 Git 클라이언트. GitHu]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><div style="text-align:center;">
<table border="0" align="center">
<tbody>
<tr align="center">
<td width="48" valign="top"><a href="http://macin.wordpress.com/files/2009/11/smartgit-1-milestone-7b2-icon.png"><img src="http://macin.wordpress.com/files/2009/11/smartgit-1-milestone-7b2-icon.png?w=48" alt="" title="SmartGit 1 Milestone 7b2 Icon" width="48" height="48" class="alignnone size-thumbnail wp-image-10308" /></a></td>
<td><a href="http://www.syntevo.com/smartgit/index.html">SmartGit</a> 1 Milestone 7b2 <a href="http://blog.syntevo.net/2009/11/17/1258465140000.html">(2009-11-17)</a><br />
<a href="http://www.syntevo.com/">syntevo GmbH</a> (독일)</td>
</tr>
</tbody>
</table>
</div>
<p>SmartSVN 제작사에서 내놓은 <a href="http://www.jgit.org/">JGit</a> 기반의 Git 클라이언트. GitHub 지원.</p>
<p>Git 바이너리는 따로 설치해야 한다. 추천하는 패키지는 http://code.google.com/p/git-osx-installer. /usr/local/git에 설치된다.</p>
<p><a href="http://macin.wordpress.com/files/2009/11/smartgit-1-m7b2-setup-git.png"><img src="http://macin.wordpress.com/files/2009/11/smartgit-1-m7b2-setup-git-crop.png" alt="" title="SmartGit 1 m7b2 Setup Git Crop" width="480" height="128" class="alignnone size-full wp-image-10319" style="margin-bottom:15px;-moz-box-shadow:0 10px 30px grey;-webkit-box-shadow:0 10px 30px grey;box-shadow:0 10px 30px grey;" /></a></p>
<p>요즘은 Git이 대세인 듯.</p>
<div style="text-align:center;">비영리 무료 ·  <a href="http://www.syntevo.com/download/smartgit/smartgit-macosx-1-M7-b2.tar.gz?9i259ods24">download 30 day trial</a></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[macports: git-upload-pack: command not found]]></title>
<link>http://soniahamilton.wordpress.com/2009/11/19/macports-git-upload-pack-command-not-found/</link>
<pubDate>Thu, 19 Nov 2009 01:22:17 +0000</pubDate>
<dc:creator>Sonia</dc:creator>
<guid>http://soniahamilton.wordpress.com/2009/11/19/macports-git-upload-pack-command-not-found/</guid>
<description><![CDATA[When doing a git clone from a repo hosted on a Mac OSX machine (installed using macports), I get thi]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>When doing a <strong>git clone</strong> from a repo hosted on a Mac OSX machine (installed using macports), I get this error on the client (Linux, cygwin, whatever):</p>
<pre>git-upload-pack: command not found</pre>
<p>Solution is to do this on the OSX machine:</p>
<pre>cd /usr/bin
sudo ln -s /opt/local/bin/git* .
</pre>
<p>Obviously some $PATH funkiness is going on somewhere on the Mac, and I should find a better fix. My personal $PATH on the Mac <em>is</em> OK:</p>
<pre>$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ben Olmayınca - Ebru Gündeş]]></title>
<link>http://nakaha.wordpress.com/2009/11/19/ben-olmayinca-ebru-gundes/</link>
<pubDate>Wed, 18 Nov 2009 22:19:12 +0000</pubDate>
<dc:creator>nakaha</dc:creator>
<guid>http://nakaha.wordpress.com/2009/11/19/ben-olmayinca-ebru-gundes/</guid>
<description><![CDATA[ben olmayınca hemen bulmuşsun birini yol ayrımında unuttun yeminlerini sen bitirdin hem kendini hem ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>ben olmayınca hemen bulmuşsun birini<br />
yol ayrımında unuttun yeminlerini<br />
sen bitirdin hem kendini hem de beni<br />
şimdi git artık, dönme geri</p>
<p>kime gidersen git beni unut artık</p>
<p>bir gün aşklar biter, hatıralar kalır,<br />
kimi seversen sev hep hatırlatır<br />
sanma bir başkası yerimi alır<br />
gelenler gideni elbet aratır</p>
<p>ben olmayınca &#8220;ondan kurtuldum&#8221; demişsin<br />
benim yerime bir başkasını sevmişsin<br />
beni zaten aslında hic sevmemişsin<br />
üzülmedim hiç, dönme geri</p>
<p>kime gidersen git, beni unut artık</p>
<p>bir gün aşklar biter, hatıralar kalır,<br />
kimi seversen sev hep hatırlatır<br />
sanma bir başkası yerimi alır<br />
gelenler gideni elbet aratır</strong></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Git Submodules]]></title>
<link>http://techrad.wordpress.com/2009/11/17/git-submodules/</link>
<pubDate>Tue, 17 Nov 2009 20:03:00 +0000</pubDate>
<dc:creator>mrcaron</dc:creator>
<guid>http://techrad.wordpress.com/2009/11/17/git-submodules/</guid>
<description><![CDATA[I have been wanting to learn more about Git Submodules and how they work, so I watched the screen ca]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I have been wanting to learn more about Git Submodules and how they work, so I watched the screen cast at the bottom of <a href="http://book.git-scm.com/5_submodules.html">http://book.git-scm.com/5_submodules.html</a> (would have embedded it, but there were issues doing so). The bottom line is that the Super module contains a reference to a specific version of a Sub module. Git&#8217;s submodule command can then determine if you have a different version of the Sub than you should, it can fetch the current version, etc.</p>
<p>The process sort of goes like this, using C1 for Computer 1 and C2 for Computer 2:</p>
<ol>
<li>C1: change Submodule</li>
<li>C1: commit Super module, freezing version of Sub used by Super</li>
<li>C1: push Super module</li>
<li>C2: pull Super module, gets the updated Sub module version SHA</li>
<li>C2: submodule update, gets the updated Sub code corresponding to the version in #4.</li>
</ol>
<p>Some observations:</p>
<ul>
<li>Will a user ever do 4 and NOT do 5? Why?</li>
<li>If 4 and 5 are tied together, why is that not one step (ala <strong>git push</strong> = <strong>git fetch</strong>;<strong> git merge origin/master</strong>)?</li>
<li>C2 has no idea to update the Sub code unless they are carefully watching the pull output or run git submodule status directly after 4 above to know that a Sub update is needed</li>
<li>Possible source of issues if C2 has Version x+1 of Super but only version x of Sub</li>
</ul>
<p>Now, I&#8217;m new to Git, but it would seem to me that one could write a hook that would automatically run git submodule update if .gitmodules is present in the directory. It would seem that an appropriate hook to git pull would be to add git submodule update after the pull. Am I missing something here?</p>
<p>I understand that git&#8217;s submodule support has been added-on as submodules were not something in the design of Git. I wonder if the lack of these hooks and a better user experience is the direct side effect of that bolt-on?</p>
<p>Mercurial seems to be trying to do this via it&#8217;s <a href="http://mercurial.selenic.com/wiki/subrepos" target="_blank">subrepos</a> support:</p>
<blockquote><p>Whenever newer Mercurial versions encounter this <tt>.hgsubstate</tt> file when updating your working directory, they&#8217;ll attempt to pull the specified subrepos and update them to the appropriate state.</p></blockquote>
<p>Enough to make me switch? Not if I can write a hook.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[git is too complicated for me]]></title>
<link>http://exitstatuszero.wordpress.com/2009/11/17/git-is-too-complicated-for-me/</link>
<pubDate>Tue, 17 Nov 2009 02:09:53 +0000</pubDate>
<dc:creator>Jeffrey</dc:creator>
<guid>http://exitstatuszero.wordpress.com/2009/11/17/git-is-too-complicated-for-me/</guid>
<description><![CDATA[git is too complicated for me. It&#8217;s supposed to be awesome, but I just can&#8217;t figure it o]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://git-scm.com/">git</a> is too complicated for me. It&#8217;s supposed to be awesome, but I just can&#8217;t figure it out.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[bash scripts for using git to sync laptops]]></title>
<link>http://faltufund.wordpress.com/2009/11/15/bash-scripts-for-using-git-to-sync-laptops/</link>
<pubDate>Sun, 15 Nov 2009 23:25:07 +0000</pubDate>
<dc:creator>faltufund</dc:creator>
<guid>http://faltufund.wordpress.com/2009/11/15/bash-scripts-for-using-git-to-sync-laptops/</guid>
<description><![CDATA[I have 3 Debian laptops which I use daily. One at home, one at school, and one which I carry in my b]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I have 3 Debian laptops which I use daily.  One at home, one at school, and one which I carry in my backpack.  I&#8217;m also a backup nut.  I have 4 external drives totaling 3.25T of storage which are for storing and backing each other up.  For years I used rsync with linked files, which was alright but always had issues &#8212; sometimes the links wouldn&#8217;t propagate back properly for no apparent reason.  I&#8217;d have the impression that things were working well when &#8230; really there was just the latest snapshot available.   </p>
<p>Recently I&#8217;ve switched to unison for backing up things like photos and videos, which works great and has a nice GUI.  It makes snapshots and just synchronizes the drives, with minimal muss and fuss.</p>
<p>But for my daily work, I want something with some history, like I had hoped to get from rsync, so I can revert a file to its previous state.  I wanted something which wouldn&#8217;t have a &#8216;main&#8217; copy and then child copies but rather where each laptop could function stand-alone and then quickly synchronize with the others whenever they were available.  I wanted something which could run over ssh.  I suspected git might do some of it, but I am surprised now how much of what I wanted, git does, and does well.</p>
<p>So I tried out git for while, but git has a steep learning curve.  So steep that its the kind of thing which I abandon if I don&#8217;t get traction quickly, since I have little time to learn technical tools like this, especially tools which are not documented for beginners.  (I&#8217;ve had that issue with OpenBSD, which seems like a nice OS, and which I&#8217;ve installed, but I&#8217;ve run into issues within the first day and then had to reformat over with Debian testing.)</p>
<p>However git has something which is an absolutely remarkable solution to this problem.  There is  an excellent, friendly git IRC channel at irc.freenode.net/#git.  Several people there have given me such valuable advice specific to my situations that came up in the beginning that I&#8217;ve learned git to the point where it&#8217;s a tool that helps me so much I can&#8217;t do without it.  There&#8217;s lots of primers and introductions out there, but I didn&#8217;t find one that really cut it for me; it is sorely needed, but the IRC channel makes up for its absence.</p>
<p>One key piece of advice I got was to avoid git push and pull in the beginning, and rather use git fetch  and merge only.  This was good advice, since you get a better sense of what each piece is doing, and it works.</p>
<p>So I wrote a couple of bash scripts which I use everyday and which I like.  First I have in my .bashrc a line like</p>
<p><code>
<pre>export GITDIRS=~/proj1:~/proj2:~/proj3</pre>
<p></code></p>
<p>Whenever I need to sync up laptops I run the following bash script I call gitac (for git-add commit):</p>
<p><code>
<pre>
#!/bin/bash

IFS=:
for gitdir in $GITDIRS; do
    echo $gitdir
    pushd $gitdir
    git add .
    git commit
    popd
done
</pre>
<p></code></p>
<p>and then I ssh to the target laptop and run gitfr (for gitfrom):</p>
<p><code>
<pre>
#!/bin/bash

IFS=: 

for gitdir in $GITDIRS; do
    echo $gitdir
    pushd $gitdir
    git fetch $1:$gitdir HEAD
    git merge FETCH_HEAD
    popd
done
</pre>
<p></code></p>
<p>These work superfast and sync my laptops better than I could&#8217;ve asked for from rsync.  I can see the commits graphically using gitk which is nice.</p>
<p>When I&#8217;m syncing my laptops it isn&#8217;t always a sensible time to do a significant commit on all my projects, but with git you can have several branches, one for daily working commits and another for significant commits &#8212; I&#8217;ve yet to completely work that out and also find out how to propagate such branch information.   git is flexible about how you use it, and if it works, then it works.  Another thing I like is that  none of the machines is &#8220;central&#8221;;  in fact, I view them all as backing each other up.  In particular, I don&#8217;t need the external drives for backing up my daily work anymore, they&#8217;re only for photos, videos, and things like that.</p>
<p>The only obvious issue is if I edit the same file on 2 different laptops and then sync, then I get merge conflicts, as would be expected.  At first this was a problem, but now I generally remember to start a work session by gitfr from my backpack laptop to keep everything sync&#8217;d up.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Como criar um repositório Git remoto usando o SSH]]></title>
<link>http://skarllot.wordpress.com/2009/11/14/criar_git_remoto_ssh/</link>
<pubDate>Sun, 15 Nov 2009 02:59:25 +0000</pubDate>
<dc:creator>Fabrício Godoy</dc:creator>
<guid>http://skarllot.wordpress.com/2009/11/14/criar_git_remoto_ssh/</guid>
<description><![CDATA[Abordarei a criação de um repositório Git remoto usando o SSH num ambiente Linux. Não incluirei deta]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Abordarei a criação de um repositório Git remoto usando o SSH num ambiente Linux.</p>
<p>Não incluirei detalhes da configuração do SSH.</p>
<p><!--more-->É necessário que os seguintes pacotes estejam instalados: <strong>git</strong> e <strong>ssh</strong>.</p>
<p>Primeiro configure o SSH editando o arquivo <strong>/etc/ssh/sshd_config</strong>.</p>
<p>Eu recomendo algumas configurações[1]:</p>
<pre>Protocol 2    # Permite apenas a versão 2 do protocolo (mais seguro)
PermitRootLogin no    # Não permite login como root
PasswordAuthentication no    # Não permite login por senha</pre>
<p>Agora é necessário criar um usuário para acesso ao Git através do SSH.</p>
<p>Eu recomendo que o nome do usuário seja <strong>git</strong> e que seja criado com o seguinte comando[2]:</p>
<pre>useradd -r -m --shell /usr/bin/git-shell git</pre>
<p>Definindo o shell do usuário para /usr/bin/git-shell o acesso do usuário será restrito aos comandos do Git[3].</p>
<p>O diretório pessoal do usuário git será criado em <strong>/home/git</strong>.</p>
<p>Se você não tem uma chave para o SSH, crie-a com o comando <strong>ssh-keygen</strong> (usando seu usuário).</p>
<p>Será criada uma chave pública e privada em <strong>~/.ssh</strong>, a chave pública tem o sufixo <strong>.pub</strong> (nunca compartilhe sua chave privada).</p>
<p>Agora é necessário adicionar sua chave pública a lista de chaves autorizadas do usuário <strong>git</strong>, para isso faça o seguinte:</p>
<pre>mkdir /home/git/.ssh</pre>
<pre>cat /home/seu_usuario/.ssh/id_rsa.pub &#62;&#62; /home/git/.ssh/authorized_keys</pre>
<p>Supondo que o nome de sua chave pública seja <strong>id_rsa.pub</strong>.</p>
<p>Agora será necessário criar um repositório no diretório pessoal do usuário <strong>git</strong>.</p>
<p>Para criar um repositório para o projeto <strong>ProjetoTeste</strong>, faça o seguinte:</p>
<pre>mkdir /home/git/ProjetoTeste</pre>
<pre>cd /home/git/ProjetoTeste</pre>
<pre>git init --bare</pre>
<p>Agora é necessário garantir que tudo pertença ao usuário git, faça o seguinte:</p>
<pre>cd /home/git
chown -R git.git <strong>.</strong>    # não esqueça do ponto no final
</pre>
<p>Isso é tudo.</p>
<p>Para clonar o repositório use o seguinte comando:</p>
<pre>git clone git@ip_do_servidor:ProjetoTeste</pre>
<p><strong>Referência:</strong></p>
<p>1- <a href="http://linux.die.net/man/5/sshd_config" target="_blank">http://linux.die.net/man/5/sshd_config</a> ou <strong>man 5 sshd_config</strong>.</p>
<p>2- <a href="http://linux.die.net/man/8/useradd" target="_blank">http://linux.die.net/man/8/useradd</a> ou <strong>man 8 useradd</strong>.</p>
<p>3- <a href="http://linux.die.net/man/1/git-shell" target="_blank">http://linux.die.net/man/1/git-shell</a> ou <strong>man 1 git-shell</strong>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Özledim Seni - Can YÜCEL]]></title>
<link>http://nakaha.wordpress.com/2009/11/15/ozledim-seni-can-yucel/</link>
<pubDate>Sat, 14 Nov 2009 23:07:21 +0000</pubDate>
<dc:creator>nakaha</dc:creator>
<guid>http://nakaha.wordpress.com/2009/11/15/ozledim-seni-can-yucel/</guid>
<description><![CDATA[özledim seni&#8230; ayrılık yüreğimi uyuşturuyor karıncalandırıyor nicedir. beynimi uyuşturuyor özle]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>özledim seni&#8230;</strong></p>
<p><strong> ayrılık yüreğimi uyuşturuyor karıncalandırıyor nicedir.<br />
beynimi uyuşturuyor özlemin&#8230;<br />
çok sık birlikte olmasak bile<br />
benimle olduğunu bilmenin<br />
bunca zamandır içimi ısıttığını<br />
yeni yeni anlıyorum<br />
Yokluğun,<br />
Hatırladıkça yüreğime saplanan bir sızı olmaktan çıkıp<br />
mütemadiyen bir boşluğa<br />
Sabahları seni okşayarak başlamaları<br />
aksamları her isi bir kenara koyup<br />
seninle baş başa konuşmaları özlüyorum;<br />
oynaşmalarımızı,<br />
yürüyüşlerimizi,<br />
sevimli haşarılığını,<br />
çocuksu küskünlüğünü&#8230;<br />
Nasılda serttin başkalarına karşı<br />
beni savunurken;<br />
ve ne kadar yumuşak<br />
bir çift kısık gözle kendini<br />
ellerimin okşayışına bırakırken<br />
Gitmeni asla istemediğim halde<br />
buna mecbur olduğunu görmek<br />
ve sana bunları söylemeden<br />
&#8221;git artık&#8221; demek<br />
&#8221;beni ne kadar çabuk unutursan, o kadar çabuk<br />
kavuşacaksın mutluluğa&#8221;<br />
demek sana nede zor<br />
seni görmemek ve belki yıllar sonra<br />
karsılaştığımızda<br />
bana bir yabancı gibi bakmanı istemek senden&#8230;<br />
yeni bir sevdayı yasakladığım kalbime söz geçirmek&#8230;.</p>
<p>Can YÜCEL</strong></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[N-way Git synchronization with extra cheese]]></title>
<link>http://l0b0.wordpress.com/2009/11/14/n-way-git-synchronization-with-extra-cheese/</link>
<pubDate>Sat, 14 Nov 2009 16:18:06 +0000</pubDate>
<dc:creator>l0b0</dc:creator>
<guid>http://l0b0.wordpress.com/2009/11/14/n-way-git-synchronization-with-extra-cheese/</guid>
<description><![CDATA[Index Background Converting Subversion to Git svn2git.sh Generate and version .gitignore files exclu]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h2>Index</h2>
<ol>
<li><a href="#background">Background</a></li>
<li><a href="#git-svn">Converting Subversion to Git</a>
<ul>
<li><a href="#svn2git">svn2git.sh</a></li>
</ul>
</li>
<li><a href="#git-ignore">Generate and version .gitignore files</a>
<ul>
<li><a href="#exclude2gitignore">exclude2gitignore.sh</a></li>
</ul>
</li>
<li><a href="#git-proxy">Git via proxy</a></li>
<li><a href="#pull-remote">Setting up pull everywhere</a></li>
<li><a href="#references">References</a></li>
</ol>
<h2><a name="background">Background</a></h2>
<p>I&#8217;ve got a desktop and server behind a router with a dynamic <abbr title="Internet Protocol">IP</abbr> address at home, a desktop at work, and a laptop that floats around. I&#8217;d very much like to have the same settings on all of them, and to be able to synchronize them as easily as possible. I&#8217;ve been using Subversion for this, but recent trouble with <a href="http://subversion.tigris.org/ds/viewMessage.do?dsMessageId=2415865&#38;dsForumId=1065">symlinks</a> and a long-term concern that storing the revision history centrally (even with backups now and then) is a Bad Move in the long term. So when I had to start using Git at <a href="http://library.web.cern.ch/library/">work</a>, and after realizing that it could solve both problems (at least in theory), I tried figuring out how to do this. After lots of tries followed by <code>rm -rf settings/</code>, I think I&#8217;ve got a working setup. Of course, I don&#8217;t guarantee that any of this will work for you.</p>
<h2><a name="git-svn">Converting Subversion to Git</a></h2>
<p>Install the necessary software:<br />
<code>sudo apt-get install git-svn</code></p>
<p>Copy the following code into a file named <em>svn2git.sh</em>, and run it as documented below.</p>
<h3><a name="svn2git">svn2git.sh</a></h3>
<pre class="brush: bash;">#!/bin/sh
#
# NAME
#    svn2git.sh - Convert a Subversion repository to Git
#
# SYNOPSIS
#    svn2git.sh [options] &#60;Subversion URL&#62;
#
# OPTIONS
#    --authors=path  Authors file
#    -v,--verbose    Verbose output
#
# EXAMPLE
#    /path/to/svn2git.sh https://example.org/foo
#
#    Create authors file for repository
#
#    /path/to/svn2git.sh -v --authors=authors.txt https://example.org/foo
#
#    Get Subversion repository to ./foo.git
#
# DESCRIPTION
#    Two-part script to migrate from Subversion to Git. First it tries to get
#    a list of the Subversion authors, so it can be formatted to fit the Git
#    commit structure. When running with the authors file, it will fetch the
#    entire Subversion revision history.
#
# BUGS
#    Email bugs to victor dot engmark at gmail dot com. Please include the
#    output of running this script in verbose mode (-v).
#
# COPYRIGHT AND LICENSE
#    Copyright (C) 2009 Victor Engmark
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see &#60;http://www.gnu.org/licenses/&#62;.
#
################################################################################

# Output error message with optional error code
error()
{
    if [ -z &#34;$2&#34; ]
    then
        error_code=$EX_UNKNOWN
    else
        error_code=$2
    fi
    echo &#34;$1&#34; &#62;&#38;2
    exit $error_code
}

usage()
{
    error &#34;Usage: ${cmdname} [-v&#124;--verbose] [--authors=path] &#60;Subversion URL&#62;&#34; $EX_USAGE
}

verbose_echo()
{
    if [ $verbose ]
    then
        echo &#34;$*&#34;
    fi
}

# Use for mandatory directory checks
# $1 is the directory path
# $2 is the (optional) error message
directory_exists()
{
    if [ ! -d $1 ]
    then
        error &#34;No such directory '${1}'
$2&#34; $EX_NO_SUCH_DIR
    fi
}

# Make sure an executable is available
# $1 is the path to the executable
# $2 is the (optional) error message
executable_exists()
{
    if [ ! -x $1 ]
    then
        error &#34;No such executable '${1}'
$2&#34; $EX_NO_SUCH_EXEC
    fi
}

PATH=&#34;/usr/bin:/bin&#34;
cmdname=`basename $0`
directory=$PWD

# Exit codes from /usr/include/sysexits.h, as recommended by
# http://www.faqs.org/docs/abs/HTML/exitcodes.html
EX_OK=0           # successful termination
EX_USAGE=64       # command line usage error
EX_DATAERR=65     # data format error
EX_NOINPUT=66     # cannot open input
EX_NOUSER=67      # addressee unknown
EX_NOHOST=68      # host name unknown
EX_UNAVAILABLE=69 # service unavailable
EX_SOFTWARE=70    # internal software error
EX_OSERR=71       # system error (e.g., can't fork)
EX_OSFILE=72      # critical OS file missing
EX_CANTCREAT=73   # can't create (user) output file
EX_IOERR=74       # input/output error
EX_TEMPFAIL=75    # temp failure; user is invited to retry
EX_PROTOCOL=76    # remote error in protocol
EX_NOPERM=77      # permission denied
EX_CONFIG=78      # configuration error

# Custom errors
EX_UNKNOWN=1
EX_NO_SUCH_DIR=91
EX_NO_SUCH_EXEC=92

# Process parameters
until [ $# -eq 0 ]
do
    case $1 in
        -v&#124;--verbose)
            verbose=1
            shift
            ;;
        --authors=*)
            authors_file=${directory}/$(echo &#34;$1&#34; &#124; cut -c11-)
            shift
            ;;
        *)
            if [ -z $svn_url ]
            then
                svn_url=$1
                shift
            else
                # Unknown parameter
                usage
            fi
            ;;
    esac
done

if [ -z $svn_url ]
then
    # No Subversion URL provided
    usage
fi

repository_name=`basename $svn_url`

verbose_echo &#34;Running $cmdname at `date`.&#34;

# Preliminary checks
directory_exists &#34;$source_base&#34;
executable_exists &#34;/usr/bin/git&#34;
executable_exists &#34;/usr/bin/git-svn&#34;
executable_exists &#34;/usr/bin/svn&#34;

verbose_echo &#34;Source repository: '${svn_url}'&#34;

if [ -z $authors_file ]
then
    # Get authors file
    authors_file=&#34;${directory}/${repository_name}-authors.txt&#34;
    if [ -e $authors_file ]
    then
        error &#34;Authors file '${authors_file}' already exists&#34;
    fi
    verbose_echo &#34;Authors file: ${authors_file}&#34;

    svn log --quiet &#34;${svn_url}&#34; &#124; grep '^r.*' &#124; cut -d ' ' -f 3- &#124; cut -d '&#124;' -f 1 &#124; sort &#124; uniq &#62; &#34;${authors_file}&#34;

    author=&#34;$(head -1 $authors_file)&#34;
    echo &#34;Please modify ${authors_file} to a format like&#34;
    echo &#34;${author}= Full Name &#60;${author}@example.org&#62;&#34;
    echo &#34;and rerun $cmdname with --authors=${authors_file}&#34;
else
    if [ ! -e $authors_file ]
    then
        error &#34;Authors file '${authors_file}' doesn't exist&#34;
    fi

    git_target=&#34;${directory}/${repository_name}.git&#34;
    if [ -e $git_target ]
    then
        error &#34;Target repository '${git_target}' already exists&#34;
    fi
    verbose_echo &#34;Target repository: '${git_target}'&#34;

    # Clone
    git-svn clone --no-metadata --authors-file=&#34;${authors_file}&#34; --revision 1:1 &#34;$svn_url&#34; &#34;$git_target&#34; &#124;&#124; error &#34;Clone failed&#34;

    # Fetch
    cd &#34;$git_target&#34;
    batch_start=2
    revisions=$(svn info &#34;$svn_url&#34; &#124; grep '^Revision:' &#124; awk '{print $2}')
    while [ $batch_start -le $revisions ]
    do
        batch_end=$(expr $batch_start + 990)
        if [ $batch_end -gt $revisions ]
        then
            batch_end=$revisions
        fi

        verbose_echo &#34;Fetching revisions $batch_start through $batch_end&#34;
        git-svn fetch --authors-file=&#34;${authors_file}&#34; --revision $batch_start:$batch_end &#124;&#124; error &#34;Fetch failed&#34;

        batch_start=$(expr $batch_end + 1)
    done

    git rebase git-svn

    verbose_echo &#34;Applying svn:ignore properties&#34;
    git-svn show-ignore &#62;&#62; .git/info/exclude

    verbose_echo &#34;Removing references to Subversion&#34;
    git config --remove-section svn-remote.svn
    rm --recursive --force .git/svn/
fi

verbose_echo &#34;Cleaning up.&#34;
cd &#34;$directory&#34;

verbose_echo &#34;${cmdname} completed at `date`.&#34;
exit $EX_OK</pre>
<p><strong>Now make sure you do a directory diff between the old Subversion and the new Git repositories to see if it succeeded.</strong></p>
<p>Now you can get this on other machines using<br />
<code>git clone --origin example ssh://example.org/~/settings</code></p>
<h2><a name="git-ignore">Generate and version .gitignore files</a></h2>
<p>This is an optional step in case you would like to version the old svn:ignore properties as .gitignore files:</p>
<h3><a name="exclude2gitignore">exclude2gitignore.sh</a></h3>
<pre class="brush: bash;">#!/bin/sh
#
# NAME
#    exclude2gitignore.sh - Convert $GIT_DIR/info/exclude to corresponding
#    .gitignore files
#
# SYNOPSIS
#    exclude2gitignore.sh [options] /path/to/repository
#
# OPTIONS
#    -v,--verbose    Verbose output
#
# EXAMPLE
#    /path/to/exclude2gitignore.sh ~/foo
#
#    Create .gitignore files for the Git repository in ~/foo
#
# DESCRIPTION
#    Based on the format generated by `git-svn show-ignore`, where non-comment
#    lines indicate ignored files. Will try to put the .gitignore as close as
#    possible to the ignored file(s).
#
# BUGS
#    Email bugs to victor dot engmark at gmail dot com. Please include the
#    output of running this script in verbose mode (-v).
#
# COPYRIGHT AND LICENSE
#    Copyright (C) 2009 Victor Engmark
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see &#60;http://www.gnu.org/licenses/&#62;.
#
################################################################################

# Output error message with optional error code
error()
{
    if [ -z &#34;$2&#34; ]
    then
        error_code=$EX_UNKNOWN
    else
        error_code=$2
    fi
    echo &#34;$1&#34; &#62;&#38;2
    exit $error_code
}

usage()
{
    error &#34;Usage: ${cmdname} [-v&#124;--verbose] /path/to/repository&#34; $EX_USAGE
}

verbose_echo()
{
    if [ $verbose ]
    then
        echo &#34;$*&#34;
    fi
}

# Use for mandatory directory checks
# $1 is the directory path
# $2 is the (optional) error message
directory_exists()
{
    if [ ! -d $1 ]
    then
        error &#34;No such directory '${1}'
$2&#34; $EX_NO_SUCH_DIR
    fi
}

# Make sure an executable is available
# $1 is the path to the executable
# $2 is the (optional) error message
executable_exists()
{
    if [ ! -x $1 ]
    then
        error &#34;No such executable '${1}'
$2&#34; $EX_NO_SUCH_EXEC
    fi
}

PATH=&#34;/usr/bin:/bin&#34;
cmdname=`basename $0`
directory=$PWD

# Exit codes from /usr/include/sysexits.h, as recommended by
# http://www.faqs.org/docs/abs/HTML/exitcodes.html
EX_OK=0           # successful termination
EX_USAGE=64       # command line usage error
EX_DATAERR=65     # data format error
EX_NOINPUT=66     # cannot open input
EX_NOUSER=67      # addressee unknown
EX_NOHOST=68      # host name unknown
EX_UNAVAILABLE=69 # service unavailable
EX_SOFTWARE=70    # internal software error
EX_OSERR=71       # system error (e.g., can't fork)
EX_OSFILE=72      # critical OS file missing
EX_CANTCREAT=73   # can't create (user) output file
EX_IOERR=74       # input/output error
EX_TEMPFAIL=75    # temp failure; user is invited to retry
EX_PROTOCOL=76    # remote error in protocol
EX_NOPERM=77      # permission denied
EX_CONFIG=78      # configuration error

# Custom errors
EX_UNKNOWN=1
EX_NO_SUCH_DIR=91
EX_NO_SUCH_EXEC=92

# Process parameters
until [ $# -eq 0 ]
do
    case $1 in
        -v&#124;--verbose)
            verbose=1
            shift
            ;;
        *)
            if [ -z $repository ]
            then
                repository=&#34;${1%\/}&#34;
                shift
            else
                # Unknown parameter
                usage
            fi
            ;;
   esac
done

verbose_echo &#34;Running $cmdname at `date`.&#34;

directory_exists &#34;$repository&#34;

grep '^/' &#34;${repository}/.git/info/exclude&#34; &#124; while read line
do
    ignore_path=&#34;${repository}${line}&#34;
    verbose_echo &#34;Starting with $ignore_path&#34;
    ignore_name=&#34;$ignore_path&#34;

    # Strip globs in path
    ignore_path=`dirname &#34;$ignore_path&#34;`
    while [ ! -e &#34;$ignore_path&#34; ]
    do
        ignore_path=`dirname &#34;$ignore_path&#34;`
    done

    # Remove path from file name (need +2 to include the end slash and to
    # compensate for 1-based indexing
    name_length=$(expr length &#34;$ignore_name&#34;)
    path_length=$(expr length &#34;$ignore_path&#34; + 2)
    ignore_name=$(expr substr &#34;$ignore_name&#34; $path_length $name_length)

    # Complete .gitignore path
    ignore_path=&#34;${ignore_path}/.gitignore&#34;

    verbose_echo &#34;$ignore_name &#62;&#62; $ignore_path&#34;
    echo &#34;$ignore_name&#34; &#62;&#62; &#34;$ignore_path&#34;
done

verbose_echo &#34;Cleaning up.&#34;
cd &#34;$directory&#34;

verbose_echo &#34;${cmdname} completed at `date`.&#34;
exit $EX_OK</pre>
<h2><a name="git-proxy">Git via proxy</a></h2>
<p>One of the machines involved is behind a <em>gateway machine</em> at work, so I had to add the following to <strong>~/.ssh/config</strong>:<br />
<code>
<pre>Host work
     ProxyCommand ssh -q gateway.example.org nc %h %p $*
     HostName work-pc.example.org</pre>
<p></code></p>
<p>With this, it&#8217;s possible to refer to just &#8220;work&#8221;, and SSH commands (even via Git) will take care of connecting via the proxy.</p>
<h2><a name="pull-remote">Setting up pull everywhere</a></h2>
<p>The main idea here is to set up Git &#8220;remotes&#8221; pointing to all the other machines.</p>
<p>To be able to get the updates from the repository in ~/settings on my.example.org, simply run the following on all machines (except, of course, the home machine):<br />
<code>git remote add home ssh://home-pc.example.net/~/settings</code></p>
<p>To be able to get the updates from the &#8220;work&#8221; host specified with a proxy above, just use &#8220;work&#8221; for the host name:<br />
<code>git remote add work ssh://work/~/settings</code></p>
<p>To be able to pull from a machine which changes IP address, you could set up a <a href="http://www.dyndns.com/">DynDNS</a> account and use one of their recommended <a href="http://www.dyndns.com/support/clients/unix.html">update scripts</a> to be able to refer to your machine using a single DNS name.</p>
<p>After cloning one of the copies on all of your hosts, you should be able to the following to get all the changes from the repositories:<br />
<code>git remote update &#38;&#38; git pull</code><br />
If this doesn&#8217;t work, you might have more luck fetching each repository individually, and then rebasing to it:<br />
<code>git fetch home &#38;&#38; git rebase home/master</code></p>
<p>To keep a backup on a separate machine, just do a<br />
<code>git clone --origin example ssh://example.org/~/settings</code><br />
there and set up pushing defaults on the other machines using<br />
<code>git config push.default matching<br />
git remote add backup ssh://backup.example.org/~/settings</code><br />
Then you can just <code>git push backup master</code> to backup the local master branch.</p>
<h2><a name="references">References</a></h2>
<ul>
<li><a href="http://pauldowman.com/2008/07/26/how-to-convert-from-subversion-to-git/">How to convert from Subversion to Git</a></li>
<li><a href="http://www.kernel.org/pub/software/scm/git/docs/git-svn.html">git-svn manual page</a></li>
<li><a href="http://git.or.cz/course/svn.html">Git &#8211; SVN Crash Course</a></li>
<li><a href="http://git.or.cz/gitwiki/GitFaq#HowdoImirroraSVNrepositorytogit.3F">GitFaq</a></li>
<li>Excellent respondents at <a href="http://stackoverflow.com/">Stack Overflow</a> (<a href="http://stackoverflow.com/questions/1725780/git-pull-from-several-repos-in-one-command">1</a>, <a href="http://stackoverflow.com/questions/1734405/synchronizing-git-repos-across-machines-without-push">2</a>) and <a href="http://git.or.cz/gitwiki/GitCommunity">the Git community</a> (<a href="http://marc.info/?l=git&#38;m=125822750719729&#38;w=2">1</a>)</li>
<li><a href="http://maururu.net/2009/svn-to-git-take-2/">Moving from subversion to git permanently &#8211; take 2</a></li>
<li><a href="http://cheat.errtheblog.com/s/gitsvn/">$ cheat gitsvn</a></li>
</ul>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[What are your git-stats?]]></title>
<link>http://pragmatig.wordpress.com/2009/11/14/what-are-your-git-stats/</link>
<pubDate>Sat, 14 Nov 2009 14:17:45 +0000</pubDate>
<dc:creator>pragmatig</dc:creator>
<guid>http://pragmatig.wordpress.com/2009/11/14/what-are-your-git-stats/</guid>
<description><![CDATA[Also available as Gist Ever wondered how much who adds/removes, its time to find out (those are real]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Also available as <a href="http://gist.github.com/234560">Gist</a></p>
<p>Ever wondered how much who adds/removes, its time to find out <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
(those are real stats, I just obfuscated the names <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<p><strong>Results</strong></p>
<pre style="font-size:12px;overflow:auto;">
Git scores (in LOC):
mr-add              :  +482273       -9466
justu               :  +286250       -159905
grosser             :  +152384       -323344
another             :  +121257       -82116
naames              :  +104577       -13591
justfor             :  +68716        -72446
example             :  +7795         -4987
andeven             :  +5100         -1730
morenow             :  +4225         -2764
finish              :  +17           -19
</pre>
<p><strong>Install</strong><br />
Copy init git_stats.rb and ruby git_stats.rb<br />
(you can add the names of people who commit with different users into the &#8217;same&#8217; array)</p>
<pre style="font-size:12px;overflow:auto;">
# please add enhancements to http://gist.github.com/234560
#!/usr/bin/env ruby
t = Time.now

same = [['name-a','name-b'],['mr fred','fred']]
pipe = open("&#124;git log --shortstat")
author = "unknown"
stats = {}

loop do
  line = pipe.readline rescue break
  author = $1 if line =~ /Author\: ([a-z]+) &#60;/
  found = same.detect{&#124;a&#124; a.include?(author)}
  author = found.first if found

  if line =~  /files changed, (\d+) insertions\(\+\), (\d+) deletions/
    stats[author] &#124;&#124;= Hash.new(0)
    stats[author]['+']+=$1.to_i
    stats[author]['-']+=$2.to_i
    print '.'
  end
end

puts "\nGit scores (in LOC):"
puts stats.sort_by{&#124;a,d&#124; -d['+'] }.map{&#124;author, data&#124; "#{author.ljust(20)}:  +#{data['+'].to_s.ljust(10)}   -#{data['-'].to_s.ljust(10)} " } * "\n"
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Menulis Kembali]]></title>
<link>http://bagavadgita.wordpress.com/2009/11/13/menulis-kembali/</link>
<pubDate>Fri, 13 Nov 2009 13:20:19 +0000</pubDate>
<dc:creator>Hendri_nukasep</dc:creator>
<guid>http://bagavadgita.wordpress.com/2009/11/13/menulis-kembali/</guid>
<description><![CDATA[Sangat tidak mudah untuk saya membiasakan diri menulis secara rutin tentang apa yang saya pikirkan, ]]></description>
<content:encoded><![CDATA[Sangat tidak mudah untuk saya membiasakan diri menulis secara rutin tentang apa yang saya pikirkan, ]]></content:encoded>
</item>
<item>
<title><![CDATA[Video GIT 2009]]></title>
<link>http://elconsejodeahorrin.wordpress.com/2009/11/13/video-git-2009/</link>
<pubDate>Fri, 13 Nov 2009 10:41:58 +0000</pubDate>
<dc:creator>ahorrin</dc:creator>
<guid>http://elconsejodeahorrin.wordpress.com/2009/11/13/video-git-2009/</guid>
<description><![CDATA[Nací en respuesta a un concurso de innovación. Les dejo un video que explica por qué estoy en el mun]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Nací en respuesta a un concurso de innovación.<br />
Les dejo un video que explica por qué estoy en el mundo.<br />
Espero les guste!</p>
<p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/1yK13IzhRQQ&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' /><param name='allowfullscreen' value='true' /><param name='wmode' value='transparent' /><embed src='http://www.youtube.com/v/1yK13IzhRQQ&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' type='application/x-shockwave-flash' allowfullscreen='true' width='425' height='350' wmode='transparent'></embed></object></span></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ist git für die Wikipedia geeignet?]]></title>
<link>http://lieselsartikel.wordpress.com/2009/11/13/ist-git-fur-die-wikipedia-geeignet/</link>
<pubDate>Fri, 13 Nov 2009 08:22:19 +0000</pubDate>
<dc:creator>liesel73</dc:creator>
<guid>http://lieselsartikel.wordpress.com/2009/11/13/ist-git-fur-die-wikipedia-geeignet/</guid>
<description><![CDATA[Scytale entwickelt unter dem Namen &#8220;Levitation&#8221;. eine Alternative zu MediaWiki. Ist das ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://scytale.name/blog/2009/11/jedem-seine-wikipedia">Scytale entwickelt unter dem Namen &#8220;Levitation&#8221;</a>. eine Alternative zu MediaWiki. Ist das eine geeignete Alternative für Wikipedia.</p>
<p>Die Sache funktioniert nur, wenn man auch ohne den Download irgendwelcher Daten mitmachen kann. Wenn durch eine solche Maßnahme die Eintrittschwelle erhöht wird, bleibt der Kreis der Autoren naturgegen klein und wird sich in der Regel wieder auf das altebekannte Spektrum (weiß, jung, computer- &#38; netzaffin) stützen. Damit ist keine allgemeine Enzyklopädie machbar, eher ein Nerdlexikon. Es ist also der Aufbau einer Serverfarm erforderlich. Hierbei ist vor allem auf die Performance zu achten. Derzeit hat die deutsche Wikipedia ca. 700.000 Edits im Monat (ca. 23.000 am Tag, 16 Edits in der Minute). Zu Hochzeiten sind das auch schon mal 40-50 Edits. Die englische WP hat 4.000.000 Edits im Monat (1,5 Edits je Sekunde). </p>
<p>Außerdem scheint in diesem System die Mitwirkung von nicht angemeldeten Benutzern unmöglich zu sein. Damit würde ein wichtiger Teil der Benutzer unwiederbringlich wegfallen.</p>
<p>Soweit die technischen Aspekte. Wie sieht es mit der Manipulierbarkeit aus. Bisher werden vor allem kontroverse Artikel von vielen Benutzer beobachtet und auf einem Stand gehalten, der von der Mehrheit akzeptiert wird. In Zukunft kann eine Gruppe von Personen eine Artikelversion puschen, die ihren Vorstellungen entspricht. In diesem System brauch&#8217; man nur genügend Accounts um eine entsprechende Manipulation zu erreichen. Die Sockenpuppenproblematik wird dann noch gefährlicher. Auch wird in diesem System die Meritokratie noch mehr gefördert. Ein Neuling hat nicht viele oder keine &#8220;Followers&#8221; und hat es demgegenüber schwer in einer vorhanden Gruppe akzeptiert zu werden. Insofern ist das System sogar wesentlich anfälliger für den Ausschluss bestimmter Personen von der Akzeptanz ihrer Arbeit. </p>
<p>Die Idee die dahinter steht ist an und für sich nicht schlecht, ob sie jedoch für den Einsatz zum Schreiben einer Enzyklopädie eignet, ist in meinen Augen nicht abschließend geklärt.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Git Over It]]></title>
<link>http://citrixblogger.org/2009/11/13/git-over-it/</link>
<pubDate>Fri, 13 Nov 2009 00:30:41 +0000</pubDate>
<dc:creator>jeffreymuir</dc:creator>
<guid>http://citrixblogger.org/2009/11/13/git-over-it/</guid>
<description><![CDATA[Git is a tool used extensively for open source projects.  It is a way of distributing source control]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://citrixblogger.wordpress.com/files/2009/11/git-logo.jpg"><img class="aligncenter size-full wp-image-531" title="git-logo" src="http://citrixblogger.wordpress.com/files/2009/11/git-logo.jpg" alt="git-logo" width="97" height="202" /></a></p>
<p><a title="Git" href="http://en.wikipedia.org/wiki/Git_(software)" target="_blank">Git</a> is a tool used extensively for open source projects.  It is a way of distributing source control instead of the typical central repository.  History has it that Linus Torvalds himself developed the original tool.</p>
<blockquote><p><em>Every Git working directory is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server.</em></p></blockquote>
<p>Why is it called git?  The theory is that <a title="Git naming" href="http://git.or.cz/gitwiki/GitFaq#Whythe.27git.27name.3F" target="_blank">Linus named it after himself</a>. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   However, no one seems to know for sure.</p>
<p>Why git?  It all started as a dispute between the Linux developers and BitKeeper.  The BitKeeper tools had been free to the community until the company charged the developers with reverse engineering their product.   The result was that developers would need to <a title="Paying for BitKeeper" href="http://en.wikipedia.org/wiki/BitKeeper#Pricing_change" target="_blank">pay to continue using BitKeeper</a>.  Given the &#8220;free&#8221; nature of Linux development this obviously did not go down well.  Linus led the project to develop an alternative and the result is git.</p>
<p>The overall good news is that git has been widely adopted even though it was only created starting in 2005.  There are several good features it has compared to the traditional source control solutions.</p>
<ul>
<li>Offline changes</li>
<li>Free (always helps)</li>
<li>Fairly simple commands</li>
<li>Distributed source management</li>
<li>Open source (for the hardcore)</li>
</ul>
<p>To get a better introduction, visit the <a title="Git home page" href="http://git-scm.com/">git homepage</a>.  As a set of examples of this homepage:</p>
<p><a href="http://citrixblogger.wordpress.com/files/2009/11/gitis.jpg"><img class="aligncenter size-full wp-image-533" title="Git Is..." src="http://citrixblogger.wordpress.com/files/2009/11/gitis.jpg" alt="Git Is..." width="339" height="309" /></a>There is also a section on quick start.  Git has two paths for creating a repository.  Either it is created from a clone from another server or it is created from scratch.</p>
<p><a href="http://citrixblogger.wordpress.com/files/2009/11/gitquickstart.jpg"><img class="aligncenter size-full wp-image-534" title="GitQuickStart" src="http://citrixblogger.wordpress.com/files/2009/11/gitquickstart.jpg" alt="GitQuickStart" width="500" height="150" /></a>Anything in parentheses is meant to be replaced with specific actions (like a directory or file).  To keep it simple, it is best to experiment with a locally created depot.  It is worth doing an easy walk through of the creation.</p>
<ol>
<li>git init</li>
<li>git add .</li>
<li>git commit -m &#8220;My message&#8221;</li>
</ol>
<p>&#8220;git init&#8221; creates the initial depot for this current project.  It creates a subdirectory (usually hidden) called .git which contains all the information that git needs to keep to manage the source.  Think of it as being where everything is kept to keep git happy.</p>
<p>&#8220;git add .&#8221; instructs git to find every single file under the current directory and add it to the staging area to be prepared for committing. It will only add files that are new or changed when used with the &#8220;.&#8221; which is a great trick.  If there are files that you do not want to automatically add, you can always change the &#8220;.gitignore&#8221; file to skip over them.  Typically the object and binaries need to be skipped if the tree is actually built.  Doing the add is really just a sign of intent.  It does not actually change anything in the git tree.  Also of note, if you change any files that have been added, you need to add them again if you want to capture the changes in the staging area.</p>
<p>There is nothing to fear with commitment.  Commit with &#8220;git commit&#8221; just means that you want to capture all the changes into one thing.  This is where it updates the local git tree and it is seen as a kind of &#8220;snapshot&#8221; of where the code is at.  Keep in mind that a commit means nothing to anyone else.  A commit is just a local thing.  This enables git to be used offline and without the need for a central server ever.</p>
<p>However, git can also be used in a distributed team.  In fact, that was the original intent.  That is the point of the other path for creating a depot on the local machine.</p>
<p>Working off of a remote depot is in this order:</p>
<ol>
<li>clone a remote depot (git clone)</li>
<li>make changes to the local files (git add)</li>
<li>commit the changes (git commit)</li>
<li>send the patch to someone that cares (git format-patch)</li>
</ol>
<p>This is not the only way to do it.  It is also possible to submit the changes back to the remote depot assuming you have been authorized.</p>
<p>Coming from a world of PVCS and Perforce, git can take some getting used to.  It seems uncommon for git to be used in commercial products in Citrix (except for Xen products).  XenApp and XenDesktop are based on Perforce.</p>
<p>There are so many different places you can go to find out more about git.  Here are some examples:</p>
<ul>
<li><a title="Gitcasts" href="http://www.gitcasts.com/" target="_blank">Gitcasts &#8211; collection of videos about git features </a></li>
<li><a title="Git book" href="http://progit.org/book/" target="_blank">Pro Git &#8211; online book about git</a></li>
<li><a title="Git Internals document" href="http://ftp.newartisans.com/pub/git.from.bottom.up.pdf" target="_blank">Git from the bottom up &#8211; understanding the internals</a></li>
<li><a title="Git documentation" href="http://git-scm.com/documentation" target="_blank">Official git documentation site</a></li>
</ul>
<p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/4XpnKHJAok8&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' /><param name='allowfullscreen' value='true' /><param name='wmode' value='transparent' /><embed src='http://www.youtube.com/v/4XpnKHJAok8&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' type='application/x-shockwave-flash' allowfullscreen='true' width='425' height='350' wmode='transparent'></embed></object></span></p>
<p>Linus Torvalds (git creator) speaks about git at Google Talks.</p>
<p>Thanks goes to Michael Wookey in Citrix Labs Sydney for being such a great git advocate.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Tim Weber: Announcing Levitation: Wikipedia into Git]]></title>
<link>http://jfnet.wordpress.com/2009/11/12/tim-weber-announcing-levitation-wikipedia-into-git/</link>
<pubDate>Thu, 12 Nov 2009 20:42:54 +0000</pubDate>
<dc:creator>jf</dc:creator>
<guid>http://jfnet.wordpress.com/2009/11/12/tim-weber-announcing-levitation-wikipedia-into-git/</guid>
<description><![CDATA[(scytale.name) &#8211; The last three days I have worked like crazy on a new project, and I’m happy ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>(scytale.name) &#8211; The last three days I have worked like crazy on a new project, and I’m happy to release its first usable version to the public now. The software is called <a title="Levitation" href="http://scytale.name/proj/levitation" target="_blank">Levitation</a> and its purpose is to convert a <a title="Mediawiki" href="http://www.mediawiki.org/" target="_blank">MediaWiki</a> database XML dump into a <a title="Git SCM" href="http://git-scm.com/" target="_blank">Git</a> repository — including the complete history. &#8230;</p>
<p><a title="Levitation: Wikipedia into Git" href="http://scytale.name/blog/2009/11/announcing-levitation" target="_blank">http://scytale.name/blog/2009/11/announcing-levitation</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Unfuddle: Hosting SVN Gratuito]]></title>
<link>http://nosoyfriky.wordpress.com/2009/11/12/unfuddle-hosting-svn-gratuito/</link>
<pubDate>Thu, 12 Nov 2009 17:52:49 +0000</pubDate>
<dc:creator>rantamplan87</dc:creator>
<guid>http://nosoyfriky.wordpress.com/2009/11/12/unfuddle-hosting-svn-gratuito/</guid>
<description><![CDATA[Buscando una alternativa a www.xp-dev.com, ya que he llegado al límite de los proyectos gratuitos (s]]></description>
<content:encoded><![CDATA[Buscando una alternativa a www.xp-dev.com, ya que he llegado al límite de los proyectos gratuitos (s]]></content:encoded>
</item>

</channel>
</rss>
