<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Git on vnykmshr</title><link>https://blog.vnykmshr.com/writing/tags/git/</link><description>Recent content in Git on vnykmshr</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 11 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.vnykmshr.com/writing/tags/git/index.xml" rel="self" type="application/rss+xml"/><item><title>Git log as archaeology</title><link>https://blog.vnykmshr.com/writing/git-log-as-archaeology/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.vnykmshr.com/writing/git-log-as-archaeology/</guid><description>&lt;p&gt;The source file you&amp;rsquo;re looking at is a summary. The history is the full document. Most of the time you don&amp;rsquo;t care &amp;ndash; you&amp;rsquo;re working on the current shape of the code and the summary is enough. But sometimes the current shape stops answering.&lt;/p&gt;
&lt;p&gt;I reach for git history during RCAs, bug hunts, and questions the code can&amp;rsquo;t answer from its current form. Why is this file organised this way? Who introduced this assumption? When did this fallback stop being a fallback and start being the main path? The commit log knows. The current source doesn&amp;rsquo;t.&lt;/p&gt;</description></item><item><title>Git history with Gource</title><link>https://blog.vnykmshr.com/writing/git-history-with-gource/</link><pubDate>Sat, 07 Jun 2014 00:00:00 +0000</pubDate><guid>https://blog.vnykmshr.com/writing/git-history-with-gource/</guid><description>&lt;p&gt;I&amp;rsquo;d been watching YouTube videos of &lt;a href="https://code.google.com/p/gource/"&gt;Gource&lt;/a&gt; visualizations &amp;ndash; &lt;a href="https://www.youtube.com/watch?v=GTMC3g2Xy8c"&gt;Git&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=ZX0xCWANfW4"&gt;Homebrew&lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=vsMUTsFdzr4"&gt;Node.js&lt;/a&gt;. Each commit becomes a moment in time, files branch out like a digital organism, contributors appear and disappear. Months of development condensed into a few minutes of organic growth.&lt;/p&gt;
&lt;p&gt;I pointed it at my blog&amp;rsquo;s git repository. Here&amp;rsquo;s &lt;a href="https://www.youtube.com/watch?v=jubNs7aXEvQ"&gt;what came out&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="setup"&gt;Setup&lt;/h2&gt;
&lt;p&gt;On macOS, Homebrew handles everything:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install gource ffmpeg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The command that generates a video from a git repo:&lt;/p&gt;</description></item><item><title>History as communication</title><link>https://blog.vnykmshr.com/writing/git-history-as-communication/</link><pubDate>Mon, 18 Feb 2013 00:00:00 +0000</pubDate><guid>https://blog.vnykmshr.com/writing/git-history-as-communication/</guid><description>&lt;p&gt;Most teams treat git history as a side effect. You work, you commit, whatever ends up in the log is the log. Merge commits pile up. &amp;ldquo;WIP&amp;rdquo; and &amp;ldquo;fix typo&amp;rdquo; and &amp;ldquo;actually working now&amp;rdquo; sit next to meaningful changes. The history is technically accurate but communicates nothing.&lt;/p&gt;
&lt;p&gt;The alternative: treat history as something you write, not something that happens to you. The commit log is the one piece of documentation that&amp;rsquo;s always in sync with the code &amp;ndash; because it &lt;em&gt;is&lt;/em&gt; the code&amp;rsquo;s changelog. If the history is incoherent, you&amp;rsquo;ve wasted that.&lt;/p&gt;</description></item><item><title>Starting over</title><link>https://blog.vnykmshr.com/writing/starting-over/</link><pubDate>Tue, 05 Feb 2013 00:00:00 +0000</pubDate><guid>https://blog.vnykmshr.com/writing/starting-over/</guid><description>&lt;p&gt;Every now and then you want to start over. This blog was long overdue for it. Feels good to tear it down and rebuild.&lt;/p&gt;
&lt;p&gt;The old setup was WordPress on &lt;a href="http://nearlyfreespeech.net/"&gt;NearlyFreeSpeech.net&lt;/a&gt;. NFSN deserves credit &amp;ndash; their pay-as-you-go model is honest and the value is real. But WordPress started feeling like a constraint. I spend my days building custom solutions. Using a one-size-fits-all CMS for my own site felt wrong.&lt;/p&gt;
&lt;p&gt;So I built a blog engine.&lt;/p&gt;</description></item></channel></rss>