<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkcGSHozfip7ImA9WhVTEUs.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756</id><updated>2012-02-25T00:53:49.486-08:00</updated><category term="Thanks" /><category term="Git" /><category term="Work Log" /><category term="Random Hacking" /><category term="UnGit" /><category term="Announce" /><title>Git Blame</title><subtitle type="html">&lt;a href="https://plus.google.com/108182106411180467879?rel=author"&gt;Gitster&lt;/a&gt;'s Blog</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://git-blame.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>121</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/GitBlame" /><feedburner:info uri="gitblame" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;A04HQXg_eip7ImA9WhVTEUg.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-8817761499501096619</id><published>2012-02-25T00:52:00.000-08:00</published><updated>2012-02-25T00:52:10.642-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-25T00:52:10.642-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Updates to "git merge" in upcoming 1.7.10</title><content type="html">The previous &lt;a href="http://git-blame.blogspot.com/2012/02/anticipating-git-1710.html" target="_blank"&gt;entry&lt;/a&gt;&amp;nbsp;about a&amp;nbsp;&lt;i&gt;potential&lt;/i&gt;&amp;nbsp;incompatible update to the behavior of the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt; command&amp;nbsp;may have been unnecessarily alarming for casual readers and it deserves a bit of clarification.&amp;nbsp;The update is designed to primarily target the interactive use, and not to negatively affect typical uses of the command in scripts.&lt;br /&gt;
&lt;br /&gt;
Let's look at a few example use cases of the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt; command in end user scripts, and how well these scripts will work with the upcoming version.&lt;br /&gt;
&lt;br /&gt;
(1) Your script may be designed to be run by your end users (e.g. it may be an implementation of the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git my-merge&lt;/span&gt;&amp;nbsp;command) to implement&amp;nbsp;extra checks that are specific to your project or corporate environment before invoking the actual merge, perhaps like this:&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;#!/bin/sh&lt;br /&gt;# Make sure you do not have uncommitted changes&lt;/span&gt;&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;test 0 = $( (&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; git diff --name-only&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; git diff --cached --name-only&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp;) | wc -l ) &amp;amp;&amp;amp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;# Perhaps other project specific checks here...&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;# ... and finally&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;git merge "$@"&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;There is no need to update the above script in preparation for 1.7.10. The script is directly facing the end user, and with 1.7.10, the user can take advantage of the updated behavior that automatically opens the editor to make it easy for him to explain the merge. Also note that in a user-facing script like this, the underlying &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; command is typically passed the command line arguments given by the end user to the script (notice the use of &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;"$@"&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; in the above example). The end user can pass the &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;--no-edit&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; option to the script if he wants to silently conclude the merge.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;(2) You may be responsible for the overall QA after receiving various topics from your contributors and co-workers, and may be using a script like the following&amp;nbsp;&lt;/span&gt;to regularly merge many topic branches into an integration branch for testing&lt;span style="font-family: inherit;"&gt;:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;#!/bin/sh&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;if test -f topics&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;then&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; # Prepare topics to be integrated just once&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; list-topics &amp;gt;topics &amp;amp;&amp;amp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; # And checkout the tip of the master to integrate them all&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; git checkout -B test master || exit&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;fi&lt;br /&gt; while read topic&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;do&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; git merge "$topic" || exit&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;done &amp;lt;topics&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;# All done&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;rm -f topics&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;In such a case, you do not have to explain each and every such merge to rebuild the test integration branch, and you do not want the change in 1.7.10 to affect the above script.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;And we didn't want to break such a script, either.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;Notice that the &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;command in this example is not facing the end user&lt;/span&gt;&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: x-small; line-height: 16px;"&gt;—&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;its standard input is connected to the file that lists the topics, from which the surrounding while loop is reading, and not to the user's terminal. Because of this, the command will &lt;/span&gt;&lt;i style="font-family: inherit;"&gt;not&lt;/i&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;automatically open an editor to ask your user to explain the merge, and there is no need to worry about the compatibility.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;(3) Your project may run integration test every time its members update the master branch of the central shared repository,&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;and as a part of the integration test, it may merge the updated master to the test repository that has mock data for testing. Such a script may look like this:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;#!/bin/sh&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;# Called from the post-update hook of the central repository&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;unset GIT_DIR&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;cd /srv/test.repo &amp;amp;&amp;amp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;git pull /srv/central.repo master || {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; logger "The updated master does not cleanly merge -- no automated test done"&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; git reset --hard  exit 1}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;make test || {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; logger "The updated master does not pass test"&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; git reset --hard&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; exit 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
If you run such a script interactively, the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git pull&lt;/span&gt; command will invoke the underlying &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt; command interactively, which in turn &lt;i&gt;will&lt;/i&gt; open the editor and ask you to explain the merge. But if it is run from a post-update hook, the standard input is not likely to be connected to any interactive terminal (this is also true if such an automated merge is done as part of a continuous integration testing). Hence, in practice, 1.7.10 will not change the behaviour of the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt;&amp;nbsp;command used in such a script, and there is no need to worry about the compatibility.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
(4) If your script uses &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt;, is run interactively by the end user, and it keeps the standard input to the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt; command connected to the terminal, but for whatever reason you do not need your users to explain the merge, you &lt;i&gt;do&amp;nbsp;&lt;/i&gt;need to worry about the compatibility. You could add the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;--no-edit&lt;/span&gt; option to the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt; command invocations in your script as necessary, but there is a quicker way:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;#!/bin/sh&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="background-color: yellow; font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;GIT_MERGE_AUTOEDIT=no&lt;br /&gt; export GIT_MERGE_AUTOEDIT&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;# whatever your script did originally&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;...&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;git merge foo&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;git merge bar&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;...&lt;/span&gt;&lt;div&gt;
&lt;br /&gt;
You can set &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;GIT_MERGE_AUTOEDIT&lt;/span&gt; environment variable to &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;no&lt;/span&gt; at the beginning of your script, and all the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt; command invocations will work as if they were given the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;--no-edit&lt;/span&gt; option.&lt;br /&gt;
&lt;br /&gt;
Hopefully it is now clearer that there is not much to fear in the update to the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt; command planned in the upcoming 1.7.10 release.&lt;br /&gt;
&lt;br /&gt;
Happy Gitting!&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-8817761499501096619?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cARL1t5xgCKrRpT3ulps9qvRiBs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cARL1t5xgCKrRpT3ulps9qvRiBs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cARL1t5xgCKrRpT3ulps9qvRiBs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cARL1t5xgCKrRpT3ulps9qvRiBs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/B0RcaOMyPzc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/8817761499501096619?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/8817761499501096619?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/B0RcaOMyPzc/updates-to-git-merge-in-upcoming-1710.html" title="Updates to &quot;git merge&quot; in upcoming 1.7.10" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><feedburner:origLink>http://git-blame.blogspot.com/2012/02/updates-to-git-merge-in-upcoming-1710.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcGSHs7eip7ImA9WhVTEUs.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-8762885494121070189</id><published>2012-02-23T20:16:00.001-08:00</published><updated>2012-02-25T00:53:49.502-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-25T00:53:49.502-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Anticipating Git 1.7.10</title><content type="html">According to the &lt;a href="http://tinyurl.com/gitcal" target="_blank"&gt;Git Calendar&lt;/a&gt;, we still have a few more weeks until the feature freeze for the next release Git 1.7.10, in which&amp;nbsp;there will be one backward-incompatible improvement that potentially can bite people who used the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;command in their scripts.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;[Update: the above phrasing is a bit too alarming; here is a &lt;a href="http://git-blame.blogspot.com/2012/02/updates-to-git-merge-in-upcoming-1710.html" target="_blank"&gt;clarification&lt;/a&gt;&amp;nbsp;you may want to read after finishing this entry]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;Following the advice given in an &lt;a href="http://lwn.net/SubscriberLink/482557/7474ad08811a6570/" target="_blank"&gt;article&lt;/a&gt; at LWN.net by Jake Edge:&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Most free software projects discuss planned changes well in advance of their implementation and give users lots of opportunities to try out early versions. But engaging the project is best done with well-reasoned, specific descriptions of problems, missing features, and so on—not endless streams of "Project XYZ sucks!" messages to mailing lists or comment threads.&lt;/blockquote&gt;
let's describe what we have decided, why, and how users can use the upcoming release in their work.&lt;br /&gt;
&lt;br /&gt;
Traditionally, when the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt; command attempted to merge two or more histories, it prepared a canned commit log message based on what is being merged, and recorded the result in a merge commit without any user intervention, if the automatic merge logic successfully computed the resulting tree without conflict. When the automatic logic did not manage to come up with a clean merge result, it gave up, leaving the conflicted state in the index and in the working tree files, and asked the user to resolve them and run the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git commit&lt;/span&gt; command to record the outcome.&lt;br /&gt;
&lt;br /&gt;
Most merges do cleanly resolve, and this behavior resulted in people making their merges &lt;i&gt;too&lt;/i&gt; easily and lightly, even when the reason why the merge was made in the first place &lt;i&gt;should&lt;/i&gt;&amp;nbsp;be explained.&amp;nbsp;Nobody explained&amp;nbsp;why the merge was made in a merge commit, because in order to do so after &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt; already made the commit, they have to go&amp;nbsp;back and run&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git commit --amend&lt;/span&gt;&amp;nbsp;to do so.&lt;br /&gt;
&lt;br /&gt;
Recently in a &lt;a href="http://thread.gmane.org/gmane.linux.kernel/1191100/focus=181362" target="_blank"&gt;discussion on the Git mailing list&lt;/a&gt;, Linus admitted (and I agreed) that this was one of the design mistakes we made early in the history of Git. And in 1.7.10 and later, the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt;&amp;nbsp;command that is run in an interactive session (i.e. both its standard input and its standard output connected to a terminal) will open an editor before creating a commit to record the merge result, to give the user a chance to explain the merge, just like the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git commit&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;command the user runs after resolving a conflicted merge already does.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
There are two recommendations we give to end users to&amp;nbsp;adjust to this behaviour change.&lt;br /&gt;
&lt;br /&gt;
(1) When using &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;interactively, there are two cases:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Merging updated upstream into your work-in-progress topic without having a good reason is generally considered a bad practice. Such a merge in the wrong direction should be done only when it is absolutely necessary, e.g. your work-in-progress needs to take advantage of recent advancement made on the upstream. &amp;nbsp;Otherwise, your topic branch will stop being about any particular &lt;/span&gt;&lt;i style="font-family: inherit;"&gt;topic&lt;/i&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;but just a garbage heap that absorbs commits from many sources, both from you to work on a specific goal, and also from the upstream that contains work by others made for random other unfocused purposes. So if you are merging from upstream into your topic branch, you can use the command without any option to take advantage of the new behavior, let it open an editor for you, and justify the merge. You no longer have to amend the commit after you made the merge to explain it.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;When you are merging your topic into your own integration (or testing) branch, on the other hand, such a merge is often self-explanatory. &amp;nbsp;The topic is fully cooked, and ready to be pushed out, and that is the reason why you are merging. In such a case, it will be sufficient to run the command with the&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;--no-edit&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;option and accept the canned commit log message without editing.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
(2) If you have a script that runs &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt;, and you left its standard input and output kept connected to the terminal, it may start to ask whoever is running the script to edit and explain the merge. This may or may not be a desirable thing depending on the reason why the script is making a merge. &amp;nbsp;Often, scripts are used to merge many branches into temporary testing branch in bulk, and want to run unattended if they merge cleanly. In such a case, you do not want to change the old behavior of the script. You do not have to add &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;--no-edit&lt;/span&gt; to all your invocations of the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt; command&amp;nbsp;to update such a script. Instead, you can export &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;MERGE_AUTOEDIT=no&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;at the beginning of your script, and the &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; command will silently make commits when there is no conflict.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: inherit;"&gt;Please try out the updated &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git merge&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;before 1.7.10 release is tagged from the &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;master&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; branch, and adjust your scripts and work habit as needed. Also, please suggest improvements to our development mailing list, git@vger.kernel.org, regarding:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: inherit;"&gt;the documentation,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: inherit;"&gt;error, advice and general messages output from the program,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: inherit;"&gt;logic to detect the interactiveness.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-family: inherit;"&gt;One thing that is not open to discussion is that the merge command will launch the editor when interactive &lt;i&gt;by default&lt;/i&gt;. This will &lt;i&gt;not&lt;/i&gt;&amp;nbsp;change, because, as &lt;a href="http://thread.gmane.org/gmane.linux.kernel/1191100/focus=181377" target="_blank"&gt;Linus says&lt;/a&gt;, the default matters, and the behavior we had so far was a bad default.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;Finally, spread the word so that other users can start adjusting their use of the command early.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
[EDIT]&lt;br /&gt;
&lt;br /&gt;
Linus has this to say in &lt;a href="https://plus.google.com/102150693225130002912/posts/SrePhcj6XJe" target="_blank"&gt;his re-share&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;blockquote class="tr_bq"&gt;
This change hopefully makes people write merge messages to explain their merges, and maybe even decide not to merge at all when it's not necessary.&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
I've been using that git feature for the last few weeks now, and it has resulted in my merges from submaintainers having various notes in them (well, at least if the submainter gave me any). So I'm trying to lead by example.&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
But if you don't like explaining your merges, this might be annoying. Of course, if you don't explain your merges, you are annoying, so it all evens out in the end. "Karmic balance", so to say.&lt;/blockquote&gt;
&lt;/blockquote&gt;
Note that this new feature will &lt;i&gt;not&lt;/i&gt;&amp;nbsp;be in&amp;nbsp;1.7.9.3 release.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-8762885494121070189?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l7seSzvLDe9cX_foU19KBPd901E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l7seSzvLDe9cX_foU19KBPd901E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/l7seSzvLDe9cX_foU19KBPd901E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l7seSzvLDe9cX_foU19KBPd901E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/ClFpI5VRiXk" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/8762885494121070189?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/8762885494121070189?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/ClFpI5VRiXk/anticipating-git-1710.html" title="Anticipating Git 1.7.10" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><feedburner:origLink>http://git-blame.blogspot.com/2012/02/anticipating-git-1710.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUERXc4cSp7ImA9WhRaEkk.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-4981063249011325084</id><published>2012-02-14T11:35:00.000-08:00</published><updated>2012-02-14T11:36:44.939-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-14T11:36:44.939-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="Announce" /><title>Git 1.7.9.1</title><content type="html">I just tagged and pushed out the first maintenance release to the &lt;a href="http://git-blame.blogspot.com/2012/01/git-179.html"&gt;1.7.9&lt;/a&gt; released earlier.&lt;br /&gt;
&lt;br /&gt;
It also contains fixes to older bugs and misfeatures, but&amp;nbsp;this release, from my point of view, is primarily to fix user experience kinks in new features introduced in the 1.7.9 release, namely:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Typo in "git branch --edit-description my-tpoic" was not diagnosed.&lt;/li&gt;
&lt;li&gt;"git merge --no-edit $tag" failed to honor the --no-edit option.&lt;/li&gt;
&lt;li&gt;"git merge --ff-only $tag" failed because it cannot record the&amp;nbsp;required mergetag without creating a merge, but this is so common&amp;nbsp;operation for branch that is used &lt;i&gt;only&lt;/i&gt; to follow the upstream, so&amp;nbsp;it was changed to allow fast-forwarding without recording the mergetag.&lt;/li&gt;
&lt;li&gt;When asking for a tag to be pulled, "request-pull" did not show the&amp;nbsp;name of the tag prefixed with "tags/", which would have helped older&amp;nbsp;clients.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Hopefully with this maintenance release, there no longer is a reason (or excuse) for users to stay at a version older than 1.7.9 release.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-4981063249011325084?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TViwSjdkyLnDtD2Z5fSfqVMmc0E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TViwSjdkyLnDtD2Z5fSfqVMmc0E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TViwSjdkyLnDtD2Z5fSfqVMmc0E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TViwSjdkyLnDtD2Z5fSfqVMmc0E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/1Q6ZQ9RJBrc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/4981063249011325084/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=4981063249011325084&amp;isPopup=true" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/4981063249011325084?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/4981063249011325084?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/1Q6ZQ9RJBrc/git-1791.html" title="Git 1.7.9.1" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/03314622583641323356</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-VqymtuBwF3s/TbSVjoOVPdI/AAAAAAAAAkI/_3AOjoH0ESk/s220/x.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2012/02/git-1791.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ADR3s4eip7ImA9WhRaEEk.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-4286246125795649490</id><published>2012-02-12T02:16:00.000-08:00</published><updated>2012-02-12T02:16:16.532-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-12T02:16:16.532-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UnGit" /><category scheme="http://www.blogger.com/atom/ns#" term="Thanks" /><title>The Double Helix by James D. Watson</title><content type="html">&lt;a href="http://www.amazon.com/gp/product/B00570ALPC/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=gitblam-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B00570ALPC" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=B00570ALPC&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=gitblam-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;
&lt;br /&gt;
This is a classic.&lt;br /&gt;
&lt;br /&gt;
The scientific race between James D. Watson (the author) and Francis Crick at Cambridge vs Linus Pauling at Cal Tech to solve the structure of DNA is vividly described. The book was written not as an objective science history, but as a record of what the author thought, felt and experienced in the midst of that race, and begins its preface with this:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Here I relate my version of how the structure of DNA was discovered.&lt;/blockquote&gt;
Because the author &lt;i&gt;was&lt;/i&gt;&amp;nbsp;in the centre of this adventure, there is no other way for him to tell his story than as a personal recollection. Nobody can be an objective third-person observer and reporter of important events around himself that changed the world. And because the book is written from that perspective, the author's adrenaline rush during the fierce competition &lt;i&gt;feels&lt;/i&gt;&amp;nbsp;even more real to the readers.&lt;br /&gt;
&lt;br /&gt;
After examining the draft of a paper sent to Peter Pauling (Linus's son, who was then at Cambridge) from their competitor, Linus Pauling, in which Linus described&amp;nbsp;his solution to the puzzle of DNA structure, the Cambridge group concludes that Linus's solution cannot possibly be correct, and congratulates that they haven't lost their race yet. Then:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
On our way to Soho for supper I returned to the problem of Linus, emphasizing that smiling too long over his mistake might be fatal. The position would be far safer if Pauling had been merely wrong instead of looking like a fool. Soon, if not already, he would be at it day and night.&lt;/blockquote&gt;
When I read this passage, this somehow reminded me of the excitement and tense sense of competition I felt during the early days of &lt;a href="http://git-scm.com/" target="_blank"&gt;Git&lt;/a&gt; development. Of course, I was competing with the other&amp;nbsp;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;&lt;/span&gt;&amp;nbsp;Linus (Torvalds, who is known for his Linux operating system, originally wrote Git and was actively developing it with many other brilliant software developers in collaboration) back then.&lt;br /&gt;
&lt;br /&gt;
When there was an issue to solve, everybody rushed to present his own bright idea, and it was a race to show a clean, clever and useful solution to improve the system. When other guys went in a wrong direction and wasted their time, you had more time to polish your work and beat them to your better solution.&lt;br /&gt;
&lt;br /&gt;
I do not think that the similarity between the way how the scientific race and the open source race work stops there. Even though the participants all want the glory of being the first to reach the right solution, at the highest level, everybody is working collectively towards the same goal, be it the advancement of their scientific field, or the improved user experience of their software. The subtle balance between competition and collaboration is the same in both endeavours.&lt;br /&gt;
&lt;br /&gt;
The book depicts Maurice Wilkins of King's College, the other scientist who shared the Nobel with Watson and Crick, as somebody who had access to good X-ray crystallography data that eventually helped the discovery by Watson and Crick, but didn't solve the puzzle himself even though he was an expert in the field of DNA research.&lt;br /&gt;
&lt;br /&gt;
Given that the way Watson's book is written from his own perspective, I suspect that the aptly titled book&amp;nbsp;&lt;a href="http://www.amazon.com/gp/product/B000SHG9IW/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=gitblam-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000SHG9IW"&gt;The Third Man of the Double Helix : An Autobiography&lt;/a&gt;&amp;nbsp;by Wilkins himself is a must-read for anybody who reads this book to see both sides of the coin. It is already on my "To Read" list.&lt;br /&gt;
&lt;br /&gt;
The book was a very satisfying read and I really enjoyed it. It was given by a happy Git user Ben (thanks!) as a present to me the other day, picked from &lt;a href="http://www.amazon.com/gp/registry/wishlist/1513KNZE30W63"&gt;my Amazon wishlist&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-4286246125795649490?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aeD9n1xvRaOriTAc1g3V6riTUfo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aeD9n1xvRaOriTAc1g3V6riTUfo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aeD9n1xvRaOriTAc1g3V6riTUfo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aeD9n1xvRaOriTAc1g3V6riTUfo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/w9nqj9pbMUU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/4286246125795649490/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=4286246125795649490&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/4286246125795649490?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/4286246125795649490?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/w9nqj9pbMUU/double-helix-by-james-d-watson.html" title="The Double Helix by James D. Watson" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/03314622583641323356</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-VqymtuBwF3s/TbSVjoOVPdI/AAAAAAAAAkI/_3AOjoH0ESk/s220/x.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2012/02/double-helix-by-james-d-watson.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENQ3s7fCp7ImA9WhRUGUQ.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-4335540896672905629</id><published>2012-01-31T00:31:00.000-08:00</published><updated>2012-01-31T00:31:32.504-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T00:31:32.504-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UnGit" /><category scheme="http://www.blogger.com/atom/ns#" term="Thanks" /><title>The Vertical Farm: Feeding the World in the 21st Century, by Dickson Despommier</title><content type="html">&lt;a href="http://www.amazon.com/dp/B003P8QMHY" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-sM-O6GN4DhY/TyeSd0T5cHI/AAAAAAAAEOM/oi9OSerJd48/s200/VerticalFarm.jpg" width="200" /&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;This &lt;a href="http://www.amazon.com/Vertical-Farm-Feeding-Century-ebook/dp/B003P8QMHY" target="_blank"&gt;book&lt;/a&gt; was given to me by a happy &lt;a href="http://git-scm.com/" target="_blank"&gt;Git&lt;/a&gt; user (&lt;span style="background-color: white;"&gt;Thanks, Michael!&lt;/span&gt;) as a gift, picked from &lt;a href="http://www.amazon.com/wishlist/1513KNZE30W63" target="_blank"&gt;my wish list&lt;/a&gt; at Amazon.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;The book was fascinating and somewhat disappointing at the same time. Perhaps disappointing is not a good word, and I should say &lt;i&gt;somewhat frustrating.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: white; font-family: inherit; line-height: 19px;"&gt;I found that the first half of the main argument of the book very convincing: conventional soil-based agriculture that relies heavily on agro-chemicals (herbicide, insecticide and fertilizer) and causes terrible damage to the environment&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; font-family: inherit; line-height: 19px;"&gt;due to run-off water&lt;/span&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="line-height: 19px;"&gt;, is not simply sustainable. The other half of the premise, however, looked rather sketchy, day-dreaming and hand-wavey: multi-story high-tech greenhouses can be built&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; line-height: 19px;"&gt;inside city boundaries,&lt;/span&gt;&lt;span style="background-color: white; line-height: 19px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="line-height: 19px;"&gt;and using the state of the art scientific method (e.g. supplying the plants with purified water spiked with necessary nutrients and growing them&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 19px;"&gt;aeroponically&lt;/span&gt;&lt;span style="background-color: white; font-family: inherit;"&gt;&lt;span style="line-height: 19px;"&gt;; lighting with OLED that emits only the wavelengths absorbed by&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; line-height: 19px;"&gt;chlorophyll; burning plant waste with plasma-arc gassification) sufficient amount of high-quality food can be produced, freeing vast farmland that we have been wasting back to the nature, while reclaiming as much water and energy as possible.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: white; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="background-color: white; line-height: 19px;"&gt;I am reasonably sure that the author has some solid numbers to convince policy people about the benefit and feasibility of his dream, but I found them solely lacking in the book. Here is only one passage with some numbers I remember:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="background-color: white; color: #333333; line-height: 18px;"&gt;&lt;span style="font-family: inherit;"&gt;One strawberry farmer who wishes to remain anonymous decided to replace his now destroyed 30 acre farm by constructing a high-tech greenhouse with a 1 acre footprint. Using hydrostackers, he was able to produce the equivalent of 29 acres’ worth of fruit, with year-round production. He elected to return the rest of his farm to its natural setting by simply leaving it alone. Within two years, the understory had returned and the biodiversity of the land improved dramatically.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style="color: #333333;"&gt;&lt;span style="line-height: 18px;"&gt;That is a nice story, but isn't strawberry rather special?&lt;span style="font-family: inherit;"&gt; I&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; line-height: 19px;"&gt;&lt;span style="font-family: inherit;"&gt;t is sufficiently high-value kind of produce that would pay for a farmer to invest in high-tech. If the book had some back-of-the-envelope attempt at some math, like, "To supply a small city of 20,000 people, we would need X tons of grains, Y tons of cabbage, Z tons of ..., and it would need to treat W gallons of black water a year. A vertical farm consisting of N buildings (M stories high) of L sqft footprint would be sufficient for all of the above. The net intake of water and energy, offsetting with the water and energy reclaimed, would be such and such", even if the numbers were qualified with "this is just a back-of-the envelope with my own optimistic assumption that in 5 years technology will sufficiently advance to solve &lt;i&gt;this&lt;/i&gt; and &lt;i&gt;that&lt;/i&gt; problems", it would have been able to convert me, a mere interested reader, into a &lt;i&gt;believer&lt;/i&gt;, somebody who shares the dream.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;In the chapter on funding, after discussing that not everything is money and governments will be the likely sources of&amp;nbsp;&lt;/span&gt;sponsorship&lt;span style="font-family: inherit;"&gt;, Dickson alludes to commercial sponsorship possibilities, and there I found this passage:&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="background-color: white; color: #333333; line-height: 18px;"&gt;&lt;span style="font-family: inherit;"&gt;Google would be my first choice. This giant has an altruistic streak a mile wide. Google could afford to promote the concept with significant financial aid.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style="font-family: inherit;"&gt;This&lt;/span&gt;&amp;nbsp;is what made me the most frustrated about the book, because that was exactly what I was feeling while reading earlier parts of the book. Google &lt;i&gt;is&lt;/i&gt;&amp;nbsp;a green company; it for example uses many solar photo-voltaic panels (1.6MW), supplying about 30% peak electricity in the four main buildings. Significant number of employees take company shuttles, instead of driving their own cars to work.&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;If I were to bump into Larry or Sergey at the campus tomorrow and have a chance to chat with them (not likely to happen, as my workplace is on the other side of the campus that is a mile wide), I would love to suggest them that we build an experimental vertical farm near the Mountain View campus, supplying all 20+ cafes and micro-kitchens. Even though the book managed to convert me enough to be very much attracted to the idea, it didn't give me enough to come up with an intelligently-sounding answer to a very basic question, such as "OK, we will go ahead with Dickson's idea&lt;span style="background-color: white; line-height: 19px;"&gt;—how much space and how much workers do you want?"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;Nevertheless, the author's enthusiasm jumps at you from every page, while deep knowledge and experience in his professional area (the author is&amp;nbsp;&lt;span style="background-color: white; line-height: 19px;"&gt;a microbiologist, ecologist and Professor of Public Health in Environmental Health Sciences at Columbia University) showing through between lines. It&amp;nbsp;was&lt;i&gt;&amp;nbsp;&lt;/i&gt;a very pleasant read, and I would highly recommend it to anybody.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-4335540896672905629?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Na8-a0N9hEL2Zq6rN5zrFWyVH54/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Na8-a0N9hEL2Zq6rN5zrFWyVH54/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Na8-a0N9hEL2Zq6rN5zrFWyVH54/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Na8-a0N9hEL2Zq6rN5zrFWyVH54/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/HeHFVFHrBGI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/4335540896672905629/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=4335540896672905629&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/4335540896672905629?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/4335540896672905629?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/HeHFVFHrBGI/vertical-farm-feeding-world-in-21st.html" title="The Vertical Farm: Feeding the World in the 21st Century, by Dickson Despommier" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-sM-O6GN4DhY/TyeSd0T5cHI/AAAAAAAAEOM/oi9OSerJd48/s72-c/VerticalFarm.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2012/01/vertical-farm-feeding-world-in-21st.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EFQH09fSp7ImA9WhRUF00.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-7010509987913832668</id><published>2012-01-27T13:29:00.000-08:00</published><updated>2012-01-27T14:00:11.365-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T14:00:11.365-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="Announce" /><title>Git 1.7.9</title><content type="html">The latest feature release Git 1.7.9 is now available at the usual places.&lt;br /&gt;
&lt;br /&gt;
The release tarballs are found at:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://code.google.com/p/git-core/downloads/list&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
Also the following public repositories all have a copy of the v1.7.9 tag and the master branch that the tag points at:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; url = git://repo.or.cz/alt-git.git&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; url = https://code.google.com/p/git-core/&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; url = git://git.sourceforge.jp/gitroot/git-core/git.git&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; url = https://github.com/gitster/git&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
As already reported in various places (including &lt;a href="https://lwn.net/Articles/473220/" target="_blank"&gt;lwn.net&lt;/a&gt; and &lt;a href="https://plus.google.com/102150693225130002912/posts/jXEoT2Acrvm" target="_blank"&gt;Linus Torvalds&lt;/a&gt;&lt;a href="http://git-blame.blogspot.com/2012/01/using-signed-tag-in-pull-requests.html" target="_blank"&gt;&lt;/a&gt;), the most notable feature in this release is unarguably the improved support for the pull-request based workflow, in which participants can exchange their histories more securely, even over a potentially untrustable hosting service. This is truly an end-to-end support, starting from the inception of a topic branch with its own  description, use of the branch description and the message in a signed tag  in a pull-request message, use of the message in a signed tag in the resulting merge commit and verification  of the signature when reviewing the resulting history (see &lt;a href="http://git-blame.blogspot.com/2012/01/using-signed-tag-in-pull-requests.html" target="_blank"&gt;this&lt;/a&gt; for a tutorial).&lt;br /&gt;
&lt;br /&gt;
There also are many other updates that hopefully make working with Git a more delightful experience. Highlights are: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;"Credential helper" support, that allows integration of HTTP authentication with platform-native key-chain implementations; &lt;/li&gt;
&lt;li&gt;New progress eye-candy output for a couple of lengthy operations e.g. fsck;&lt;/li&gt;
&lt;li&gt;I18N framework enabled for both C and scripted Porcelains;&lt;/li&gt;
&lt;li&gt;Improvement in prompted input from an interactive terminal (most notably, reading the username for HTTP authentication);&lt;/li&gt;
&lt;li&gt;You can now run "git checkout -B &amp;lt;current branch&amp;gt; &amp;lt;elsewhere&amp;gt;" to correct the tip of the checked out branch; &lt;/li&gt;
&lt;li&gt;As another step to support large files better, "git add" stores large files directly into a new packfile without having to hold everything in-core at once; and &lt;/li&gt;
&lt;li&gt;"Signed commit" support, that lets a commit object record a GPG signature on it.&lt;/li&gt;
&lt;/ul&gt;&amp;nbsp;Have fun.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-7010509987913832668?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rHCyV3CcinT0EKN4TQ_4Jtja1Io/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rHCyV3CcinT0EKN4TQ_4Jtja1Io/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rHCyV3CcinT0EKN4TQ_4Jtja1Io/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rHCyV3CcinT0EKN4TQ_4Jtja1Io/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/Z-xVefnO3SE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/7010509987913832668/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=7010509987913832668&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/7010509987913832668?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/7010509987913832668?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/Z-xVefnO3SE/git-179.html" title="Git 1.7.9" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2012/01/git-179.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUNQnk8eyp7ImA9WhRUFEo.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-832185523675646611</id><published>2012-01-24T22:45:00.000-08:00</published><updated>2012-01-24T22:51:33.773-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-24T22:51:33.773-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Preparing for the next cycle</title><content type="html">While hunting for last-minute embarrasing bugs before the final release of upcoming Git version 1.7.9, those in the Git development community have been busy preparing their own topics to scratch various itches of their own. As we have been in the pre-release feature freeze for about three weeks by now, there have been quite a few such topics, waiting to become part of the release after 1.7.9, being tested in the 'next' branch. I counted 48 patches spanning 23 topics.&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Kind&lt;/th&gt;&lt;th&gt;Topics&lt;/th&gt;&lt;th&gt;Patches&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fixes&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;UI, Workflows &amp;amp; Features&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Performance&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Internal Implementation&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
I've been re-reading them to check their sanity for the past several days, and they all look more or less ready to go. I expect that the next cycle after version 1.7.9 is released will be a short one, just like this cycle leading to 1.7.9 has been.&lt;br /&gt;
&lt;br /&gt;
One of the potentially contentious topic is a change to the &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;git merge&lt;/span&gt;&lt;/span&gt; command. In the versions up to the upcoming 1.7.9, when the changes from histories being consolidated merge cleanly without conflict, the command records the result without any extra user interaction, using a commit log message that is auto-generated based on the name and contents of the branch being merged.&lt;br /&gt;
&lt;br /&gt;
Linus recently admitted that this is one of the regrettable UI mistakes we made in the early days of Git. This behaviour led too many people to blindly make merge commits that merge into their topic branches, whose purpose is to develop a feature and fix in isolation, of the upstream branch, whose purpose is to integrate assorted topics and move the overall project forward, without justifying &lt;i&gt;why&lt;/i&gt; such a merge in a &lt;i&gt;wrong&lt;/i&gt; direction was necessary to advance their topics. Of course, &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;git commit --amend&lt;/span&gt;&lt;/span&gt; command can be used to update the merge commit log message after &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;git merge&lt;/span&gt; is done, and the recent &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;git merge&lt;/span&gt; command can be given the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;--edit&lt;/span&gt; option to open an editor, but in practice, not many people bother to perform such an &lt;i&gt;extra&lt;/i&gt; step only to strive for long term health of the project history.&lt;br /&gt;
&lt;br /&gt;
Just like the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;git commit&lt;/span&gt; command encourages users to explain and justify their non-merge commits by opening an editor and have them describe the commit, the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;git merge&lt;/span&gt; command in the version of Git after the upcoming version 1.7.9,&amp;nbsp; when used interactively, will open an editor, so that the user can further edit the auto-generated merge commit log message and explain &lt;i&gt;why&lt;/i&gt; the merge was made.&lt;br /&gt;
&lt;br /&gt;
Oh, I've also been working on a topic that will get ready far in the future, but that will be another article.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-832185523675646611?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2bcupoQi3qYHV37ttZaMS0fi8E0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2bcupoQi3qYHV37ttZaMS0fi8E0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2bcupoQi3qYHV37ttZaMS0fi8E0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2bcupoQi3qYHV37ttZaMS0fi8E0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/gJausaCVeJk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/832185523675646611/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=832185523675646611&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/832185523675646611?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/832185523675646611?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/gJausaCVeJk/preparing-for-next-cycle.html" title="Preparing for the next cycle" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2012/01/preparing-for-next-cycle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMDRngzfyp7ImA9WhRVGUk.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-5224043846705315995</id><published>2012-01-18T19:07:00.000-08:00</published><updated>2012-01-18T19:07:57.687-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-18T19:07:57.687-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Git 1.7.7.6, 1.7.8.4 and 1.7.9-rc2</title><content type="html">Three releases are out on the same day, which is not very unusual for me.&lt;br /&gt;
&lt;br /&gt;
The two maintenance releases are primarily to correct an obscure bug introduced in 1.7.7.1 when you use wildcard pathspec to run "git diff $commit" command.&lt;br /&gt;
&lt;br /&gt;
On the 'master' front, the second release candidate seems to be quite solid and includes the how-to document I earlier posted a &lt;a href="http://git-blame.blogspot.com/2012/01/using-signed-tag-in-pull-requests.html" target="_blank"&gt;preview&lt;/a&gt; for.&lt;br /&gt;
&lt;br /&gt;
Hopefully we can have an uneventful final 1.7.9 release by the end of this month.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-5224043846705315995?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EK3grea7Qcil6HOgWoWSh9woIiw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EK3grea7Qcil6HOgWoWSh9woIiw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EK3grea7Qcil6HOgWoWSh9woIiw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EK3grea7Qcil6HOgWoWSh9woIiw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/V4U2TRBspng" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/5224043846705315995/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=5224043846705315995&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/5224043846705315995?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/5224043846705315995?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/V4U2TRBspng/git-1776-1784-and-179-rc2.html" title="Git 1.7.7.6, 1.7.8.4 and 1.7.9-rc2" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2012/01/git-1776-1784-and-179-rc2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIMQH4-cCp7ImA9WhRbEEU.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-7794421940601879369</id><published>2012-01-17T14:58:00.000-08:00</published><updated>2012-02-01T00:06:21.058-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-01T00:06:21.058-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Using signed tag in pull requests</title><content type="html">&lt;style type="text/css"&gt;
/* Debug borders */
p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
/*
  border: 1px solid red;
*/
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

tt {
  color: navy;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  font-family: sans-serif;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}

div.sectionbody {
  font-family: serif;
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li &gt; p {
  margin-top: 0;
}

pre {
  padding: 0;
  margin: 0;
}

span#author {
  color: #527bbd;
  font-family: sans-serif;
  font-weight: bold;
  font-size: 1.1em;
}
span#email {
}
span#revnumber, span#revdate, span#revremark {
  font-family: sans-serif;
}

