Skip to content

Commit b79e1be

Browse files
committed
rev_news: publish edition 2
1 parent 6d78e95 commit b79e1be

File tree

2 files changed

+289
-0
lines changed

2 files changed

+289
-0
lines changed
File renamed without changes.

rev_news/edition-2.md

Lines changed: 289 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,289 @@
1+
---
2+
title: Git Rev News Edition 2 (April 15th, 2015)
3+
layout: default
4+
date: 2015-04-5 21:06:51 +0100
5+
author: chriscool
6+
categories: [news]
7+
navbar: false
8+
---
9+
## Git Rev News: Edition 2 (April 15, 2015), 10 years of Git & Git Merge 2015!
10+
11+
Welcome to the second edition of [Git Rev News](http://git.github.io/rev_news/rev_news.html),
12+
a digest of all things Git, written collaboratively
13+
on [GitHub](https://github.com/git/git.github.io) by volunteers.
14+
15+
Our goal is to aggregate and communicate
16+
some of the activities on the [Git mailing list](mailto:git@vger.kernel.org)
17+
in a format that the wider tech community can follow
18+
and understand. In addition, we'll link to some of the interesting Git-related
19+
articles, tools and projects we come across.
20+
21+
This special edition covers Git's 10th year of existence, as well as the
22+
[Git Merge](http://git-merge.com) conference held on April 8th & 9th in Paris,
23+
France. Git developers and users alike came together to celebrate the
24+
anniversary, and to discuss the current challenges of using and scaling Git.
25+
26+
You can contribute to the upcoming edition by sending [pull
27+
requests](https://github.com/git/git.github.io/pulls) or opening
28+
[issues](https://github.com/git/git.github.io/issues).
29+
30+
## Discussions
31+
32+
### General
33+
34+
* [10 years of fun](https://docs.google.com/presentation/d/1sc1xsG9vrRahcckD8WwYeK355SvQH7NSchKH07icJtk/pub)
35+
36+
At the Git Merge 2015, Junio Hamano started off the Contributor Summit with a
37+
presentation titled "10 years of fun with Git", saying that he wanted to
38+
take the opportunity of the 10th anniversary to thank the contributors.
39+
40+
He showed how the first initial revision of Git - created on the 7th of April
41+
2005 by Linus - looked like, and compared it to a recent revision. Although the
42+
size of the first implementation was only about 0.2% of its current size, the
43+
initial code was already functional.
44+
45+
The interesting question that followed was "Who made today's Git?" and Junio
46+
went through multiple Git queries offering different answers for this.
47+
48+
As an example, to get a commit count sorted by author, excluding merge
49+
commits, one can use:
50+
51+
```
52+
git shortlog --no-merges -n -s v2.4.0-rc0
53+
```
54+
55+
With the results of each query, Junio gave insights about how we
56+
can interpret the results, mentioned the caveats that might apply, and he
57+
also took time to thank the people who appeared in these results.
58+
59+
Towards the end of the presentation he also mentioned the people who
60+
don't appear in the results: bug reporters, feature wishers,
61+
reviewers and mentors, alternative implementors and porters, trainers
62+
and evangelists. He assigned to this very news-letter the huge task of
63+
talking about, and thanking them all ;-)
64+
65+
* [Git Large File Storage](https://git-lfs.github.com/)
66+
67+
At the Git Merge 2015, [Rick Olson](https://github.com/technoweenie), a
68+
developer working for GitHub, gave a presentation about Git Large File
69+
Storage (Git LFS), a new git extension for managing big files.
70+
71+
On the Git Merge web site, the name of the presentation was "Building a
72+
Git Extension with First Principles", probably because GitHub didn't
73+
want to announce Git LFS in the time before the conference. In fact, it
74+
was announced [first on The GitHub Blog](https://github.com/blog/1986-announcing-git-large-file-storage-lfs)
75+
the day before Rick's presentation.
76+
77+
Rick started off by explaining the reasons why such an extension was
78+
needed, namely that Git "starts to suck with large binary file
79+
objects". For example it takes longer and longer to clone a repo that
80+
has more and more of such objects.
81+
82+
Then he told that GitHub did some user experience research with a
83+
diverse team of users having this problem. They also experimented with
84+
existing solutions like `git media` and `git annex`.
85+
86+
Rick then detailed [the solution that was implemented](https://github.com/github/git-lfs/blob/master/docs/spec.md)
87+
using the Go language, and how it can be used. For example:
88+
89+
```
90+
$ git lfs init
91+
$ git lfs track "*.zip"
92+
$ git add otherfile.zip
93+
$ git commit -m "add otherfile.zip"
94+
$ git push origin
95+
Uploading somefile.zip
96+
...
97+
```
98+
99+
Remote configuration, the server side, the Git LFS API and authentication were
100+
also covered. And in the end Rick talked about some ideas for improvements.
101+
102+
* [Git Large Object Research](http://www.slideshare.net/fezzik02/git-large-object-binaries-concepts-and-directions)
103+
104+
It's interesting and encouraging to see how there has been a recent interest by the community to tackle some of Git scaling issues. At Git Merge 2015 [John Garcia](https://twitter.com/bitbucketeer) from Atlassian also presented some research and a prototype tool to handle large binary files.
105+
106+
The tool hasn't been released yet but showed interesting features like
107+
[progressive history
108+
retention](https://twitter.com/tarkasteve/status/586180588245229569), file
109+
locking, abstracted support for "dumb" storage back ends (like sshfs, samba,
110+
NFS, Amazon S3 ...) and chunking for resumable downloads.
111+
112+
### Reviews
113+
114+
* [Speeding up strbuf_getwholeline()](http://thread.gmane.org/gmane.comp.version-control.git/266789/focus=266796)
115+
116+
Jeff King, alias Peff, posted a patch series to address speed
117+
regressions when accessing the packed-refs file. This lead to
118+
discussions about ways to speed up reading lines in a file.
119+
120+
The packed-ref file has been created a long time ago to speed up
121+
dealing with refs. The original way to store refs, which is called the
122+
"loose ref" format uses one file per ref to store its content and is
123+
used by git for newly created refs. But when the number of refs increases, it
124+
becomes much faster to have as much information as possible in a
125+
single file. That's the purpose of the packed-ref file.
126+
127+
Peff discovered that one of his own commit that switched from fgets()
128+
to strbuf\_getwholeline() to read the packed-ref file was in part
129+
responsible for a big slowdown.
130+
131+
strbuf\_getwholeline() is part of the Git strbuf API that is used for a
132+
lot of string related functions. And strbuf\_getwholeline() used the
133+
getc() function to get each character one by one until the end of each
134+
line, like this:
135+
136+
```
137+
while ((ch = getc(fp)) != EOF) {
138+
...
139+
if (ch == '\n')
140+
break;
141+
}
142+
```
143+
144+
But it appears that it isn't very efficient. It is also problematic to
145+
use fgets() inside strbuf\_getwholeline() as strbuf\_getwholeline() is
146+
used in some parts of the Git codebase to read lines that can contain
147+
the NUL character and fgets() would not read after the NUL. (And yeah
148+
working around that is not easy either.)
149+
150+
So Peff came up with the following explanation and solution to the
151+
problem:
152+
153+
> strbuf_getwholeline calls getc in a tight loop. On modern
154+
> libc implementations, the stdio code locks the handle for
155+
> every operation, which means we are paying a significant
156+
> overhead. We can get around this by locking the handle for
157+
> the whole loop and using the unlocked variant.
158+
159+
His patch does basically:
160+
161+
```
162+
+ flockfile(fp);
163+
+ while ((ch = getc_unlocked(fp)) != EOF) {
164+
...
165+
if (ch == '\n')
166+
break;
167+
}
168+
+ funlockfile(fp);
169+
```
170+
171+
Duy Nguyen suggested instead to avoid any FILE* interface and either
172+
mmap the entire file, or read (with bufferring) from a file
173+
descriptor, as Git already does to read the index-pack file. But Peff
174+
said that it would be very inefficient too, and that there are no good
175+
NUL safe function to read from a file descriptor.
176+
177+
Junio wondered if it would be worth it to have callers that need to
178+
handle NUL characters pass a flag, so that the default implementation
179+
would still be fast.
180+
181+
Eventually Rasmus Villemoes suggested using
182+
[getdelim()](http://pubs.opengroup.org/stage7tc1/functions/getdelim.html)
183+
when POSIX 2008 is supported and so far this looks like a workable
184+
solution.
185+
186+
Anyway it is interesting to see that on the Git mailing list as well as
187+
at the Git Merge conference a lot of great developers and companies are
188+
working on making Git fast for big repositories.
189+
190+
### Support
191+
192+
## Releases
193+
194+
* [First release candidate for Git 2.4](http://git-blame.blogspot.de/2015/04/first-release-candidate-for-git-24.html),
195+
April 2nd.
196+
197+
Paraphrasing Junio,
198+
please test it thoroughly so that we can ship a successful v2.4 final at
199+
the end of the month without the regressions we experienced in the v2.3
200+
series.
201+
202+
* [Git 2.3.5 for Windows Release Candidate 8](https://github.com/git-for-windows/git/releases/tag/v2.3.5.windows.8),
203+
April 10th.
204+
205+
[More about Git 2.x for Windows release candiates here](https://groups.google.com/d/msg/msysgit/T2CgyhMA6fw/rXpofh9waA4J).
206+
207+
> During the really exciting Git Merge conference, the Git for Windows
208+
> developers had the opportunity to meet and we managed to whip out a *really*
209+
> early beta of the upcoming Git for Windows 2.x series.
210+
> Please keep in mind that we not only changed our entire development
211+
> environment, but that this change also affects end user installations quite a
212+
> bit [...]
213+
214+
Brendan Forster put together this [Beta Testers Guide](https://gist.github.com/shiftkey/add6975be2687d8731ae).
215+
216+
* [libgit2 v0.22.2 Maintenance Release](https://github.com/libgit2/libgit2/releases/tag/v0.22.2),
217+
March 24th.
218+
219+
> The following fixes have been backported to this maintenance release. [...]
220+
> All users of the library are encouraged to update.
221+
222+
* [tig-2.1.1](http://article.gmane.org/gmane.comp.version-control.git/266979), April 9th
223+
224+
> Finally, files (or blobs) can now be searched using the new GitHub-inspired
225+
> [file finder](https://asciinema.org/a/18525) (press 'f' to launch it).
226+
227+
228+
* [GitLab 7.9.3 CE, EE and GitLab CI 7.9.3](https://about.gitlab.com/2015/04/08/gitlab-7-9-3-released/),
229+
April 8th.
230+
231+
* [Kallithea 0.2](http://lists.sfconservancy.org/pipermail/kallithea-general/2015q2/000579.html), April 10th
232+
233+
> Kallithea 0.2 has been released. Kallithea is a GPLv3 source code management
234+
> software for web-based hosting of Mercurial and Git repositories.
235+
236+
237+
## Other News
238+
239+
### Events
240+
241+
* [Git Merge 2015](http://git-merge.com/), The Conference for the Git
242+
Community, took place on April 8th & 9th in Paris, France. It was presented by
243+
GitHub with sponsorship from Microsoft and Atlassian. Scott Chacon (GitHub),
244+
wearing a beautiful suit, was the master of ceremony on the 9th of April, while
245+
Chris Kelly and other GitHub people had organized everything.
246+
Thanks to them and the sponsors for this great time!
247+
248+
### Media
249+
250+
* Ten years ago, [Linus' first ever mention of what would become Git](https://news.ycombinator.com/item?id=9264088)
251+
* linux.com's Linus interview, on [10 years of Git](http://www.linux.com/news/featured-blogs/185-jennifer-cloer/821541-10-years-of-git-an-interview-with-git-creator-linus-torvalds)
252+
* Continuing their celebration, a whole series of Git-related interviews have
253+
been published on linux.com:
254+
* Wine Maintainer [Alexandre Julliard](https://www.linux.com/news/featured-blogs/200-libby-clark/822789-git-success-stories-and-tips-from-wine-maintainer-alexandre-julliard)
255+
* Puppet Labs' [Michael Stahnke](https://www.linux.com/news/featured-blogs/200-libby-clark/822555-git-success-stories-and-tips-from-puppet-labs-michael-stahnke)
256+
* Tor Chief Architect [Nick Mathewson](https://www.linux.com/news/featured-blogs/200-libby-clark/822528-git-success-stories-and-tips-from-tors-chief-architect-nick-mathewson)
257+
* Drupal Core Committer [Angie Byron](https://www.linux.com/news/featured-blogs/200-libby-clark/822227-git-success-stories-and-tips-from-drupal-core-committer-angie-byron)
258+
* Qt Maintainer [Thiago Macieira](https://www.linux.com/news/featured-blogs/200-libby-clark/821948-git-success-stories-and-tips-from-qt-maintainer-thiago-macieira)
259+
* KVM Maintainer [Paolo Bonzini](https://www.linux.com/news/featured-blogs/200-libby-clark/821899-git-success-stories-and-tips-from-kvm-maintainer-paolo-bonzini)
260+
* Ceph Creator [Sage Weil](https://www.linux.com/news/featured-blogs/200-libby-clark/823164-git-success-stories-and-tips-from-ceph-creator-sage-weil)
261+
* Junio warmed up to Git Merge by actively blogging the last month:
262+
* [Fun with Non-Fast-Forward](http://git-blame.blogspot.de/2015/03/fun-with-non-fast-forward.html)
263+
* [Git 2.4 will hopefully be a "product quality" release](http://git-blame.blogspot.de/2015/03/git-24-will-hopefully-be-product.html)
264+
* [Stats from recent Git releases](http://git-blame.blogspot.de/2015/03/stats-from-recent-git-releases.html)
265+
* [His thoughts on this very newsletter](http://git-blame.blogspot.de/2015/03/git-rev-news.html)
266+
* Atlassian noted the 10 year anniversary by producing [this visualization of
267+
Git's history](https://www.atlassian.com/git/articles/10-years-of-git/)
268+
* With Git Merge 2015 taking place in Paris, coincidentally the [French Civil
269+
Code is now on GitHub](https://github.com/steeve/france.code-civil)
270+
* Øyvind A. Holm has generated statistics on the [relative growth of Git repos
271+
vs. other source control systems](https://github.com/sunny256/openhub-repositories)
272+
* As Google Code shuts down, the [Vim project decides moving to Git/GitHub
273+
](https://news.ycombinator.com/item?id=9263193)
274+
* [Nice, SVG-based Git cheat sheet
275+
](https://rawgit.com/pastjean/git-cheat-sheet/master/git-cheat-sheet.svg)
276+
* Mary Rose Cook has written an essay on [Git from the inside out
277+
](http://maryrosecook.com/blog/post/git-from-the-inside-out)
278+
* A similar article from last year: [Git from the Bottom Up
279+
](https://jwiegley.github.io/git-from-the-bottom-up/), by John Wiegley
280+
* A [Git Style Guide](https://github.com/agis-/git-style-guide) by Agis
281+
Anastasopoulos
282+
* Some [hefty discussion is going on regarding the new Git Large File Storage](
283+
https://news.ycombinator.com/item?id=9343021), announced [by GitHub
284+
](https://github.com/blog/1986-announcing-git-large-file-storage-lfs) during
285+
[Git Merge 2015](http://git-merge.com/)
286+
287+
## Credits
288+
289+
This edition of Git Rev News was curated by Christian Couder &lt;<christian.couder@gmail.com>&gt;, Thomas Ferris Nicolaisen &lt;<tfnico@gmail.com>&gt; and Nicola Paolucci &lt;<npaolucci@atlassian.com>&gt; with help from Junio Hamano, Emma Jane Hogbin Westby, Andrew Ardill, Rick Olson, Johannes Schindelin and Jeff King.

0 commit comments

Comments
 (0)