<?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>Software and Opinions &#187; git</title>
	<atom:link href="http://ianloic.com/tag/git/feed/" rel="self" type="application/rss+xml" />
	<link>http://ianloic.com</link>
	<description>from Ian McKellar</description>
	<lastBuildDate>Thu, 19 Nov 2009 22:05:43 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tracking WordPress using Git</title>
		<link>http://ianloic.com/2008/09/06/tracking-wordpress-using-git/</link>
		<comments>http://ianloic.com/2008/09/06/tracking-wordpress-using-git/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 20:40:38 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=60</guid>
		<description><![CDATA[I publish this blog through WordPress, for reasons I&#8217;ve outlined before. I run it with a custom theme and a bunch of plugins though, and I wanted a convenient way to keep my WordPress install up to date without having to reinstall everything all the time. I wanted source control for my blog install.
My first [...]]]></description>
			<content:encoded><![CDATA[<p>I publish this blog through <a href="http://www.wordpress.org/">WordPress</a>, for reasons I&#8217;ve <a href="http://ianloic.com/2008/01/12/moving-from-drupal-to-wordpress-for-blogging/">outlined before</a>. I run it with a custom theme and a bunch of plugins though, and I wanted a convenient way to keep my WordPress install up to date without having to reinstall everything all the time. I wanted source control for my blog install.</p>
<p>My first attempt involved mirroring WordPress SVN into a <a href="http://git.or.cz/">Git</a> repository on <a href="http://www.github.com/">github</a> so that I had a Git version of the SVN tree (including branches, tags and every checkin separate) and seperate repository holding the changes I&#8217;d made for my web site. This eventually failed for two reasons, first the script I was using to mirror the SVN into Git had a habit of failing in bizarre ways and secondly having two repositories confused me.</p>
<p>Yesterday I decided to update my fairly outdated WordPress install, it had been missing security fixes for some time and was one minor version behind. Since tracking SVN hadn&#8217;t worked I tried a simpler approach, a single Git repository containing a <em>master</em> branch that tracks releases and an <em>ianloic.com</em> branch to track the state of my site.</p>
<p>I set up <em>master</em> with a fresh download of WordPress 2.5 from wordpress.com, created my <em>ianloic.com</em> branch and applied the differences between my site and the <em>2.5</em> SVN tag (for all it&#8217;s failures my old approach at least let me do this easily). I switched back to the <em>master</em> branch, deleted all the files (leaving my .git directory intact) and unpacked the new WordPress 2.6.1 tarball. I checked that in (to the <em>master</em> branch), tagged it <em>2.6.1</em> and then merged that into my <em>ianloic.com</em> branch. I pushed all that to <a href="http://github.com/ianloic/wordpress/">github</a> and then checked it out on my web server (at <a href="http://www.dreamhost.com/r.cgi?235928">Dreamhost</a>).</p>
<p>Normally with Git you&#8217;re tracking just the <em>master</em> branch, but I want both <a href="http://github.com/ianloic/wordpress/commits/master"><em>master</em></a> and <a href="http://github.com/ianloic/wordpress/commits/ianloic.com"><em>ianloic.com</em></a> branches to be tracked so my .<em>git/config</em> contains:</p>
<pre>[remote "origin"]
	url = git@github.com:ianloic/wordpress.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master
[branch "ianloic.com"]
	remote = origin
	merge = refs/heads/ianloic.com</pre>
<p>Now it&#8217;s easy to track changes that I&#8217;m making to my site and update to the latest WordPress without risking losing anything. The process for updating to a new WordPress release is:</p>
<ul>
<li>on my laptop check out the <em>master</em> branch</li>
<li><em>rm</em> all the files except for <em>.git</em> from the directory</li>
<li>unpack the new release into the directory</li>
<li><em>git-add .</em> — now <em>git-status</em> will indicate what has changed, been added or removed</li>
<li><em>git-commit</em> to check in the new version of wordpress</li>
<li><em>git-tag versionnum</em> to tag which version is currently in master</li>
<li><em>git-checkout ianloic.com</em></li>
<li><em>git-merge versionnum</em> to merge the latest version into the site&#8217;s branch</li>
<li><em>git-push &#8211;all &#8211;tags</em> to push all the branches and tags to github</li>
<li>on my web server, <em>git-pull</em> to update to the latest release</li>
</ul>
<p>I end up with a tree that looks like this:</p>
<div class="mceTemp mceIEcenter">
<dl id="attachment_62" class="wp-caption aligncenter" style="width: 433px;">
<dt class="wp-caption-dt"><a href="http://ianloic.com/wp-content/uploads/2008/09/qgit.png"><img class="size-full wp-image-62" title="WordPress in Git" src="http://ianloic.com/wp-content/uploads/2008/09/qgit.png" alt="ianloic.com WordPress in Git" width="423" height="241" /></a></dt>
</dl>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2008/09/06/tracking-wordpress-using-git/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How I set up gitweb</title>
		<link>http://ianloic.com/2007/09/13/how_i_set_up_gitweb/</link>
		<comments>http://ianloic.com/2007/09/13/how_i_set_up_gitweb/#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[There don't seem to be any straight-forward documents on how to set up gitweb, the web interface to git repositories. Or at least I couldn't find any. After failing to get it working a couple of times and then succeeding a couple of times in different ways here's the recipe I came up with to get what you can see on http://git.ianloic.com/. What I have there is a bunch of git trees I'm following or working on. Perhaps not a bunch, but at least a few.
]]></description>
			<content:encoded><![CDATA[<p>There don&#8217;t seem to be any straight-forward documents on how to set up gitweb, the web interface to git repositories. Or at least I couldn&#8217;t find any. After failing to get it working a couple of times and then succeeding a couple of times in different ways here&#8217;s the recipe I came up with to get what you can see on http://git.ianloic.com/. What I have there is a bunch of git trees I&#8217;m following or working on. Perhaps not a bunch, but at least a few.<br />
<!--break--><br />
<strong>What you need:</strong></p>
<ul>
<li>a recent <a href="http://git.or.cz/">git</a> installed</li>
<li><a href="http://httpd.apache.org/">Apache</a></li>
<li>the gitweb files (from your git distribution) somewhere in your web tree</li>
</ul>
<p>Gitweb comes as part of recent git distributions in a <code>gitweb/</code> directory. This needs to be accessible from the web. I just have a git checkout in my web area and use that. When you build git you can supply all kinds of defaults that are applied when <code>gitweb.perl</code> is transformed into <code>gitweb.cgi</code>. Compile-time configuration and since you can override all that in a config file I prefer to just use <code>gitweb.perl</code> directly. My config file <code>gitweb-config.pl</code> looks like this:</p>
<pre class="prettyprint">
# where's the git binary?
$GIT = "/home/yakk/bin/git";
# where's our projects?
$projectroot = "/home/yakk/git.ianloic.com";
# what do we call our projects in the ui?
$home_link_str = "projects";
# where are the files we need for web display?
@stylesheets = ("/git/gitweb/gitweb.css");
$logo = "/git/gitweb/git-logo.png";
$favicon = "/git/gitweb/git-favicon.png";
# what do we call this site
$site_name = "Ian's git trees";
# these variables should be empty
$site_header = "";
$home_text = "";
$site_footer = "";
$projects_list = "";
$export_ok = "";
$strict_export = "";</pre>
<p>Most of that should be fairly straight-forward. <code>$GIT</code> and <code>$projectroot</code> are local filesystem paths for the git binary and the directory that contains your git trees respectively. <code>@stylesheets</code>, <code>$logo</code> and <code>$favicon</code> are URLs. In my case I just use relative URLs. You can customize most of the other variables to tweak the text to display. We have values for all these because <code>gitweb.perl</code> contains junk defaults that need to be cleared.</p>
<p>I wrote a little wrapper CGI, <code>invoke-gitweb.cgi</code> to invoke <code>gitweb.perl</code> with an environment variable to tell it to load <code>gitweb-config.pl</code>:</p>
<pre class="prettyprint">
#!/bin/sh
GITWEB_CONFIG=gitweb-config.pl exec perl git/gitweb/gitweb.perl</pre>
<p>Drop <code>gitweb-config.pl</code> and <code>invoke-gitweb.cgi</code> into the directory that contains your git trees. Make <code>invoke-gitweb.cgi</code> executable and make sure your Apache knows to execute *.cgi as cgi scripts.</p>
<p>If you load <code>invoke-gitweb.cgi</code> in your browser you should see gitweb in action! But your URLs are stupid.</p>
<p>Let&#8217;s fix that with a <code>.htaccess</code> file:</p>
<pre class="prettyprint">
RewriteEngine on
RewriteRule ^$ /invoke-gitweb.cgi
RewriteRule ^([?].*)$ /invoke-gitweb.cgi$1</pre>
<p>This will make any requests for just the directory invoke gitweb and any requests starting with <code>?</code> invoke gitweb with those arguments. It works pretty well for me.</p>
]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2007/09/13/how_i_set_up_gitweb/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