div#footer {
  font-family: sans-serif;
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
div#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
div#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

div#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-family: sans-serif;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock &gt; div.content {
  background: #ffffee;
  border: 1px solid silver;
  padding: 0.5em;
}

div.listingblock &gt; div.content {
  border: 1px solid silver;
  background: #f4f4f4;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #dddddd;
  color: #777777;
}

div.quoteblock &gt; div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock &gt; div.content {
  white-space: pre;
}
div.verseblock &gt; div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock &gt; div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd &gt; *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

div.tableblock &gt; table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-family: sans-serif;
  font-weight: bold;
}
tfoot {
  font-weight: bold;
}
td &gt; div.verse {
  white-space: pre;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock &gt; table[frame="void"] {
  border-style: none;
}
div.tableblock &gt; table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock &gt; table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}


@media print {
  div#footer-badges { display: none; }
}

div#toc {
  margin-bottom: 2.5em;
}

div#toctitle {
  color: #527bbd;
  font-family: sans-serif;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}
/* Workarounds for IE6's broken and incomplete CSS2. */

div.sidebar-content {
  background: #ffffee;
  border: 1px solid silver;
  padding: 0.5em;
}
div.sidebar-title, div.image-title {
  color: #527bbd;
  font-family: sans-serif;
  font-weight: bold;
  margin-top: 0.0em;
  margin-bottom: 0.5em;
}

