<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Some thoughts on git</title>
	<atom:link href="http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/feed/" rel="self" type="application/rss+xml" />
	<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/</link>
	<description>KDE hacking and more</description>
	<lastBuildDate>Fri, 06 Nov 2009 05:28:04 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Erik</title>
		<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2702</link>
		<dc:creator>Erik</dc:creator>
		<pubDate>Fri, 01 May 2009 23:53:55 +0000</pubDate>
		<guid isPermaLink="false">http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2702</guid>
		<description>I don&#039;t think your criticisms of git are very well thought out. I am C++ guy but looking at the code I think it is quite well designed. I don&#039;t think it is really that hard to grasp. Some points:

-The C code seems to follow some sort of modular or OOP like design. A lot of the functions have prefixes to indicate which datatype they operate on, and they are grouped together in file with similar name.

- I fail to understand how you think git is abuse of unix philosophy. Users don&#039;t have to see individual commands since they are launched through the git command. A lot of small executables is great because you can test each individual feature separately. It also allows advance users to build new tools by chaining together executables with their own scripts.

- I wish the software I work on was designed like this and not as a monolith, where it is pretty much impossible to test individual components. Sure we had a plugin architecture at one time and some sort of modular design. Except that was all in C++ and over time people abuse it and break it to the point where plugins are so dependent on each other that they cease to be individual components.

