<?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/"
		>
<channel>
	<title>Comments on: I hate git</title>
	<atom:link href="http://jordi.inversethought.com/blog/i-hate-git/feed/" rel="self" type="application/rss+xml" />
	<link>http://jordi.inversethought.com/blog/i-hate-git/</link>
	<description>Mathematician. Free Coder. Hacker-errant.</description>
	<lastBuildDate>Thu, 18 Apr 2013 19:37:18 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<item>
		<title>By: Jordi</title>
		<link>http://jordi.inversethought.com/blog/i-hate-git/#comment-15164</link>
		<dc:creator>Jordi</dc:creator>
		<pubDate>Thu, 18 Apr 2013 19:37:18 +0000</pubDate>
		<guid isPermaLink="false">http://jordi.inversethought.com/blog/2011/01/03/i-hate-git/#comment-15164</guid>
		<description><![CDATA[Oh, hey. I was just going through my moderation queue and found this comment got lost in there.

I am not an idiot for disliking git. Neither are these people:

http://blog.schwern.net/2013/02/28/git-text-adventure/
http://ventrellathing.wordpress.com/2013/01/25/git-a-nightmare-of-mixed-metaphors/
http://stevelosh.com/blog/2013/04/git-koans/

That git has an absolutely horrid CLI is a well-recognised fact. I was just one of the first ones to blog about it. :-)]]></description>
		<content:encoded><![CDATA[<p>Oh, hey. I was just going through my moderation queue and found this comment got lost in there.</p>
<p>I am not an idiot for disliking git. Neither are these people:</p>
<p><a href="http://blog.schwern.net/2013/02/28/git-text-adventure/" rel="nofollow">http://blog.schwern.net/2013/02/28/git-text-adventure/</a><br />
<a href="http://ventrellathing.wordpress.com/2013/01/25/git-a-nightmare-of-mixed-metaphors/" rel="nofollow">http://ventrellathing.wordpress.com/2013/01/25/git-a-nightmare-of-mixed-metaphors/</a><br />
<a href="http://stevelosh.com/blog/2013/04/git-koans/" rel="nofollow">http://stevelosh.com/blog/2013/04/git-koans/</a></p>
<p>That git has an absolutely horrid CLI is a well-recognised fact. I was just one of the first ones to blog about it. :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg A</title>
		<link>http://jordi.inversethought.com/blog/i-hate-git/#comment-14085</link>
		<dc:creator>Greg A</dc:creator>
		<pubDate>Fri, 29 Mar 2013 01:43:53 +0000</pubDate>
		<guid isPermaLink="false">http://jordi.inversethought.com/blog/2011/01/03/i-hate-git/#comment-14085</guid>
		<description><![CDATA[You&#039;re an idiot.  That&#039;s alright, we all start somewhere.  Git *does* allow you to shoot yourself in the foot.  This is something true of git.  Maybe it would be even better than it is if it did not, but I somehow doubt it.  As a rule, my first time trying something radical with git, I do it on a scratch repository.  --mirror sure sounds radical to me, I would definitely not do that to a live useful upstream for the first time ever.

I&#039;ve been firing rounds pretty madly with git for 2 years now and I have yet to hit my feet (or lose any data). I did manage to lose a reference to a commit a few times.  I wanted to use git reset --hard and --soft as a hamfisted technique for editing history.  So I dug myself a hole in my scratch repository.  At the bottom of the hole, I found git-reflog, and brought back my test commits easy pie.  I made sure I knew how to climb out of the hole before I started using git-reset on important repositories.

I once walked into an irc channel and they told me to run &quot;cat /dev/zero &gt; /dev/sda&quot; and I did it.  I mean, cats are cute and don&#039;t sound like delete at all.  I didn&#039;t want to admit I was an idiot, instead I said that cats are stupid.

Actually, that never happened, I just didn&#039;t want you to feel like you&#039;re alone.

I don&#039;t know anything about hg.  I have the feeling it is feature-wise comparable to git.  I am, however, absolutely irretrievably in love with git because it is *SO*MUCH* better than rcs, cvs, or svn (and don&#039;t trashtalk them -- rcs is a million times better than &quot;cp foo.c foo.c.bak&quot;).  I just got exposed to bzr for the first time, which I also thought was feature-comparable to git.  Oh god, my hatred for bzr overflows.  You know the tutorial-approved technique for branching a launchpad bzr repository winds up making a completely new copy of the history on your local computer.  So then you have two complete local copies of the history, one that you can sync with the upstream trunk, and the other which is only good for your branch.  There is a way around it, but it is an advanced topic instead of the regular advertised way of interacting with the thing.  Git fucking rocks.]]></description>
		<content:encoded><![CDATA[<p>You&#8217;re an idiot.  That&#8217;s alright, we all start somewhere.  Git *does* allow you to shoot yourself in the foot.  This is something true of git.  Maybe it would be even better than it is if it did not, but I somehow doubt it.  As a rule, my first time trying something radical with git, I do it on a scratch repository.  &#8211;mirror sure sounds radical to me, I would definitely not do that to a live useful upstream for the first time ever.</p>
<p>I&#8217;ve been firing rounds pretty madly with git for 2 years now and I have yet to hit my feet (or lose any data). I did manage to lose a reference to a commit a few times.  I wanted to use git reset &#8211;hard and &#8211;soft as a hamfisted technique for editing history.  So I dug myself a hole in my scratch repository.  At the bottom of the hole, I found git-reflog, and brought back my test commits easy pie.  I made sure I knew how to climb out of the hole before I started using git-reset on important repositories.</p>
<p>I once walked into an irc channel and they told me to run &#8220;cat /dev/zero &gt; /dev/sda&#8221; and I did it.  I mean, cats are cute and don&#8217;t sound like delete at all.  I didn&#8217;t want to admit I was an idiot, instead I said that cats are stupid.</p>
<p>Actually, that never happened, I just didn&#8217;t want you to feel like you&#8217;re alone.</p>
<p>I don&#8217;t know anything about hg.  I have the feeling it is feature-wise comparable to git.  I am, however, absolutely irretrievably in love with git because it is *SO*MUCH* better than rcs, cvs, or svn (and don&#8217;t trashtalk them &#8212; rcs is a million times better than &#8220;cp foo.c foo.c.bak&#8221;).  I just got exposed to bzr for the first time, which I also thought was feature-comparable to git.  Oh god, my hatred for bzr overflows.  You know the tutorial-approved technique for branching a launchpad bzr repository winds up making a completely new copy of the history on your local computer.  So then you have two complete local copies of the history, one that you can sync with the upstream trunk, and the other which is only good for your branch.  There is a way around it, but it is an advanced topic instead of the regular advertised way of interacting with the thing.  Git fucking rocks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jordi</title>
		<link>http://jordi.inversethought.com/blog/i-hate-git/#comment-12338</link>
		<dc:creator>Jordi</dc:creator>
		<pubDate>Wed, 13 Feb 2013 14:04:08 +0000</pubDate>
		<guid isPermaLink="false">http://jordi.inversethought.com/blog/2011/01/03/i-hate-git/#comment-12338</guid>
		<description><![CDATA[If you&#039;re already a seasoned git user, your first impression with hg is that it&#039;s &quot;limited&quot; and can&#039;t do the same things as git. This is because hg tries to be conservative about the UI it presents to users, and advanced or dangerous features are disabled by default. Hg can do everything that git can do, but you have to know how to enable that feature, and you have to realise that git uses a completely different set of terminology than any other VCS. By contrast, works really hard to use terminology that is evocative and consistent with other VCSes.]]></description>
		<content:encoded><![CDATA[<p>If you&#8217;re already a seasoned git user, your first impression with hg is that it&#8217;s &#8220;limited&#8221; and can&#8217;t do the same things as git. This is because hg tries to be conservative about the UI it presents to users, and advanced or dangerous features are disabled by default. Hg can do everything that git can do, but you have to know how to enable that feature, and you have to realise that git uses a completely different set of terminology than any other VCS. By contrast, works really hard to use terminology that is evocative and consistent with other VCSes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sam Watkins</title>
		<link>http://jordi.inversethought.com/blog/i-hate-git/#comment-12320</link>
		<dc:creator>Sam Watkins</dc:creator>
		<pubDate>Wed, 13 Feb 2013 02:53:30 +0000</pubDate>
		<guid isPermaLink="false">http://jordi.inversethought.com/blog/2011/01/03/i-hate-git/#comment-12320</guid>
		<description><![CDATA[I use git, and find it extremely useful.  I have not used hg very much.

Git is quirky, inconsistent, and It can be very complex to do things that aught to be simple.  While the foundation of git is very good, there is a lot of poorly thought-out and badly documented cruft on top of that.

Given that hg provides most of the same feature set, is extensible, safer, better documented, almost as fast (in spite of being written in python), and orders of magnitude simpler and easier to use, I think it&#039;s clear that hg is for now the superior product.  I will start using it!

If the git developers wish to create a really great quality product, they need to take a step back, wean themselves off the coffee and crack, take a deep breath, and create a totally new front-end which is simple and sensible. They should consider the feedback, and learn from their experience with git version 1 &quot;chaos&quot;.  It would not hurt to cooperate with some people who are expressive and literate in the English language!]]></description>
		<content:encoded><![CDATA[<p>I use git, and find it extremely useful.  I have not used hg very much.</p>
<p>Git is quirky, inconsistent, and It can be very complex to do things that aught to be simple.  While the foundation of git is very good, there is a lot of poorly thought-out and badly documented cruft on top of that.</p>
<p>Given that hg provides most of the same feature set, is extensible, safer, better documented, almost as fast (in spite of being written in python), and orders of magnitude simpler and easier to use, I think it&#8217;s clear that hg is for now the superior product.  I will start using it!</p>
<p>If the git developers wish to create a really great quality product, they need to take a step back, wean themselves off the coffee and crack, take a deep breath, and create a totally new front-end which is simple and sensible. They should consider the feedback, and learn from their experience with git version 1 &#8220;chaos&#8221;.  It would not hurt to cooperate with some people who are expressive and literate in the English language!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: james mckay dot net &#187; Why Git could still fail</title>
		<link>http://jordi.inversethought.com/blog/i-hate-git/#comment-5436</link>
		<dc:creator>james mckay dot net &#187; Why Git could still fail</dc:creator>
		<pubDate>Sat, 16 Jun 2012 08:59:32 +0000</pubDate>
		<guid isPermaLink="false">http://jordi.inversethought.com/blog/2011/01/03/i-hate-git/#comment-5436</guid>
		<description><![CDATA[[...] committing when they merge, or by automatically merging and committing when they pull. They will not take kindly to Git deleting data remotely — or even merely appearing to delete data remotely — when you supply apparently innocuous [...]]]></description>
		<content:encoded><![CDATA[<p>[...] committing when they merge, or by automatically merging and committing when they pull. They will not take kindly to Git deleting data remotely — or even merely appearing to delete data remotely — when you supply apparently innocuous [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jordi</title>
		<link>http://jordi.inversethought.com/blog/i-hate-git/#comment-780</link>
		<dc:creator>Jordi</dc:creator>
		<pubDate>Sat, 15 Oct 2011 08:47:19 +0000</pubDate>
		<guid isPermaLink="false">http://jordi.inversethought.com/blog/2011/01/03/i-hate-git/#comment-780</guid>
		<description><![CDATA[It is not plain wrong that metadata is a kind of data. Which git does delete. Remotely. The reflog stores a different form of that data, and it&#039;s not immediately obvious how to extract the original metadata from the reflog. Correct me if I&#039;m wrong, but I don&#039;t believe the structure and nature of the reflog is documented in git&#039;s documentation. At least at the time when I had to partially extract the lost data from the reflog, I had to work hard reading several external sources and rely on oral tradition (such as the present blog and discussion). Perhaps the situation has rapidly changed since I last experienced my unfortunate git accident.

What is plainly false is that the reflog is append-only. There exists an explicit git reflog expire command that also deletes data from the reflog. Another git self-destruct button hidden in plain sight. Not to mention that since the reflog is simply metadata, the data it points to can vanish with time (can be garbage collected), making the metadata pretty much useless.

Your concerns that I am wasting my time, a simple hg fanboy thinking in hg terms (I think I have gotten quite good at understand what git does and why... and I still think it&#039;s a horrible design... plus I have some working knowledge of other DVCSes like the aforementioned bzr and darcs), and that I can avoid git... I have already addressed in &lt;a href=&quot;http://jordi.inversethought.com/blog/enough-git/&quot; rel=&quot;nofollow&quot;&gt;another blog post&lt;/a&gt;. I have more blog posts on this topic forthcoming.

It is unfortunate that we must appear as adversaries to each other. This is precisely the opposite of what git is supposed to foster: collaboration. Instead we are arguing over its (de)merits when we could be working together.]]></description>
		<content:encoded><![CDATA[<p>It is not plain wrong that metadata is a kind of data. Which git does delete. Remotely. The reflog stores a different form of that data, and it&#8217;s not immediately obvious how to extract the original metadata from the reflog. Correct me if I&#8217;m wrong, but I don&#8217;t believe the structure and nature of the reflog is documented in git&#8217;s documentation. At least at the time when I had to partially extract the lost data from the reflog, I had to work hard reading several external sources and rely on oral tradition (such as the present blog and discussion). Perhaps the situation has rapidly changed since I last experienced my unfortunate git accident.</p>
<p>What is plainly false is that the reflog is append-only. There exists an explicit git reflog expire command that also deletes data from the reflog. Another git self-destruct button hidden in plain sight. Not to mention that since the reflog is simply metadata, the data it points to can vanish with time (can be garbage collected), making the metadata pretty much useless.</p>
<p>Your concerns that I am wasting my time, a simple hg fanboy thinking in hg terms (I think I have gotten quite good at understand what git does and why&#8230; and I still think it&#8217;s a horrible design&#8230; plus I have some working knowledge of other DVCSes like the aforementioned bzr and darcs), and that I can avoid git&#8230; I have already addressed in <a href="http://jordi.inversethought.com/blog/enough-git/" rel="nofollow">another blog post</a>. I have more blog posts on this topic forthcoming.</p>
<p>It is unfortunate that we must appear as adversaries to each other. This is precisely the opposite of what git is supposed to foster: collaboration. Instead we are arguing over its (de)merits when we could be working together.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: martin f. krafft</title>
		<link>http://jordi.inversethought.com/blog/i-hate-git/#comment-779</link>
		<dc:creator>martin f. krafft</dc:creator>
		<pubDate>Sat, 15 Oct 2011 07:37:51 +0000</pubDate>
		<guid isPermaLink="false">http://jordi.inversethought.com/blog/2011/01/03/i-hate-git/#comment-779</guid>
		<description><![CDATA[The reflog is an integral part of Git, and it is append-only. What you claim — that Git deletes data — is just plain wrong.

You come at Git with a Mercurial perspective. That&#039;s fine, but please refrain from bashing Git whenever it does not behave like Mercurial, because it is *not* Mercurial, nor is it trying to be. Git provides you with features that Mercurial does not have (and vice versa), and Git comes with shortcomings that mercurial does not have (and vice versa). That is how it goes, everywhere. Don&#039;t waste your time ranting about it. If you want Mercurial, use Mercurial. If you want Git, use Git. It&#039;s as simple as that.]]></description>
		<content:encoded><![CDATA[<p>The reflog is an integral part of Git, and it is append-only. What you claim — that Git deletes data — is just plain wrong.</p>
<p>You come at Git with a Mercurial perspective. That&#8217;s fine, but please refrain from bashing Git whenever it does not behave like Mercurial, because it is *not* Mercurial, nor is it trying to be. Git provides you with features that Mercurial does not have (and vice versa), and Git comes with shortcomings that mercurial does not have (and vice versa). That is how it goes, everywhere. Don&#8217;t waste your time ranting about it. If you want Mercurial, use Mercurial. If you want Git, use Git. It&#8217;s as simple as that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jordi</title>
		<link>http://jordi.inversethought.com/blog/i-hate-git/#comment-765</link>
		<dc:creator>Jordi</dc:creator>
		<pubDate>Thu, 13 Oct 2011 19:01:58 +0000</pubDate>
		<guid isPermaLink="false">http://jordi.inversethought.com/blog/2011/01/03/i-hate-git/#comment-765</guid>
		<description><![CDATA[git deletes metadata remotely, which is a kind of data.

Yes, that metadata can be reconstructed from the reflog, with some work and some luck, as I later learned.

But this is a huge surprise for me. I didn&#039;t even *consider* that a VCS could remotely *delete anything*. By comparison, all hg remote operations are append-only. I believe the same holds for bzr and darcs, but correct me if I&#039;m wrong. You can&#039;t delete any data with hg, not even metadata, with push and pull operations (unless you explicitly install server hooks in the server to do so after a remote operation).

This is a pretty dumb git design, I think. Allowing deletion of any data, including metadata, is like having a big red self-destruct button in your computer in case you ever want your computer to blow up. And don&#039;t tell me it was my fault for not reading the label on the self-destruct button. Why would my laptop even have such a button?]]></description>
		<content:encoded><![CDATA[<p>git deletes metadata remotely, which is a kind of data.</p>
<p>Yes, that metadata can be reconstructed from the reflog, with some work and some luck, as I later learned.</p>
<p>But this is a huge surprise for me. I didn&#8217;t even *consider* that a VCS could remotely *delete anything*. By comparison, all hg remote operations are append-only. I believe the same holds for bzr and darcs, but correct me if I&#8217;m wrong. You can&#8217;t delete any data with hg, not even metadata, with push and pull operations (unless you explicitly install server hooks in the server to do so after a remote operation).</p>
<p>This is a pretty dumb git design, I think. Allowing deletion of any data, including metadata, is like having a big red self-destruct button in your computer in case you ever want your computer to blow up. And don&#8217;t tell me it was my fault for not reading the label on the self-destruct button. Why would my laptop even have such a button?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: martin f. krafft</title>
		<link>http://jordi.inversethought.com/blog/i-hate-git/#comment-764</link>
		<dc:creator>martin f. krafft</dc:creator>
		<pubDate>Thu, 13 Oct 2011 18:56:19 +0000</pubDate>
		<guid isPermaLink="false">http://jordi.inversethought.com/blog/2011/01/03/i-hate-git/#comment-764</guid>
		<description><![CDATA[Git never deletes data, or, put differently, all your data is still there.

Let&#039;s start at the front. --mirror is a command to mirror a local repository, meaning that it will remove references remotely that have been removed locally. That is a feature.

What you wanted is git push origin --all, or git push with an appropriate refspec, or the push.default setting (man git-config).

As to getting your data back: you only deleted references, or pointers, to heads. The heads are still there. You just need to find them. The ways to find them are multifarious: if you find a SHA-1 in your scrollback, you can use that, e.g.

  git branch recovered 

Else you can make use of the reflog (man git-reflog), and if all else fails, use git-fsck to reconnect dangling heads.

Git will not delete any data, unless you explicitly tell it to (git-gc). Git usually won&#039;t even let you juggle refs, but you can do that. If you drop the ball, just pick it up again and keep going. Never panic.]]></description>
		<content:encoded><![CDATA[<p>Git never deletes data, or, put differently, all your data is still there.</p>
<p>Let&#8217;s start at the front. &#8211;mirror is a command to mirror a local repository, meaning that it will remove references remotely that have been removed locally. That is a feature.</p>
<p>What you wanted is git push origin &#8211;all, or git push with an appropriate refspec, or the push.default setting (man git-config).</p>
<p>As to getting your data back: you only deleted references, or pointers, to heads. The heads are still there. You just need to find them. The ways to find them are multifarious: if you find a SHA-1 in your scrollback, you can use that, e.g.</p>
<p>  git branch recovered </p>
<p>Else you can make use of the reflog (man git-reflog), and if all else fails, use git-fsck to reconnect dangling heads.</p>
<p>Git will not delete any data, unless you explicitly tell it to (git-gc). Git usually won&#8217;t even let you juggle refs, but you can do that. If you drop the ball, just pick it up again and keep going. Never panic.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