div.listingblock div.content {
  border: 1px solid silver;
  background: #f4f4f4;
  padding: 0.5em;
}

div.quoteblock-attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock-content {
  white-space: pre;
}
div.verseblock-attribution {
  padding-top: 0.75em;
  text-align: left;
}

div.exampleblock-content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

/* IE6 sets dynamically generated links as visited. */
div#toc a:visited { color: blue; }
&lt;/style&gt;&lt;br /&gt;
&lt;div id="content"&gt;
&lt;div id="preamble"&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
[edit: &lt;a href="http://git-blame.blogspot.com/2011/08/how-to-inject-malicious-commit-to-git.html" target="_blank"&gt;This&lt;/a&gt; is where the backstory behind this new feature begins.]&lt;br /&gt;
(This is a preview of an howto article meant to be distributed as part of upcoming v1.7.9 release of Git).&lt;br /&gt;
A typical distributed workflow using Git is for a contributor to fork a project, build on it, publish the result to her public repository, and ask the "upstream" person (often the owner of the project where she forked from) to pull from her public repository. Requesting such a "pull" is made easy by the &lt;tt&gt;git request-pull&lt;/tt&gt; command.&lt;/div&gt;
&lt;div class="paragraph"&gt;
Earlier, a typical pull request may have started like this:&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre&gt;&lt;tt&gt; The following changes since commit 406da78032179...:

   Froboz 3.2 (2011-09-30 14:20:57 -0700)

 are available in the git repository at:

   example.com:/git/froboz.git for-xyzzy&lt;/tt&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