With the git design there is less chance of this happening since the individual components are processes which can suddenly start depending on each others internals.</description>
		<content:encoded><![CDATA[<p>I don&#8217;t think your criticisms of git are very well thought out. I am C++ guy but looking at the code I think it is quite well designed. I don&#8217;t think it is really that hard to grasp. Some points:</p>
<p>-The C code seems to follow some sort of modular or OOP like design. A lot of the functions have prefixes to indicate which datatype they operate on, and they are grouped together in file with similar name.</p>
<p>- I fail to understand how you think git is abuse of unix philosophy. Users don&#8217;t have to see individual commands since they are launched through the git command. A lot of small executables is great because you can test each individual feature separately. It also allows advance users to build new tools by chaining together executables with their own scripts.</p>
<p>- I wish the software I work on was designed like this and not as a monolith, where it is pretty much impossible to test individual components. Sure we had a plugin architecture at one time and some sort of modular design. Except that was all in C++ and over time people abuse it and break it to the point where plugins are so dependent on each other that they cease to be individual components.</p>
<p>With the git design there is less chance of this happening since the individual components are processes which can suddenly start depending on each others internals.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2688</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Fri, 27 Feb 2009 13:56:40 +0000</pubDate>
		<guid isPermaLink="false">http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2688</guid>
		<description>El Anonimato es Cojonudo Says:
October 8, 2007 at 2:43 pm
&quot;Who cares about windows?&quot;

I am so sick of this kind of attitude from nieve open source hackers.</description>
		<content:encoded><![CDATA[<p>El Anonimato es Cojonudo Says:<br />
October 8, 2007 at 2:43 pm<br />
&#8220;Who cares about windows?&#8221;</p>
<p>I am so sick of this kind of attitude from nieve open source hackers.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: RealityMistress</title>
		<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2669</link>
		<dc:creator>RealityMistress</dc:creator>
		<pubDate>Thu, 24 Jul 2008 11:40:01 +0000</pubDate>
		<guid isPermaLink="false">http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2669</guid>
		<description>(cross-posting my comment from the blog here in case I ever want to find it again) I don&#039;t see the problem with the source code. I had the opposite experience, really. I wanted to add a feature to git. I found it fairly easy to figure out where to put it and how to write it. I did make a couple of mistakes in my initial version (which were pointed out to me early). Making git do what I wanted it to do was easy. The hard part was getting it accepted. Junio has got to be one of the busiest software volunteers on the planet, but he meticulously reviewed my code for both style and function. I had to send it through several times and wrote *way* more unit tests than code. In the end, it made my confidence *really* high.</description>
		<content:encoded><![CDATA[<p>(cross-posting my comment from the blog here in case I ever want to find it again) I don&#8217;t see the problem with the source code. I had the opposite experience, really. I wanted to add a feature to git. I found it fairly easy to figure out where to put it and how to write it. I did make a couple of mistakes in my initial version (which were pointed out to me early). Making git do what I wanted it to do was easy. The hard part was getting it accepted. Junio has got to be one of the busiest software volunteers on the planet, but he meticulously reviewed my code for both style and function. I had to send it through several times and wrote *way* more unit tests than code. In the end, it made my confidence *really* high.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2667</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Fri, 18 Jul 2008 20:05:53 +0000</pubDate>
		<guid isPermaLink="false">http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2667</guid>
		<description>I believe the --depth clone option will give you that partial checkout you are looking for.</description>
		<content:encoded><![CDATA[<p>I believe the &#8211;depth clone option will give you that partial checkout you are looking for.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rick</title>
		<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2664</link>
		<dc:creator>Rick</dc:creator>
		<pubDate>Thu, 03 Jul 2008 12:44:09 +0000</pubDate>
		<guid isPermaLink="false">http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2664</guid>
		<description>@Quintesse: If you want Mercurial support for Eclipse try  http://www.vectrace.com/mercurialeclipse/

It has advanced A LOT in very short time, sure you will find it quite feature complete.</description>
		<content:encoded><![CDATA[<p>@Quintesse: If you want Mercurial support for Eclipse try  <a href="http://www.vectrace.com/mercurialeclipse/" rel="nofollow">http://www.vectrace.com/mercurialeclipse/</a></p>
<p>It has advanced A LOT in very short time, sure you will find it quite feature complete.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dustin</title>
		<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2663</link>
		<dc:creator>Dustin</dc:creator>
		<pubDate>Thu, 03 Jul 2008 04:21:31 +0000</pubDate>
		<guid isPermaLink="false">http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2663</guid>
		<description>I don&#039;t see the problem with the source code.  I had the opposite experience, really.

I wanted to add a feature to git.  I found it fairly easy to figure out where to put it and how to write it.  I did make a couple of mistakes in my initial version (which were pointed out to me early).  Making git do what I wanted it to do was easy.  The hard part was getting it accepted.

Junio has got to be one of the busiest software volunteers on the planet, but he meticulously reviewed my code for both style and function.  I had to send it through several times and wrote *way* more unit tests than code.  In the end, it made my confidence *really* high.</description>
		<content:encoded><![CDATA[<p>I don&#8217;t see the problem with the source code.  I had the opposite experience, really.</p>
<p>I wanted to add a feature to git.  I found it fairly easy to figure out where to put it and how to write it.  I did make a couple of mistakes in my initial version (which were pointed out to me early).  Making git do what I wanted it to do was easy.  The hard part was getting it accepted.</p>
<p>Junio has got to be one of the busiest software volunteers on the planet, but he meticulously reviewed my code for both style and function.  I had to send it through several times and wrote *way* more unit tests than code.  In the end, it made my confidence *really* high.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pcapriotti</title>
		<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2662</link>
		<dc:creator>pcapriotti</dc:creator>
		<pubDate>Wed, 18 Jun 2008 00:50:03 +0000</pubDate>
		<guid isPermaLink="false">http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2662</guid>
		<description>@David
Of course browsing through the code of a large and complex system is always somewhat painful. I was just reporting that my experience with it has been particularly unpleasant if I compare it with the effort needed to understand other (also big and complex) code bases that I worked with.
About the exit on failure thing, it&#039;s not about spawning a subprocess. Exiting from a subprocess is ok. The point is that if you call exit in a library, the calling process will terminate, and that&#039;s almost never what you want.</description>
		<content:encoded><![CDATA[<p>@David<br />
Of course browsing through the code of a large and complex system is always somewhat painful. I was just reporting that my experience with it has been particularly unpleasant if I compare it with the effort needed to understand other (also big and complex) code bases that I worked with.<br />
About the exit on failure thing, it&#8217;s not about spawning a subprocess. Exiting from a subprocess is ok. The point is that if you call exit in a library, the calling process will terminate, and that&#8217;s almost never what you want.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David</title>
		<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2661</link>
		<dc:creator>David</dc:creator>
		<pubDate>Tue, 17 Jun 2008 23:42:32 +0000</pubDate>
		<guid isPermaLink="false">http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2661</guid>
		<description>With reference to your comments about Git&#039;s source code, I do not believe your arguments are valid. Unix philosophy is about many things, one of them is isolating functionality into small programs so that errors in one program do not corrupt the others. Git does this. Another is emphasizing the importance of data structures in system design. Git does this.

Large functions are not correlated with higher defect rates (http://www.informationweek.com/news/software/open_source/showArticle.jhtml?articleID=207801458). You can watch Steve McConnell wrestle with this in CC/2e if you care to read about it. He suggests giving up at around 150 lines (and I tend to agree), but I think this has more to do with wearing out your page up/page down keys than with code quality.

Why are you trying to understand the source code without a serious investment of time and energy? There are two possibilities: A) (most likely) have an axe to grind and are trying very hard to find problems with Git or B) (less likely but possible) you have very serious misconceptions about software design. Large software systems are inherently complex, and you have to make a major investement of time and energy in order to understand them. You say browsing the source files is painful...of course it is painful! It is painful because you are not familiar with the rules of the Git project, and that pain is your mind stretching to fathom the
vastness of the new mental terrain.

You say the API is lacking in part because some of the programs call exit() on failure. You should learn how to open a pipe to a subprocess. Try this:
$ python
&gt;&gt;&gt; import subprocess
&gt;&gt;&gt; help(subprocess)

Git is not perfect, but your criticisms are very weak.</description>
		<content:encoded><![CDATA[<p>With reference to your comments about Git&#8217;s source code, I do not believe your arguments are valid. Unix philosophy is about many things, one of them is isolating functionality into small programs so that errors in one program do not corrupt the others. Git does this. Another is emphasizing the importance of data structures in system design. Git does this.</p>
<p>Large functions are not correlated with higher defect rates (<a href="http://www.informationweek.com/news/software/open_source/showArticle.jhtml?articleID=207801458)" rel="nofollow">http://www.informationweek.com/news/software/open_source/showArticle.jhtml?articleID=207801458)</a>. You can watch Steve McConnell wrestle with this in CC/2e if you care to read about it. He suggests giving up at around 150 lines (and I tend to agree), but I think this has more to do with wearing out your page up/page down keys than with code quality.</p>
<p>Why are you trying to understand the source code without a serious investment of time and energy? There are two possibilities: A) (most likely) have an axe to grind and are trying very hard to find problems with Git or B) (less likely but possible) you have very serious misconceptions about software design. Large software systems are inherently complex, and you have to make a major investement of time and energy in order to understand them. You say browsing the source files is painful&#8230;of course it is painful! It is painful because you are not familiar with the rules of the Git project, and that pain is your mind stretching to fathom the<br />
vastness of the new mental terrain.</p>
<p>You say the API is lacking in part because some of the programs call exit() on failure. You should learn how to open a pipe to a subprocess. Try this:<br />
$ python<br />
&gt;&gt;&gt; import subprocess<br />
&gt;&gt;&gt; help(subprocess)</p>
<p>Git is not perfect, but your criticisms are very weak.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jim Keller</title>
		<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2660</link>
		<dc:creator>Jim Keller</dc:creator>
		<pubDate>Wed, 28 May 2008 20:38:15 +0000</pubDate>
		<guid isPermaLink="false">http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2660</guid>
		<description>&gt;Who cares about windows?

You have to understand that companies have a variety of people of varying skillsets who all need to use the repository. It&#039;s not reasonable to ask a graphic designer or an HTML/CSS coder to move from Windows to UNIX and use a command line tool to do their commits. 

A lot of times, the programmer ego comes into play and people say &quot;if so and so can&#039;t figure it out, they&#039;re just dumb/ bad at their job/etc&quot;, but it doesn&#039;t make sense to spend significant time and money training people to use an immature system just because it&#039;s theoretically the latest and greatest.</description>
		<content:encoded><![CDATA[<p>&gt;Who cares about windows?</p>
<p>You have to understand that companies have a variety of people of varying skillsets who all need to use the repository. It&#8217;s not reasonable to ask a graphic designer or an HTML/CSS coder to move from Windows to UNIX and use a command line tool to do their commits. </p>
<p>A lot of times, the programmer ego comes into play and people say &#8220;if so and so can&#8217;t figure it out, they&#8217;re just dumb/ bad at their job/etc&#8221;, but it doesn&#8217;t make sense to spend significant time and money training people to use an immature system just because it&#8217;s theoretically the latest and greatest.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pcapriotti</title>
		<link>http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2209</link>
		<dc:creator>pcapriotti</dc:creator>
		<pubDate>Sat, 08 Dec 2007 10:48:00 +0000</pubDate>
		<guid isPermaLink="false">http://pcapriotti.wordpress.com/2007/10/08/some-thoughts-on-git/#comment-2209</guid>
		<description>That&#039;s good to hear. I hope libgit-thin gets more attention, because it could be really important for projects like, for example, StGIT, or the git plugin for Trac, which at the moment is unacceptably slow.</description>
		<content:encoded><![CDATA[<p>That&#8217;s good to hear. I hope libgit-thin gets more attention, because it could be really important for projects like, for example, StGIT, or the git plugin for Trac, which at the moment is unacceptably slow.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
