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

<channel>
	<title>Pervasive Code &#187; git</title>
	<atom:link href="http://www.pervasivecode.com/blog/category/git/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pervasivecode.com/blog</link>
	<description>Jamie Flournoy's Software Development Blog</description>
	<lastBuildDate>Mon, 26 Jul 2010 05:29:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>On Anthropomorphizing Code</title>
		<link>http://www.pervasivecode.com/blog/2008/08/27/on-anthropomorphizing-code/</link>
		<comments>http://www.pervasivecode.com/blog/2008/08/27/on-anthropomorphizing-code/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 17:13:30 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2008/08/27/on-anthropomorphizing-code/</guid>
		<description><![CDATA[I haven&#8217;t read enough Heinlein to be sure that I like the guy, but he gets major brownie points for TANSTAAFL. jwz gets brownie points for several reasons, not the least of which is for having written, Linux is only free if your time has no value.
I try to avoid the mistake of saying that [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t read enough Heinlein to be sure that I like the guy, but he gets major brownie points for <a href="http://en.wikipedia.org/wiki/TANSTAAFL">TANSTAAFL</a>. <a href="http://en.wikipedia.org/wiki/Jamie_Zawinski">jwz</a> gets brownie points for several reasons, not the least of which is for having written, <a href="http://www.jwz.org/doc/linux.html">Linux is only free if your time has no value</a>.</p>
<p>I try to avoid the mistake of saying that an inanimate object or non-corporeal hunk of information &#8220;needs&#8221; something, but I fail sometimes. For example, I said &#8220;<a href="http://www.pervasivecode.com/blog/2007/10/04/activerecord-the-visual-basic-of-object-relational-mappers/">I just think that ActiveRecord needs to support the low-level and middle-level abstractions better.</a>&#8221; This is silly; of course, code doesn&#8217;t need anything per se.</p>
<p>You may think I&#8217;m being pedantic by saying this, but people commonly mix up whose needs are really being described. What I should have said was, &#8220;I would be happy with ActiveRecord if it supported&#8230;&#8221;, clearly indicating that the need was mine. I have a problem, and this code doesn&#8217;t solve it fully. And I understand that I, and maybe some like-minded individuals, bear the burden of actually trying to solve this problem. If I sit and wait and it gets fixed, that&#8217;s great, but it&#8217;s not fair for me to demand that the universe solve all my problems for me just because it has solved a few of them already without me doing any work.<br />
<span id="more-80"></span><br />
The reason for this is that although the software is free to acquire, it still is not a free lunch, and doesn&#8217;t magically solve all of your problems for you. You still need someone to fill the role of the vendor in proprietary closed-source software, who will solve your problems because they&#8217;re being paid to do so. To paraphrase a quote by <a href="http://en.wikipedia.org/wiki/Warren_Buffett">Warren Buffett</a> about poker and identifying the patsy&#8230; if you&#8217;re using open source software and you don&#8217;t know who the vendor is, it&#8217;s you.</p>
<p>That&#8217;s not necessarily a bad thing. I use a lot of open source software, and quite often, there&#8217;s a big community of people who have a strong financial interest in making each particular project better. If you can manage to find a huge group of people who have no choice but to invest in something that you need, and who give it away for free, you can just freeload. I donate cash to these organizations, since I&#8217;m really not interested in hacking on every single app that I use, and because I&#8217;d hate to have to pay commercial license fees for this stuff. Or, you can donate hacking effort, or documentation, or some other form of enhancement or promotion. Or you can just mooch. But no matter which path you choose, you can&#8217;t reasonably point your finger at someone who is giving you something for free, and tell them that they owe you something else.</p>
<p>It&#8217;s terribly frustrating when someone makes a decision you don&#8217;t agree with, such as to release something with a known bug, which later bites you. Or, they might make design decisions that you disagree with. Don&#8217;t like it? Re-read that &#8220;as-is&#8221; clause and then ask for a refund of the $0 you paid. It&#8217;s only fair: you wanna mooch, you get what someone else gave you, which is not necessarily what you wanted. Feel free to fix it yourself.</p>
<p>Let me be clear here: bug reports are good. Discussing defects is good. Criticism of the &#8220;this sucks and could be better by doing this&#8221; variety is good. Demanding a free fix to a free program is bad.</p>
<p>This is where some maintainers of open source programs go wrong. Bugs are useful information, assuming that they are written properly. Patches to fix those bugs are even more valuable, and a bug with an attached patch and regression test code is fabulous. But there are still human gatekeepers who have to keep their project from being changed too drastically by overeager contributors. This is a tough job, because these gatekeepers have to try and keep the community happy: accept sane and useful patches, but avoid bloat and major changes in functionality that break regular users&#8217; experience with the code. I&#8217;ve encountered management failure in both directions: too reluctant to accept change, or too willing to add random junk.</p>
<p>But the more common problem I&#8217;ve seen is rejection of well-written bug reports that nobody feels like fixing. Something like &#8220;these bugs are verified but old and nobody feels like fixing them so I&#8217;m closing them.&#8221; That smells to me like an identity crisis: are you a vendor, or a project steward? If a problem has existed for years and still exists in the current code, and users are complaining, but no one is fixing it, that&#8217;s a live bug. If you close it, it will probably never get fixed. But your bug list will look so much prettier! &#8220;It&#8217;s always been like that&#8221; is not a fix. <i>This happens all the time</i> in open source projects. Although you have to draw the line somewhere to keep out random stupid bugs that will inevitably be submitted, the temptation is strong to just <a href="http://en.opensuse.org/Bug_Status_WONTFIX">WONTFIX</a> anything that you don&#8217;t personally care about. Why even have a public bug tracker if you&#8217;re going to do this?</p>
<p>This is toxic because it says to the community, &#8220;we are not interested in your input if it makes work for us&#8221;. But that&#8217;s just a sign of steward/vendor confusion. Behavior like that leads to forking, so that someone more receptive to community feedback can be put into a position of stewardship. Maybe that&#8217;s the goal of the maintainers: to release something in order to trick other people into fixing bugs for the original authors, and if they can&#8217;t use that fix, too bad. Well, in that case forking it is perfectly reasonable.</p>
<p>The flip side of steward/vendor confusion is the confusion that leads users of free open source software to believe that the project stewards are a vendor, or that the code &#8220;needs&#8221; something because they find it lacking. &#8220;I need this defect fixed (in order to do X Y and Z)&#8221; becomes &#8220;the defect needs to be fixed.&#8221;</p>
<p>If you pay a vendor thousands of dollars for a program that they claim will do something and it doesn&#8217;t, you have a valid claim, and can take them to court. If you upgrade your operating system and that program you paid for stops working, you are within reason to expect that the vendor will sell you an upgrade that does in a reasonable amount of time, unless they have told you that they won&#8217;t do so, or that there&#8217;s a migration path to something else. But if you pay nothing, then anything you get is upside, and anything you don&#8217;t get was something you didn&#8217;t have anyway. Your only reasonable expectations are what they told you to expect, and quite a lot of programs say that they promise no suitability to any purpose whatsoever.</p>
<p>In light of all this, I really like the idea behind <a href="http://github.com/">GitHub</a>, because it makes forking extremely cheap. The person releasing software as open source need not be a community steward too. In this model, anyone can appoint themselves a steward, without permission from anyone else. Any disagreements can be easily resolved by forking and patching, and in fact that&#8217;s the de facto means of patching: just tell the other folks with forks of the same software that you made an improvement that they might care to incorporate into their version, and here&#8217;s where your patched repository is. Some folks will just patch one time; others will fix a few things; others will try and maintain the best combination of other folks&#8217; patches.</p>
<p>In a few years, <a href="http://git.or.cz/">Git</a> is going to be recognized as the tool that made distributed version control popular, and easy forking common, in the open source world. The frustrations inherent in the tug of war between personal needs and community stewardship will be replaced with the challenge of finding the best version of a widely forked program. But we&#8217;re much better at trusting the recommendation of a friend or authority than we are at managing a cathedral that &#8220;needs&#8221; to be a bazaar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2008/08/27/on-anthropomorphizing-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts about using Git for closed source projects</title>
		<link>http://www.pervasivecode.com/blog/2008/04/14/thoughts-about-using-git-for-closed-source-projects/</link>
		<comments>http://www.pervasivecode.com/blog/2008/04/14/thoughts-about-using-git-for-closed-source-projects/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 16:11:41 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2008/04/14/thoughts-about-using-git-for-closed-source-projects/</guid>
		<description><![CDATA[Git is getting a lot of press in the open source world lately, but hasn&#8217;t got much traction in the closed source corporate development world. There&#8217;s a reason for this, and it&#8217;s more than conservatism on the part of the corporate developers. Git (or any DVCS, really) embodies a development culture that isn&#8217;t very enterprise-y.

This [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://git.or.cz/">Git</a> is getting a lot of press in the open source world lately, but hasn&#8217;t got much traction in the closed source corporate development world. There&#8217;s a reason for this, and it&#8217;s more than conservatism on the part of the corporate developers. Git (or any DVCS, really) embodies a development culture that isn&#8217;t very enterprise-y.<br />
<span id="more-66"></span><br />
This is something that I&#8217;ve noticed when talking to some of my developer friends who are working on closed source projects, in software companies or in teams building in-house custom applications. Big companies like central control, hierarchy, policies, and audit trails, and centralized software version control systems fit this very well. You get one big server in the sky that has all the source code, central control over permissions, a log of changes, and usually a way to add pre and post commit hooks to integrate the VCS repo with related systems.</p>
<p>With a DVCS, everybody can be a lone ranger, unless you build a process on top that puts back these features (i.e. a remote repository that everybody pushes to). This is something that many of the introductory documents I&#8217;ve seen regarding Git try to downplay &#8212; you don&#8217;t need a central repository, yippee! Just pass changes around from developer to developer &#8212; but while that may thrill the solo coder hacking on his laptop on a long flight, it isn&#8217;t music to the ears of a CIO.</p>
<p>In Git&#8217;s case, there is no central list of version numbers, and the history can be altered using <code>git-rebase</code> and <code>git-commit --amend</code>. Do you really need to see the precise history of every change ever made to the code? Perhaps you think you do because it gets screwed up so easily in some version control tools, and you need to at least be able to backtrack and manually unsnarl a really big screw-up. In that case, you probably don&#8217;t need it, as long as the version control tool can be trusted.</p>
<p>Or maybe you&#8217;re guarding against human error, and what you really want is granular remote backups. Just as you can use <code>svnadmin dump</code> and <code>svnadmin load</code> to intentionally truncate the history that the repository knows about, you could use <code>git rebase</code> to squash a bunch of commits together into a single big change, and thereby lose the ability to go back to one of those intermediate steps. So you probably should think about archiving the full-granularity repository before you consolidate the old historical steps for developer convenience reasons. And even if you&#8217;re a lone ranger, you should think about using rsync or duplicity to regularly put your local .git repositories someplace safe, or push to a remote git repository that no one else has access to, or both.</p>
<p>One solution to make Git more enterprise-friendly <a href="http://www.kernel.org/pub/software/scm/git/docs/git-svn.html">git-svn</a>, which gives you the tool integration and centralness of Subversion, with the local branch/merge and offline commit benefits of Git (which are <i>very very nice</i>). I haven&#8217;t used it but I am told that it works very well. It&#8217;s also a very low-risk way to try out Git, since you can just check your changes in and go back to using Subversion at any time.</p>
<p>Git is challenging to learn, partly because the command language is not very intuitive, and partly because the folks documenting it so far are obsessed with explaining how radically new and different it is rather than how you probably will want to use it. And for folks reading this documentation, the &#8220;look how different your process could be&#8221; examples are not necessarily very appealing, since the benefits gained by using a centralized VCS are not addressed.</p>
<p>Still, I think Git has enough hype around it that in a year or two there will be some very slick, usable tools that conceal the complex inner workings that you currently have to understand well in order to be productive. They may also include features that make backups or the setup and shared use of a remote repository easy. So if you&#8217;re not convinced that it&#8217;s time to migrate Git now, just wait. It will probably come to where you are eventually.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2008/04/14/thoughts-about-using-git-for-closed-source-projects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Subversion 1.5 will include merge tracking</title>
		<link>http://www.pervasivecode.com/blog/2007/07/08/subversion-15-will-include-merge-tracking/</link>
		<comments>http://www.pervasivecode.com/blog/2007/07/08/subversion-15-will-include-merge-tracking/#comments</comments>
		<pubDate>Sun, 08 Jul 2007 16:30:10 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Subversion]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/07/08/subversion-15-will-include-merge-tracking/</guid>
		<description><![CDATA[Despite Linus&#8217; strident criticism of Subversion (in the 70 minute video he accuses Subversion, and then anybody who wrote it, and then anybody who likes it, of being ugly and stupid) I still use Subversion and I like it. Clearly compared to Linus I am ugly and stupid. OK fine. But I&#8217;m not switching to [...]]]></description>
			<content:encoded><![CDATA[<p>Despite Linus&#8217; <a href="http://www.youtube.com/watch?v=4XpnKHJAok8">strident criticism</a> of Subversion (in the 70 minute video he accuses Subversion, and then anybody who wrote it, and then anybody who likes it, of being ugly and stupid) I still use Subversion and I like it. Clearly compared to Linus I am ugly and stupid. OK fine. But I&#8217;m not switching to <a href="http://git.or.cz/">git</a> now because my tiny teams have been fine with Subversion. Maybe later I&#8217;ll give git a whirl.<br />
<span id="more-33"></span><br />
Nevertheless, the ugliest-stupidest part of using Subversion in my experience is merging &#8211; specifically, repeated merging. It takes caution on the part of the person doing the merge to avoid re-merging the same changes, which sucks. Imagine everybody you&#8217;re developing with, including yourself when you&#8217;re on the phone and trying to wrap up some changes before running out the door for whatever reason, and you&#8217;ll realize that having a tool that can rapidly shoot you in the foot in a way that may take hours to unwind, but more importantly, days to recognize and identify, is scary. (Consider that old, replaced code, and the old tests that go with it, might be put back into your current source tree, and your automated tests would be happy since they all got merged back in as one big lump. You&#8217;d have to look for specific changes and features you had made in order to notice that they had regressed back to an earlier version without you meaning to do that. Eek!)</p>
<p>Well, <a href="http://blogs.open.collab.net/svn/2007/05/the_subversion__1.html">they&#8217;re fixing it</a>. I dunno if it&#8217;s gonna be perfect, but at least they&#8217;re addressing the problem and seem to understand what the needs of the masses are. So I&#8217;m optimistic.</p>
<p>And yeah, at some point I&#8217;ll probably check out Git. But not until Subversion irritates me more than it does today. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/07/08/subversion-15-will-include-merge-tracking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