followed by a shortlog of the changes and a diffstat.&lt;/div&gt;
&lt;div class="paragraph"&gt;
The request was for a branch name (e.g. &lt;tt&gt;for-xyzzy&lt;/tt&gt;) in the public repository of the contributor, and even though it stated where the contributor forked her work from, the message did not say anything about the commit to expect at the tip of the for-xyzzy branch. If the site that hosts the public repository of the contributor cannot be fully trusted, it was unnecessarily hard to make sure what was pulled by the integrator was genuinely what the contributor had produced for the project. Also there was no easy way for third-party auditors to later verify the resulting history.&lt;/div&gt;
&lt;div class="paragraph"&gt;
Starting from Git release v1.7.9, a contributor can add a signed tag to the commit at the tip of the history and ask the integrator to pull that signed tag. When the integrator runs &lt;tt&gt;git pull&lt;/tt&gt;, the signed tag is automatically verified to assure that the history is not tampered with. In addition, the resulting merge commit records the content of the signed tag, so that other people can verify that the branch merged by the integrator was signed by the contributor, without fetching the signed tag used to validate the pull request separately and keeping it in the refs namespace.&lt;/div&gt;
&lt;div class="paragraph"&gt;
This document describes the workflow between the contributor and the integrator, using Git v1.7.9 or later.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="_a_contributor_or_a_lieutenant"&gt;
A contributor or a lieutenant&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
After preparing her work to be pulled, the contributor uses &lt;tt&gt;git tag -s&lt;/tt&gt; to create a signed tag [&lt;strong&gt;1&lt;/strong&gt;]:&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre&gt;&lt;tt&gt; $ git checkout work
 $ ... "git pull" from sublieutenants, "git commit" your own work ...
 $ git tag -s -m "Completed frotz feature" frotz-for-xyzzy work&lt;/tt&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
and pushes the tag out to her publishing repository [&lt;strong&gt;2&lt;/strong&gt;]. There is no need to push the &lt;tt&gt;work&lt;/tt&gt; branch or anything else:&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre&gt;&lt;tt&gt; $ git push example.com:/git/froboz.git/ +frotz-for-xyzzy&lt;/tt&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
Then the contributor prepares a message to request a "pull":&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre&gt;&lt;tt&gt; $ git request-pull v3.2 example.com:/git/froboz.git/ frotz-for-xyzzy &amp;gt;msg.txt&lt;/tt&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
The arguments are:&lt;/div&gt;
&lt;div class="olist arabic"&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt; the version of the integrator’s commit the contributor based her work on; &lt;/li&gt;
&lt;li&gt; the URL of the repository, to which the contributor has pushed what she   wants to get pulled; and &lt;/li&gt;
&lt;li&gt; the name of the tag the contributor wants to get pulled (earlier, she could   write only a branch name here). &lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
The resulting msg.txt file begins like so:&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre&gt;&lt;tt&gt; The following changes since commit 406da78032179...:

   Froboz 3.2 (2011-09-30 14:20:57 -0700)

 are available in the git repository at:

   example.com:/git/froboz.git tags/frotz-for-xyzzy

 for you to fetch changes up to 703f05ad5835c...:

   Add tests and documentation for frotz (2011-12-02 10:02:52 -0800)

 -----------------------------------------------
 Completed frotz feature
 -----------------------------------------------&lt;/tt&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
followed by a shortlog of the changes and a diffstat.  Comparing this with the earlier illustration of the output from the traditional &lt;tt&gt;git request-pull&lt;/tt&gt; command, the reader should notice that:&lt;/div&gt;
&lt;div class="olist arabic"&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt; The tip commit to expect is shown to the integrator; and &lt;/li&gt;
&lt;li&gt; The signed tag message is shown prominently between the dashed lines   before the shortlog. &lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
The latter is why the contributor would want to justify why pulling her work is worthwhile when creating the signed tag.  The contributor then opens her favorite MUA, reads msg.txt, edits and sends it to her upstream integrator.&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="_integrator"&gt;
Integrator&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
After receiving such a pull request message, the integrator fetches and integrates the tag named in the request, with:&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre&gt;&lt;tt&gt; $ git pull example.com:/git/froboz.git/ tags/frotz-for-xyzzy&lt;/tt&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
This operation will always open an editor to allow the integrator to fine tune the commit log message when merging a signed tag.  Also, pulling a signed tag will always create a merge commit even when the integrator does not have any new commit since the contributor’s work forked (i.e. &lt;em&gt;fast forward&lt;/em&gt;), so that the integrator can properly explain what the merge is about and why it was made.&lt;/div&gt;
&lt;div class="paragraph"&gt;
In the editor, the integrator will see something like this:&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre&gt;&lt;tt&gt; Merge tag 'frotz-for-xyzzy' of example.com:/git/froboz.git/

 Completed frotz feature
 # gpg: Signature made Fri 02 Dec 2011 10:03:01 AM PST using RSA key ID 96AFE6CB
 # gpg: Good signature from "Con Tributor &amp;lt;nitfol@example.com&amp;gt;"&lt;/tt&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
provided if the signature in the signed tag verifies correctly. Notice that the message recorded in the signed tag "Completed frotz feature" appears here, and again that is why it is important for the contributor to explain her work well when creating the signed tag.&lt;/div&gt;
&lt;div class="paragraph"&gt;
As usual, the lines commented with &lt;tt&gt;#&lt;/tt&gt; are stripped out. The resulting commit records the signed tag used for this validation in a hidden field so that it can later be used by others to audit the history. There is no need for the integrator to keep a separate copy of the tag in his repository (i.e. &lt;tt&gt;git tag -l&lt;/tt&gt; won’t list frotz-for-xyzzy tag in the above example), and there is no need to publish the tag to his public repository, either.&lt;/div&gt;
&lt;div class="paragraph"&gt;
After the integrator responds to the pull request and her work becomes part of the permanent history, the contributor can remove the tag from the publishing repository, if she chooses, in order to keep the tag namespace of her public repository clean, with:&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre&gt;&lt;tt&gt; $ git push example.com:/git/froboz.git :frotz-for-xyzzy&lt;/tt&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="_auditors"&gt;
Auditors&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
The &lt;tt&gt;--show-signature&lt;/tt&gt; option can be given to &lt;tt&gt;git log&lt;/tt&gt; or &lt;tt&gt;git show&lt;/tt&gt; and shows the verification status of the embedded signed tag in merge commits created when the integrator responded to a pull request of a signed tag.&lt;/div&gt;
&lt;div class="paragraph"&gt;
A typical output from &lt;tt&gt;git show --show-signature&lt;/tt&gt; may look like this:&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre&gt;&lt;tt&gt; $ git show --show-signature
 commit 02306ef6a3498a39118aef9df7975bdb50091585
 merged tag 'frotz-for-xyzzy'
 gpg: Signature made Fri 06 Jan 2012 12:41:49 PM PST using RSA key ID 96AFE6CB
 gpg: Good signature from "Con Tributor &amp;lt;nitfol@example.com&amp;gt;"
 Merge: 406da78 703f05a
 Author: Inte Grator &amp;lt;xyzzy@example.com&amp;gt;
 Date:   Tue Jan 17 13:49:41 2012 -0800

     Merge tag 'frotz-for-xyzzy' of example.com:/git/froboz.git/

     Completed frotz feature

     * tag 'frotz-for-xyzzy' (100 commits)
       Add tests and documentation for frotz
       ...&lt;/tt&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
