|
| 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 <<christian.couder@gmail.com>>, Thomas Ferris Nicolaisen <<tfnico@gmail.com>> and Nicola Paolucci <<npaolucci@atlassian.com>> with help from Junio Hamano, Emma Jane Hogbin Westby, Andrew Ardill, Rick Olson, Johannes Schindelin and Jeff King. |
0 commit comments