3 <title>Dscho's Git log
</title>
4 <meta http-equiv=
"Content-Type"
5 content=
"text/html; charset=UTF-8"/>
7 <body style=
"width:800px;background-image:url(dscho.git?a=blob_plain;hb=c33212b23b2b3e45c14403efe82cabb1cd53f6e3;f=paper.jpg);background-repeat:repeat-y;background-attachment:scroll;padding:0px;">
8 <div style=
"width:610px;margin-left:120px;margin-top:50px;align:left;vertical-align:top;">
9 <h1>Dscho's Git log
</h1>
10 <div style=
"position:absolute;top:50px;left:810px;width=400px">
11 <table width=
400px bgcolor=#e0e0e0 border=
0>
12 <tr><th>Table of contents:
</th></tr>
15 <li><a href=#
1254868748>07 Oct
2009 GitTogether in Berlin
</a>
16 <li><a href=#
1249835938>09 Aug
2009 The dilemma of being correct
</a>
17 <li><a href=#
1245419588>19 Jun
2009 The GraphGUI project
</a>
18 <li><a href=#
1242408298>15 May
2009 Wasting way too much time on msysGit
</a>
19 <li><a href=#
1241995759>11 May
2009 Working on jgit diff
</a>
20 <li><a href=#
1239975597>17 Apr
2009 No time for Git
</a>
21 <li><a href=#
1238970571>06 Apr
2009 How to recover from a hackathon
</a>
22 <li><a href=#
1236554268>09 Mar
2009 So, what is missing from my
<i>rebase-i-p
</i> branch?
</a>
23 <li><a href=#
1236479389>08 Mar
2009 New Git for Windows version
</a>
24 <li><a href=#
1235092615>20 Feb
2009 Code reviews
</a>
26 <a href=dscho.git?a=blob_plain;hb=
27b2c2e614f97056a75956e3e27c07cb2bffb1ea;f=index.html
>Older posts
</a>
29 <div style=
"text-align:right;">
30 <a href=
"dscho.git?a=blob_plain;hb=blog;f=blog.rss"
31 title=
"Subscribe to my RSS feed"
32 class=
"rss" rel=
"nofollow"
33 style=
"background-color:orange;text-decoration:none;color:white;font-family:sans-serif;">RSS
</a>
36 <table width=
400px bgcolor=#e0e0e0 border=
0>
37 <tr><th>About this blog:
</th></tr>
39 <p>It is an active
<a href=http://repo.or.cz/w/git/dscho.git?a=blob_plain;f=index.html;hb=
5f002cab57a837125a8f901bcd1f3c1477bc3119
>abuse
</a> of
<a href=http://repo.or.cz
/>repo.or.cz
</a>,
40 letting gitweb unpack the objects in the current tip of the branch
<i>blog
</i>,
41 including the images and the RSS feed.
43 Publishing means running a script that collects the posts, turns them into
44 HTML, makes sure all the images are checked in, and pushes the result.
46 This blog also serves to grace the world with Dscho's random thoughts on and
51 <table width=
400px bgcolor=#e0e0e0 border=
0>
52 <tr><th>Links:
</th></tr>
55 <li> <a href=http://git-scm.com
/>Git's homepage
</a>
56 <li> <a href=http://gitster.livejournal.com
/>Junio's blog
</a>
57 <li> <a href=http://www.spearce.org
/>Shawn's blog
</a> seems to be sitting
58 idle ever since he started working for Google...
59 <li> <a href=http://torvalds-family.blogspot.com
/>Linus' blog
</a> does not
60 talk much about Git...
61 <li> Scott Chacon's
<a href=http://whygitisbetterthanx.com
/>Why Git is better
63 <li> <a href=http://vilain.net
/>The blog of mugwump
</a>
64 <li> <a href=http://merlyn.vox.com
/>Merlyn's blog
</a>
65 <li> <a href=http://blogs.gnome.org/newren
/>Elijah Newren
</a> chose the
66 same path as Cogito, offering an alternative porcelain (an approach
67 that is doomed in my opinion)
68 <li> <a href=http://msysgit.googlecode.com
/>The msysGit project
</a>, a (mostly)
69 failed experiment to lure the many Windows developers out there to
70 contribute to Open Source for a change.
74 <table width=
400px bgcolor=#e0e0e0 border=
0>
75 <tr><th>Google Ads:
</th></tr>
77 <script type=
"text/javascript"><!--
78 google_ad_client
= "pub-5106407705643819";
79 /* 300x250, created 1/22/09 */
80 google_ad_slot
= "6468207338";
81 google_ad_width
= 300;
82 google_ad_height
= 250;
85 <script type=
"text/javascript"
86 src=
"http://pagead2.googlesyndication.com/pagead/show_ads.js">
90 <h6>Wednesday,
7th of October, Anno Domini MMIX, at the hour of the Rat
</h6>
92 <h2>GitTogether in Berlin
</h2>
96 We had a GitTogether in Berlin, called
"Alles wird Git" (past tense:
"Alles
97 wurde Git"). It was great fun, we never had even a single boring minute,
98 and our special guest -- Gitzilla -- turned out to be quite some entertainer,
99 especially when he starting reciting a few of my most outrageous emails
☺
101 There were a lot of good discussions, among other things about submodules (our
102 neglected child), Git Cheetah, and foreign VCS helpers (in particular Sverre's
103 plan to provide some Mercurial backend).
105 One of the most important outcomes for me was, though, to realize just how
106 detached we in the Git project are from our user base. A few years back, we
107 could get away with saying
"we have only developers as users, so they should
108 just sit down and scratch their own itch".
110 But today, we have a lot of users who never learnt to code (or who code in
111 some other language than C, or whose code we would not even want to review
☺),
112 and we lose quite a few brownie points by keeping things complicated.
114 Now, in a lot of cases it cannot be helped. For example, we have confusing
115 names for things, inconsistent namings even (as with
"remote" vs
"tracked"
116 branches), and we have some odd design decisions (like calling some program
117 almost nobody uses
"git cherry", which makes tab-completion of the rather
118 often-used
"git cherry-pick" pretty awkward). The latter example also
119 illustrates that we have names for porcelains that are rather long, when
120 they should be rather short.
122 So, yes, we have a lot of things that do not work well, because we have
123 usability issues that need to be preserved for hysterical raisins.
125 This is unfortunate enough, but it seems that we even fsck up with usability
126 issues we
<u>can
</u> solve. Just think about
"git checkout -b origin/master". A
127 typo? Yes, of course! But a rather obvious one.
129 Another case which was discussed on the mailing list recently:
"git checkout
130 next" when clearly
"git checkout origin/next" was meant.
132 The biggest problem, though, is that almost all people on the Git mailing list
133 who are respected by the maintainer are obviously too detached from the user
134 base to realize just how difficult Git
<u>still
</u> is. And refuse to do anything
135 about it, or even to allow others to do anything about it.
137 It almost seems as if the Git wizards do not want Git to become easier to
138 use, lest they lose their special status.
140 My biggest problem is that it seems that my input gets more and more ignored,
141 or perceived as some crazy ideas that will just go away (which is true, because
142 I am pretty happy about a day-job that keeps me more than just busy, so I do not
143 have time not fight windmills, let alone motiviation to do so).
145 Even when a real user comes along to chime in, he's just brushed off, by an
146 otherwise very polite maintainer.
148 I am not even sure if I want to continue sending my patches from my personal
149 tree upstream, because things get so frustrating, for little to show in return.
151 <h6>Sunday,
9th of August, Anno Domini MMIX, at the hour of the Rooster
</h6>
153 <h2>The dilemma of being correct
</h2>
157 So I am opinionated. No news there. The problem of being opinionated, though,
158 is that people do not take you seriously even if you are correct.
160 For example, I vividly remember having had concerns about the Git wrapper
161 being linked to
<a href=http://curl.haxx.se
/>cURL
</a>, and I vividly remember
162 that our maintainer did not have such concerns and took Daniel's patch. I could
163 not find proof of my public comment quickly enough to add a link here, though.
165 Alas, there are serious problems with being correct:
168 <li>If you're correct, you waste a lot of time trying to convince people (but
169 they ignore you nevertheless),
170 <li>Other people are regularly p*ssed off, especially when they find out
171 (or even worse, when it is pointed out to them) that they were wrong, and
172 <li>You can buy
<u>nothing
</u> for having been correct.
175 It is a lose-lose situation.
177 In the current context, I am pretty certain that the rev cache and the pack
178 index are so similar in nature that we'll find quite a few issues that we had
179 with one repeated with the other.
181 As I
<u>hate
</u> losing time over a discussion others try to
"win" -- which
182 invariably means that they refuse to be convinced of anything disagreeing with
183 their opinion
☺ -- I will just shut up, and probably have one or two odd
184 feelings when it turns out I was right.
186 <h6>Friday,
19th of June, Anno Domini MMIX, at the hour of the Monkey
</h6>
188 <h2>The GraphGUI project
</h2>
192 After a few unfortunate delays (and some fortunate ones, just not for us), the
193 GraphGUI project finally takes off. A quick first glance:
195 <center><img src=dscho.git?a=blob_plain;hb=c33212b23b2b3e45c14403efe82cabb1cd53f6e3;f=basic-gui.jpg basic-gui.jpg
></center>
197 The delays were a bit unnerving, but the student is really bright and still
198 has the chance to pull the project off.
200 Next plans are to show text, too, to invent a rudimentary layout engine that
201 can be adjusted manually (this is in contrast to
<i>gitk
</i> or
<i>log --graph
</i>).
203 After that, integration into JGit (this probably triggered the eGit/JGit
206 And then we'll go wild!
208 <h6>Friday,
15th of May, Anno Domini MMIX, at the hour of the Dog
</h6>
210 <h2>Wasting way too much time on msysGit
</h2>
214 I recently got into the bad habit of spending a large amount of my waking
215 hours working on msysGit, more than is really healthy for me.
217 For example, I spent the whole morning -- when I should have worked on a
218 very important day-job project -- on trying to fix issue
258, where
219 <i>git web--browse
</i> does not work as expected because of quoting issues
222 This is reducing my Git time budget to negative numbers, so much so that I
223 cannot even work on Git projects that I actually like, such as
<i>jgit diff
</i>
224 or
<i>git rebase -i -p
</i>, or at least projects I felt obliged to continue
225 to work on, such as
<i>git notes
</i>.
227 Now, some people who tried to teach me some time management strongly
228 criticized me for ignoring their lessons, and unfortunately, I have to agree.
230 The problem is that I would
<u>hate
</u> to see msysGit fall to the same state it
231 was after I stopped working on it last year. I started it, and I would like
232 it to grow, but too few people took care of the issue tracker, too few tried
233 to debug their problems themselves, too few submitted fixes.
235 I note, though, that there is a positive trend. But being the impatient person
236 I am (
"2 seconds is my attention span") I tend to want the trend to be more
239 Anyway, no work on msysGit for at least
4 days, that's what the doctor (me)
242 <h6>Monday,
11th of May, Anno Domini MMIX, at the hour of the Rat
</h6>
244 <h2>Working on jgit diff
</h2>
248 Shawn did so many useful things that I use on a daily basis that I felt really
249 awful when I realized just how
<u>long
</u> I had promised to clean up that diff
250 implementation I wrote for JGit.
252 Alas, it appears that the thing turned out to be almost a complete rewrite, as
253 the original implementation walked the edit graph in a rather inefficient way.
255 A little background: Myers' algorithm to generate
"an edit script" works on
256 the
<i>edit graph
</i>: imagine you have all lines of file
<i>A
</i> as columns and
257 all lines of file
<i>B
</i> as rows, then the
<i>edit graph
</i> is a connection of
258 the upper left corner to the lower right corner, containing only horizontal,
259 vertical or diagonal elements, where diagonal elements are only allowed when
260 the lines of both files agree at that point:
263 H E L L O , W O R L D
273 The
<i>shortest
</i> edit path minimizes the number of non-diagonal elements.
275 Myers' idea is to develop forward and backward paths at the same time
276 (increasing the number of non-diagonal elements uniformly), storing
277 only the latest end points. Once the paths meet, divide and conquer.
279 In theory, it would be quicker to store
<u>all
</u> end points and then just
280 reconstruct the shortest paths, alas, this takes way too much memory.
282 My first implementation did not remember start or end of the non-diagonal
283 parts, and had to recurse way more often than really necessary (in the end,
284 we will order the non-diagonal parts into horizontal and vertical parts
285 anyway, so start and end are sufficient).
287 The current progress can be seen
<a href=http://repo.or.cz/w/egit/dscho.git
/>
290 <h6>Friday,
17th of April, Anno Domini MMIX, at the hour of the Monkey
</h6>
292 <h2>No time for Git
</h2>
296 It is a shame, but most of my Git time budget is taken by msysGit these
299 But at least msysGit is moving again; I'll probably write a Herald about
302 <h6>Monday,
6th of April, Anno Domini MMIX, at the hour of the Rat
</h6>
304 <h2>How to recover from a hackathon
</h2>
308 Phew,
2 crazy and fantastic weeks are behind me. But it takes its toll:
309 a weekend I was more offline than online.
311 Things that are important now: relax. sleep. take a walk. learn to sleep
312 more than
4 hours a night again. learn to watch a movie without thinking
313 about code. go for a run.
315 And after recovering, back to the rebase-i-p branch!
317 <h6>Monday,
9th of March, Anno Domini MMIX, at the hour of the Rat
</h6>
319 <h2>So, what is missing from my
<i>rebase-i-p
</i> branch?
</h2>
323 I regularly use
<i>rebase -i -p
</i> these days, to update my personal Git
324 tree (which used to be
<i>my-next
</i>).
326 There are a few things missing before I can start assembling a patch
327 series for submission:
330 <li>I need to handle the commit parents which are outside of the rebased
331 ones properly. In other words, when a commit is picked whose parent is
332 not rebased, it needs to be rebased onto $ONTO.
333 <li>The patch which uses patch-id to generate DROPPED directly also tries to
334 consolidate the handling of DROPPED commits by putting them into REWRITTEN
335 instead of DROPPED, but that breaks the tests. So, this patch needs to be
337 <li>I want to introduce one more command,
<i>rephrase
</i>, which allows you to
338 modify the commit message, and nothing more, and
<i>halt
</i>, which does the
339 same as
<i>edit
</i> without
<i>pick
</i>. Then there needs to be a new test script
340 for those commands, and this will be an early patch series.
341 <li>Time. I need time, desperately. If my day job was not as exciting as it
342 is, I would have more time for Git. As it is, I have to budget my time so
343 that I get anything done at all.
346 These issues have been postponed due to Steffen taking a well-deserved
347 vacation, which means that I have to act as msysGit maintainer again.
349 And this coming week, I will have other things to do in all likeliness, so
350 that I expect to be able to submit a
<i>rebase -i -p
</i> patch series only next
351 week. If not then, due to a heavy workload, it will be postponed to early
354 Oh well, the joys of being excited by several competing projects!
☺
356 <h6>Sunday,
8th of March, Anno Domini MMIX, at the hour of the Tiger
</h6>
358 <h2>New Git for Windows version
</h2>
362 Phew. That was quite a day, almost exclusively spent on finishing that
363 installer. The worst part: updating GCC seemed not to be such a good idea
366 For Windows, we need to use the printf format
<i>%I64u
</i> (which is
367 non-standard, in the common way of Microsoft) if you want to print
64-bit
368 wide unsigned numbers. The rest of the world accepts the standard
<i>%llu
</i>.
370 After upgrading to the new GCC, a lot of warnings appeared, complaining
371 about
<i>%I64u
</i>. The warnings went away when I replaced the format with
374 Being the naive I am, I mistook that for a sign that we could finally go
375 more standards-compliant.
377 However, it only means that we have to live with the warnings for now, as
378 the C runtime provided on Windows still strongly disagrees with standards
379 (and it has to continue to do so, lest it break existing programs).
383 At least I have the feeling that I caught the most important bugs before
386 <h6>Friday,
20th of February, Anno Domini MMIX, at the hour of the Buffalo
</h6>
388 <h2>Code reviews
</h2>
392 It has been said that reviewing patches is a most thankless job. As I really
393 like the elegance of Git's source code, and care a lot about it, I did not
394 think that it was thankless, just a little bit tedious (especially when the
395 patch authors mistake criticism for personal attacks).
397 Usually, I am pretty good at ignoring insults as responses to my comments;
398 after all, I have a lot more enjoyable things to do than to spend time talking
399 to a guy who shows how wise he is when he thinks that I criticize him
400 <u>personally
</u> when I just try to enhance his work, by offering a little bit of
403 However, in the last days, three people really seemed to want to insult me,
404 to make me go away, to stop the fun I have with Git.
406 And they almost succeeded.
408 So I guess it is time to reassess my priorities, and maybe stop reviewing
409 Git patches altogether.