There is no need to fetch and keep a signed tag like &lt;tt&gt;frotz-for-xyzzy&lt;/tt&gt; that is used for frequent "pull" exchange in the long term just for such auditing purposes, as the signature is recorded as part of the merge commit.&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="_footnotes"&gt;
Footnotes&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;strong&gt;1&lt;/strong&gt; This example uses the &lt;tt&gt;-m&lt;/tt&gt; option to create a signed tag with just a single liner message, but this is for illustration purposes only. It is advisable to compose a well-written explanation of what the topic does to justify why it is worthwhile for the integrator to pull it, as this message will eventually become part of the final history after the integrator responds to the pull request.&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;strong&gt;2&lt;/strong&gt; The example uses plus at the beginning of &lt;tt&gt;+frotz-for-xyzzy&lt;/tt&gt; to allow forcing the update of a tag, as the same contributor may want to reuse a signed tag with the same name after the previous pull request has already been responded to.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-7794421940601879369?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vtqp2Cy_kg4Sr0I6RhsHQNZTHNY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vtqp2Cy_kg4Sr0I6RhsHQNZTHNY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vtqp2Cy_kg4Sr0I6RhsHQNZTHNY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vtqp2Cy_kg4Sr0I6RhsHQNZTHNY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/I9b6lZkQKAw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/7794421940601879369/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=7794421940601879369&amp;isPopup=true" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/7794421940601879369?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/7794421940601879369?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/I9b6lZkQKAw/using-signed-tag-in-pull-requests.html" title="Using signed tag in pull requests" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2012/01/using-signed-tag-in-pull-requests.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMNRXozeSp7ImA9WhRVFEQ.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-3587324711597154007</id><published>2012-01-13T15:31:00.000-08:00</published><updated>2012-01-13T15:31:34.481-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-13T15:31:34.481-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="Announce" /><title>Git 1.7.9-rc1 is out</title><content type="html">This is supposed to be feature complete for the upcoming release, and we are now in the pre-release feature freeze from now on (see &lt;a href="http://tinyurl.com/gitcal"&gt;tinyurl.com/gitcal&lt;/a&gt; for the release schedule calendar).&lt;br /&gt;
&lt;br /&gt;
Minor and obvious bug fixes and documentation updates are appreciated, but the primary focus for the coming few weeks will be on regression hunting and fixes.&lt;br /&gt;
&lt;br /&gt;
I also suspect that the documentation to the new features may still be sketchy, and we may want to fix that by the final release. The "pulling signed tag" topic, for example, may want a new article in Documentation/howto/ area, perhaps lifting some text from &lt;a href="http://git-blame.blogspot.com/2011/12/pulling-signed-tag-is-already-in-use-in.html" target="_blank"&gt;here&lt;/a&gt;. I may try to do an initial draft over the long weekend.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-3587324711597154007?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ns40Fj6wsZ9dEPbbKsT3jitIXlU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ns40Fj6wsZ9dEPbbKsT3jitIXlU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ns40Fj6wsZ9dEPbbKsT3jitIXlU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ns40Fj6wsZ9dEPbbKsT3jitIXlU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/AkQIo2VLKqc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/3587324711597154007/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=3587324711597154007&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/3587324711597154007?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/3587324711597154007?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/AkQIo2VLKqc/git-179-rc1-is-out.html" title="Git 1.7.9-rc1 is out" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2012/01/git-179-rc1-is-out.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQMRHYyeip7ImA9WhRWGEU.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-6108658436747293048</id><published>2012-01-06T13:47:00.000-08:00</published><updated>2012-01-06T14:19:45.892-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-06T14:19:45.892-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="Announce" /><title>Git 1.7.9-rc0 and 1.7.8.3</title><content type="html">I just tagged Git 1.7.9-rc0, which is the zeroth release candidate in the sense that it is supposed to be almost feature complete and marks the beginning of feature freeze.&lt;br /&gt;
&lt;br /&gt;
We have achieved quite a lot during this cycle. All the new things that we initially listed that we want to have are in it:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Better and more auditable communication in pull based workflow by 
supporting electronically signed pull requests that records more 
meaningful branch description;&lt;/li&gt;
&lt;li&gt;More pleasant end-user experience by providing credential helper API
 to allow platform native keychain implementations to supply 
authentication material during "git push" and "git pull";&lt;/li&gt;
&lt;li&gt;i18n of messages out of the end-user facing programs; and&lt;/li&gt;
&lt;li&gt;Better large-contents support.&lt;/li&gt;
&lt;/ul&gt;
Even though we didn't originally plan to, this also includes support for signed commits as a part of the first topic in the above list.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I also tagged 1.7.8.3 from the tip of the maintenance track. The fixes in this maintenance release are all included in 1.7.9-rc0 release.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-6108658436747293048?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wFzjKIsOZthy78KJn5pC0qTh0kc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wFzjKIsOZthy78KJn5pC0qTh0kc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wFzjKIsOZthy78KJn5pC0qTh0kc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wFzjKIsOZthy78KJn5pC0qTh0kc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/ORxIF8aK_9s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/6108658436747293048/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=6108658436747293048&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/6108658436747293048?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/6108658436747293048?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/ORxIF8aK_9s/git-179-rc0.html" title="Git 1.7.9-rc0 and 1.7.8.3" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2012/01/git-179-rc0.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUHQ389cCp7ImA9WhRVGEo.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-494029641687304609</id><published>2012-01-04T16:34:00.000-08:00</published><updated>2012-01-17T23:37:12.168-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T23:37:12.168-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Adding finishing touches to the "pulling signed tags" topic</title><content type="html">[edit: a how-to article will be included in the 1.7.9 release; &lt;a href="http://git-blame.blogspot.com/2012/01/using-signed-tag-in-pull-requests.html" target="_blank"&gt;here&lt;/a&gt; is a preview] &lt;br /&gt;
&lt;br /&gt;
One of the more important topics scheduled for the upcoming Git 1.7.9 release is for a contributor to ask the integrator to pull a signed tag and for the integrator to merge such a signed tag to the history. This &lt;a href="http://git-blame.blogspot.com/2011/12/pulling-signed-tag-is-already-in-use-in.html" target="_blank"&gt;has already been used&lt;/a&gt; in the field by Linus but there wasn't a good automated way to view and verify the signature after such a merge is made.&lt;br /&gt;
&lt;br /&gt;
Until now.&lt;br /&gt;
&lt;br /&gt;
I started working on a follow-up topic to teach "git log --show-signature" about these merge commits, and have a working code in today's proposed updates branch ('pu'). Hopefully we can have this feature, possibly with some clean-ups, in the same 1.7.9 release, if we get enough help from the contributors in the development community.&lt;br /&gt;
&lt;br /&gt;
Knock wood...&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-494029641687304609?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6S_oQFToiimUPae6smgHRX6JRnA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6S_oQFToiimUPae6smgHRX6JRnA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6S_oQFToiimUPae6smgHRX6JRnA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6S_oQFToiimUPae6smgHRX6JRnA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/M7H6x_pebMQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/494029641687304609/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=494029641687304609&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/494029641687304609?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/494029641687304609?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/M7H6x_pebMQ/adding-finishing-touches-to-pulling.html" title="Adding finishing touches to the &quot;pulling signed tags&quot; topic" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/03314622583641323356</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-VqymtuBwF3s/TbSVjoOVPdI/AAAAAAAAAkI/_3AOjoH0ESk/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2012/01/adding-finishing-touches-to-pulling.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUECRX04eip7ImA9WhRWF08.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-3241106472767844304</id><published>2011-12-28T16:12:00.000-08:00</published><updated>2012-01-04T16:34:24.332-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-04T16:34:24.332-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Git 1.7.8.2</title><content type="html">&lt;br /&gt;
The latest maintenance release Git 1.7.8.2 is available.&lt;br /&gt;
&lt;br /&gt;
Again, please note that this&amp;nbsp;is not a release with new features (upcoming 1.7.9 is expected to be&amp;nbsp;released late January next year to include the pulling of signed tags and&amp;nbsp;other goodies).&lt;br /&gt;
&lt;br /&gt;
Please upgrade to get the accumulated bugfixes since 1.7.8.1&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-3241106472767844304?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PISq1jQUQer59c6JPa1Oh65V0_o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PISq1jQUQer59c6JPa1Oh65V0_o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PISq1jQUQer59c6JPa1Oh65V0_o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PISq1jQUQer59c6JPa1Oh65V0_o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/-9Ogr2prVBs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/3241106472767844304/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=3241106472767844304&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/3241106472767844304?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/3241106472767844304?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/-9Ogr2prVBs/git-1782.html" title="Git 1.7.8.2" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/03314622583641323356</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-VqymtuBwF3s/TbSVjoOVPdI/AAAAAAAAAkI/_3AOjoH0ESk/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/12/git-1782.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08GSXk5fip7ImA9WhRWEE8.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-1957600619713688449</id><published>2011-12-27T15:50:00.000-08:00</published><updated>2011-12-27T15:50:28.726-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-27T15:50:28.726-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Hopefully the last push-out of the year</title><content type="html">By now I know a bit better than taking the lack of serious regression reports during the holiday weekend as a sign of perfection of the upcoming release, but I will tag 1.7.9-rc0 soonish anyway. As far as I can see, the tip of 'master' branch is now feature complete for 1.7.9, modulo possible bugs and regressions, of course.&lt;br /&gt;
&lt;br /&gt;
We've done &lt;a href="http://git-blame.blogspot.com/2011/12/moving-forward-to-179.html" target=""&gt;quite a lot&lt;/a&gt; during this short cycle leading to 1.7.9 and hopefully we can use the next few weeks squashing any regressions, preparing for a solid release by the end of January 2012 (Knock wood...).&lt;br /&gt;
&lt;br /&gt;
A big Thank-you for all the contributors and testers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-1957600619713688449?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7YMb1-dNek-rJRkq8XE2iAy2Nmw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7YMb1-dNek-rJRkq8XE2iAy2Nmw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7YMb1-dNek-rJRkq8XE2iAy2Nmw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7YMb1-dNek-rJRkq8XE2iAy2Nmw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/RgguQP2cB9A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/1957600619713688449/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=1957600619713688449&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/1957600619713688449?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/1957600619713688449?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/RgguQP2cB9A/hopefully-last-push-out-of-year.html" title="Hopefully the last push-out of the year" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/12/hopefully-last-push-out-of-year.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUFRXg7cSp7ImA9WhRXFU0.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-165028425378750170</id><published>2011-12-21T14:40:00.000-08:00</published><updated>2011-12-21T14:40:14.609-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T14:40:14.609-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="Announce" /><title>Git 1.7.8.1</title><content type="html">The latest maintenance release Git 1.7.8.1 is available.&amp;nbsp; Note that this&lt;br /&gt;
is not a release with new features (upcoming 1.7.9 is expected to be&lt;br /&gt;
released late January next year to include the pulling of signed tags and&lt;br /&gt;
other goodies).&lt;br /&gt;
&lt;br /&gt;
Please upgrade to get the accumulated bugfixes since 1.7.8 release from:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; http://code.google.com/p/git-core/downloads/list&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
and their SHA-1 checksums are:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;198e23e6e50245331590a6159ccdbdbe1792422c&amp;nbsp; git-1.7.8.1.tar.gz&lt;br /&gt;8f674dba39d9ae78928abfe9d924b0855e283e98&amp;nbsp; git-htmldocs-1.7.8.1.tar.gz&lt;br /&gt;b49ce0b4da4f85671693c9b2c6f6a8b8ee65c809&amp;nbsp; git-manpages-1.7.8.1.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;In some codepaths (notably, checkout and merge), the ignore patterns recorded in $GIT_DIR/info/exclude were not honored. They now are.&lt;/li&gt;
&lt;li&gt;"git apply --check" did not error out when given an empty input without any patch.&lt;/li&gt;
&lt;li&gt;"git archive" mistakenly allowed remote clients to ask for commits that are not at the tip of any ref.&lt;/li&gt;
&lt;li&gt;"git checkout" and "git merge" treated in-tree .gitignore and exclude file in $GIT_DIR/info/ directory inconsistently when deciding which untracked files are ignored and expendable.&lt;/li&gt;
&lt;li&gt;LF-to-CRLF streaming filter used when checking out a large-ish blob fell into an infinite loop with a rare input.&lt;/li&gt;
&lt;li&gt;The function header pattern for files with "diff=cpp" attribute did not consider "type *funcname(type param1,..." as the beginning of a function.&lt;/li&gt;
&lt;li&gt;The error message from "git diff" and "git status" when they fail to inspect changes in submodules did not report which submodule they had trouble with.&lt;/li&gt;
&lt;li&gt;After fetching from a remote that has very long refname, the reporting output could have corrupted by overrunning a static buffer.&lt;/li&gt;
&lt;li&gt;"git pack-objects" avoids creating cyclic dependencies among deltas when seeing a broken packfile that records the same object in both the deflated form and as a delta.&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;Also contains minor fixes and documentation updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-165028425378750170?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kDWtJ9w8kDuYd7y8zdHoDRlo9Ss/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kDWtJ9w8kDuYd7y8zdHoDRlo9Ss/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kDWtJ9w8kDuYd7y8zdHoDRlo9Ss/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kDWtJ9w8kDuYd7y8zdHoDRlo9Ss/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/j8tt4Q_OnnM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/165028425378750170/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=165028425378750170&amp;isPopup=true" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/165028425378750170?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/165028425378750170?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/j8tt4Q_OnnM/git-1781.html" title="Git 1.7.8.1" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/12/git-1781.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUANQnw6fyp7ImA9WhRWF0U.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-2609434967321181926</id><published>2011-12-20T22:49:00.000-08:00</published><updated>2012-01-05T10:23:13.217-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-05T10:23:13.217-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>"Pulling signed tag" is already in use in the field</title><content type="html">[update: with &lt;a href="http://git-blame.blogspot.com/2012/01/adding-finishing-touches-to-pulling.html" target="_blank"&gt;finishing touches&lt;/a&gt;, this will be part of 1.7.9 release]&lt;br /&gt;
&lt;br /&gt;
One of the more important features we wanted to have for the next release of Git (1.7.9) is to support a workflow where a pull request for a signed tag is sent to the integrator and &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git pull&lt;/span&gt; in response to the request automatically verifies the GPG signature embedded in the signed tag. See &lt;a href="http://git-blame.blogspot.com/2011/11/helping-kernel-workflow-redux.html" target="_blank"&gt;this&lt;/a&gt; for the background.&lt;br /&gt;
&lt;br /&gt;
Earlier, a typical pull request was for a branch name in the publishing repository of a contributor, and worse yet, the default request message created by the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;git request-pull&lt;/span&gt; command did not even mention what commit to expect as the result of a requested pull, which meant that it was unnecessarily hard to make sure what was pulled was genuinely what the contributor had produced for the integrator and for third-party auditors.&lt;br /&gt;
&lt;br /&gt;
This feature has been cooking in the next branch of the Git project for a while, and recently graduated to the master branch to become part of the upcoming release. Linus has been using the in-development verison, and I learned that he made a commit (&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;2240a7b (Merge tag 'tytso-for-linus-20111214' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4, 2011-12-14)&lt;/span&gt;) that pulls a signed tag in response to a pull request from Ted several days ago already!&lt;br /&gt;
&lt;br /&gt;
It always is satisfying to see that the result of our hard work is used in the field.&lt;br /&gt;
&lt;br /&gt;
The workflow between the contributor (or a lieutenant) and the integrator looks like this:&lt;br /&gt;
&lt;br /&gt;
(contributor)&lt;br /&gt;
&lt;br /&gt;
After preparing the work to be pulled, use "git tag -s" to create a signed tag.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$ git checkout work&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$ ... "git pull" from sublieutenants, "git commit" your own work ...&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$ git tag -s -m "Completed frotz feature" frotz-for-linus work&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
And push the tag out to your publishing repository. You do not have to push your work branch or anything else.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$ R=example.com:/git/froboz.git/&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$ git push $R frotz-for-linus&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then prepare a pull request message.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$ git request-pull v3.2 $R frotz-for-linus &amp;gt;msg.txt&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The arguments are&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;the version of the integrator's commit you based your work on;&lt;/li&gt;
&lt;li&gt; the URL of the repository, to which you have pushed what you want to get pulled; and&lt;/li&gt;
&lt;li&gt;the name of the tag you want to get pulled (earlier, you could only write branch names here).&lt;/li&gt;
&lt;/ol&gt;
The resulting msg.txt file should begin like so:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: x-small;"&gt;The following changes since commit 703f05ad5835cff92b12c29aecf8d724c8c847e2:&lt;br /&gt;&lt;br /&gt;&amp;nbsp; Froboz 3.2 (2011-09-30 14:20:57 -0700)&lt;br /&gt;&lt;br /&gt;are available in the git repository at:&lt;br /&gt;&lt;br /&gt;&amp;nbsp; example.com:/git/froboz.git/ frotz-for-linus&lt;br /&gt;&lt;br /&gt;for you to fetch changes up to 406da7803217998ff6bf5dc69c55b1613556c2f4:&lt;br /&gt;&lt;br /&gt;&amp;nbsp; Add tests and documentation for frotz (2011-12-02 10:02:52 -0800)&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: x-small;"&gt;Completed frotz feature&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;----------------------------------------------------------------&lt;br /&gt;A U Thor (7):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frotz: do not use --index in the short usage output&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frotz: Add tests and documentation for frotz&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The signed tag message is shown prominently between the dashed lines before the short-log, so you may want to justify why pulling your work is worthwhile when creating the signed tag. &lt;br /&gt;
&lt;br /&gt;
Then open your favorite mailer, read msg.txt in, edit and send it to your integrator.&lt;br /&gt;
&lt;br /&gt;
(integrator)&lt;br /&gt;
&lt;br /&gt;
After seeing such a pull request message, fetch and integrate the tag named in the request.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$ git pull example.com:/git/froboz.git/ frotz-for-linus&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It will always open an editor to allow the integrator to fine tune the commit log message for the merge when merging a signed tag. In the editor, the integrator will see something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: x-small;"&gt;Merge tag 'frotz-for-linus' of example.com:/git/froboz.git/&lt;br /&gt;&lt;br /&gt;Completed frotz feature&lt;br /&gt;# gpg: Signature made Fri 02 Dec 2011 10:03:01 AM PST using RSA key ID 96AFE6CB&lt;br /&gt;# gpg: Good signature from "A U Thor &amp;lt;author@example.com&amp;gt;"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
provided if the signature in the signed tag verifies correctly. As usual, the lines commented with # are stripped out. The resulting commit records the contents of the signed tag in a hidden field so that it can be used by others to audit in the future, so the integrator does not have to keep a separate copy of the tag in his repository (i.e. "git tag -l" won't list frotz-for-linus tag in the above example).&lt;br /&gt;
&lt;br /&gt;
After the integrator responds to the pull request and the work becomes part of the permanent history, the contributor can remove the tag from the publishing repository if he or she chooses to in order to keep the tag namespace clean.&lt;br /&gt;
&lt;br /&gt;
(contributor)&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$ git push example.com :refs/tags/frotz-for-linus&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-2609434967321181926?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VV-muGu55fATvA_JepWFGwVshY0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VV-muGu55fATvA_JepWFGwVshY0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VV-muGu55fATvA_JepWFGwVshY0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VV-muGu55fATvA_JepWFGwVshY0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/qAgoKa7HZtI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/2609434967321181926/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=2609434967321181926&amp;isPopup=true" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/2609434967321181926?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/2609434967321181926?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/qAgoKa7HZtI/pulling-signed-tag-is-already-in-use-in.html" title="&quot;Pulling signed tag&quot; is already in use in the field" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/12/pulling-signed-tag-is-already-in-use-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IAQXg9eCp7ImA9WhRXEkU.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-5027582356848764336</id><published>2011-12-18T23:59:00.000-08:00</published><updated>2011-12-18T23:59:00.660-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-18T23:59:00.660-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Moving forward to 1.7.9</title><content type="html">A handful topics that have been cooking on the 'next' branch have now been graduated to the 'master' branch, to be included in the upcoming Git 1.7.9 release. They are all relatively minor fixes and a small feature or two, except for one, which is to stream large files directly to a packfile upon "git add", instead of storing them individually in loose object files and having to later repack them into a single pack, which would doubly be time consuming.&lt;br /&gt;
&lt;br /&gt;
As I &lt;a href="http://git-blame.blogspot.com/2011/11/git-178-rc4-and-upcoming-cycle.html" target="_blank"&gt;wrote earlier&lt;/a&gt;, we expect to make Git 1.7.9 a fairly focused release with only small number of new features around high impact themes:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Better and more auditable communication in pull based workflow by supporting electronically signed pull requests that records more meaningful branch description;&lt;/li&gt;
&lt;li&gt;More pleasant end-user experience by providing credential helper API to allow platform native keychain implementations to supply authentication material during "git push" and "git pull";&lt;/li&gt;
&lt;li&gt;i18n of messages out of the end-user facing programs;&lt;/li&gt;
&lt;li&gt;Better large-contents support.&lt;/li&gt;
&lt;/ul&gt;
The "'git add' that streams to pack" in tonight's pushout is about the last theme; there is another topic regarding the same theme already in development, but it is not expected to be complete during the 1.7.9 timeframe.&lt;br /&gt;
&lt;br /&gt;
Of course, there are other miscelaneous features and fixes already in the 'master' branch and also still in flight and cooking in the 'next' branch, but as far as the big changes are concerned, we are about 80% feature complete as of tonight. The credential API is expected to hit the 'master' branch in a few days.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-5027582356848764336?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k4ACvh1HQJCpPP7npfrkouU4jlw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k4ACvh1HQJCpPP7npfrkouU4jlw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k4ACvh1HQJCpPP7npfrkouU4jlw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k4ACvh1HQJCpPP7npfrkouU4jlw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/3lZdBwhjYEI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/5027582356848764336/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=5027582356848764336&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/5027582356848764336?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/5027582356848764336?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/3lZdBwhjYEI/moving-forward-to-179.html" title="Moving forward to 1.7.9" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/12/moving-forward-to-179.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEAQ345fyp7ImA9WhRXEkU.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-4115793859663936557</id><published>2011-12-18T23:36:00.000-08:00</published><updated>2011-12-18T23:44:02.027-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-18T23:44:02.027-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UnGit" /><category scheme="http://www.blogger.com/atom/ns#" term="Random Hacking" /><title>Epson WorkForce 545</title><content type="html">My wife wanted a new printer (as the old HP has been acting up), so gave a visit to a local office electronics shop after running a few product searches.&lt;br /&gt;
&lt;br /&gt;
The printer should support &lt;a href="http://www.google.com/cloudprint/learn" target="_blank"&gt;Google Cloud Print&lt;/a&gt; (as both my wife and I carry Android phones), and also should be supported by CUPS. I ended up getting &lt;a href="https://www.google.com/search?q=EPSON+workforce+545&amp;amp;tbm=shop&amp;amp;hl=en&amp;amp;aq=f" target="_blank"&gt;Epson WorkForce 545&lt;/a&gt; which is an all-in-one wired/wireless unit, simply because HP does not have a good impression on me anymore, and because I never used Kodak printers.&lt;br /&gt;
&lt;br /&gt;
After a few trial-and-error sessions, it was reasonably easy to figure out how to configure it.&lt;br /&gt;
&lt;br /&gt;
I first tried to connect it via WiFi. One glitch was that there didn't seem to be any way to learn the MAC address of the unit (the WiFi router is configured to talk WPA/WPA2 but also to filter connections based on MAC). I however was happy to see that its panel display offered to print diagnostic after it failed to connect and there was its MAC address printed there. After that, it was easy to configure it to authenticate to the WiFi router.&lt;br /&gt;
&lt;br /&gt;
As the unit will sit immediately next to the router, however, I decided to disable WiFi altogether and give it a wired connection with fixed address.&lt;br /&gt;
&lt;br /&gt;
After connecting to the network, interestingly, it was much easier to configure the unit to work with the Google Cloud Print than with CUPS.&lt;br /&gt;
&lt;br /&gt;
A newer Windows box of my wife (I think it runs something called Windows 7) found the printer without me doing anything in particular; just being on the same network segment seemed to be enough, and then the Windows box installed the printer drivers itself.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Visiting the IP address I gave to the unit with the web browser, there were a handful of controls, and the top one was to make it work with Google Cloud Print. It just redirected the browser to google.com for OAuth and I had the printer associated with my Gmail account. From there, I can share the access to the printer with my wife's Gmail account and with my work account.&lt;br /&gt;
&lt;br /&gt;
As I do not print much (and nothing at home), this was the first time I added a network printer to CUPS. After blindly trying random URLs like http://&lt;i&gt;ip-address-of-unit&lt;/i&gt;:631, ipp://&lt;i&gt;ip-address-of-unit&lt;/i&gt;/, etc., finally figured out that this particular model (or perhaps recent Epson in this class in general) wants to be connected with &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;socket://&lt;i&gt;ip-address-of-unit&lt;/i&gt; &lt;/span&gt;as its URL, but I did not see this documented anywhere.&lt;br /&gt;
&lt;br /&gt;
An older Windows box my wife uses to control her computerized weaving loom (I think it runs Windows XP) was a different issue. It didn't see and did not want to connect to the wired printer, even though it could see my Linux box that is running samba. Adding an entry for it in /etc/samba/smb.conf was a simple task after figuring out what needs to be done (which unfortunately took too long for my liking). In the printer's section I needed to add &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;use client driver = yes&lt;/span&gt; for it to work.&lt;br /&gt;
&lt;br /&gt;
By the way, at the office electronics shop, I saw the new models of Kindle family (including the Fire), Nook color and the Nook tablet. Somehow Fire looked too thick and unwieldy to me, while Nook tablet looked slim and very nice. I didn't buy neither, though...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-4115793859663936557?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/in9JuqXywpaOgetKRcu-SywUFqI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/in9JuqXywpaOgetKRcu-SywUFqI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/in9JuqXywpaOgetKRcu-SywUFqI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/in9JuqXywpaOgetKRcu-SywUFqI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/WQuYEFRWli4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/4115793859663936557/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=4115793859663936557&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/4115793859663936557?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/4115793859663936557?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/WQuYEFRWli4/epson-workforce-545.html" title="Epson WorkForce 545" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/12/epson-workforce-545.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAFQn0yeCp7ImA9WhRUGUQ.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-2920888319657500256</id><published>2011-12-09T12:44:00.001-08:00</published><updated>2012-01-31T00:31:53.390-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T00:31:53.390-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UnGit" /><category scheme="http://www.blogger.com/atom/ns#" term="Thanks" /><title>The Disappearing Spoon: And Other True Tales of... by Sam Kean</title><content type="html">&lt;br /&gt;
&lt;div class="separator" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/dp/B003JTHXZY" target="_blank"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-Iuynzkl6Sgo/TuJ0lJXvNHI/AAAAAAAADY8/d9iIv4OFHZQ/s200/61TTIos6IqL._BO2%252C204%252C203%252C200_PIsitb-sticker-arrow-click%252CTopRight%252C35%252C-76_AA300_SH20_AA278_PIkin4%252CBottomRight%252C-47%252C22_AA300_SH20_OU01_.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Every once in a while, I receive gifts from satisfied Git friends, chosen from my Amazon &lt;a href="http://www.amazon.com/gp/registry/wishlist/1513KNZE30W63" rel="nofollow"&gt;Wish list.&lt;span id="goog_1542752178"&gt;&lt;/span&gt;&lt;span id="goog_1542752179"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
And today was such a day.&lt;br /&gt;
&lt;br /&gt;
I enjoy reading history of science.&amp;nbsp; Thanks Miro!&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-2920888319657500256?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YcpYNNvWCVyuHHNHr8c589Xge-0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YcpYNNvWCVyuHHNHr8c589Xge-0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YcpYNNvWCVyuHHNHr8c589Xge-0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YcpYNNvWCVyuHHNHr8c589Xge-0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/DjkFKxnqHys" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/2920888319657500256/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=2920888319657500256&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/2920888319657500256?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/2920888319657500256?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/DjkFKxnqHys/disappearing-spoon-and-other-true-tales.html" title="The Disappearing Spoon: And Other True Tales of... by Sam Kean" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Iuynzkl6Sgo/TuJ0lJXvNHI/AAAAAAAADY8/d9iIv4OFHZQ/s72-c/61TTIos6IqL._BO2%252C204%252C203%252C200_PIsitb-sticker-arrow-click%252CTopRight%252C35%252C-76_AA300_SH20_AA278_PIkin4%252CBottomRight%252C-47%252C22_AA300_SH20_OU01_.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/12/disappearing-spoon-and-other-true-tales.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8NSHwycCp7ImA9WhRRGEQ.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-266327059182492679</id><published>2011-12-02T22:05:00.001-08:00</published><updated>2011-12-02T22:14:59.298-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-02T22:14:59.298-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Git 1.7.8</title><content type="html">Git 1.7.8 is finally &lt;a href="http://article.gmane.org/gmane.comp.version-control.git/186239" target="_blank"&gt;out&lt;/a&gt;.&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The most notable improvement from my point of view is tightening of the checks on the data that go and come over the wire between repositories, but it probably is and should be invisible to the end users.&amp;nbsp;Many other small improvements are all over the place.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
The release tarballs are found at:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;http://code.google.com/p/git-core/downloads/list&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
and their SHA-1 checksums are:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;7453e737e008f7319a5eca24a9ef3c5fb1f13398 &amp;nbsp;git-1.7.8.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;2734079e22a0a6e3e78779582be9138ffc7de6f7 &amp;nbsp;git-htmldocs-1.7.8.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;93315f7f51d7f27d3e421c9b0d64afa27f3d16df &amp;nbsp;git-manpages-1.7.8.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
Have fun.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The development cycle for the next release is expected to last for 8 weeks til the end of January, and some of the major planned topics are listed &lt;a href="http://git-blame.blogspot.com/2011/11/git-178-rc4-and-upcoming-cycle.html"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-266327059182492679?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9lGfflfY3AdQBj4kZUzZ2dMZtPI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9lGfflfY3AdQBj4kZUzZ2dMZtPI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9lGfflfY3AdQBj4kZUzZ2dMZtPI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9lGfflfY3AdQBj4kZUzZ2dMZtPI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/IFZ80Oo362g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/266327059182492679/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=266327059182492679&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/266327059182492679?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/266327059182492679?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/IFZ80Oo362g/git-178.html" title="Git 1.7.8" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/03314622583641323356</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-VqymtuBwF3s/TbSVjoOVPdI/AAAAAAAAAkI/_3AOjoH0ESk/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/12/git-178.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkANQn85fSp7ImA9WhRRF00.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-8123800407907101038</id><published>2011-11-30T16:51:00.000-08:00</published><updated>2011-11-30T16:53:13.125-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-30T16:53:13.125-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><title>Buying a new Git feature</title><content type="html">You are a manager of a technology company, and your engineers love Git in general, but Git is not a &lt;i&gt;perfect&lt;/i&gt; fit to your organization. Perhaps some work-flow elements your people are used to are not supported nicely by today's Git. Perhaps some class of assets you want to keep track of are not supported well by today's Git.&lt;br /&gt;
&lt;br /&gt;
You are wealthy enough to pay for a developer or two to identify, design and implement necessary changes to Git, but you are not wealthy enough fork Git to maintain such a change yourself forever while the upstream Open Source community continues to improve Git.&lt;br /&gt;
&lt;br /&gt;
What can you do?&lt;br /&gt;
&lt;br /&gt;
Of course, if the changes you initially develop are good enough, they may be merged to the upstream and then you do not have to worry about maintaining your fork yourself. But how would you ensure that the quality of your changes is good enough for upstreaming? Perhaps withhold the payment to your consultants until the changes hit the upstream?&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
I do not think this is necessarily limited to Git, but applies equally to any useful and active Open Source project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-8123800407907101038?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5s3qmcrLoI6V6BRGaSv7T4PhTaQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5s3qmcrLoI6V6BRGaSv7T4PhTaQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5s3qmcrLoI6V6BRGaSv7T4PhTaQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5s3qmcrLoI6V6BRGaSv7T4PhTaQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/Gb6jmvycwKw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/8123800407907101038/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=8123800407907101038&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/8123800407907101038?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/8123800407907101038?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/Gb6jmvycwKw/buying-new-git-feature.html" title="Buying a new Git feature" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/11/buying-new-git-feature.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HSXYzeip7ImA9WhRRF00.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-1392225526273921683</id><published>2011-11-28T15:42:00.001-08:00</published><updated>2011-11-30T16:53:58.882-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-30T16:53:58.882-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="Announce" /><title>Git 1.7.8-rc4 and upcoming cycle</title><content type="html">This cycle is taking a bit longer than I had hoped but this should be the last rc before the final.&lt;br /&gt;
&lt;br /&gt;
We had to roll in a fix to the UI for a new feature added in this cycle to "revert/cherry-pick" to avoid costly migration in the later releases (originally, we introduced "--reset" action to discard the in-progress state of a multi-commit revert/cherry-pick sequence, but it was argued that what the action actually did was "--quit" in the sense that it does not reset the state to some known state. Renaming it to "--quit" further opened the door to introduce "--abort" which does revert the state to where the entire revert/cherry-pick sequence started).&lt;br /&gt;
&lt;br /&gt;
The next cycle will have many interesting topics that are already cooking in various doneness, including:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;local branch description (in addition to a good discipline of giving descriptive branch names) that can be used in various places including pull request messages, local merge messages and format-patch cover letters;&lt;/li&gt;
&lt;li&gt;electronically signed pull requests by asking to pull a signed tag instead of a branch;&lt;/li&gt;
&lt;li&gt;signed commit (possibly-if it is found useful, that is); &lt;/li&gt;
&lt;li&gt;credential helper API to integrate with platform native keychain implementations;&lt;/li&gt;
&lt;li&gt;progress eye-candy for fsck and repack;&lt;/li&gt;
&lt;li&gt;"git add" of large contents will send blobs directly to a packfile;&lt;/li&gt;
&lt;li&gt;side-by-side diff in gitweb; and&lt;/li&gt;
&lt;li&gt;i18n of Git Porcelain messages.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-1392225526273921683?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uEEX1IB6k-LmOAyIS2oZy7Ui58E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uEEX1IB6k-LmOAyIS2oZy7Ui58E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uEEX1IB6k-LmOAyIS2oZy7Ui58E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uEEX1IB6k-LmOAyIS2oZy7Ui58E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/cAjT7eLM0JA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/1392225526273921683/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=1392225526273921683&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/1392225526273921683?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/1392225526273921683?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/cAjT7eLM0JA/git-178-rc4-and-upcoming-cycle.html" title="Git 1.7.8-rc4 and upcoming cycle" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/11/git-178-rc4-and-upcoming-cycle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8CQXY5eSp7ImA9WhRREU4.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-5078428386789124311</id><published>2011-11-24T02:35:00.001-08:00</published><updated>2011-11-24T03:41:00.821-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-24T03:41:00.821-08:00</app:edited><title>PGP Key-signing and CA fire-and-forget</title><content type="html">Someone at work used to have a kernel.org account but recently needed to re-establish the presense in the web of trust by getting&amp;nbsp;his PGP key signed, so we met and exchanged our key IDs and fingerprints, to mutually sign our keys.&amp;nbsp;I earlier attended a key-signing party and my key has been signed by many other people, and it was a good place to bootstrap his key.&lt;br /&gt;
&lt;br /&gt;
A PGP key has two parts; the public part that you give to others, and the private part that you keep to yourself. The easiest and most common way to distribute public part of the key is to upload it to public keyservers, where other people can find and retrieve your key by specifying the key ID, your name or e-mail address.&lt;br /&gt;
&lt;br /&gt;
When other people want to send a message to you and preserve the secrecy of the message, they only need to use the public part of your key to encrypt the message for you, and PGP guarantees that the encrypted message can be decrypted and read only by whoever holds the corresponding private part of the key unless a complex math problem that is believed to be practically unsolvable can somehow be solved (in other words, "public crypto-system gets broken"). When you want to prove that a message was written by you, you use the private part of your key to electronically sign the message and make the result public, others can check the authenticity of the electronic signature by using only the public part of your key, and again PGP guarantees that the message couldn't have been signed by a person who does not have the private part of the key.&lt;br /&gt;
&lt;br /&gt;
The public part of your PGP key records your name and e-mail address, among other things. It can and often does record more than one pair of name and e-mail (e.g. work address vs personal address). Anybody can generate a PGP key on his or her own and record any name and e-mail address in its public part. If you see a message signed with a PGP key whose public part records my name and address, unless you somehow know that it indeed is the key I created for me and whose private part I have, such a signature has no value. It may have been created by a random person inpersonating me.&lt;br /&gt;
If you encrypt a message you want to show only to me, using a random PGP key that records my name and e-mail address to encrypt it would not guarantee that only I would be able to read it, unless you somehow know that the key belongs to me.&lt;br /&gt;
&lt;br /&gt;
Hence, people need a way to validate the authenticity of public keys. People can add electronic signatures to the public part of a PGP key that belongs to another person, vouching that the signer knows the key belongs to the signee.&amp;nbsp;This signature can be made per name and e-mail pair recorded in the public part of the key.&lt;br /&gt;
&lt;br /&gt;
If you see a signature on an unknown public key, signed by public keys that you know belong to people you trust, you can be as sure as you trust these signers that the unknown publiic key belongs to the person it claims to belong to. This "web of trust" extends recursively and I heard that a recent study indicates that all people in the world are connected by 4.74 hops on average.&lt;br /&gt;
&lt;br /&gt;
The only facts I learned when I met the other person for the purpose of key-signing are:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The person looked like his photo in our employee directory, and possessed a photo ID that matches his name;&lt;/li&gt;
&lt;li&gt;The achievements by the person described in our employee directory matched what the person I was supposed to be meeting who worked in the Linux kernel project had done; and&lt;/li&gt;
&lt;li&gt;The person claimed that a public key belonged to him, and gave me a way to retrieve the public part of this key.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
It&amp;nbsp;is not directly the above&amp;nbsp;that I am vouching for by signing the public part of his key, however. I am vouching for the fact that I somehow know that the public key belongs to the person who is in control of the name and e-mail address pair recorded therein. That is not something I checked by meeting the person and chatting with him. I only checked the "name" part, but not the "e-mail address" part.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
CA fire-and-forget is a clever scheme to solve this last bit of the problem. Instead of signing the public part of the key for all the name and e-mail pairs and upload the result myself, I make N separate signatures on his public key, one for each pair of name and e-mail address recorded in it. And then I encrypt these N signatures with his public key and send them to the corresponding e-mail addresses. The recipient of these encrypted signatures then decrypt them and upload the result to the public keyservers to complete the cycle.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If the e-mail address belonged to somebody else who does not have the corresponding private part, the encrypted signature would not reach the intended recipient, and the signature would not be decrypted to be uploaded to the public keyservers. I'll see my signature only if the person sitting behind the e-mail address has the private key that corresponds to the public part I have signed.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It is a clever scheme, even though it is a bit cumbersome to use, even with the use of dedicated tools (caff found in signing-party package on some distributions).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-5078428386789124311?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ADlsVwCJJ74hIK9IWf58YmsTFj4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ADlsVwCJJ74hIK9IWf58YmsTFj4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ADlsVwCJJ74hIK9IWf58YmsTFj4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ADlsVwCJJ74hIK9IWf58YmsTFj4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/hQxXZDbixnY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/5078428386789124311/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=5078428386789124311&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/5078428386789124311?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/5078428386789124311?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/hQxXZDbixnY/pgp-key-signing-and-ca-fire-and-forget.html" title="PGP Key-signing and CA fire-and-forget" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/03314622583641323356</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-VqymtuBwF3s/TbSVjoOVPdI/AAAAAAAAAkI/_3AOjoH0ESk/s220/x.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/11/pgp-key-signing-and-ca-fire-and-forget.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HSXYzfyp7ImA9WhRRF00.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-4099913752890512403</id><published>2011-11-18T14:30:00.001-08:00</published><updated>2011-11-30T16:53:58.887-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-30T16:53:58.887-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="Announce" /><title>Git 1.7.7.4</title><content type="html">Just another maintenance update, this time to fix minor build issues and fix a trivial corner case bug in the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;git name-rev --all&lt;/span&gt; command.&lt;br /&gt;
&lt;br /&gt;
The upcoming feature release 1.7.8 is getting closer, too.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-4099913752890512403?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BD004rXFEVpzj3S4_8rNEiyDQuI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BD004rXFEVpzj3S4_8rNEiyDQuI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BD004rXFEVpzj3S4_8rNEiyDQuI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BD004rXFEVpzj3S4_8rNEiyDQuI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/gHQ0IZB-1Z0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/4099913752890512403/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=4099913752890512403&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/4099913752890512403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/4099913752890512403?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/gHQ0IZB-1Z0/git-1774.html" title="Git 1.7.7.4" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/11/git-1774.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HSXYzfip7ImA9WhRRF00.&quot;"><id>tag:blogger.com,1999:blog-632023420616344756.post-270229500086901478</id><published>2011-11-17T13:11:00.001-08:00</published><updated>2011-11-30T16:53:58.886-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-30T16:53:58.886-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="Announce" /><title>Git 1.7.8-rc3 and being lenient to others while being strict to self</title><content type="html">&lt;span style="font-size: small;"&gt;Hopefully the last release candidate before the real thing.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;A big "Thanks" goes to Andrea Arcangeli for reporting an unpleasant regression, me for quickly fixing, and Michael Haggerty for reviewing the proposed fix.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;The regression that will &lt;i&gt;not&lt;/i&gt; be in the final release was that we broke&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;span style="font-size: small;"&gt;&amp;nbsp; $ git clone --reference=$local_repository $upstream&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;when the local repository we are borrowing objects from has signed or annotated tags, and the cause of this regression is that a recent topic screwed up implementation that tightens checks for branch and tag (collectively known as "refs") names. When we clone from &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$upstream&lt;/span&gt;&lt;/span&gt; while borrowing objects from a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;$local_repository&lt;/span&gt;&lt;span style="font-size: small;"&gt;, we tell the &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$upstream&lt;/span&gt; that objects that are in the &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;$local_repository&lt;/span&gt;&lt;span style="font-size: small;"&gt; need not be sent to us, and we discover what objects &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;$local_repository&lt;/span&gt; has by reading the output of&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; $ git ls-remote $local_repository&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;and adding the result to the set of "extra refs". We internally keeps track of all the "refs" that exist in our repository, and the code that registers the extra refs share the same codepath as the one that finds the branches and tags by reading from &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;.git/refs/{heads,tags}&lt;/span&gt; directories.&lt;/span&gt; The problem was that the &lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;add_ref()&lt;/span&gt; function in this shared codepath had a check to error not (not just warn) when it tries to register any "ref" whose name does not conform to the rule. Because an entry for a signed or an annotated tag in the output from &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;ls-remote&lt;/span&gt;&lt;span style="font-size: small;"&gt; denotes the object (typically a commit) the tag points at, and because such an entry is marked by adding &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;^{}&lt;/span&gt; at the end of the name of the tag to make sure it will not collide with names of the real refs (that character sequence is invalid), the new check triggered and made the whole clone command fail.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;This episode shows two fundamental failures in the topic:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;"extra refs" are not real refs, and they shouldn't even need names. The only reason they exist is to let our repository know the objects reachable from them do not need to be transfered into our repository when talking with the outside world. Perhaps we should even consider dropping the &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;name&lt;/span&gt;&lt;span style="font-size: small;"&gt; parameter from &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;add_extra_ref()&lt;/span&gt; function (but after making sure the code would not make unwarranted assumptions. One such assumption was that they have names and their name must conform to the usual refname rules, which was fixed, but there may be others).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;The other use of &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;add_ref()&lt;/span&gt; function is used to register &lt;i&gt;existing&lt;/i&gt; refs that we find in our repository. While we might not like the name of some of them (nobody stops a user or a tool from creating a randomly named file under &lt;/span&gt; &lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;.git/refs/{heads,tags}&lt;/span&gt; directories after all), it is wrong to error out any operation when talking about what already exists in the repository; the damage is &lt;i&gt;already&lt;/i&gt; done. Warning against them to help the user notice and correct is a different story.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-size: small;"&gt;The code should be lenient to what it receives and strict in what it produces.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;For example, a colon is a forbidden character in a branch name, primarily because a branch with such a name, e.g. &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;a:b&lt;/span&gt;, cannot be pushed out to another repository. But if you do not ever push such a branch out, it is not that unreasonable to expect that the following to &lt;i&gt;work&lt;/i&gt;, at least for some definition of working:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;span style="font-size: small;"&gt;&amp;nbsp; $ H=$(git rev-parse HEAD~20) &amp;amp;&amp;amp; echo $H &amp;gt;.git/refs/heads/inval:id&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;span style="font-size: small;"&gt;&amp;nbsp; $ git show inval:id&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;It may be OK for the second line to error out (we cannot do much about the manual &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;echo&lt;/span&gt; doing damage to the repository), but where there is no ambiguity (i.e. if there is a ref that is called &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;inval&lt;/span&gt;, the above could be a request to show a subdirectory called &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;id&lt;/span&gt; in that commit), warning that &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;inval:id&lt;/span&gt; is a wrong name but still letting the user what s/he wanted to do would be a far nicer way to deal with a problem like this. After the above sequence, if the following fails only because the repository has a ref with an invalid name, it is even worse:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;
&lt;span style="font-size: small;"&gt;&amp;nbsp; $ git show master&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;and I would have to say it is close to inexcusable.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/632023420616344756-270229500086901478?l=git-blame.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GkJ-H-0k2RWXXhEfy1f452GPuVQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GkJ-H-0k2RWXXhEfy1f452GPuVQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GkJ-H-0k2RWXXhEfy1f452GPuVQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GkJ-H-0k2RWXXhEfy1f452GPuVQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GitBlame/~4/zLhyyGv47oI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://git-blame.blogspot.com/feeds/270229500086901478/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=632023420616344756&amp;postID=270229500086901478&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/270229500086901478?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/632023420616344756/posts/default/270229500086901478?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GitBlame/~3/zLhyyGv47oI/git-178-rc3-and-being-lenient-to-others.html" title="Git 1.7.8-rc3 and being lenient to others while being strict to self" /><author><name>Gitster</name><uri>http://www.blogger.com/profile/04508668132209394366</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-ODJtDlt6W-s/TbRqp8ZFOlI/AAAAAAAABZ0/AHk2fiPPZDU/s220/x.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://git-blame.blogspot.com/2011/11/git-178-rc3-and-being-lenient-to-others.html</feedburner:origLink></entry></feed>

