<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  >
  <channel>
    <title xml:lang="en">Git Rev News</title>
    <atom:link type="application/atom+xml" href="https://git.github.io/feed.xml" rel="self"/>
    <link>https://git.github.io/rev_news/</link>
    <pubDate>Wed, 01 Apr 2026 22:33:33 +0000</pubDate>
    <lastBuildDate>Wed, 01 Apr 2026 22:33:33 +0000</lastBuildDate>
    <language>en-US</language>
    <generator>Jekyll v3.10.0</generator>
    <description>Git Rev News</description>
    <image>
      <description>Git Rev News</description>
      <url>http://jekyllrb.com/img/logo-rss.png</url>
      <title>Git Rev News</title>
      <link>https://git.github.io/rev_news/</link>
      <width>144</width>
      <height>73</height>
    </image>
    
    <item>
      <title>Git Rev News Edition 133 (March 31st, 2026)</title>
      <link>https://git.github.io/rev_news/2026/03/31/edition-133/</link>
      <pubDate>Tue, 31 Mar 2026 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2026/03/31/edition-133/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-133-march-31st-2026&quot;&gt;Git Rev News: Edition 133 (March 31st, 2026)&lt;/h2&gt;

&lt;p&gt;Welcome to the 133rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of February and March 2026.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/bcqvh7ahjjgzpgxwnr4kh3hfkksfruf54refyry3ha7qk7dldf@fij5calmscvm&quot;&gt;git-am applies commit message diffs&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;On February 6, 2026, Matthias Beyer forwarded to the Git mailing list a
surprising warning that had just circulated on Mastodon:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;PSA: Did you know that it’s &lt;strong&gt;unsafe&lt;/strong&gt; to put code diffs into your
commit messages?&lt;/p&gt;

      &lt;p&gt;Such diffs will be applied by patch(1) (also git-am(1)) as part of
the code change!&lt;/p&gt;

      &lt;p&gt;This is how a sleep(1) made it into i3 4.25-2 in Debian unstable.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;The incident had originated in the i3 window manager project, where a
commit message contained an unindented diff for illustration purposes.
When Debian packagers later applied the patch using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;patch&lt;/code&gt;, the diff
in the commit message was applied as actual code, sneaking a spurious
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sleep&lt;/code&gt; call into the Debian unstable package. Matthias asked the
list whether this was a known issue and whether it could be an attack
vector.&lt;/p&gt;

    &lt;p&gt;To understand why this happens, it helps to know how &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; parses
its input. When processing a patch email, it must split the stream into
two parts: the commit message and the actual patch to apply. It does
this by treating the first occurrence of any of the following lines as
the boundary between the two:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;a line consisting of only three dashes (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt;),&lt;/li&gt;
      &lt;li&gt;a line beginning with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff -&lt;/code&gt;, or&lt;/li&gt;
      &lt;li&gt;a line beginning with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Index: &lt;/code&gt;.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Everything before that boundary becomes the commit message; everything
after is fed to the patch application machinery. Crucially, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt;
scans from the top of the email, so the very first such line it
encounters terminates the commit message regardless of whether that
line was meant to be part of the message text.&lt;/p&gt;

    &lt;p&gt;This design dates back to the tool’s origins. As Jeff King (also known
as “Peff”) quickly explained in reply to Matthias, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; was
originally designed to handle patches sent by all kinds of people, not
just Git users. A contributor might have generated a diff with plain
GNU &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt; and typed the rest of the email by hand, without any &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt;
separator. The tool was therefore intentionally permissive: it would
find a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff -&lt;/code&gt; line anywhere in the email and treat it as the start
of the patch. Peff demonstrated this with a live example. He fed
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; a hand-typed email containing a GNU diff, and it produced the
expected commit.&lt;/p&gt;

    &lt;p&gt;This historical context also explained why &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; is notoriously
hard to fix: “I don’t think there is a way to unambiguously parse the
single-stream output that format-patch produces,” Peff wrote, noting
that he could find at least three earlier discussions of the same
problem (in 2015, 2022, and 2024). The stream is simply ambiguous by
design. Even the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; marker itself cannot be used to robustly split
things, since &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; on a line by itself is a valid diff hunk line
indicating that the string &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--&lt;/code&gt; was removed from a file.&lt;/p&gt;

    &lt;p&gt;Matthias proposed parsing from the end of the email rather than from
the top. Peff replied that this would still be ambiguous for the same
reasons, and would introduce new corner cases.&lt;/p&gt;

    &lt;p&gt;Jacob Keller noted early on that the issue was certainly surprising but
that he was unsure it constituted a security attack vector, since
someone should be reading the commit message before applying. But
Matthias pushed back: the whole point was that nobody realized the
behavior was there. He called it “sheer luck” that it was only a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sleep&lt;/code&gt; and not something more malicious crafted as a diff in the
commit message.&lt;/p&gt;

    &lt;p&gt;Florian Weimer wondered whether the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; output was
really ambiguous, given that the patch section is normally preceded by
a diffstat block. Peff replied that the diffstat is optional and is not
even parsed by the receiving side at all.&lt;/p&gt;

    &lt;p&gt;Jakob Haufe added an important nuance: even if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; was fixed to
require indented diffs, it would only partially mitigate the problem,
because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;patch&lt;/code&gt; (which many distributions use to apply upstream
fixes to packages) is even more permissive. It will strip a consistent
level of indentation from diffs before applying them. He quoted the
patch(1) manual page: “If the entire diff is indented by a
consistent amount, […] this is taken into account.” The i3 incident
had in fact been triggered by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;patch&lt;/code&gt;, not &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Kristoffer Haugsbakk synthesized this into a clear summary of the
situation and immediately proposed documenting it.&lt;/p&gt;

    &lt;p&gt;Matthias also highlighted the broader applicability beyond email
workflows: Linux distributions like NixOS routinely fetch patches
directly from upstream Git repositories and apply them to packages
using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;patch&lt;/code&gt;. He noted that even after 15 years of using Git and
being comfortable with email patch workflows, he himself had not known
about this behavior.&lt;/p&gt;

    &lt;p&gt;Several directions were then explored to look for solutions.&lt;/p&gt;

    &lt;p&gt;Peff observed the irony that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; does have an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--attach&lt;/code&gt;
option which puts the message and the patch in separate MIME parts —
making them unambiguous in principle. However, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git mailinfo&lt;/code&gt; (which
powers &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; under the hood) decodes both parts into a single
stream and still treats a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt; line in the message part as the start
of a patch. Fixing this would require careful surgery to avoid
breaking the existing forgiving handling of patches received as a
single attachment.&lt;/p&gt;

    &lt;p&gt;Patrick Steinhardt suggested that even if parsing cannot be made
unambiguous, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; could at least detect the ambiguity and bail by
default with an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--accept-ambiguous-patch&lt;/code&gt; override. Jacob Keller
proposed going further: a new “unambiguous mode” where
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; would produce output that new versions of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt;
could distinguish unambiguously, while old versions would still handle
the common case the same way as before.&lt;/p&gt;

    &lt;p&gt;Jacob had also sketched a concrete scheme: add a new unambiguous
marker after the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; separator, so that old versions of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt;
would still cut at the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; and ignore everything up to the diff, while
new versions would wait for the new marker and correctly ignore any
diff appearing before it. Since the new marker would come after &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt;,
it would not be inserted into the commit message when applied.&lt;/p&gt;

    &lt;p&gt;Peff replied that this was trickier than it sounded: the new marker
would have to be something that could never appear legitimately in a
commit message, and both sides would need to complain if they saw
multiple markers. He explored further options: reversible quoting of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt; lines in the commit message (analogous to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;gt;From&lt;/code&gt;
quoting used in mbox files), applied only when the message would
otherwise be ambiguous. This way, if an older &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; received the
mail, the worst case would be visible quoting in the commit message —
ugly but readable. Junio Hamano, the Git maintainer, added another
thought: refusing to accept unsigned patches at all.&lt;/p&gt;

    &lt;p&gt;Peff also proposed a simpler receiver-side improvement: a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am --strict&lt;/code&gt; mode that would always require a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; separator
before the diff, on the assumption that well-formatted patches from Git
always have one. This would not help with diffs that legitimately
appear before the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt;, but would eliminate the most common accidental
cases.&lt;/p&gt;

    &lt;p&gt;None of these ideas led to an immediate implementation, as they all
involve backward compatibility tradeoffs that would need careful
thought.&lt;/p&gt;

    &lt;p&gt;On February 8, Kristoffer sent a documentation patch titled “doc: add
caveat about round-tripping format-patch” which introduced a new
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Documentation/format-patch-caveats.adoc&lt;/code&gt; file explaining the
behavior. The caveat was designed to be included in the documentation
for git-am(1), git-format-patch(1), and git-send-email(1).&lt;/p&gt;

    &lt;p&gt;Junio reviewed
&lt;a href=&quot;https://lore.kernel.org/git/format-patch_caveats.281@msgid.xyz&quot;&gt;version 1&lt;/a&gt;
and offered a correction to the wording: rather than saying that an
unindented diff in the commit message “will not only cut the message
short but cause that very diff to be applied, along with the patch in
the patch section,” Junio noted that the outcome is not so
deterministic. The diff in the commit message might get applied, or
the patch machinery might trip on something and fail outright. He also
flagged that the space after the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; in the cover letter was
inconsistent with the project’s conventions.&lt;/p&gt;

    &lt;p&gt;Phillip Wood reviewed the patch and found the mention of
git-send-email(1) a bit distracting, since that command merely runs
git-format-patch(1) and does not do any formatting itself. He also
suggested wording improvements: replacing “One might want to use […]
patch(1)” with “Given these limitations, one might be tempted to […]”.&lt;/p&gt;

    &lt;p&gt;Kristoffer incorporated all of this in
&lt;a href=&quot;https://lore.kernel.org/git/V2_format-patch_caveats.34b@msgid.xyz&quot;&gt;version 2&lt;/a&gt;,
which dropped the git-send-email(1) mention from the introductory
paragraph (while keeping the CAVEATS section in its documentation, for
users who encounter it there), removed example code blocks in favor of
clearer prose, and used the list of message-terminating patterns
already present in git-am(1)’s documentation. Junio reviewed it and
queued it with the comment “Nicely written.”&lt;/p&gt;

    &lt;p&gt;A third version,
&lt;a href=&quot;https://lore.kernel.org/git/V3_format-patch_caveats.354@msgid.xyz&quot;&gt;version 3&lt;/a&gt;,
was submitted and received Junio’s approval to go to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Meanwhile, Phillip had observed that since the parsing cannot be fixed,
“perhaps we should update our sample &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit-msg&lt;/code&gt; hook to reject
messages that will cause problems.” On February 7, he sent a 3-patch
series titled “commit-msg.sample: reject messages that would confuse
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt;”. The series:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;Added a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitattributes&lt;/code&gt; rule for sample hooks (which are shell
scripts but have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.sample&lt;/code&gt; extensions).&lt;/li&gt;
      &lt;li&gt;Extended the sample &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit-msg&lt;/code&gt; hook to scan the body of the commit
message for unindented &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff -&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Index: &lt;/code&gt; lines and reject the
commit with a helpful error message.&lt;/li&gt;
      &lt;li&gt;Added a further check to detect &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; separator lines in the message
body, which would cause &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; to silently truncate the commit
message.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;Peff reacted with measured skepticism to patch 3 in
&lt;a href=&quot;https://lore.kernel.org/git/cover.1770476279.git.phillip.wood@dunelm.org.uk&quot;&gt;version 1&lt;/a&gt;:
he and Junio both pointed out that they themselves sometimes use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt;
intentionally in commit messages to add notes that will appear in the
formatted patch email but not end up in the final commit message when
applied. Junio explained the trick: “when I know what I want to write
below the three-dash lines, I would commit with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---&lt;/code&gt; and additional
notes below it, so that I do not forget during format-patch. When the
commit is turned into a patch email […] &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;am&lt;/code&gt; cuts at the first one,
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apply&lt;/code&gt; knows that the garbage lines at front, including
three-dash lines, do not matter until it sees &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^diff&lt;/code&gt;, this works out
perfectly well.”&lt;/p&gt;

    &lt;p&gt;Peff confirmed he used the same trick. Phillip, acknowledging that at
least three developers relied on this behavior, decided to drop patch 3
entirely, reducing the series from three patches to two in
&lt;a href=&quot;https://lore.kernel.org/git/cover.1770993281.git.phillip.wood@dunelm.org.uk&quot;&gt;version 2&lt;/a&gt;.
He also refined the diff detection in the body: the v2 correctly skips
the first paragraph of the message (which becomes the email Subject
header and so does not go through the patch boundary detection), skips
lines below a scissors line, and handles the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.commentChar&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.commentString&lt;/code&gt; configuration options for determining which lines
are comments. Junio reviewed version 2 with detailed questions about
the scissors-line logic.&lt;/p&gt;

    &lt;p&gt;Kristoffer verified that version 2 worked with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit
--cleanup=scissors --verbose&lt;/code&gt; and was satisfied.&lt;/p&gt;

    &lt;p&gt;The discussion did not lead to a fundamental fix to the ambiguous
parsing in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt;, which remains an open problem with no obvious
backward-compatible solution. But it produced two concrete
improvements that were accepted and are now in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;: a CAVEATS
section in the documentation for git-am(1), git-format-patch(1), and
git-send-email(1) spelling out exactly how commit messages can
inadvertently interfere with patch application, and an enhanced sample
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit-msg&lt;/code&gt; hook that rejects messages containing unindented diffs.&lt;/p&gt;

    &lt;p&gt;The thread also served as a useful reminder that this problem is not
limited to email workflows: any project that generates patches from
Git commits using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; and applies them with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;patch&lt;/code&gt;
or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; is exposed to it. The practical advice for authors is
simple: if you include diffs in commit messages for illustrative
purposes, make sure to indent them consistently, and be aware that
even that does not protect you from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;patch&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-olamide-caleb-bello&quot;&gt;Developer Spotlight: Olamide Caleb Bello&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Editor’s note: This edition features a retrospective interview with a
contributor who contributed to Git through a mentoring program.
We hope the reflections shared by the Outreachy contributor will
provide an insightful perspective that benefits the community.
As always, we welcome your thoughts and feedback!&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m Olamide Caleb Bello, a software engineer based in Nigeria. I studied
Economics, but I’ve always been curious about technology and how
systems work behind the scenes. That curiosity led me to start teaching
myself web development, and over time I found myself drawn more
towards backend and systems-oriented work.&lt;/p&gt;

    &lt;p&gt;I became especially interested in understanding how complex tools are
built and maintained, which led me to open source. I contributed to Git
as part of the Outreachy program, where I got to work on improving parts
of Git’s internal workflows.&lt;/p&gt;

    &lt;p&gt;These days, I enjoy working on tools that make development smoother
for others, and I’m particularly interested in open source and
distributed systems.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How did you initially become interested in contributing to Git,
and what motivated you to choose it as your Outreachy project?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I initially saw Git as just a tool I needed to get my work done. For a
long time, my workflow was basically just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt;,
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt;, without thinking much about what was happening underneath.
That started to change when I ran into some particularly messy merge conflicts
that forced me to slow down and really question how Git was managing
history and combining changes.&lt;/p&gt;

    &lt;p&gt;Around the same time, I was becoming more interested in systems in
general, thinking about tools like the kernel, systemd, and Git
itself, and how they work under the hood. That experience pushed me to
look deeper into Git’s internals, and I quickly realized how much
depth there was beneath the surface.&lt;/p&gt;

    &lt;p&gt;When I came across the Outreachy project, choosing Git felt natural, I
wanted to challenge myself and contribute to a tool I had used for
years but didn’t fully understand, while learning from experienced
maintainers.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you feel your contribution has impacted the Git community
or the broader open source ecosystem?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://cloobtech.hashnode.dev/beginning-my-outreachy-opensource-internship-at-git-overview-and-project-description&quot;&gt;My work&lt;/a&gt;
focused on reducing Git’s reliance on global state by refactoring
repository-specific variables into a more localized structure. Each repository
instance now manages its own configuration independently, improving modularity
and reducing the risk of cross-repository issues.&lt;/p&gt;

    &lt;p&gt;Through this work, I came to appreciate how changes at this level contribute to
Git’s long-term direction, particularly efforts to make it more reusable as a
library. Even though these changes aren’t directly visible to users, they make
the system safer and easier to extend.&lt;/p&gt;

    &lt;p&gt;Being part of that process gave me a deeper respect for the level of thought
and the care that goes into maintaining Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Is there any aspect of Git that you now see differently after
having contributed to it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Before contributing, I thought Git was just a bunch of commands I
typed every day. Working on it showed me a whole hidden world,
how configurations are saved and read, how each repository handles
its own settings, and what the index is really doing behind the scenes.
Some of it was so intricate I almost felt like Git was trolling me!&lt;/p&gt;

    &lt;p&gt;Seeing all this up close turned what felt like a simple tool into a
carefully designed system, and it gave me a much deeper appreciation
for the thought and care behind every command.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you balance your contributions with other responsibilities
like work or school?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;At the moment, I’m not tied to a full-time job or school, but I spend a lot
of time learning new tech and doing freelance work. I usually dedicate small,
focused sessions to Git contributions, sometimes just an hour here or there,
and it’s surprising how much progress you can make that way. This rhythm lets
me keep learning, experimenting, and contributing without feeling overwhelmed.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Can you share how Outreachy helped enhance your technical and
non-technical skills (like communication, project management,
etc.)?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Outreachy was a huge growth opportunity for me, both technically and personally.
On the technical side, I deepened my understanding of Git internals, learned to
work effectively in a large C codebase, and tackled complex refactoring of core
systems. On the non-technical side, I honed my communication skills by engaging
actively on the Git mailing list, responding to feedback, and documenting my
work clearly for others. The experience also helped me improve project
discipline, learning how to plan and iterate on tasks in a structured way.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was your biggest takeaway or learning from Outreachy that
you now apply regularly in your work?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My biggest takeaway from Outreachy was learning how even small, careful changes
can have a big impact in a large system like Git. During Outreachy, for even
the tiniest change, I had to run over 32,000 test cases just to be
sure it wouldn’t break anything! I approach my work by breaking tasks into
smaller steps, testing thoroughly, and thinking through the consequences
before making changes. This mindset has become a regular part of how I work,
whether I’m contributing to open source or building my own projects.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was the biggest challenge you faced during your contributions
to Git, and how did you overcome it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The toughest part of contributing to Git was navigating its huge and complex
C codebase. I had to wrap my head around global variables, repository-specific
state, and how configs were stored and read. At first, it felt overwhelming,
and I constantly worried that even a small change might break something.&lt;/p&gt;

    &lt;p&gt;I overcame this by tackling one piece at a time, reading the code carefully,
testing thoroughly, and admittedly, disturbing my mentors quite a bit! 😂 I’m
especially grateful to Christian Couder and Usman Akinyemi, who guided me
patiently. Christian taught me how to ask questions properly, showed me how to
debug effectively, and always encouraged me to think through problems step by
step. Usman was equally supportive, often checking in and joining coding
sessions with me. Both helped me understand Git’s internal architecture and
gave me the confidence to contribute safely and effectively.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Have you thought about mentoring new GSoC / Outreachy students?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Yes, I have thought about mentoring future GSoC or Outreachy students. Since I’m
still relatively new to open source myself, I want to focus on contributing and
learning for now. However, I do hope to co-mentor in the next Outreachy program,
sharing what I’ve learned and helping others navigate the experience.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;If I had a team of expert developers working full time on Git for a year, I
would focus on further improving its modularity and internal architecture.
My goal would be to make Git easier to embed and reuse as a library, reducing
reliance on global state and improving the safety of multi-repository
operations.&lt;/p&gt;

    &lt;p&gt;This would not only make Git more maintainable for contributors but also open
up new possibilities for other projects to integrate Git functionality
more easily.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;If I could remove anything from Git without worrying about backwards
compatibility, I’d simplify some of the legacy parts of its internal state.
These older structures can be confusing and tricky to work with, and removing
them would make Git’s internals cleaner and easier to reason about.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What upcoming features or changes in Git are you particularly
excited about?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m particularly excited about Git’s ongoing libification efforts, which make
it easier for other projects to embed and reuse Git functionality. Changes that
reduce global state and improve repository isolation also excite me, because
they make multi-repository operations safer and Git’s internals easier to work
with. I’m curious to see how these improvements will open up new possibilities
for both contributors and external tools that rely on Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’d say my favorite Git-related tool is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gitingest&lt;/code&gt;. It’s really handy for
exploring repositories programmatically and testing workflows. I’ve found it
especially useful while learning Git internals.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I mainly use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt; to submit patches, read threads on
&lt;a href=&quot;https://lore.kernel.org/git&quot;&gt;lore.kernel.org/git&lt;/a&gt;, and reply via
Gmail. This setup helps me follow discussions and iterate on my
contributions smoothly.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you envision your own involvement with Git or other open
source projects in the future?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m here to stay in open source. I want to keep contributing to Git and other
projects, learning as I go, taking on bigger challenges, and helping new
contributors find their footing. Open source has become a big part of how I
grow as a developer, and I hope to keep giving back for years to come.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My advice for anyone starting Git development is to begin small and be curious.
A great resource I found helpful is the &lt;a href=&quot;https://git-scm.com/docs/MyFirstContribution&quot;&gt;MyFirstContribution&lt;/a&gt;
document. Start by reading the guides, experimenting locally, and submitting
small patches. Interacting with the mailing list, asking questions, and iterating
on feedback will help you learn and grow as a contributor.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Would you recommend other students or contributors to participate
in the GSoC, Outreachy or other mentoring programs, working on
Git? Why? Do you have advice for them?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Absolutely, I would recommend programs like GSoC or Outreachy for anyone
interested in Git or open source. These programs provide structured mentorship,
exposure to real-world projects, and the chance to learn directly from
experienced developers. My advice is to start small, be curious, ask questions,
and don’t be afraid to iterate on feedback. Every contribution, no matter how
minor it may seem, is a valuable learning experience.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://communityblog.fedoraproject.org/the-forge-is-our-new-home/&quot;&gt;The forge is our new home.&lt;/a&gt;
by Tomáš Hrčka on Fedora Community Blog.&lt;br /&gt;
After a full year of preparation, the Community Linux Engineering (CLE) team
announced that &lt;a href=&quot;https://forge.fedoraproject.org/explore/organizations&quot;&gt;Fedora Forge&lt;/a&gt;,
powered by &lt;a href=&quot;https://forgejo.org/&quot;&gt;Forgejo&lt;/a&gt;, is ready for use.
If you own a project at &lt;a href=&quot;https://pagure.io/&quot;&gt;pagure.io&lt;/a&gt;,
you must migrate out of it before June 2026; the
&lt;a href=&quot;https://docs.fedoraproject.org/en-US/forge-documentation/migration/pagure_repository/&quot;&gt;How to Migrate Repository from Pagure&lt;/a&gt;
guide is there to help with this task.
Note that Fedora Forge is narrower in scope than pagure.io;
it is provisioned to host the code, documentation, and tooling
that directly build, manage, and govern the Fedora Project.
Personal projects and general upstream development do not belong on Fedora Forge.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/news/GNOME-GitHub-GitLab-Redirect&quot;&gt;GNOME GitLab Redirecting Some Git Traffic To GitHub For Reducing Costs&lt;/a&gt;
by Michael Larabel in GNOME on Phoronix.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://radicle.xyz/2026/03/30/disclosure-of-vulnerability-in-signed-references&quot;&gt;Radicle: Disclosure of Replay Attack Vulnerability in Signed References&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://radicle.xyz&quot;&gt;Radicle&lt;/a&gt; is a peer-to-peer, local-first
code collaboration stack built on Git.
It was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;
and most recently in &lt;a href=&quot;https://git.github.io/rev_news/2026/01/31/edition-131/&quot;&gt;edition #131&lt;/a&gt;.&lt;br /&gt;
Compare with &lt;a href=&quot;https://tangled.org/&quot;&gt;Tangled&lt;/a&gt; (built on top of AT Protocol),
&lt;a href=&quot;https://ngit.dev/grasp/&quot;&gt;Grasp&lt;/a&gt; and &lt;a href=&quot;https://github.com/fiatjaf/gitstr&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git str&lt;/code&gt;&lt;/a&gt; (built on top of Nostr).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/news/b4-review-nears-pre-alpha&quot;&gt;b4’s Review TUI With AI Integration Nearing Pre-Alpha Release&lt;/a&gt;
by  Michael Larabel in the Linux Kernel section on Phoronix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.vaines.org/posts/2026-03-24-the-comforting-lie-of-sha-pinning/&quot;&gt;The Comforting Lie Of SHA Pinning&lt;/a&gt;
by Aiden Vaines on Vaines.org.
The recommendation to &lt;em&gt;pin your dependencies&lt;/em&gt; in GitHub Actions
translates to using commit SHAs, not tags - which can be moved
(though GitHub already has optional ‘Make tags immutable’ feature).
However, GitHub Actions does not meaningfully validate that
the commit SHA you reference belongs to the repository you think it does:
it can belong to a hostile fork.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nesbitt.io/2026/03/18/git-remote-helpers.html&quot;&gt;Git Remote Helpers&lt;/a&gt;:
how to create &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-remote-swh&lt;/code&gt; that would let you &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; from a &lt;a href=&quot;https://www.swhid.org/&quot;&gt;SWHID&lt;/a&gt;,
pulling source code directly from &lt;a href=&quot;https://www.softwareheritage.org/&quot;&gt;Software Heritage&lt;/a&gt;’s archive
by content hash rather than by URL.
Written by Andrew Nesbitt on his blog.
Also lists built-in remote helpers, and lists third-party helpers:
for cloud and object storage, for content-addressed storage,
for encryption, for VCS bridges,
for P2P and decentralised (though this list was missing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-remote-rad&lt;/code&gt; for Radicle),
for a different transport layer, for blockchain, for other storage backends.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hauntsaninja.github.io/git_bayesect.html&quot;&gt;Git Bayesect&lt;/a&gt;
by Shantanu Jain (@hauntsaninja) on his blog.
It describes the idea behind &lt;a href=&quot;https://github.com/hauntsaninja/git_bayesect&quot;&gt;git bayesect&lt;/a&gt;,
which is a generalisation of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt; that uses Bayesian inference to solve
the problem of flaky, non-deterministic tests.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nabeelvalley.co.za/blog/2026/26-03/tri-x-git-tricks/&quot;&gt;Git Tricks with Tri and Difft&lt;/a&gt;
by Nabeel Valley on their blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/sftsrv/tri&quot;&gt;Tri&lt;/a&gt; is a TUI interactive directory tree browser,
and &lt;a href=&quot;https://difftastic.wilfred.me.uk/introduction.html&quot;&gt;difft, or Difftastic&lt;/a&gt;
is a structural diff tool that understands syntax.
Difftastic was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;,
and most recently in &lt;a href=&quot;https://git.github.io/rev_news/2026/01/31/edition-131/&quot;&gt;Edition #131&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nickjanetakis.com/blog/awesome-git-diffs-with-delta-fzf-and-a-little-shell-scripting&quot;&gt;Awesome Git Diffs with Delta, fzf and a Little Shell Scripting&lt;/a&gt;
by Nick Janetakis on his blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://dandavison.github.io/delta/&quot;&gt;delta&lt;/a&gt; (from ‘git-delta’ package)
is a syntax-highlighting pager for git, diff, grep, and blame output,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/11/11/edition-9/&quot;&gt;Git Rev News Edition #9&lt;/a&gt;,
and most recently in &lt;a href=&quot;https://git.github.io/rev_news/2026/01/31/edition-131/&quot;&gt;Edition #131&lt;/a&gt;.&lt;br /&gt;
&lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;fzf&lt;/a&gt; is a command-line fuzzy finder,
first mentioned directly in &lt;a href=&quot;https://git.github.io/rev_news/2021/04/30/edition-74/&quot;&gt;Git Rev News Edition #74&lt;/a&gt;
(in passing first in &lt;a href=&quot;https://git.github.io/rev_news/2020/06/25/edition-64/&quot;&gt;Edition #64&lt;/a&gt;),
and most recently in &lt;a href=&quot;https://git.github.io/rev_news/2025/12/31/edition-130/&quot;&gt;Edition #130&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://oliviac.dev/blog/build-git-helpers-bash-fzf/&quot;&gt;Build Git helpers from scratch with Bash and fzf&lt;/a&gt; and
&lt;a href=&quot;https://oliviac.dev/blog/customize-git-cli-aliases-delta/&quot;&gt;Improve your Git CLI experience with Git aliases, delta, and custom functions&lt;/a&gt;
by Olivia Coumans on her blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hsps.in/post/taming-a-486mb-git-repo/&quot;&gt;Taming a 486MB Git Repo&lt;/a&gt;
(with source code taking 6MB) by Harisankar P S on his HsPS.in blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://verial.xyz/posts/codecity&quot;&gt;CodeCity: Turning a Codebase into a Skyline&lt;/a&gt;,
about a polyglot (multi-language) CodeCity visualizer built in Rust,
rendering codebases as interactive 3D cities.  In this tool, modules are shown
as buildings, grouped together in districts corresponding to top-level packages
(squarified treemap), with footprint corresponding to size in lines of code,
height corresponding to complexity, and color corresponding to “health”.
Follows from the &lt;a href=&quot;https://verial.xyz/essays/legibility&quot;&gt;Legibility: A Scaling Bottleneck of the Agentic Era&lt;/a&gt; essay.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://daveschumaker.net/use-git-worktrees-they-said-itll-be-fun-they-said/&quot;&gt;“Use git worktrees,” they said. “It’ll be fun!” they said.&lt;/a&gt;
by Dave Schumaker on his blog.
This post describes a problem with often used solutions like
symlinked &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node_modules&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.venv&lt;/code&gt; directories, Yarn’s hardlinks-global mode,
APFS Copy-on-Write (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cp -c&lt;/code&gt;) - which is also supported by other filesystems.
Proposes keeping a fixed pool of 6 worktree slots, and recycling them as needed.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://waldencui.com/post/direnv_is_all_you_need_to_parallelize_claude_code_with_git_worktrees/&quot;&gt;Direnv is All You Need to Parallelize Agentic Programming with Git Worktrees&lt;/a&gt;
by Walden Cui on The Search Blog.&lt;br /&gt;
See also, for example:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://dev.to/rohansx/i-built-workz-the-zoxide-for-git-worktrees-that-finally-fixes-env-nodemodules-hell-in-2026-2dpj&quot;&gt;I Built workz: The Zoxide for Git Worktrees That Finally Fixes .env + node_modules Hell in 2026&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2026/02/28/edition-132/&quot;&gt;Git Rev News Edition #132&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://gause.cz/blog/git-worktrees-with-claude-code-laravel-and-herd/&quot;&gt;Git Worktrees with Claude Code, Laravel, and Herd&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2026/02/28/edition-132/&quot;&gt;Git Rev News Edition #132&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.randombits.host/why-you-should-be-using-git-worktrees/&quot;&gt;Why You Should Be Using Git Worktrees&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/11/30/edition-129/&quot;&gt;Git Rev News Edition #129&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://haacked.com/archive/2025/11/21/tree-me/&quot;&gt;tree-me: Because git worktrees shouldn’t be a chore&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/11/30/edition-129/&quot;&gt;Git Rev News Edition #129&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/parallel-claude-code/&quot;&gt;Managing Multiple Claude Code Sessions Without Worktrees&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/07/31/edition-125/&quot;&gt;Git Rev News Edition #125&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.andreagrandi.it/posts/how-to-use-git-worktree-effectively-with-python-projects/&quot;&gt;How to use git worktree effectively with Python projects&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/07/31/edition-125/&quot;&gt;Git Rev News Edition #125&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://simonwillison.net/guides/agentic-engineering-patterns/using-git-with-coding-agents/&quot;&gt;Using Git with coding agents&lt;/a&gt;
is a chapter from the guide &lt;a href=&quot;https://simonwillison.net/guides/agentic-engineering-patterns/&quot;&gt;Agentic Engineering Patterns&lt;/a&gt;,
available on Simon Willison’s Weblog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.esc.sh/how-i-organize-git-repos-locally/&quot;&gt;How I organize git repos locally&lt;/a&gt;
by Mansoor Majeed on their Esc.sh blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codon.org.uk/~mjg59/blog/p/ssh-certificates-and-git-signing/&quot;&gt;SSH certificates and git signing&lt;/a&gt;
on Matthew Garrett’s Blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.dbrgn.ch/2021/11/16/git-ssh-signatures/&quot;&gt;Signing Git Commits with SSH Keys&lt;/a&gt;
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/01/31/edition-83/&quot;&gt;Git Rev News Edition #83&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://mjg59.dreamwidth.org/60916.html&quot;&gt;Git signatures with SSH certificates&lt;/a&gt;
by Matthew Garret on his old mjg59’s journal blog,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/09/30/edition-91/&quot;&gt;Git Rev News Edition #91&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://geshan.com.np/blog/2026/03/git-branching-strategy-for-continuous-delivery/&quot;&gt;Choosing the best git branching strategy for continuous delivery in your team&lt;/a&gt;
by Geshan Manandhar on his blog: compares Git-Flow, GitHub Flow, and Trunk-based development,
recommending GitHub Flow.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
by Martin Fowler (author of the &lt;a href=&quot;https://martinfowler.com/books/refactoring.html&quot;&gt;Refactoring: Improving the Design of Existing Code&lt;/a&gt; book),
which was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nathan-long.com/blog/git-remove-dead-branches/&quot;&gt;Git: Remove Dead Branches&lt;/a&gt;
by Nathan Long on his blog.
The script described in detail should probably use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git for-each-ref&lt;/code&gt;
rather than parse the user-facing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch&lt;/code&gt; command, though.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lornajane.net/posts/2026/selectively-ignore-lines-in-git-diff&quot;&gt;Selectively ignore lines in git diff&lt;/a&gt;
by using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff --ignore-matching-lines=&amp;lt;regexp&amp;gt;&lt;/code&gt; (or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-I&lt;/code&gt; in short).
Article by Lorna Jane Mitchell on her LornaJane blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.narf.ssji.net/2026/03/18/git-ignoring-temporary-changes/&quot;&gt;Git: ignoring temporary changes&lt;/a&gt;
by Olivier Mehani on Narf blog.
He proposes using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git update-index --assume-unchanged &amp;lt;PATH&amp;gt;&lt;/code&gt;, which is not safe;
a safer solution is to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--skip-worktree&lt;/code&gt; instead (won’t lose changes, may prevent safe operation).
    &lt;ul&gt;
      &lt;li&gt;Compare &lt;a href=&quot;https://www.brandonpugh.com/til/git/skip-worktree-ignore-modified-files/&quot;&gt;Use skip-worktree to ignore modified files&lt;/a&gt;
by Brandon Pugh, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/11/30/edition-129/&quot;&gt;Git Rev News Edition #129&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.lysk.tech/sqlite-on-git-prologue/&quot;&gt;SQLite on Git, Prologue: Why do we need random access in git&lt;/a&gt; and
&lt;a href=&quot;https://blog.lysk.tech/sqlite-on-git-part-1&quot;&gt;SQLite on Git, Part I: The .git folder - Falling down the Rabbithole&lt;/a&gt;
are the first two parts of an upcoming series of blogposts, where the author shares research
enabling one to have a version controlled filesystem
that allows running a versioned SQLite database on top of Git’s internal storage.
Written by Martin R. Lysk on his blog.
    &lt;ul&gt;
      &lt;li&gt;Contrast &lt;a href=&quot;https://nesbitt.io/2026/02/26/git-in-postgres.html&quot;&gt;Git in Postgres&lt;/a&gt;
by Andrew Nesbitt mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2026/02/28/edition-132/&quot;&gt;Git Rev News Edition #132&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://x61.sh/log/2026/03/14032026191148-gothub.html&quot;&gt;GotHub all the things&lt;/a&gt;
by 𝚐𝚘𝚗𝚣𝚊𝚕𝚘 on x61.sh blog.
    &lt;ul&gt;
      &lt;li&gt;The &lt;a href=&quot;https://gothub.org/&quot;&gt;Game of Trees Hub&lt;/a&gt; (GotHub)
is a transparently funded Git repository hosting service,
with infrastructure on OpenBSD and the &lt;a href=&quot;https://gameoftrees.org/&quot;&gt;Game of Trees (GoT)&lt;/a&gt; VCS,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2026/01/31/edition-131/&quot;&gt;Git Rev News Edition #131&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2026/02/28/edition-132/&quot;&gt;#132&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dyyni.org/posts/easy-way-to-mirror-git-repos/&quot;&gt;An easy way to mirror git repositories&lt;/a&gt;
with the help of author’s little shell script “&lt;a href=&quot;https://codeberg.org/2ug/shellscripts/src/branch/master/ferne&quot;&gt;ferne&lt;/a&gt;”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://entropicthoughts.com/rebasing-in-magit&quot;&gt;Rebasing in Magit&lt;/a&gt;
by kqr (Chris) on Entropic Thoughts.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt; is a popular &lt;a href=&quot;https://www.gnu.org/software/emacs&quot;&gt;Emacs&lt;/a&gt; editor interface to Git,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/08/05/edition-6/&quot;&gt;Git Rev News Edition #6&lt;/a&gt;,
and most recently in &lt;a href=&quot;https://git.github.io/rev_news/2025/12/31/edition-130/&quot;&gt;Edition #130&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2026/02/28/edition-132/&quot;&gt;#132&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ben.gesoff.uk/posts/reviewing-large-changes-with-jj/&quot;&gt;Reviewing large changes with Jujutsu&lt;/a&gt;
by Ben Gesoff on his blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://jj-vcs.github.io/jj/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; is a Git-compatible version control system,
written in Rust, which was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1060024/&quot;&gt;Magit and Majutsu: discoverable version-control&lt;/a&gt;
by Daroc Alden on LWN.net.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/0WD0/majutsu&quot;&gt;Majutsu&lt;/a&gt; provides a &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt;-style
interface for &lt;a href=&quot;https://www.jj-vcs.dev/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; in GNU Emacs.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2026/02/28/edition-132/&quot;&gt;Git Rev News Edition #132&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.knifepoint.net/~kat/kb-jj-patchedit.html&quot;&gt;Editing changes in patch format with Jujutsu VCS&lt;/a&gt;
by Katalin Rebhan (@dblsaiko) on her blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bramcohen.com/p/manyana&quot;&gt;Manyana: A Coherent Vision for the Future of Version Control&lt;/a&gt;
and &lt;a href=&quot;https://bramcohen.com/p/more-on-version-control&quot;&gt;More on Version Control: This may have some legs&lt;/a&gt;
by Bram Cohen on Bram’s Thoughts,
about his approach of using CRDTs (Conflict-free Replicated Data Types) for version control.&lt;br /&gt;
The ideas behind &lt;a href=&quot;https://github.com/bramcohen/manyana&quot;&gt;Manyana&lt;/a&gt;,
with a prototype written in Python, looks a bit similar to &lt;a href=&quot;https://web.archive.org/web/20070202014158/http://codeville.org/&quot;&gt;Codeville&lt;/a&gt;,
a distributed version control system created around 2005 by Ross and Bram Cohen,
with a unique merging algorithm, no longer existing.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1063303/&quot;&gt;Development tools: Sashiko, b4 review, and API specification&lt;/a&gt;
by Jonathan Corbet on LWN.net (&lt;a href=&quot;https://lwn.net/SubscriberLink/1063303/c076cd05ab3bef54/&quot;&gt;free link&lt;/a&gt;).
    &lt;ul&gt;
      &lt;li&gt;Konstantin Ryabitsev’s &lt;a href=&quot;https://b4.docs.kernel.org/en/latest/&quot;&gt;b4 tool&lt;/a&gt;
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/03/25/edition-61/&quot;&gt;Git Rev News Edition #61&lt;/a&gt;,
and most recently in &lt;a href=&quot;https://git.github.io/rev_news/2025/09/30/edition-127/&quot;&gt;Edition #127&lt;/a&gt;.
It is also listed on the &lt;a href=&quot;https://git.github.io/Hacking-Git/&quot;&gt;Hacking Git&lt;/a&gt; page.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://mercurial.paris/download/Mercurial%20at%20Google.pdf&quot;&gt;Mercurial at Google: Also known as Fig&lt;/a&gt;,
slides by Martin von Zweigbergk, presented at 2023-04-06.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Automate Your Code with GitHub Actions (&lt;a href=&quot;https://www.git-tower.com/blog/github-actions-fundamentals&quot;&gt;Part 1&lt;/a&gt; and &lt;a href=&quot;https://www.git-tower.com/blog/github-actions-events-and-triggers&quot;&gt;Part 2&lt;/a&gt;) by Bas Steins on Tower’s Blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Scientific papers&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Benedikt Schesch, Ryan Featherman, Kenneth J Yang, Ben Roberts, and Michael D. Ernst:
&lt;em&gt;“&lt;a href=&quot;https://homes.cs.washington.edu/~mernst/pubs/merge-evaluation-ase2024.pdf&quot;&gt;Evaluation of Version Control Merge Tools.&lt;/a&gt;“&lt;/em&gt;
at 39th IEEE/ACM International Conference on Automated Software Engineering (ASE ‘24).
Association for Computing Machinery, New York, NY, USA, 831–83.
&lt;a href=&quot;https://doi.org/10.1145/3691620.3695075&quot;&gt;https://doi.org/10.1145/3691620.3695075&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Authors evaluated (using Java projects from
&lt;a href=&quot;https://archiveprogram.github.com/greatest-hits/&quot;&gt;GitHub’s Greatest Hits&lt;/a&gt;
and &lt;a href=&quot;https://reporeapers.github.io/&quot;&gt;RepoReapers / Reaper&lt;/a&gt; datasets)
the following CLI tools:
&lt;a href=&quot;https://git-scm.com/docs/git-merge#_merge_strategies&quot;&gt;different variants of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git merge&lt;/code&gt;&lt;/a&gt; algorithm,
&lt;a href=&quot;https://github.com/paulaltin/git-hires-merge&quot;&gt;git-hires-merge&lt;/a&gt;,
&lt;a href=&quot;https://github.com/Symbolk/IntelliMerge&quot;&gt;IntelliMerge&lt;/a&gt; (Java only),
&lt;a href=&quot;https://github.com/ASSERT-KTH/spork&quot;&gt;Spork&lt;/a&gt; (Java only),
and their own &lt;a href=&quot;https://github.com/plume-lib/merging&quot;&gt;Plume-lib merging&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;They considered, but did not evaluate
&lt;a href=&quot;https://github.com/se-sic/jdime&quot;&gt;JDime&lt;/a&gt; (Java only) because of its limitations,
as well as AutoMerge (also known as AutoMerge-PTM), DeepMerge, and MergeBERT
because those tools are not publicly available.
They could not evaluate tools based on GUI interaction,
like &lt;a href=&quot;https://github.com/ualberta-smr/RefMerge&quot;&gt;RefMerge&lt;/a&gt; (IntelliJ IDEA plugin)
or &lt;a href=&quot;http://www.fosd.de/SSMerge/&quot;&gt;FSTMerge&lt;/a&gt; (part of FeatureHouse, depends on KDiff3).&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://mergiraf.org/&quot;&gt;Mergiraf&lt;/a&gt; did not exist at the time this paper was written.
Mergiraf was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/11/30/edition-117/&quot;&gt;Git Rev News Edition #117&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2025/01/31/edition-119/&quot;&gt;#119&lt;/a&gt; (in passing),
and &lt;a href=&quot;https://git.github.io/rev_news/2025/11/30/edition-129/&quot;&gt;#129&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.semanticmerge.com/semanticmerge-intro-guide&quot;&gt;SemanticMerge&lt;/a&gt;,
a proprietary tool with a 15 or 30 day trial, might have been defunct then (since 2013);
nowadays its homepage page is taken by SEO spam.
It was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/04/18/edition-38/&quot;&gt;Git Rev News Edition #38&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Joao Pedro Duarte, Paulo Borba, and Guilherme Cavalcanti:
&lt;em&gt;“LastMerge: A language-agnostic structured tool for code integration”&lt;/em&gt;
preprint on &lt;a href=&quot;https://arxiv.org/abs/2507.19687&quot;&gt;arXiv:2507.19687&lt;/a&gt; (25 July 2025).
It compares four structured merge tools:
two Java specific tools, JDime and Spork, and their generic counterparts,
Mergiraf and their own LastMerge tool (currently not available), respectively.
    &lt;ul&gt;
      &lt;li&gt;They also mention &lt;a href=&quot;https://github.com/guilhermejccavalcanti/s3m&quot;&gt;s3m&lt;/a&gt;
(&lt;a href=&quot;https://pauloborba.cin.ufpe.br/project/s3m/&quot;&gt;Semistructured 3-Way Merge&lt;/a&gt;) for Java.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Qingyu Zhang, Junzhe Li, Jiayi Lin, Jie Ding, Lanteng Lin, and Chenxiong Qian:
&lt;em&gt;“WizardMerge—Save Us from Merging without Any Clues.”&lt;/em&gt;
ACM Transactions on Software Engineering and Methodology, Volume 35, Issue 1;
Article No.: 22 (11 December 2025), 28 pages.
&lt;a href=&quot;https://doi.org/10.1145/3731751&quot;&gt;https://doi.org/10.1145/3731751&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;An open-source code-merging auxiliary prototype named
&lt;a href=&quot;https://github.com/HKU-System-Security-Lab/WizardMerge&quot;&gt;WizardMerge&lt;/a&gt;,
together with evaluation datasets, is available on GitHub.
Written in C++.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://tonyg.github.io/revctrl.org/index.html&quot;&gt;A Partial Extract of revctrl.org&lt;/a&gt;,
a Revision Control wiki, which has fallen victim to spam, and is now taken over.
Scraped, archived, and edited by Tony Garnock-Jones;
spam cleanup and improvements to formatting by Michael Haggerty.
Unfortunately, all the edit history of the wiki was lost,
and individual pages do not have clear authorship.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://guides.nyu.edu/datascience/vcs&quot;&gt;Version Control with Git for Data Science&lt;/a&gt;,
a part of Research Guides for the data science community at New York University.&lt;br /&gt;
References &lt;a href=&quot;https://swcarpentry.github.io/git-novice/&quot;&gt;Software Carpentry “Version Control with Git”&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hauntsaninja/git_bayesect&quot;&gt;git bayesect&lt;/a&gt;: Bayesian git bisection.
You can use this tool to detect changes in likelihoods of events, for instance,
to isolate a commit where a slightly flaky test became very flaky.
You don’t need to know the likelihoods (although you can provide priors),
just that something has changed at some point in some direction.
If your code has started gaslighting you, give it a try!
Written in Python, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/em1208/GitStats&quot;&gt;GitStats&lt;/a&gt; is a statistics generator for Git repositories.
Currently it produces only HTML output with tables and graphs,
providing total files, lines, commits, authors, commits by hour of day, day of week, etc.
Fork of &lt;a href=&quot;http://gitstats.sourceforge.net/&quot;&gt;http://gitstats.sourceforge.net/&lt;/a&gt;.
Written in Python, under GPLv2 or older license.&lt;br /&gt;
Original version demo available at &lt;a href=&quot;http://gitstats.sourceforge.net/examples/gitstats/&quot;&gt;http://gitstats.sourceforge.net/examples/gitstats/&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hjr265/gittop&quot;&gt;GitTop&lt;/a&gt; is terminal UI tool
for visualizing Git repository statistics, inspired by htop/btop.
Written in Go, under BSD-3-Clause license.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://hjr265.me/blog/building-gittop-with-agentic-coding/&quot;&gt;My First Fully Agentic Coding Project: GitTop&lt;/a&gt;
by Mahmud Ridwan on hjr265.me.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/junglerobba/diffsoup&quot;&gt;diffsoup&lt;/a&gt; is a Gerrit-style
TUI patchset diff viewer for pull requests, using Jujutsu.
Written in Rust, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/junegunn/fzf-git.sh&quot;&gt;fzf-git.sh&lt;/a&gt;:
bash, zsh, and fish key bindings for Git objects,
powered by &lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;fzf&lt;/a&gt;.
Each binding will allow you to browse through Git objects of a certain type,
and select from TUI the objects you want to paste to your command-line.
Under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitmodules.com/&quot;&gt;Git X-Modules&lt;/a&gt; is a tool to manage modular Git projects.
Alternative to the built-in &lt;a href=&quot;https://git-scm.com/docs/git-submodule&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodule&lt;/code&gt;&lt;/a&gt;
(see also &lt;a href=&quot;https://git-scm.com/book/en/v2/Git-Tools-Submodules&quot;&gt;Git Tools - Submodules&lt;/a&gt;
chapter in “Pro Git” 2nd Ed.), &lt;a href=&quot;https://github.com/apenwarr/git-subtree&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git subtree&lt;/code&gt;&lt;/a&gt;
(which uses the built-in &lt;a href=&quot;https://git-scm.com/docs/git-merge#Documentation/git-merge.txt-subtreepath&quot;&gt;subtree&lt;/a&gt; merge strategy),
&lt;a href=&quot;https://github.com/deliciousinsights/git-stree&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stree&lt;/code&gt;&lt;/a&gt;,
and &lt;a href=&quot;https://github.com/ingydotnet/git-subrepo&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git subrepo&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitbucket.github.io/&quot;&gt;GitBucket&lt;/a&gt; is an Open Source Git platform on JVM
(a software forge), with easy installation, high extensibility &amp;amp; GitHub API compatibility.
Written in Scala, under Apache License Version 2.0.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.codebasehq.com/&quot;&gt;CodebaseHQ&lt;/a&gt; by Krystal is a software forge that
offers Git, Mercurial and Subversion hosting, with project management tools.
No free tier, 15 day free trial.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mandel-macaque/memento&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-memento&lt;/code&gt;&lt;/a&gt; is a Git extension
that records the AI coding session used to produce a commit.
It attaches AI conversation transcripts as &lt;a href=&quot;https://git-scm.com/docs/git-notes&quot;&gt;git notes&lt;/a&gt;,
creating an audit trail for AI-assisted development.
Written in F# and TypeScript, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://chunkhound.github.io/&quot;&gt;ChunkHound&lt;/a&gt; is a local-first codebase intelligence,
which researches your codebase,
extracting architecture, patterns, and institutional knowledge,
to give your AI assistant the context it needs - deep understanding
of your code, files, and architectural decisions.
Integrates via &lt;a href=&quot;https://spec.modelcontextprotocol.io/&quot;&gt;MCP&lt;/a&gt; (Model Context Protocol).
Written in Python, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sashiko.dev/&quot;&gt;Sashiko&lt;/a&gt; is an agentic Linux kernel code review system,
using a LLM (Large Language Model). It monitors public mailing lists
to thoroughly evaluate proposed Linux kernel changes.
The system acts like a team of specialized reviewers covering domains
from high-level architecture verification and security audits
to low-level resource management and concurrency analysis.
It is an open-source project that belongs to the Linux Foundation,
licensed under the Apache License, Version 2.0.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.52.0.windows.2&quot;&gt;v2.52.0(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.51.2.windows.2&quot;&gt;v2.51.2(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.53.0.windows.2&quot;&gt;v2.53.0(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Data Center &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/release-notes-872139866.html&quot;&gt;10.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#31110&quot;&gt;3.11.10&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3119&quot;&gt;3.11.9&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3125&quot;&gt;3.12.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3126&quot;&gt;3.12.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3134&quot;&gt;3.13.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3135&quot;&gt;3.13.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.14.html#3140&quot;&gt;3.14.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.20/admin/release-notes#3.20.0&quot;&gt;3.20.0&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.19/admin/release-notes#3.19.4&quot;&gt;3.19.4&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.18/admin/release-notes#3.18.7&quot;&gt;3.18.7&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.13&quot;&gt;3.17.13&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.16&quot;&gt;3.16.16&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.20&quot;&gt;3.15.20&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.25&quot;&gt;3.14.25&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2026/03/25/patch-release-gitlab-18-10-1-released/&quot;&gt;18.10.1, 18.9.3, 18.8.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2026/03/19/gitlab-18-10-released/&quot;&gt;18.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2026/03/11/patch-release-gitlab-18-9-2-released/&quot;&gt;18.9.2, 18.8.6, 18.7.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-desktop/current/&quot;&gt;11.10.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.5.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v2.6.0&quot;&gt;2.6.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.18.2&quot;&gt;4.18.2&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.18.1&quot;&gt;4.18.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.18.0&quot;&gt;4.18.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.19.6&quot;&gt;0.19.6&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.19.5&quot;&gt;0.19.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-16&quot;&gt;16.0 (Beta)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes?show_tab=release-notes&quot;&gt;11.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Olamide Caleb Bello, Bruno Brito,
Štěpán Němec and Kristoffer Haugsbakk.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 132 (February 28th, 2026)</title>
      <link>https://git.github.io/rev_news/2026/02/28/edition-132/</link>
      <pubDate>Sat, 28 Feb 2026 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2026/02/28/edition-132/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-132-february-28th-2026&quot;&gt;Git Rev News: Edition 132 (February 28th, 2026)&lt;/h2&gt;

&lt;p&gt;Welcome to the 132nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of January and February 2026.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CH3PR12MB9026B5872FD42F031970074BC2B3A%40CH3PR12MB9026.namprd12.prod.outlook.com&quot;&gt;Slow git pack-refs –all&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Martin Fick started the discussion by reporting a significant
performance issue where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pack-refs --all&lt;/code&gt; was taking over five
minutes to complete on a large repository (~3M refs) hosted on an
NFS filesystem. This delay was particularly problematic for Gerrit
servers because Git holds the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;packed-refs.lock&lt;/code&gt; for nearly the
entire duration, blocking other reference updates. Martin noted that
JGit was able to perform the same operation in under 20 seconds on
the same repository, suggesting the bottleneck was specific to the
Git implementation.&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;packed-refs&lt;/code&gt; file is used by Git to store a large number of
references in a single sorted file to avoid the overhead of many
small “loose” reference files. However, updating this file requires
rewriting it entirely, and Git typically verifies that objects exist
and “peels” tags (finding the underlying object a tag points to)
during this process.&lt;/p&gt;

    &lt;p&gt;brian m. carlson replied to Martin, suggesting that the slowdown
might be occurring in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;should_pack_ref()&lt;/code&gt; because Git needs to
verify that the object at the end of a reference actually
exists. brian also pointed out that NFS was likely a major factor,
as the network latency involved in opening many pack files and
checking loose objects can be substantial. He suggested setting
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;receive.unpackLimit&lt;/code&gt; to 1 to reduce the number of loose objects
created in the first place.&lt;/p&gt;

    &lt;p&gt;Jeff King (alias Peff) explained that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;packed-refs&lt;/code&gt; file stores
“tag-peeling” information, which requires Git to open each object
for newly written refs via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;peel_object()&lt;/code&gt; to read its header and
determine its type. Peff noted that this logic resides in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;write_with_updates()&lt;/code&gt; within &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;packed-backend.c&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Martin conducted further testing using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strace&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;drop_caches&lt;/code&gt; to
eliminate filesystem caching interference. He discovered that while
the actual &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;write()&lt;/code&gt; calls were fast, there were long gaps—up to
four minutes in total—where the program was not making any system
calls. Martin hypothesized that this “hidden” time was spent by the
kernel handling page faults for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mmap()&lt;/code&gt;ed memory over NFS.&lt;/p&gt;

    &lt;p&gt;Patrick Steinhardt concurred that NFS was frequently a source of
such performance issues, mentioning that GitLab had eventually
sunsetted the use of NFS for this reason. Patrick suggested using
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;perf(1)&lt;/code&gt; to generate a flame graph to see exactly where the CPU was
spending time.&lt;/p&gt;

    &lt;p&gt;Martin provided a summary of a flame graph, which showed about
one-third of the time spent in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_memcmp_sse4_1&lt;/code&gt; and another third in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unpack_object_header_buffer()&lt;/code&gt;, both accompanied by high page fault
rates. He also noticed significant time spent in a function he
identified as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;packed_refs_store_create()&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Peff corrected the function name to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;packed_ref_store_create()&lt;/code&gt; and
noted that Git might be performing an extra linear pass through the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;packed-refs&lt;/code&gt; file if it lacks certain header tags. He discovered
that JGit-generated files were missing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sorted&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fully-peeled&lt;/code&gt; traits in the header. Without the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sorted&lt;/code&gt; tag, Git
reads the entire file linearly to verify its order before it can
perform binary searches. Peff suggested that JGit should be updated
to write these markers.&lt;/p&gt;

    &lt;p&gt;In a final breakthrough, Martin tested adding these tags
manually. He found that while the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sorted&lt;/code&gt; tag did not provide a
major boost, adding the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fully-peeled&lt;/code&gt; tag was the “trigger” that
dropped the execution time from over five minutes to under four
seconds. The absence of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fully-peeled&lt;/code&gt; tag was forcing Git to
re-peel every reference by looking up the objects in the pack files
over the slow NFS connection.&lt;/p&gt;

    &lt;p&gt;Following that discovery, a fix was proposed for JGit in
&lt;a href=&quot;https://eclipse.gerrithub.io/c/eclipse-jgit/jgit/+/1230152&quot;&gt;Change 1230152&lt;/a&gt;.
Adithya Chakilam submitted the patch, titled “pack-refs: Add
sorted/fully-peeled flags,” to ensure JGit produces packed-refs
files that Git can process efficiently.&lt;/p&gt;

    &lt;p&gt;This resolution not only fixes the immediate performance issue for
Gerrit servers but also ensures that any environment using a mix of
JGit and Git will benefit from reduced lock contention and faster
reference updates.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/whats-new-in-git-2-53-0/&quot;&gt;What’s new in Git 2.53.0?&lt;/a&gt;
by Justin Tobler on GitLab Blog.
The described changes include
fixes for geometric repacking (adding support for promisor remotes),
updates to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fast-import&lt;/code&gt; commit signature handling options,
and more data being available in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repo structure&lt;/code&gt; output.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://9to5linux.com/git-2-53-released-with-new-features-and-performance-improvements&quot;&gt;Git 2.53 Released with New Features and Performance Improvements&lt;/a&gt;
by Marcus Nestor on 9to5Linux.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/news/Git-2.53-Released&quot;&gt;Git 2.53 Released With More Optimizations, One Step Closer To Making Rust Mandatory&lt;/a&gt;
by Michael Larabel on Phoronix.&lt;/li&gt;
  &lt;li&gt;Gentoo Linux has kicked off its long transition away from Microsoft’s GitHub
to &lt;a href=&quot;https://codeberg.org/gentoo/gentoo&quot;&gt;Codeberg&lt;/a&gt;, an open-source Git-hosting service:
see the &lt;a href=&quot;https://www.pcgamer.com/software/linux/after-microsoft-couldnt-keep-its-ai-hands-to-itself-a-notoriously-complex-linux-distro-has-started-its-long-march-away-from-github/&quot;&gt;PC Gamer article&lt;/a&gt;
by Joshua Wolens, 
and the &lt;a href=&quot;https://www.gentoo.org/news/2026/02/16/codeberg.html&quot;&gt;Gentoo on Codeberg&lt;/a&gt;
article in Gentoo Linux News.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://vinyl-cache.org/organization/moving.html&quot;&gt;Vinyl Cache project (formerly Varnish Cache) has left GitHub&lt;/a&gt;
for the self hosted &lt;a href=&quot;https://forgejo.org/&quot;&gt;Forgejo&lt;/a&gt;
instance: &lt;a href=&quot;https://code.vinyl-cache.org/vinyl-cache/&quot;&gt;https://code.vinyl-cache.org/vinyl-cache/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opencollective.com/gothub/updates/web-interface-is-now-enabled-and-we-need-more-subscribers&quot;&gt;Game of Trees Hub’s web interface is live&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;The &lt;a href=&quot;https://gothub.org/&quot;&gt;Game of Trees Hub&lt;/a&gt;
is a transparently funded Git repository hosting service,
with infrastructure on OpenBSD and the &lt;a href=&quot;https://gameoftrees.org/&quot;&gt;Game of Trees (GoT)&lt;/a&gt; VCS,
mentioned in the &lt;a href=&quot;https://git.github.io/rev_news/2026/01/31/edition-131/&quot;&gt;previous edition&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/orgs/community/discussions/185387&quot;&gt;Exploring Solutions to Tackle Low-Quality Contributions on GitHub&lt;/a&gt;
by Camilla Moraes (@moraesc) on GitHub Community Discussions.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opzero.sh/blog/github-ceo-agrees-git-dead&quot;&gt;The Former CEO of GitHub [Thomas Dohmke] Just Agreed: Git Wasn’t Built for This [AI-based coding]&lt;/a&gt;
by Jeff Cameron on OpZero blog,
following his “interview” with Claude Opus 4.5.
The idea is to version code, intent, constraints, and reasoning together,
and to add a semantic reasoning layer through a “context graph”.
Thomas Dohmke &lt;a href=&quot;https://thenewstack.io/thomas-dohmke-interview-entire/&quot;&gt;has launched&lt;/a&gt;
such an open-source developer platform
for collaboration between developers and AI agents,
&lt;a href=&quot;https://entire.io/&quot;&gt;Entire&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;On one hand this assumes that AI generated code is a viable path to creating software,
and there would be no technical problems like model collapse,
or economical problems like cost of training and using LLMs.&lt;/li&gt;
      &lt;li&gt;On the other hand there exist specialized solutions to help
version data (like &lt;a href=&quot;https://dvc.org&quot;&gt;DVC&lt;/a&gt; or &lt;a href=&quot;https://www.pachyderm.com/&quot;&gt;Pachyderm&lt;/a&gt;)
or database schemas.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1057561/&quot;&gt;Evolving Git for the next decade&lt;/a&gt;
by Joe Brockmeier on LWN.net, reporting about Patrick Steinhardt’s (@pks-t)
main track talk at FOSDEM 2026.
The recording of this talk &lt;a href=&quot;https://fosdem.org/2026/schedule/event/HTJK33-evolving_git_for_the_next_decade/&quot;&gt;is available on the FOSDEM site&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/posts/exploring-the-git-directory&quot;&gt;Exploring the .git Directory – How Git Stores Your Code&lt;/a&gt;
by Bruno Brito on Tower’s Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/the-ultimate-guide-to-git-config&quot;&gt;The Ultimate Guide to Git Config: Fine-Tuning Your Git Experience&lt;/a&gt;
by Bruno Brito on Tower’s Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://neverready.app/blog/2026/02-git-blame-ignore/&quot;&gt;TIL that pathnames in git configs can be optional&lt;/a&gt;
by Anh Tuan Le on his blog.
It mentions the fact that as of Git 2.52 (Nov 2025),
you can mark config file paths as optional using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:(optional)&lt;/code&gt; prefix;
see the &lt;a href=&quot;https://git-scm.com/docs/git-config#Documentation/git-config.txt-pathname&quot;&gt;‘pathname’ entry in the “Values” section of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config&lt;/code&gt; manpage&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/itxshakil/git-reflog-explained-recover-deleted-commits-lost-work-i4n&quot;&gt;Git Reflog Explained: Recover Deleted Commits &amp;amp; Lost Work&lt;/a&gt;
by Shakil Alam on DEV.to.  Has a video version.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-save-multiple-drafts-in-git-a-guide-to-using-stash/&quot;&gt;How to Save Multiple Drafts in Git: A Guide to Using Git Stash&lt;/a&gt;
by Chidiadi Anyanwu on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lornajane.net/posts/2026/git-renames-are-not-renames&quot;&gt;Git renames are not renames&lt;/a&gt;
(and where it can cause problems)
by Lorna Jane Mitchell on LornaJane Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nesbitt.io/2026/02/12/the-many-flavors-of-ignore-files.html&quot;&gt;The Many Flavors of Ignore Files&lt;/a&gt;
by Andrew Nesbitt on his blog.
The post talks about Git’s actual semantics for “gitignore syntax”.
    &lt;ul&gt;
      &lt;li&gt;The author wrote &lt;a href=&quot;https://github.com/git-pkgs/gitignore&quot;&gt;git-pkgs/gitignore&lt;/a&gt;,
a Go library that fully matches how Git’s gitignore patterns work.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://remysharp.com/2026/02/12/git-recent&quot;&gt;git recent: what branch did I work on?&lt;/a&gt;,
about a simple Git alias, by Remy Sharp on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://xlii.space/eng/i-hate-github-actions-with-passion/&quot;&gt;I Hate GitHub Actions with Passion&lt;/a&gt;
by Przemysław Alexander Kamiński on his xlii.space blog.
    &lt;ul&gt;
      &lt;li&gt;The main problem is with trying to debug &lt;a href=&quot;https://github.com/features/actions&quot;&gt;GitHub Actions&lt;/a&gt; problems when the action fails;
&lt;a href=&quot;https://github.com/nektos/act&quot;&gt;Act&lt;/a&gt;, a command line tool
to run your GitHub Actions locally using the Docker Engine API, could help there.
Act was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/07/31/edition-113/&quot;&gt;Git Rev News Edition #113&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;There is also &lt;a href=&quot;https://github.com/bahdotsh/wrkflw&quot;&gt;WRKFLW&lt;/a&gt;,
a command-line tool for validating and executing GitHub Actions workflows locally,
without requiring a full GitHub environment.
WRKFLW was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/08/31/edition-126/&quot;&gt;Git Rev News Edition #126&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://theexceptioncatcher.com/2026/02/github-billing/&quot;&gt;GitHub Actions: The Hidden Billing Trap&lt;/a&gt;,
on how to avoid unexpected costs with a simple settings adjustment.
Written by Steven Hicks on TheExceptionCatcher.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gause.cz/blog/git-worktrees-with-claude-code-laravel-and-herd/&quot;&gt;Git Worktrees with Claude Code, Laravel, and Herd&lt;/a&gt;
by Jakub Gause on his blog (also published &lt;a href=&quot;https://dev.to/gause/git-worktrees-with-claude-code-laravel-and-herd-49d1&quot;&gt;on DEV.to&lt;/a&gt;).
Describes writing a shell script to help (a &lt;a href=&quot;https://github.com/gausejakub/claude-skills&quot;&gt;laravel-worktrees Claude skill&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/rohansx/i-built-workz-the-zoxide-for-git-worktrees-that-finally-fixes-env-nodemodules-hell-in-2026-2dpj&quot;&gt;I Built workz: The Zoxide for Git Worktrees That Finally Fixes .env + node_modules Hell in 2026&lt;/a&gt;
by Rohan Sharma on DEV.to.
Describes his &lt;a href=&quot;https://github.com/rohansx/workz&quot;&gt;workz&lt;/a&gt; tool
that creates a new worktree, automatically symlinks 22+ types of dependency dirs
(like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node_modules&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;target&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.venv&lt;/code&gt;), copies env/config patterns,
and can launch your AI coding agent directly in the new worktree.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://justin.poehnelt.com/posts/agent-identity-git-commits/&quot;&gt;Agent Identity for Git Commits&lt;/a&gt;
by Justin Poehnelt on his blog,
about how to set up AI agents to have their commits come from a bot account
without modifying your local Git config.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/yoheiseki/your-secrets-arent-safe-how-the-git-directory-can-leak-data-via-ai-tools-4ioo&quot;&gt;Your Secrets Aren’t Safe: How the .git Directory Can Leak Data via AI Tools&lt;/a&gt;
by Yohei Seki on DEV.to.
The problem is that a malicious MCP server or Skill
can access leaked secrets even if they were removed from the project
(you should treat any committed secret as compromised, and invalidate it;
using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-repo&lt;/code&gt; or BFG RepoCleaner to rewrite history might be a choice).
They can also access authentication information if embedded in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/config&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nesbitt.io/2026/02/26/git-in-postgres.html&quot;&gt;Git in Postgres&lt;/a&gt;
by Andrew Nesbitt on his blog (following
&lt;a href=&quot;https://nesbitt.io/2025/12/24/package-managers-keep-using-git-as-a-database.html&quot;&gt;Package managers keep using git as a database, it never works out&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/12/31/edition-130/&quot;&gt;Git Rev News Edition #130&lt;/a&gt; from December).
In this post he describes how he created a Git backend using a relational database:
&lt;a href=&quot;https://github.com/andrew/gitgres&quot;&gt;gitgres&lt;/a&gt;
(implementing the libgit2 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git_odb_backend&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git_refdb_backend&lt;/code&gt; interfaces
against PostgreSQL through libpq).
He acknowledges that right now gitgres is just a neat hack,
as it currently does not implement delta compression;
nevertheless it might be a good solution for small instances of software forges
for small projects.
    &lt;ul&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://github.com/chrislloyd/git-remote-sqlite&quot;&gt;git-remote-sqlite&lt;/a&gt;,
a Git &lt;a href=&quot;https://git-scm.com/docs/gitremote-helpers&quot;&gt;remote protocol helper&lt;/a&gt;
that helps you store a Git repository in a SQLite database,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/09/30/edition-127/&quot;&gt;Git Rev News Edition #127&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.narendravardi.com/the-nightmare-that-is-squash-merge-ft-github/&quot;&gt;The nightmare that is squash merge ft GitHub&lt;/a&gt;
by Narendra Vardi on his blog,
about how to fix merge conflicts caused by squash merge using interactive rebase.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://akdevcraft.substack.com/p/how-poor-git-branching-practices&quot;&gt;How Poor Git Branching Practices Quietly Damage Software Quality&lt;/a&gt;
by AK DevCraft on Substack (and also &lt;a href=&quot;https://dev.to/akdevcraft/how-poor-git-branching-practices-quietly-damage-software-quality-nf7&quot;&gt;on DEV.to&lt;/a&gt;),
about the Environment-Based Branching antipattern.
    &lt;ul&gt;
      &lt;li&gt;The &lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
by Martin Fowler, mentioned first in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;,
also talks about this antipattern.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ctrlplane.dev/blog/why-gitops-doesnt-work-at-scale&quot;&gt;Why [pure] GitOps Doesn’t Work at Scale (and What to Do Instead)&lt;/a&gt;
by Justin Brooks (@jsbrooks) at ctrlplane (also &lt;a href=&quot;https://dev.to/jsbroks/why-gitops-doesnt-work-at-scale-and-what-to-do-instead-2p91&quot;&gt;on DEV.to&lt;/a&gt;).
He writes why enterprise scale workflows need platform-level orchestration.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.iankduncan.com/engineering/2026-02-05-github-actions-killing-your-team/&quot;&gt;GitHub Actions Is Slowly Killing Your Engineering Team&lt;/a&gt;
and &lt;a href=&quot;https://www.iankduncan.com/engineering/2026-02-06-bash-is-not-enough/&quot;&gt;No, Really, Bash Is Not Enough: Why Large-Scale CI Needs an Orchestrator&lt;/a&gt;
by Ian Duncan on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cybrkyd.com/post/my-self-hosted-git-workflow-with-gitgen/&quot;&gt;My self-hosted Git workflow with GitGen&lt;/a&gt;
by cybrkyd; it continues &lt;a href=&quot;https://cybrkyd.com/post/showcasing-my-git-repositories-on-the-web/&quot;&gt;Showcasing my Git repositories on the web&lt;/a&gt;
from the &lt;a href=&quot;https://git.github.io/rev_news/2026/01/31/edition-131/&quot;&gt;previous edition&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://git.cybrkyd.com/GitGen/index.html&quot;&gt;GitGen&lt;/a&gt; is a lightweight static website generator
for local Git repositories written in Python;
similar tools are &lt;a href=&quot;https://github.com/antonmedv/gitmal&quot;&gt;Gitmal&lt;/a&gt;
and &lt;a href=&quot;https://github.com/picosh/pgit&quot;&gt;pgit&lt;/a&gt;, both written in Go.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://alexwlchan.net/2026/bare-git/&quot;&gt;The bare minimum for syncing Git repos&lt;/a&gt;
by Alex Chan on her blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ploum.net/2026-01-31-offline-git-send-email.html&quot;&gt;The Disconnected Git Workflow&lt;/a&gt;
by Lionel Dricot (Ploum)
(sidenote: there is also &lt;a href=&quot;https://github.com/hickford/git-credential-oauth&quot;&gt;git-credential-oauth&lt;/a&gt;
that can solve some of the problems with sending a small one-off patch to a GitHub project).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.usebox.net/jjm/blog/git-usebox-net-and-bots/&quot;&gt;git.usebox.net and bots&lt;/a&gt;
by Juan J. Martínez on his Personal Log,
about his modification of &lt;a href=&quot;https://git-scm.com/docs/gitweb&quot;&gt;gitweb&lt;/a&gt;
to block AI crawlers (that do not respect &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;robots.txt&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/lakshmisravyavedantham/i-built-a-tool-that-writes-obituaries-for-your-deleted-code-235l&quot;&gt;I Built a Tool That Writes Obituaries for Your Deleted Code&lt;/a&gt; and
&lt;a href=&quot;https://dev.to/lakshmisravyavedantham/commit-prophet-i-built-a-tool-that-predicts-buggy-files-using-git-history-35mk&quot;&gt;commit-prophet: I Built a Tool That Predicts Buggy Files Using Git History&lt;/a&gt;
by Lakshmi Sravya Vedantham on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/ticktockbent/i-read-9000-lines-of-a-strangers-mergetool-5bf0&quot;&gt;I Read 9,000 Lines of a Stranger’s Mergetool&lt;/a&gt;
by Wes on DEV.to, about the &lt;a href=&quot;https://github.com/chojs23/ec&quot;&gt;ec (easy-conflict)&lt;/a&gt; tool.
This is the first entry in the &lt;a href=&quot;https://dev.to/ticktockbent/series/36103&quot;&gt;Review Bomb series&lt;/a&gt;,
where Wes finds under-the-radar projects on GitHub, reads the code, contributes something,
and writes it up.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://underlap.org/return-to-github/&quot;&gt;Return to GitHub&lt;/a&gt;
by Glyn Normington on the underlap blog;
the move of &lt;a href=&quot;https://crates.io/crates/ipc-channel-mux&quot;&gt;ipc-channel-mux&lt;/a&gt;
from &lt;a href=&quot;https://codeberg.org/glyn/ipc-channel-mux&quot;&gt;Codeberg&lt;/a&gt; to &lt;a href=&quot;https://github.com/glyn/ipc-channel-mux&quot;&gt;GitHub&lt;/a&gt;
was caused by the need for CI on macOS and Windows
(without having to self-host CI runners).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/simplifying-git&quot;&gt;Simplifying Git by Using GitButler&lt;/a&gt;:
seeing Git state, branching without fear, understanding and using stacked changes,
better interactive rebase, easier selective staging, recoverability.
Written by PJ Hagerty on GitButler Blog.
&lt;a href=&quot;https://www.gitbutler.com/&quot;&gt;Git Butler&lt;/a&gt; was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2018/12/19/edition-46/&quot;&gt;Git Rev News Edition #46&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://matduggan.com/gitbutler-cli-is-really-good/&quot;&gt;GitButler CLI Is Really Good&lt;/a&gt;
by @matdevdug on matduggan.com.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://pauladamsmith.com/blog/2026/02/introducing-jjq-a-local-merge-queue-for-jj.html&quot;&gt;Introducing jjq, a local merge queue for jj&lt;/a&gt;
by Paul Smith on his blog.
&lt;a href=&quot;https://jj-vcs.dev/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; is a Git-compatible
version control system written in Rust, which was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nvie.com/posts/15-years-later/&quot;&gt;15+ years later, Microsoft morged my diagram&lt;/a&gt;
by Vincent Driessen, on how Microsoft’s Learn portal included
an AI generated diagram with the rough shape of the one in the
&lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;A successful Git branching model&lt;/a&gt;,
but with some GenAI glitches (like the text “Bugfixes from rel, branch may be
&lt;strong&gt;continvoucly&lt;/strong&gt; morged back into develop”), and arrows missing
or pointing in the wrong direction, or missing the node.
The image has been replaced since then;
you can see the original compared to the Microsoft one
in the &lt;a href=&quot;https://www.pcgamer.com/software/ai/microsoft-uses-plagiarized-ai-slop-flowchart-to-explain-how-github-works-removes-it-after-original-creator-calls-it-out-careless-blatantly-amateuristic-and-lacking-any-ambition-to-put-it-gently/&quot;&gt;PC Gamer article about this issue&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://fosdem.org/2026/schedule/event/HTJK33-evolving_git_for_the_next_decade/&quot;&gt;Evolving Git for the next decade&lt;/a&gt;
by Patrick Steinhardt [47:46],
a main track talk at FOSDEM (Free and Open source Software Developers’ European Meeting),
given on Saturday, 31 January 2026, Brussels.
See also &lt;a href=&quot;https://lwn.net/Articles/1057561/&quot;&gt;the summary of this talk&lt;/a&gt;
by Joe Brockmeier on LWN.net (mentioned in the “Light reading” section).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fosdem.org/2026/schedule/event/3VNNBK-efficient-git-for-high-stakes/&quot;&gt;An Efficient Git Workflow For High-Stakes Projects&lt;/a&gt;
by Vladislav Shpilevoy [45:12],
a main track talk at FOSDEM, on Saturday, 21 January 2026, Brussels.
The example project this workflow was used in is &lt;a href=&quot;https://github.com/tarantool/tarantool/&quot;&gt;tarantool&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fosdem.org/2026/schedule/event/L7ERNP-prs-maintainers-will-love/&quot;&gt;Pull requests maintainers will love to review&lt;/a&gt;
by Alya Abbott,
a main track talk at FOSDEM, on Saturday, 21 January 2026, Brussels.
&lt;a href=&quot;https://docs.google.com/presentation/d/1rpq4OsOTpt8nQx_QzBuMzICCenUpeyCzsk4sc-gVpyA/edit?slide=id.g32d6911bc12_0_0#slide=id.g32d6911bc12_0_0&quot;&gt;Slides&lt;/a&gt; available as Google Slides.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fosdem.org/2026/schedule/event/AGWUVH-mercurial-aint-you-dead-yet/&quot;&gt;Mercurial, 20 years and counting: how are we still alive and kicking?&lt;/a&gt;
by Raphaël Gomès and Pierre-Yves David [50:02],
a main track talk at FOSDEM, on Saturday, 21 January 2026, Brussels.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=NN-8kP7nClA&quot;&gt;Lost Your Commits? Git Reflog Saves You&lt;/a&gt;
by Shakil Alam on the Shakil Tech channel on YouTube [5:55].&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=G3NJzFX6XhY&quot;&gt;Configure your Git&lt;/a&gt;
by Denis Gruzdev aka @codingjerk
on the codingjerk channel on YouTube [14:02]:
a brief review on their personal git config / setup,
showing some of the most used commands, settings, and aliases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jdx/mise&quot;&gt;mise-en-place&lt;/a&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mise&lt;/code&gt;, a CLI tool that is
the front-end to your dev env
(managing dev tools like node, python, cmake, terraform, etc; and
 managing tasks used to build and test projects),
&lt;a href=&quot;https://github.com/jdx/mise/discussions/6564&quot;&gt;introduced monorepo tasks&lt;/a&gt;,
allowing you to manage tasks across multiple projects in a single repository,
with each project maintaining its own tools, environment variables, and tasks.
    &lt;ul&gt;
      &lt;li&gt;A monorepo is a software-development strategy
in which the code for a number of projects is stored in the same repository.
See for example the &lt;a href=&quot;https://monorepo.tools/&quot;&gt;monorepo.tools&lt;/a&gt; site,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/02/28/edition-84/&quot;&gt;Git Rev News Edition #84&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/oug-t/difi&quot;&gt;difi&lt;/a&gt; is a TUI tool that helps you
review and refine Git diffs before you push.
Written in Go using the &lt;a href=&quot;https://github.com/charmbracelet/bubbletea&quot;&gt;Bubble Tea&lt;/a&gt; library,
under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/flamestro/deff&quot;&gt;deff&lt;/a&gt; is a TUI tool providing
interactive, side-by-side file review for Git diffs
with per-file navigation, vertical and horizontal scrolling,
syntax highlighting, and added/deleted line tinting.
Written in Rust, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/chojs23/ec&quot;&gt;ec (easy-conflict)&lt;/a&gt; is a terminal Git mergetool
with a 3-way TUI and Neovim integration.
Written in Go, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/adevinta/maiao&quot;&gt;Maiao&lt;/a&gt;: Gerrit-style code review workflow for GitHub.
Maiao brings the power of stacked pull requests to GitHub,
enabling you to break large features into small, reviewable commits
where each commit becomes its own PR.  Provides a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git review&lt;/code&gt; command.
Written in Go, under MIT license.
    &lt;ul&gt;
      &lt;li&gt;Stacked Pull Requests, also under the name Stacked Diffs,
were mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/10/24/edition-44/&quot;&gt;Git Rev News Edition #44&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2023/11/30/edition-105/&quot;&gt;#105&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2024/05/31/edition-111/&quot;&gt;#111&lt;/a&gt;
(with links to other editions with other articles, and to related tools),
&lt;a href=&quot;https://git.github.io/rev_news/2024/09/30/edition-115/&quot;&gt;#115&lt;/a&gt;.
&lt;a href=&quot;https://git.github.io/rev_news/2024/12/31/edition-118/&quot;&gt;#118&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2025/09/30/edition-127/&quot;&gt;#127&lt;/a&gt;,
and &lt;a href=&quot;https://git.github.io/rev_news/2025/10/31/edition-128/&quot;&gt;#128&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://github.com/aviator-co/av&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;av&lt;/code&gt;&lt;/a&gt;,
a command-line tool that helps you manage your stacked PRs on GitHub.
It was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/09/30/edition-115/&quot;&gt;Git Rev News Edition #115&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.gitbutler.com/&quot;&gt;GitButler&lt;/a&gt;, a Source Code Management system
designed to manage your branches,
&lt;a href=&quot;https://blog.gitbutler.com/stacked-branches-with-gitbutler&quot;&gt;also supports stacked branches&lt;/a&gt;,
which was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/12/31/edition-118/&quot;&gt;Git Rev News Edition #118&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://diffs.com/&quot;&gt;Diffs&lt;/a&gt;, aka &lt;a href=&quot;https://github.com/pierrecomputer/pierre/tree/main/packages/diffs&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@pierre/diffs&lt;/code&gt;&lt;/a&gt;,
is an open source diff and file rendering library built on
the &lt;a href=&quot;https://shiki.style/&quot;&gt;Shiki&lt;/a&gt; syntax highlighter.
It supports split (side-by-side) or stacked (unified diff) layout,
different diff highlight styles, in-line highlighting, wrapping, and line numbers.
Includes an annotation framework for injecting comments and annotations, and more.
Written in TypeScript, under Apache 2.0 license.
Intended for use in web applications.
Diffs is in early active development—APIs are subject to change.
    &lt;ul&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://diff2html.xyz/&quot;&gt;diff2html&lt;/a&gt; (&lt;a href=&quot;https://github.com/rtfpessoa/diff2html&quot;&gt;repo on GitHub&lt;/a&gt;),
a pretty diff to HTML JavaScript library:
diff parser and pretty HTML generator.
Written in TypeScript, under MIT license.
Provides &lt;a href=&quot;https://github.com/rtfpessoa/diff2html-cli&quot;&gt;diff2html-cli&lt;/a&gt;,
&lt;a href=&quot;https://diff2html.xyz/#users&quot;&gt;used by&lt;/a&gt;, among others,
&lt;a href=&quot;https://github.com/FredrikNoren/ungit&quot;&gt;Ungit&lt;/a&gt;,
&lt;a href=&quot;https://diffy.org/&quot;&gt;Diffy&lt;/a&gt;, &lt;a href=&quot;https://github.com/thescientist13/git-explorer&quot;&gt;git-explorer&lt;/a&gt;,
&lt;a href=&quot;https://github.com/mauricioszabo/simple-git&quot;&gt;Simple Git&lt;/a&gt;,
&lt;a href=&quot;https://github.com/jstritch/git-tabular-diff&quot;&gt;git-tabular-diff&lt;/a&gt;.
diff2html was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/04/30/edition-98/&quot;&gt;Git Rev News Edition #98&lt;/a&gt;,
and diff2html-cli in &lt;a href=&quot;https://git.github.io/rev_news/2016/04/20/edition-14/&quot;&gt;Git Rev News Edition #14&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitnuro.com/&quot;&gt;Gitnuro&lt;/a&gt; is a multiplatform Git client,
based on JetBrains Compose and JGit.
&lt;a href=&quot;https://github.com/JetpackDuba/Gitnuro&quot;&gt;Written&lt;/a&gt; in Kotlin, under GPL 3.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rela.dev/&quot;&gt;RelaGit&lt;/a&gt; - the elegant solution to graphical version control,
is a multiplatform Git GUI written in TypeScript.  Under LGPL 3.0 license.
RelaGit is in early beta stage.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sourcegit-scm/sourcegit&quot;&gt;SourceGit&lt;/a&gt; is an open-source Git GUI client
that supports Windows, macOS, and Linux.
Includes built-in &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;conventional commit&lt;/a&gt; message helper,
and support for using AI to generate commit messages.
Written in C#, using the &lt;a href=&quot;https://avaloniaui.net&quot;&gt;Avalonia&lt;/a&gt; cross-platform UI framework,
under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nvie/git-toolbelt&quot;&gt;git-toolbelt&lt;/a&gt; is a suite of useful Git commands
that aid with scripting or every day command line usage.
Written in shell, under BSD-3-Clause license.
    &lt;ul&gt;
      &lt;li&gt;See &lt;a href=&quot;https://nvie.com/posts/git-power-tools/&quot;&gt;Git power tools for daily use&lt;/a&gt;
by Vincent Driessen, the author of git-flow (2018).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sqldef.github.io/&quot;&gt;sqldef&lt;/a&gt; is a &lt;a href=&quot;https://github.com/sqldef/sqldef&quot;&gt;CLI tool&lt;/a&gt; for diffing two SQL schemas.
You can use it to manage the migration of RDBMSs using regular SQL DDLs.
Supported databases: MySQL, MariaDB, TiDB, PostgreSQL, SQL Server, and SQLite3.
Written in Go, under MIT license
(for everything except parser, which is under Apache 2.0 license).
Compare with:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.sqlite.org/sqldiff.html&quot;&gt;sqldiff.exe&lt;/a&gt;,
a command-line utility program (Windows binary)
that displays content differences between two SQLite databases,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/05/26/edition-87/&quot;&gt;Git Rev News Edition #87&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://michaelsogos.github.io/pg-diff/&quot;&gt;pg-diff&lt;/a&gt;,
a PostgreSQL schema and data comparing tool written in JavaScript,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/02/29/edition-108/&quot;&gt;Git Rev News Edition #108&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/cannadayr/git-sqlite&quot;&gt;git-sqlite&lt;/a&gt;,
a custom diff and merge driver for SQLite,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/09/30/edition-127/&quot;&gt;Git Rev News Edition #127&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/FreHu/vscode-fresh-file-explorer&quot;&gt;Fresh File Explorer&lt;/a&gt;
is a VS Code file explorer which shows only recently modified files
based on a combination of Git history and your pending changes.
Written in TypeScript, under MIT license.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://dev.to/frehu/fresh-file-explorer-vscode-extension-for-navigating-recent-changes-13c1&quot;&gt;Fresh File Explorer - vscode extension for navigating recent changes&lt;/a&gt;
by Frederik Hudák on DEV.to.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jpoehnelt/vscode-git-remote-color&quot;&gt;Git Remote Color&lt;/a&gt;
is a VS Code extension that automatically colors your VS Code workspace
based on the git remote URL: every repository gets its own unique, consistent color.
Inspired by the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock&quot;&gt;Peacock&lt;/a&gt; extension, but fully automatic using a deterministic hash of the git remote.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://justin.poehnelt.com/posts/vscode-git-remote-color/&quot;&gt;VS Code Git Remote Color&lt;/a&gt;
by Justin Poehnelt on his blog.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/LakshmiSravyaVedantham/commit-prophet&quot;&gt;commit-prophet&lt;/a&gt;
is a command line tool that predicts which files are more likely to have bugs
using Git history patterns and co-change analysis.
Written in Python, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/0WD0/majutsu&quot;&gt;Majutsu&lt;/a&gt; provides a &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt;-style
interface for &lt;a href=&quot;https://www.jj-vcs.dev/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt;,
offering an efficient way to interact with JJ repositories from within Emacs.
Primary project license is GNU GPL v3 or later,
but it was previously distributed under MIT license terms.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mrshu.github.io/github-statuses/&quot;&gt;The Missing GitHub Status Page&lt;/a&gt;
is a third-party service that tracks 90 days uptime;
created because GitHub stopped updating its &lt;a href=&quot;https://www.githubstatus.com/&quot;&gt;GitHub Status&lt;/a&gt; page
with aggregate uptime numbers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://lore.kernel.org/git/xmqq4inz13e3.fsf@gitster.g/&quot;&gt;2.53.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.53.0.windows.1&quot;&gt;v2.53.0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2026/02/25/patch-release-gitlab-18-9-1-released/&quot;&gt;18.9.1, 18.8.5, 18.7.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2026/02/19/gitlab-18-9-released/&quot;&gt;18.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2026/02/10/patch-release-gitlab-18-8-4-released/&quot;&gt;18.8.4, 18.7.4, 18.6.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2026/02/06/patch-release-gitlab-ai-gateway-18-8-1-released/&quot;&gt;18.6.2, 18.7.1, 18.8.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2026/02/04/gitlab-18-8-3-released/&quot;&gt;18.8.3, 18.7.3, 18.6.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3119&quot;&gt;3.11.9&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3125&quot;&gt;3.12.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3133&quot;&gt;3.13.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3134&quot;&gt;3.13.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.20/admin/release-notes#3.20.0&quot;&gt;3.20.0&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.19/admin/release-notes#3.19.2&quot;&gt;3.19.2&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.18/admin/release-notes#3.18.5&quot;&gt;3.18.5&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.11&quot;&gt;3.17.11&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.14&quot;&gt;3.16.14&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.18&quot;&gt;3.15.18&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.23&quot;&gt;3.14.23&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-desktop/current/&quot;&gt;11.9.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.5.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.17.html&quot;&gt;4.2.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.17.1&quot;&gt;4.17.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.19.3&quot;&gt;0.19.3&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.19.2&quot;&gt;0.19.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sublime Merge &lt;a href=&quot;https://www.sublimemerge.com/download&quot;&gt;Build 2123&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;15.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/blog/tower-windows-11&quot;&gt;11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-flow-next &lt;a href=&quot;https://git-flow.sh/changelog/&quot;&gt;1.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Bruno Brito, Michael Ryzhikov and Shreyansh Paliwal.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 131 (January 31st, 2026)</title>
      <link>https://git.github.io/rev_news/2026/01/31/edition-131/</link>
      <pubDate>Sat, 31 Jan 2026 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2026/01/31/edition-131/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-131-january-31st-2026&quot;&gt;Git Rev News: Edition 131 (January 31st, 2026)&lt;/h2&gt;

&lt;p&gt;Welcome to the 131st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of December 2025 and January 2026.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/86c5d40d-5a06-4a69-90d8-a737685b0536%40haller-berlin.de&quot;&gt;Would it make sense to add a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit.signOff&lt;/code&gt; config?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Stefan Haller started the discussion by asking if it would be
appropriate to add a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit.signoff&lt;/code&gt; configuration variable. He
observed that while many Git commands, such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cherry-pick&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;revert&lt;/code&gt;, accept the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--signoff&lt;/code&gt; argument, only
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;format-patch&lt;/code&gt; has a corresponding configuration to enable it for
all invocations. Stefan found it reasonable for users to want a
“Signed-off-by” trailer added automatically to every commit they
make. This question was prompted by his work on the Lazygit
project, which already includes such a configuration and had
received a feature request to extend its behavior to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;revert&lt;/code&gt;
command.&lt;/p&gt;

    &lt;p&gt;The “Signed-off-by” trailer is a formal certification that the
contributor has the right to submit the work under the project’s
license, often associated with a Developer Certificate of Origin
(DCO). While widely used in open-source projects to maintain a legal
paper trail, its use in closed-source environments is less common.&lt;/p&gt;

    &lt;p&gt;Carlo Marcelo Arenas Belón replied to Stefan, noting that a similar
topic had been
&lt;a href=&quot;https://lore.kernel.org/git/xmqq4iwvfx8s.fsf@gitster.g/&quot;&gt;discussed recently&lt;/a&gt;
where it was argued that sign-offs should be given explicitly rather
than automated. Junio Hamano, the Git maintainer, agreed and
suggested resurrecting a
&lt;a href=&quot;https://lore.kernel.org/git/xmqqpnfw8gyn.fsf@gitster-ct.c.googlers.com/&quot;&gt;proposal from 2020&lt;/a&gt;
to explicitly document why Git intentionally lacks this
configuration. Junio expressed a desire to “save time from potential
contributors” who might otherwise put effort into a patch that the
community had already reached a consensus against.&lt;/p&gt;

    &lt;p&gt;Collin Funk supported the idea of documenting the consensus and
recommended using the full phrase “Signed-off-by” instead of the
abbreviation “SoB” to ensure clarity for all readers. brian
m. carlson suggested that the explanation could be placed in the Git
FAQ, the manual pages, or both. brian also provided a minor
grammatical correction to the initial text proposal.&lt;/p&gt;

    &lt;p&gt;Junio submitted
&lt;a href=&quot;https://lore.kernel.org/git/xmqqldj48pyl.fsf%40gitster.g&quot;&gt;version 1&lt;/a&gt;
of a patch to document the decision. The proposed text explained
that automation makes it harder to defend a sign-off’s validity in
court, as a person could claim the trailer “was done by inertia
without person X really intending to certify what DCO says”. The
patch also acknowledged that while &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;format.signoff&lt;/code&gt; exists, it is
considered a “historical mistake” that should not be emulated by
other commands.&lt;/p&gt;

    &lt;p&gt;Elijah Newren found the initial draft somewhat difficult to parse
and suggested an alternative version with more sentence
breaks. Elijah’s draft emphasized that Git avoids automatic
sign-offs specifically to “protect the legal and intentional
significance of a sign-off”. He also recommended a shorter version
for the manual pages that would point users toward a more detailed
entry in the FAQ. Johannes Sixt agreed that Elijah’s version was
much easier to read and suggested a minor shortening of the final
sentences to maintain impact. Johannes also emphasized the
importance of leaving a pointer in the manual pages, as users
looking for automation features are more likely to check
documentation for specific commands rather than the general FAQ.&lt;/p&gt;

    &lt;p&gt;Junio provided
&lt;a href=&quot;https://lore.kernel.org/git/xmqqv7i62r6w.fsf%40gitster.g&quot;&gt;version 2&lt;/a&gt;
of the patch, which incorporated Elijah’s and Johannes’s
refinements. During the final review, Johannes suggested changing
the phrase “pile on more mistakes” to “add more mistakes” to be
clearer for non-native English speakers. Junio adopted this change,
noting it would be clear for everyone. Kristoffer Haugsbakk also
contributed a final polish by suggesting the use of a proper
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;linkgit:gitfaq[7]&lt;/code&gt; reference in the manual page. Elijah and brian
both confirmed they were satisfied with the final result.&lt;/p&gt;

    &lt;p&gt;During the discussion there was a clear consensus that Git will not
add a global &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit.signoff&lt;/code&gt; configuration. The creation of
permanent documentation in the Git FAQ and manual pages to explain
the legal reasoning behind this decision will prevent future
contributors from wasting time on a feature that would be rejected.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://jvns.ca/blog/2026/01/08/a-data-model-for-git/&quot;&gt;A data model for Git (and other docs updates)&lt;/a&gt;
by Julia Evans on her blog
(see &lt;a href=&quot;https://comments.jvns.ca/post/115861337435768520&quot;&gt;comments on Mastodon&lt;/a&gt;
and on &lt;a href=&quot;https://lwn.net/Articles/1053595/&quot;&gt;LWN.net announcement&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mssqltips.com/sqlservertip/11585/ssms-22-git-integration/&quot;&gt;SQL Server Management Studio 22 Git Integration&lt;/a&gt;
by Daniel Calbimonte on MSSQLTips.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dacharycarey.com/2025/12/29/diff-algorithm-spelunking/&quot;&gt;Diff Algorithm Spelunking&lt;/a&gt;
by Dachary Carey.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://difftastic.wilfred.me.uk/&quot;&gt;Difftastic&lt;/a&gt;,
a structural diff tool that understands syntax,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;,
and &lt;a href=&quot;https://dandavison.github.io/delta/&quot;&gt;Delta&lt;/a&gt;,
a syntax-highlighting pager for git, diff, and grep output,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.brethorsting.com/blog/2026/01/git-rebase-for-the-terrified/&quot;&gt;Git Rebase for the Terrified&lt;/a&gt;
by Aaron Brethorst on Brethorsting Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tonystr.net/blog/git_immitation&quot;&gt;I made my own git&lt;/a&gt;
by Tony Strømsnæs on his blog.
As it was created with the goal of improving the author’s understanding of Git,
it is intentionally made not compatible with Git:
it uses SHA-256 instead of (current) SHA-1, and zstd instead of zlib.
The example code is written in Rust.
    &lt;ul&gt;
      &lt;li&gt;The &lt;a href=&quot;https://github.com/codecrafters-io/build-your-own-x#build-your-own-git&quot;&gt;Build your own &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Git&lt;/code&gt;&lt;/a&gt;
section of &lt;a href=&quot;https://github.com/codecrafters-io/build-your-own-x&quot;&gt;build-your-own-x&lt;/a&gt;
lists a few articles about reimplementing parts of Git functionality.
Mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;Git Rev News Edition #40&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://wyag.thb.lt/&quot;&gt;Write yourself a Git!&lt;/a&gt;
by Thibault Polge is an attempt at explaining the Git version control system
from the bottom up by reimplementing it in Python.
Mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nesbitt.io/2026/01/01/git-pkgs-explore-your-dependency-history.html&quot;&gt;git-pkgs: explore your dependency history&lt;/a&gt;
by Andrew Nesbitt on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://xeiaso.net/notes/2025/distributed-git-ddos/&quot;&gt;Git’s HTTP server side design does not scale&lt;/a&gt;:
a small rant about CGI.  Written by Xe Iaso on their blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://people.kernel.org/monsieuricon/tracking-kernel-development-with-korgalore&quot;&gt;Tracking kernel development with korgalore&lt;/a&gt;
by Konstantin Ryabitsev on his blog.
TLDR: use &lt;a href=&quot;https://korgalore.docs.kernel.org/&quot;&gt;korgalore&lt;/a&gt;
to bypass mailing list delivery problems.
(See also &lt;a href=&quot;https://lwn.net/Articles/1055219/#Comments&quot;&gt;comments on LWN.net&lt;/a&gt;.)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://daniel.haxx.se/blog/2026/01/17/my-first-20000-curl-commits/&quot;&gt;My first 20,000 curl commits&lt;/a&gt;
by Daniel Stenberg on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nick.scialli.me/blog/gitops/&quot;&gt;GitOps with ArgoCD feels like the right abstraction&lt;/a&gt;
by Nick Scialli on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cybrkyd.com/post/a-git-patch-love-story/&quot;&gt;Bob and Alice: a git patch love story&lt;/a&gt;
by cybrkyd (Just another Cyber Kid).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.izissise.net/posts/gitignoreallowlist/&quot;&gt;Allowlist for .gitignore&lt;/a&gt;
by Hugues Morisset (izissise) on his blog.
Describes a dedicated script to generate the allow-list based &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; file effectively
to used with a monorepo.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tonystr.net/blog/git&quot;&gt;On git show&lt;/a&gt;
by Tony Strømsnæs on his blog,
about the use of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show &amp;lt;revision&amp;gt;:&amp;lt;path&amp;gt;&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.howtogeek.com/i-turned-git-into-a-private-github-free-sync-system-between-my-own-machines-and-it-completely-changed-how-i-work/&quot;&gt;How to sync files between two local machines using Git&lt;/a&gt;
by Bobby Jack on How-To Git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lornajane.net/posts/2026/manage-diagrams-in-asciidoc-on-github&quot;&gt;Manage Diagrams in AsciiDoc (with PlantUML) on GitHub&lt;/a&gt;
(using a build script) by Lorna Jane Mitchell on LornaJane Blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.blog/developer-skills/github/include-diagrams-markdown-files-mermaid/&quot;&gt;Include diagrams in your Markdown files with Mermaid&lt;/a&gt;
(2022) by Martin Woodward &amp;amp; Adam Biagianti on GitHub Blog,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/02/28/edition-84/&quot;&gt;Git Rev News Edition #84&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://maskray.me/blog/2026-01-22-maintaining-shadow-branches-for-github-prs&quot;&gt;Maintaining shadow branches for GitHub PRs&lt;/a&gt;
by Fangrui Song (MaskRay).
The goal is to be able to see clean diffs between base and feature branch,
even though the underlying commits were rewritten,
and the base moved ahead.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sluongng.substack.com/p/post-agentic-code-forges&quot;&gt;Post-Agentic Code Forges&lt;/a&gt;,
by Son Luong Ngoc (sluongng) on Son’s Substack.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.com/humanlayer/advanced-context-engineering-for-coding-agents/blob/main/ace-fca.md&quot;&gt;Getting AI to Work in Complex Codebases&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://justin.poehnelt.com/posts/abandon-git-lfs-because-agents/&quot;&gt;Abandon Git LFS because AI Agents&lt;/a&gt;
by Justin Poehnelt (jpoehnelt) on his blog
(includes description on how to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-repo&lt;/code&gt; to migrate from Git LFS
to standard Git).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://abhinavsarkar.net/posts/jj-usage/&quot;&gt;How I use Jujutsu&lt;/a&gt;
by Abhinav Sarkar on their blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://jj-vcs.github.io/jj/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; is a Git-compatible version control system,
written in Rust, which was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ploum.net/2026-01-05-unteaching_github.html&quot;&gt;How GitHub monopoly is destroying the open source ecosystem&lt;/a&gt;
by Lionel Dricot (Ploum).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://kotthoff.dev/posts/2026/github-to-codeberg-pages/&quot;&gt;Moving from GitHub pages to Codeberg pages&lt;/a&gt;
by Florian Kotthoff on his Hugo &amp;amp; PaperMod powered blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cybrkyd.com/post/showcasing-my-git-repositories-on-the-web/&quot;&gt;Showcasing my Git repositories on the web&lt;/a&gt;
(by creating a static site with GitGen, where everything is generated ahead of time)
by cybrkyd.
    &lt;ul&gt;
      &lt;li&gt;Compare &lt;a href=&quot;https://github.com/antonmedv/gitmal&quot;&gt;Gitmal&lt;/a&gt;, a static page generator for Git repositories,
mentioned in the &lt;a href=&quot;https://git.github.io/rev_news/2025/12/31/edition-130/&quot;&gt;previous edition&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.howtogeek.com/this-easy-tool-gives-me-the-best-of-github-on-my-local-machine/&quot;&gt;This tool (pgit) turns any Git repo into a private, offline “GitHub” website&lt;/a&gt;
by Bobby Jack on How-To Geek.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.tedivm.com/open-source/2026/01/git-brag-highlight-and-share-your-open-source-contributions/&quot;&gt;Git Brag: Highlight and Share Your Open Source Contributions&lt;/a&gt;
by Robert Hafner on his tedious ramblings blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/sylwia-lask/your-github-contribution-graph-means-absolutely-nothing-and-heres-why-2kjc&quot;&gt;Your GitHub Contribution Graph Means Absolutely Nothing - And Here’s Why&lt;/a&gt;
by Sylwia Laskowska on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cadence.moe/blog/2022-07-03-git-forge-opinions-github-gitlab-gitea-sourcehut&quot;&gt;Git forge opinions: GitHub, GitLab, Gitea, Sourcehut&lt;/a&gt;
(2022) by Cadence on cadence’s website.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://forgeperf.org/&quot;&gt;forgeperf.org&lt;/a&gt; - Software Forge Performance Index.
Reports generated with &lt;a href=&quot;https://github.com/GoogleChrome/lighthouse&quot;&gt;Lighthouse&lt;/a&gt;,
originally updated weekly, last update February 7, 2024.
Created and maintained by the &lt;a href=&quot;https://sourcehut.org/&quot;&gt;SourceHut&lt;/a&gt; forge.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codeberg.org/Recommendations/Mirror_to_Codeberg&quot;&gt;Mirror to Codeberg&lt;/a&gt;:
a central place of information about mirroring repos to Codeberg.
Includes some thoughts about why one would want to switch from GitHub or GitLab,
or at least have a second place for your code: a mirror that’s contributable,
with links to other articles.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jsr.io/@fiatjaf/git-natural-api&quot;&gt;git-natural-api&lt;/a&gt;
is a lightweight git HTTP client for fetching repository data without cloning.
It uses /git-upload-pack custom calls to get access to file trees,
commit history or individual objects.
Written in TypeScript, provides a JavaScript/TypeScript API.
Can be used in browser, using Bun, Deno, or Node.js.
No license provided.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ngit.dev/grasp/&quot;&gt;Grasp&lt;/a&gt;
(Git Relays Authorized via Signed-Nostr Proofs)
is a distributed, protocol-first approach to hosting Git repos.
You pre-authorize pushes via signed
&lt;a href=&quot;https://github.com/nostr-protocol/nostr/&quot;&gt;Nostr&lt;/a&gt; events,
then any compliant server can host your repo.
&lt;a href=&quot;https://ngit.dev/relay&quot;&gt;ngit-relay&lt;/a&gt; is a Grasp reference implementation
that uses a Dockerized stack: nginx, git-http-backend and a Khatru relay.
    &lt;ul&gt;
      &lt;li&gt;Compare &lt;a href=&quot;https://tangled.org/&quot;&gt;Tangled&lt;/a&gt;,
a social-enabled Git collaboration platform built on top of the AT Protocol
(which is behind the &lt;a href=&quot;https://bsky.app/&quot;&gt;BlueSky&lt;/a&gt; microblogging federated social media service).
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/07/31/edition-125/&quot;&gt;Git Rev News Edition #125&lt;/a&gt;,
then in &lt;a href=&quot;&quot;&gt;#126&lt;/a&gt;,
and &lt;a href=&quot;&quot;&gt;#128&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Compare &lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt;,
an open source, peer-to-peer code collaboration stack built on Git,
first mentioned in &lt;a href=&quot;&quot;&gt;Git Rev News Edition #49&lt;/a&gt;,
and many times since; most recently in &lt;a href=&quot;&quot;&gt;#126&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;There is also &lt;a href=&quot;https://github.com/fiatjaf/gitstr&quot;&gt;gitstr (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git str&lt;/code&gt;)&lt;/a&gt;,
a tool to send and receive Git patches over Nostr,
using &lt;a href=&quot;https://github.com/nostr-protocol/nips/pull/997&quot;&gt;NIP-34&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/03/31/edition-109/&quot;&gt;Git Rev News Edition #109&lt;/a&gt;).&lt;/li&gt;
      &lt;li&gt;Compare &lt;a href=&quot;https://scuttlebot.io/apis/community/git-ssb.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-ssb&lt;/code&gt;&lt;/a&gt;
(see the &lt;a href=&quot;https://github.com/hackergrrl/git-ssb-intro&quot;&gt;git-ssb-intro&lt;/a&gt; guide),
a decentralized Git repo hosting and issue tracking on &lt;a href=&quot;https://www.scuttlebutt.nz/&quot;&gt;Secure-ScuttleButt (SSB)&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/04/19/edition-26/&quot;&gt;Git Rev News Edition #26&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;#40&lt;/a&gt;).&lt;/li&gt;
      &lt;li&gt;Contrast with &lt;a href=&quot;https://forgefed.org/&quot;&gt;ForgeFed&lt;/a&gt; (formerly GitPub),
a federation protocol for software forges (an &lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt; extension),
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/11/27/edition-69/&quot;&gt;Git Rev News Edition #69&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://gothub.org/&quot;&gt;Game of Trees Hub&lt;/a&gt; is a transparently funded
Git repository hosting service.  Its infrastructure is based on OpenBSD
and &lt;a href=&quot;https://gameoftrees.org/&quot;&gt;Game of Trees&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://gameoftrees.org/index.html&quot;&gt;Game of Trees (Got)&lt;/a&gt;
is a version control system developed by and for OpenBSD developers,
which wants to remain on-disk compatible with bare Git repositories.
Mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/08/21/edition-54/&quot;&gt;Git Rev News Edition #54&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/trasta298/keifu&quot;&gt;keifu&lt;/a&gt; (系譜, /keːɸɯ/) is a terminal UI tool
that visualizes Git commit graphs. It shows a colored commit graph, commit details,
and a summary of changed files, and lets you perform basic branch operations.
Written in Rust, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-com.masukomi.org/&quot;&gt;git-com&lt;/a&gt; is a TUI tool
for creating structured commit messages that’s easy to configure for each project.
&lt;a href=&quot;https://github.com/masukomi/git-com&quot;&gt;Written&lt;/a&gt; in Go, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitbrag.tedivm.com/&quot;&gt;Git Brag&lt;/a&gt; is an open source web application (or CLI)
that creates a simple report of the contributions you’ve made to open source projects
on GitHub (it requires logging with GitHub to create the report).
&lt;a href=&quot;https://github.com/tedivm/gitbrag&quot;&gt;Written&lt;/a&gt; in Python, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.cybrkyd.com/GitGen/index.html&quot;&gt;GitGen&lt;/a&gt;
is a lightweight static website generator for local Git repositories written in Python.
It scans a directory of Git repositories and produces a navigable,
self-contained HTML website similar in spirit to cgit or GitWeb,
but without any server-side dependencies.
The generated site includes a repository index, per-repository README rendering,
file listings, commit history, and detailed commit views with diffs.
Under GPLv3 license.
    &lt;ul&gt;
      &lt;li&gt;Compare &lt;a href=&quot;https://github.com/antonmedv/gitmal&quot;&gt;Gitmal&lt;/a&gt;,
a static page generator for Git repositories,
written in Go, under MIT license.
It was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/12/31/edition-130/&quot;&gt;Git Rev News Edition #130&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/picosh/pgit&quot;&gt;pgit&lt;/a&gt; is static site generator for git repos.
Demo at &lt;a href=&quot;https://git.erock.io/&quot;&gt;https://git.erock.io/&lt;/a&gt;.
Written in Go, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.sr.ht/~absolutely-vivid/gah&quot;&gt;GAH!&lt;/a&gt;
is your friendly neighborhood &lt;b&gt;g&lt;/b&gt;ood &lt;b&gt;h&lt;/b&gt;elpful &lt;b&gt;a&lt;/b&gt;rchiver.
It archives GitHub issues and pull requests,
and can create a static site from archives.
Written in Python, under BSD license (Simplified BSD License).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dacharyc/tokendiff&quot;&gt;tokendiff&lt;/a&gt; is a Go library and CLI
for token-level diffing with delimiter support.
Tokendiff uses a histogram diff algorithm
that groups semantically related changes together,
producing more readable output than traditional Myers-based approaches
for complex structural changes.
It builds on &lt;a href=&quot;https://github.com/dacharyc/diffx&quot;&gt;diffx&lt;/a&gt;,
a Go implementation of Myers diff.
Under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cleandiffapp.com/&quot;&gt;CleanDiff&lt;/a&gt; is a graphical diffing tool
that shows you what’s changed on a word level, instead of a line level.
It uses the tokendiff library to find semantically relevant changes,
and wraps them in a nice UI and easy Git integration.
&lt;a href=&quot;https://github.com/masukomi/cleandiff&quot;&gt;Written&lt;/a&gt; in Go and JavaScript,
under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kworkflow/patch-hub&quot;&gt;patch-hub&lt;/a&gt;
is a terminal-based user interface (TUI) designed to
simplify working with software patches sent through mailing lists
in Linux-related development. It provides an efficient way
to navigate and interact with patches archived on &lt;a href=&quot;https://lore.kernel.org/&quot;&gt;lore.kernel.org&lt;/a&gt;,
specifically for the Linux kernel and adjacent projects.
Written in Rust, under GPL-2.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://korgalore.docs.kernel.org/en/latest/index.html&quot;&gt;Korgalore&lt;/a&gt;
is a tool for feeding &lt;a href=&quot;https://public-inbox.org/README.html&quot;&gt;public-inbox&lt;/a&gt; Git repositories,
like &lt;a href=&quot;https://lore.kernel.org/&quot;&gt;lore.kernel.org&lt;/a&gt;, directly into mail targets
(Gmail, JMAP, IMAP, or local maildir) as an alternative to subscribing.
It provides a workaround for Gmail’s notorious hostility
to high-volume technical mailing list traffic.
Written in Python, under GPL-2.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-pkgs/git-pkgs&quot;&gt;git-pkgs&lt;/a&gt; provides a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; subcommand
for tracking package dependencies across Git history.
It analyzes your repository to show when dependencies were added, modified, or removed,
who made those changes, and why.
Builds on &lt;a href=&quot;https://github.com/ecosyste-ms/bibliothecary&quot;&gt;bibliothecary&lt;/a&gt;,
the manifest parsing library behind &lt;a href=&quot;https://ecosyste.ms/&quot;&gt;ecosyste.ms&lt;/a&gt;.
Written in Go (originally &lt;a href=&quot;https://github.com/git-pkgs/git-pkgs-ruby&quot;&gt;in Ruby&lt;/a&gt;),
under MIT license.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://lore.kernel.org/git/xmqqpl6vezt3.fsf@gitster.g/&quot;&gt;2.53.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/xmqq8qdqvqgq.fsf@gitster.g/&quot;&gt;2.53.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/xmqqv7h2bwy6.fsf@gitster.g/&quot;&gt;2.53.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.53.0-rc2.windows.1&quot;&gt;v2.53.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.53.0-rc1.windows.1&quot;&gt;v2.53.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.53.0-rc0.windows.1&quot;&gt;v2.53.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.19/admin/release-notes#3.19.1&quot;&gt;3.19.1&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.18/admin/release-notes#3.18.4&quot;&gt;3.18.4&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.10&quot;&gt;3.17.10&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.13&quot;&gt;3.16.13&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.17&quot;&gt;3.15.17&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.22&quot;&gt;3.14.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2026/01/21/patch-release-gitlab-18-8-2-released/&quot;&gt;18.8.2, 18.7.2, 18.6.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2026/01/19/gitlab-18-8-1-released/&quot;&gt;18.8.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2026/01/15/gitlab-18-8-released/&quot;&gt;18.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2026/01/07/patch-release-gitlab-18-7-1-released/&quot;&gt;18.7.1, 18.6.3, 18.5.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3118&quot;&gt;3.11.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3124&quot;&gt;3.12.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3132&quot;&gt;3.13.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-desktop/current/&quot;&gt;11.8.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.16.html&quot;&gt;4.2.16&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v2.5.1&quot;&gt;2.5.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v2.5.0&quot;&gt;2.5.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.17.0&quot;&gt;4.17.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.18.7&quot;&gt;0.18.7&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.18.6&quot;&gt;0.18.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Kinetic Merge &lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.14.0&quot;&gt;1.14.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.17.2&quot;&gt;0.17.2&lt;/a&gt;,
&lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.17.1&quot;&gt;0.17.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.17.0&quot;&gt;0.17.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Toon Claes.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 130 (December 31st, 2025)</title>
      <link>https://git.github.io/rev_news/2025/12/31/edition-130/</link>
      <pubDate>Wed, 31 Dec 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/12/31/edition-130/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-130-december-31st-2025&quot;&gt;Git Rev News: Edition 130 (December 31st, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 130th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of November and December 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CAB9xhmPcHnB2%2Bi6WeA3doAinv7RAeGs04%2Bn0fHLGToJq%3DUKUNw%40mail.gmail.com&quot;&gt;git-2.51.0: Fetching tags does not work&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Last September, David Bohman reported a regression in Git 2.51.0
where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch --tags&lt;/code&gt; failed to update tags in a bare
repository. He noted that the command output indicated tags would be
updated, but they were not actually added to the
repository. Reverting to version 2.50.1 resolved the issue.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, attempted to reproduce the issue
using a simple bare clone setup but was unsuccessful, suggesting
that David needed to narrow down the specific conditions.&lt;/p&gt;

    &lt;p&gt;In early November, David returned to the thread reporting that the
issue persisted in Git 2.51.2. He provided a specific reproduction
case involving a bare clone of the &lt;a href=&quot;https://gitlab.isc.org/isc-projects/bind9&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bind9&lt;/code&gt; source repository&lt;/a&gt;.
The output showed that one
tag update was rejected (with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;would clobber existing tag&lt;/code&gt; error),
and consequently, all other valid new tags (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v9.18.41&lt;/code&gt;, etc.)
failed to appear in the repository, despite being listed as “new
tag” in the output. The command exited with status code 1.&lt;/p&gt;

    &lt;p&gt;Randall S. Becker suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch --tags --force&lt;/code&gt; to
clear the situation. David Bohman replied that while he could
reproduce it locally, the key behavioral change was that prior to
version 2.51, Git would fail regarding the conflicting tag but still insert the
non-conflicting ones.&lt;/p&gt;

    &lt;p&gt;Chris Torek identified the new reference transaction system
introduced in recent versions as the root cause. He noted that the
behavior had shifted to “all or nothing” (either all tags get
updated, or none do) and questioned which behavior was actually
buggy. David Bohman argued that this was a risky change for a mature
tool and noted that the diagnostic messages were misleading because
they reported success for tags that were not actually inserted.&lt;/p&gt;

    &lt;p&gt;Karthik Nayak confirmed he could reproduce the issue and attributed
it to transaction reference updates.&lt;/p&gt;

    &lt;p&gt;Karthik submitted
&lt;a href=&quot;https://lore.kernel.org/git/20251103-fix-tags-not-fetching-v1-1-e63caeb6c113%40gmail.com&quot;&gt;version 1&lt;/a&gt;
of a patch to fix the issue. He explained that commit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0e358de64a&lt;/code&gt;
(fetch: use batched reference updates, 2025-05-19) introduced
batched reference updates for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt;. When fetching references,
updates are added to a transaction. However, specifically when
fetching tags, if a conflict occurs, the function
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fetch_and_consume_refs()&lt;/code&gt; returns an error code immediately. This
caused the code to jump to the cleanup section, skipping the commit
of the transaction entirely, and thus discarding even valid updates.&lt;/p&gt;

    &lt;p&gt;The proposed fix involved extracting the transaction commit logic
into a new function, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit_ref_transaction()&lt;/code&gt;, and ensuring it is
called even when an error code is returned, provided the fetch is
not atomic.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine reviewed the patch, asking why the test code was
wrapped in subshells and suggesting that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;!&lt;/code&gt; should be replaced with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_must_fail&lt;/code&gt;. Karthik agreed to these changes.&lt;/p&gt;

    &lt;p&gt;Justin Tobler reviewed the code, agreeing with the logic. He
suggested adding a comment to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit_ref_transaction()&lt;/code&gt; to
distinguish it from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ref_transaction_commit()&lt;/code&gt; and asked if the
return value of this new function should be checked.&lt;/p&gt;

    &lt;p&gt;Karthik submitted
&lt;a href=&quot;https://lore.kernel.org/git/20251106-fix-tags-not-fetching-v2-1-610cb4b0e7c8%40gmail.com&quot;&gt;version 2&lt;/a&gt;
of the patch. This version added comments, removed subshells from
tests, and extended the fix to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;backfill_tags()&lt;/code&gt; function.&lt;/p&gt;

    &lt;p&gt;Patrick Steinhardt reviewed version 2. He questioned the commit
message’s mention of the deprecated “branches/” format in relation
to tag backfilling. Karthik replied, clarifying that after
re-reading the code, he understood that backfilling happens when the
user does not specify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--tags&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-tags&lt;/code&gt;, confirming Patrick’s
understanding.&lt;/p&gt;

    &lt;p&gt;Patrick noted that the code now had three different call sites
committing the transaction and felt it was “somewhat fragile.”
Justin pointed out that the return code of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit_ref_transaction()&lt;/code&gt; was being ignored in the new
implementation. Karthik agreed to check the return value.&lt;/p&gt;

    &lt;p&gt;Karthik submitted
&lt;a href=&quot;https://lore.kernel.org/git/20251108-fix-tags-not-fetching-v3-0-a12ab6c4daef%40gmail.com&quot;&gt;version 3&lt;/a&gt;
of the series. He split the changes into two commits: one for
extracting the logic and one for the fix. He also moved the commit
logic into the cleanup section to avoid calling it at every failure
point.&lt;/p&gt;

    &lt;p&gt;Patrick reviewed version 3. He suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;goto out&lt;/code&gt; in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit_ref_transaction()&lt;/code&gt; for better readability. He also asked for
clarification on why the condition &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;retcode &amp;gt; 0&lt;/code&gt; was safe in the
cleanup section, specifically regarding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prune_refs()&lt;/code&gt;. Karthik
replied, explaining that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prune_refs()&lt;/code&gt; creates its own internal
transaction, but later realized he was mistaken about the timing and
promised to verify.&lt;/p&gt;

    &lt;p&gt;Karthik submitted
&lt;a href=&quot;https://lore.kernel.org/git/20251111-fix-tags-not-fetching-v4-0-185d836ec62a%40gmail.com&quot;&gt;version 4&lt;/a&gt;.
This version simplified the code and changed the check from
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;retcode &amp;gt; 0&lt;/code&gt; to just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;retcode&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Patrick pointed out that the commit message regarding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prune_refs()&lt;/code&gt;
behavior change seemed incorrect because no transaction exists at
that stage. Karthik verified this and confirmed there is no change
for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prune_refs()&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Karthik submitted
&lt;a href=&quot;https://lore.kernel.org/git/20251113-fix-tags-not-fetching-v5-0-371ea7ec638d%40gmail.com&quot;&gt;version 5&lt;/a&gt;
with corrected commit messages and better test cleanup.&lt;/p&gt;

    &lt;p&gt;Junio reviewed version 5 and identified a remaining
issue. He noted that while the patch fixed the transaction commit,
jumping to the cleanup label early meant that subsequent operations
(specifically &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit_fetch_head()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set_upstream()&lt;/code&gt;, and setting
remote HEADs) were still being skipped when errors occurred. He
argued that in non-atomic fetches, these should still run. Karthik
agreed and proposed a fix to only jump to cleanup if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--atomic&lt;/code&gt; was
used.&lt;/p&gt;

    &lt;p&gt;Karthik submitted
&lt;a href=&quot;https://lore.kernel.org/git/20251118-fix-tags-not-fetching-v6-0-2a2f15fc137e%40gmail.com&quot;&gt;version 6&lt;/a&gt;,
adding a third commit to the series to address the skipped
operations regression identified by Junio.&lt;/p&gt;

    &lt;p&gt;Junio reviewed version 6. He liked the tests but warned
against using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;touch&lt;/code&gt; to create files due to timestamp issues and
noted a missing test case for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--set-upstream&lt;/code&gt; on a successful
fetch. Karthik agreed to fix these.&lt;/p&gt;

    &lt;p&gt;Karthik submitted
&lt;a href=&quot;https://lore.kernel.org/git/20251119-fix-tags-not-fetching-v7-0-0c8f9fb1f287%40gmail.com&quot;&gt;version 7&lt;/a&gt;,
removing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;touch&lt;/code&gt; and adjusting the test prerequisites.&lt;/p&gt;

    &lt;p&gt;Eric reviewed the tests in version 7, asking if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;! test -f&lt;/code&gt; should
be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_path_is_missing&lt;/code&gt;. Junio suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rm -f FETCH_HEAD&lt;/code&gt;
before the test to ensure it is actually created during the run, and
inspecting the file content to verify what was recorded. Karthik
agreed.&lt;/p&gt;

    &lt;p&gt;Karthik submitted
&lt;a href=&quot;https://lore.kernel.org/git/20251121-fix-tags-not-fetching-v8-0-23b53a8a8334%40gmail.com&quot;&gt;version 8&lt;/a&gt;.
This version verified the content of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FETCH_HEAD&lt;/code&gt; and used
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_path_is_missing&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Junio commented that the series looked good. Patrick pointed out a
tiny grammar nit (“eventhough”) and asked if the shell syntax
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;gt;file&lt;/code&gt; used in the test was compatible with all systems, noting
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;: &amp;gt;file&lt;/code&gt; is more typical. Karthik replied that existing tests use
the shorter syntax, so it should be fine.&lt;/p&gt;

    &lt;p&gt;The small patch series was eventually merged, and should be part of
Git 2.53.0 that should be released at the latest towards the
beginning of February 2026. With this version, not only the transaction logic
will be fixed, but related regressions regarding post-fetch
operations (like updating &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FETCH_HEAD&lt;/code&gt;) will also have been
identified and resolved.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-lucas-seiki-oshiro&quot;&gt;Developer Spotlight: Lucas Seiki Oshiro&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My name is Lucas Oshiro, I’m one of the three
GSoC ‘25 participants working on Git. I’m from São Paulo, Brazil,
and I hold bachelor and master degrees in Computer Science from the
&lt;a href=&quot;https://www5.usp.br/#english&quot;&gt;University of São Paulo&lt;/a&gt;. I don’t
have only one specific interest in programming topics, I enjoy
several different topics, like lower-lever C code (like we do for Git),
FP languages (especially Haskell), play with network simulators, data
analysis, operating systems, databases and so on.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How did you initially become interested in contributing to Git,
and what motivated you to choose it as your GSoC project?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Well, it’s a long story… I think that it dates back to 2017, in a
Computer Networks assignment at my university. My partner in that
assignment was &lt;a href=&quot;https://matheustavares.gitlab.io/posts/gsoc-final-report&quot;&gt;Matheus Tavares&lt;/a&gt;,
who participated in &lt;a href=&quot;https://summerofcode.withgoogle.com/archive/2019/projects/4787791739748352&quot;&gt;GSoC ‘19 on Git&lt;/a&gt;.
At the time, we needed to study a vulnerability and how it was fixed.
We chose &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/cve-2017-1000117&quot;&gt;CVE-2017-1000117&lt;/a&gt;,
which was a vulnerability in Git. That was my first time reading Git
source code.&lt;/p&gt;

    &lt;p&gt;Two years later, I was a member of a &lt;a href=&quot;https://flusp.ime.usp.br&quot;&gt;group focused on contributing to Free/Open-Source software&lt;/a&gt;
at my University. I sent a patch to Git at the time, but I needed to
focus on other stuff and I couldn’t finish it.&lt;/p&gt;

    &lt;p&gt;After that, I started to work as a back-end software engineer and
witnessed several Git-related problems. My two previous experiences with
Git’s source code made me want to understand what was happening and
delving into its internals, so I could help other developers from my
company when something unexpected happened with Git.&lt;/p&gt;

    &lt;p&gt;This way, Git always felt like the right choice.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you feel your contribution has impacted the Git community
or the broader open source ecosystem?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My GSoC project was to create the new command &lt;a href=&quot;https://summerofcode.withgoogle.com/archive/2025/projects/fGgMYHwl&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repo info&lt;/code&gt;&lt;/a&gt;).
It was released in Git 2.52.0 and, like many other new Git features, I
expect it will take some time to be widely adopted, since it’s only
available in bleeding-edge repositories. But I expect that it will be
useful for forges, CIs, local tools, scripts, and other tools that
depend on Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Is there any aspect of Git that you now see differently after
having contributed to it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I can’t think of anything that I see differently after GSoC, but my
previous contacts with Git’s source code made me realize the importance
of having a good commit history with good commit messages. It also made
me understand how powerful Git is as a debugging and searching tool.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you balance your contributions with other responsibilities
like work or school?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;This year, I was more focused on finishing my master’s research and I
didn’t have too many conflicts with GSoC, so I could focus on my
master’s when my patches were under review. However, I must admit that
one of the reasons that I didn’t apply to GSoC before was that, here
in Brazil, we typically have final exams in June, which makes it hard
to balance them with something else.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Can you share how GSoC helped enhance your technical and
non-technical skills (like communication, project management,
etc.)?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I see Git as a product created by developers, for developers, and I
think that here we sometimes need to do the work that in other contexts
would be done by product owners and designers. I felt that especially
during code reviews, which were often more focused on product and design
decisions rather than the code itself. I had to learn how to discuss
these kinds of decisions, always aiming to do what is best for Git
and its users.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was the biggest challenge you faced during your contributions
to Git, and how did you overcome it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I think that the biggest challenge was the complete redesign of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repo info&lt;/code&gt; during the GSoC period, which made me re-write it from
scratch several times. I think this was a consequence of my previous
answer and that this challenge was solved itself.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Have you thought about mentoring new GSoC / Outreachy students?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Yes, it would be very nice!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Git is amazing and I think we all agree that it makes the programmers’
lives easier. It would be great if we had a GUI wrapping Git but
targeting non-technical users.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Perhaps commands that accumulate responsibilities, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse&lt;/code&gt;. They make sense from the Git
perspective, but I think they are confusing from the users’
perspective.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What upcoming features or changes in Git are you particularly
excited about?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Some that come to my mind are:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Patrick Steinhardt’s new &lt;a href=&quot;https://lore.kernel.org/git/20250819-b4-pks-history-builtin-v1-0-9b77c32688fe@pks.im/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git history&lt;/code&gt;&lt;/a&gt;
command: rewriting history is essential to keep the repository sane
and useful as a data storage, if done correctly. Currently we do that
through interactive rebase but I think it can be intimidating for less
experienced users. Jujutsu proposes a more straightforward way to do
that, and it’s nice to see Patrick bringing it to Git.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Justin Tobler’s &lt;a href=&quot;https://public-inbox.org/git/20251217175404.37963-1-jltobler@gmail.com/&quot;&gt;new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repo structure&lt;/code&gt; command&lt;/a&gt;:
of course I’m interested in this subcommand since it is the sibling of
my GSoC project.  But it’s not only because of that: a Git repository is
a very rich source of information and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repo structure&lt;/code&gt; will be a
powerful tool to retrieve it.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Julia Evans’s &lt;a href=&quot;https://public-inbox.org/git/?q=f%3A%22Julia+Evans%22&amp;amp;r=&quot;&gt;contributions to documentation&lt;/a&gt;:
Julia has been producing high-quality content about several programming
topics for years. I’m happy to see Git being documented by someone so
committed to spreading knowledge and who knows how to explain advanced
concepts using a simple language.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I use &lt;a href=&quot;https://github.com/dandavison/delta&quot;&gt;delta&lt;/a&gt; a lot, I like the way
it highlights diffs. Other tools that I find interesting are &lt;a href=&quot;https://docs.jj-vcs.dev/latest/&quot;&gt;Jujutsu&lt;/a&gt;
and &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt;, but I don’t use them too much.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I like desktop mail clients, but I don’t have a strong preference. On
Linux, I use Thunderbird. On Mac, I use Apple Mail. I also have some
GMail filters for classifying the messages (patches, What’s Cooking and
Rev News announcements).&lt;/p&gt;

    &lt;p&gt;However, those mail clients don’t have code syntax highlighting, and it’s
hard to read the patches inside them. For that purpose, I use
&lt;a href=&quot;https://github.com/kworkflow/patch-hub&quot;&gt;patch-hub&lt;/a&gt;, a TUI for reviewing
patches from kernel mailing lists (including Git).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you envision your own involvement with Git or other open
source projects in the future?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;There are some things I want to finish in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repo info&lt;/code&gt;, and I
still send patches for it. I enjoyed contributing to Git and I
don’t want to stop here.&lt;/p&gt;

    &lt;p&gt;Outside Git development, I’ll give an advanced course on Git next
month. It will be a great opportunity to share what I’ve learned here
with other people.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Read the &lt;a href=&quot;https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain&quot;&gt;Git Internals chapter from Pro Git&lt;/a&gt;,
follow everything described in &lt;a href=&quot;https://git.github.io/Hacking-Git/&quot;&gt;Hacking Git&lt;/a&gt;,
and work on a &lt;a href=&quot;https://git.github.io/SoC-2025-Microprojects/&quot;&gt;microproject&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Would you recommend other students or contributors to participate
in the GSoC, Outreachy or other mentoring programs, working on Git?
Why? Do you have advice for them?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Yes. I mean, I’ve already recommended some people from my university to
apply to GSoC or Outreachy on Git and gave some tips to them. Some of
them have already sent patches that were accepted.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://diziet.dreamwidth.org/20436.html&quot;&gt;Debian’s git transition&lt;/a&gt;
by Ian Jackson on diziet’s journal on Dreamwidth.
The main goal of the transition is to make it so that
everyone who interacts with Debian source code should be able to do so entirely in git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.stackademic.com/gits-new-era-what-git-2-52-and-the-road-to-git-3-0-mean-for-developers-in-2026-eb2c3b4e6e79&quot;&gt;Git’s New Era: What Git 2.52 and the Road to Git 3.0 Mean for Developers in 2026&lt;/a&gt;
by Faisal haque on Medium.
Free access provided via Faisal haque’s Friend Link.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://about.gitlab.com/blog/whats-new-in-git-2-52-0/&quot;&gt;What’s new in Git 2.52.0?&lt;/a&gt; on GitLab Blog and
&lt;a href=&quot;https://github.blog/open-source/git/highlights-from-git-2-52/&quot;&gt;Highlights from Git 2.52&lt;/a&gt; on GitHub Blog,
mentioned in the &lt;a href=&quot;https://git.github.io/rev_news/2025/11/30/edition-129/&quot;&gt;previous edition of Git Rev News&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://www.phoronix.com/news/Git-3.0-Release-Talk-2026&quot;&gt;Git Developers Talk About Potentially Releasing Git 3.0 By The End Of Next Year&lt;/a&gt; on Phoronix,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/10/31/edition-128/&quot;&gt;Git Rev News Edition #128&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;There is also &lt;a href=&quot;https://git-scm.com/docs/BreakingChanges#_git_3_0&quot;&gt;BreakingChanges: Git 3.0&lt;/a&gt;
document in the Git documentation.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://nesbitt.io/2025/12/24/package-managers-keep-using-git-as-a-database.html&quot;&gt;Package managers keep using git as a database, it never works out&lt;/a&gt;
by Andrew Nesbitt on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gitclear.com/research_studies/git_commit_count_percentiles_annual_days_active_from_largest_data_set&quot;&gt;Git Commit Count Percentile Stats, Annual Days Active from 878,592 Dev-year Data Points&lt;/a&gt;
by Bill Harding, a first-party research by GitClear.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.zolkos.com/2025/12/08/fizzy-design-evolution-a-flipbook-from-git&quot;&gt;Fizzy Design Evolution: A Flipbook from Git&lt;/a&gt;
by Rob Zolkos on his blog; includes the generated video.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.zufallsheld.de/2025/12/02/comparing-homepage-claims-of-git-providers/&quot;&gt;Comparing the homepage-claims of popular Git hosting providers&lt;/a&gt;
by  Sebastian Gumprich on zufallsheld - a tech blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.roboleary.net/blog/github-migration/&quot;&gt;Are people migrating away from GitHub?&lt;/a&gt;,
a short post (with examples) by Rob O’Leary on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nesbitt.io/2025/12/06/github-actions-package-manager.html&quot;&gt;GitHub Actions Has a Package Manager, and It Might Be the Worst&lt;/a&gt;
by Andrew Nesbitt on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.feldera.com/blog/the-pain-that-is-github-actions&quot;&gt;The Pain That Is GitHub Actions&lt;/a&gt;
by Gerd Zellweger on feldera blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://robinmetral.com/notes/migrating-from-github-to-codeberg/&quot;&gt;Migrating from GitHub to Codeberg&lt;/a&gt;
by Robin Métral on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://eldred.fr/blog/codeberg/&quot;&gt;Migrating my code to Codeberg&lt;/a&gt; and
&lt;a href=&quot;https://eldred.fr/blog/forge-migration/&quot;&gt;GitHub → Codeberg: my experience&lt;/a&gt;
by Eldred Habert on ISSOtm’s warehouse blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dillo-browser.org/news/migration-from-github/&quot;&gt;Migrating Dillo from GitHub&lt;/a&gt;
by Rodrigo Arias Mallo on Dillo project blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ziglang.org/news/migrating-from-github-to-codeberg/&quot;&gt;Migrating from GitHub to Codeberg&lt;/a&gt;
by Andrew on Zig Language News.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fev.al/posts/git-remote/&quot;&gt;How Do Git Remotes Work? And How Do I Self-host My Own?&lt;/a&gt;
What it takes to create the simplest, barest self-hosted Git remote,
and learn stuff about Git in the process.
Post by Charles Féval on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://vulpinecitrus.info/blog/guarding-git-forge-ai-scrapers/&quot;&gt;Guarding My Git Forge Against AI Scrapers&lt;/a&gt;
by ~lymkwi (lux) on VulpineCitrus blog.
The forge in question is a self-hosted &lt;a href=&quot;https://git.vulpinecitrus.info/&quot;&gt;Forgejo instance&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mathieularose.com/rethinking-git-pre-commit-hooks&quot;&gt;Rethinking Git Pre-Commit Hooks&lt;/a&gt;
by Mathieu Larose on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jyn.dev/pre-commit-hooks-are-fundamentally-broken/&quot;&gt;pre-commit hooks are fundamentally broken&lt;/a&gt;
by Jynn Nelson (@jyn) on the website of jyn.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://yeldirium.de/2025/10/09/pre-commit-hooks/index.html&quot;&gt;Discussion of the Benefits and Drawbacks of the Git Pre-Commit Hook&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2025/10/31/edition-128/&quot;&gt;Git Rev News Edition #128&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;The &lt;a href=&quot;https://githooks.com/&quot;&gt;Git Hooks&lt;/a&gt; website gives an example of using pre-commit hook
to check the commit message for spelling errors;&lt;br /&gt;
the &lt;a href=&quot;https://github.com/git/git/blob/master/templates/hooks/pre-commit.sample&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pre-commit.sample&lt;/code&gt;&lt;/a&gt;
provided with Git checks for non-ASCII characters in filenames
(and can be configured to be turned off with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hooks.allownoascii&lt;/code&gt;).&lt;/li&gt;
      &lt;li&gt;There are various tools that help managing pre-commit hooks, like
&lt;a href=&quot;https://pre-commit.com/&quot;&gt;pre-commit&lt;/a&gt;
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/11/21/edition-45/&quot;&gt;Git Rev News #45&lt;/a&gt;)
and &lt;a href=&quot;https://prek.j178.dev/&quot;&gt;&lt;em&gt;prek&lt;/em&gt;&lt;/a&gt;
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/09/30/edition-127/&quot;&gt;Git Rev News #127&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/raziq_din_bd0274cc2ac748b/fixing-the-ghost-folder-in-github-converting-a-broken-submodule-to-a-normal-folder-44c5&quot;&gt;Fixing the “Ghost Folder” in GitHub: Converting a Broken Submodule to a Normal Folder&lt;/a&gt;
by Raziq Din on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://utcc.utoronto.ca/~cks/space/blog/programming/GitConcurrentUsageOops&quot;&gt;Shooting myself in the foot with Git by accident&lt;/a&gt;
by Chris Siebenmann on CSpace blog.
The Git error in question was
&lt;em&gt;“error: fetching ref refs/remotes/origin/master failed: incorrect old value provided”&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://oleb.net/2025/git-file-renaming/&quot;&gt;Tracking renamed files in Git&lt;/a&gt; and
&lt;a href=&quot;https://oleb.net/2025/git-mv-case-change/&quot;&gt;Use ‘git mv’ to record filename case changes in Git&lt;/a&gt;
by Ole Begemann on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/piyushgaikwaad/branch-protection-rules-vs-rulesets-the-right-way-to-protect-your-git-repos-305m&quot;&gt;Branch Protection Rules vs Rulesets: The Right Way to Protect Your Git Repository&lt;/a&gt;
by Piyush Gaikwad on DEV.to.
The main idea is to use Branch Protection Rules for long lived branches,
and Branch Rulesets for short lived branches, defining rules before branches are created.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://huonw.github.io/blog/2025/12/magit-insert-worktrees/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;magit-insert-worktrees&lt;/code&gt; improves status buffers&lt;/a&gt;
by Huon Wilson on his “Huon on the internet” blog.
    &lt;ul&gt;
      &lt;li&gt;The &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt; package for interfacing to Git within the Emacs editor
was first mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2015/08/05/edition-6/&quot;&gt;Git Rev News Edition #6&lt;/a&gt;;
among other mentions there was &lt;a href=&quot;https://lwn.net/Articles/727550/&quot;&gt;Emacs and Magit&lt;/a&gt;
article on LWN.net in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;Git Rev News Edition #30&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://etc.octavore.com/2025/12/archiving-git-branches-as-tags/&quot;&gt;Archiving git branches as tags&lt;/a&gt;
with a git alias.  Blog post by octavore
(the author of &lt;a href=&quot;https://github.com/octavore/delta&quot;&gt;Delta&lt;/a&gt;, a command-line diff tool)
on “et cetera”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/nimxch/building-a-meta-logger-tracking-my-work-across-github-codeberg-and-bitbucket-using-go-4kp6&quot;&gt;Building a Meta-Logger: Tracking My Work Across GitHub, Codeberg, and Bitbucket Using Go&lt;/a&gt;
by Nimai Charan on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://schpet.com/note/why-i-think-jj-vcs-is-worth-your-time&quot;&gt;why i think jj-vcs is worth your time&lt;/a&gt;
on Schpet’s Notebook.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://jj-vcs.github.io/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; is a Git-compatible
version control system written in Rust, which was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://etodd.io/2025/10/02/should-i-switch-from-git-to-jujutsu/&quot;&gt;Should I Switch From Git to Jujutsu&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/11/30/edition-129/&quot;&gt;Git Rev News Edition #129&lt;/a&gt;) and
&lt;a href=&quot;https://www.stavros.io/posts/switch-to-jujutsu-already-a-tutorial/&quot;&gt;Switch to Jujutsu already: a tutorial&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/10/31/edition-128/&quot;&gt;Git Rev News Edition #128&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.visualmode.dev/from-zero-to-github-starting-a-new-jj-jujutsu-repo&quot;&gt;From Zero to GitHub: Starting A New jj (Jujutsu) Repo&lt;/a&gt;
by Josh Branchaud on VisualMode.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.artmann.co/articles/30-years-of-br-tags&quot;&gt;30 Years of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;br&amp;gt;&lt;/code&gt; Tags&lt;/a&gt;:
Three decades of making things on the internet.
Includes the introduction of Git, GitHub, and the GitDevOps (push to publish) workflow.
Post by Christoffer Artmann on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mako.cc/writing/hill-free_tools.html&quot;&gt;Free Software Needs Free Tools&lt;/a&gt;
by Benjamin Mako Hill (2010).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.saltycrane.com/blog/2025/12/magit-fzf-and-ast-grep-demo/&quot;&gt;Magit, fzf, and ast-grep demo&lt;/a&gt;
by Eliot (@saltycrane) on SaltyCrane Blog.
The video &lt;a href=&quot;https://www.youtube.com/watch?v=W4eOz3L6Ga8&quot;&gt;on YouTube&lt;/a&gt;
is 12:40 minutes long.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/git-and-github-crash-course-for-beginners/&quot;&gt;Git &amp;amp; GitHub Crash Course for Beginners&lt;/a&gt;
by Beau Carnes on freeCodeCamp.
The video &lt;a href=&quot;https://www.youtube.com/watch?v=mAFoROnOfHs&quot;&gt;on YouTube&lt;/a&gt;
by freeCodeCamp.org and logicBase Labs
is 1:21:19 hours long.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/uralys/check-projects&quot;&gt;check-projects&lt;/a&gt;
is a fast, cross-platform CLI tool (with TUI interface)
to check the Git status of multiple projects organized by categories.
Written in Go, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/epilande/repos&quot;&gt;repos&lt;/a&gt;
is an interactive CLI tool for managing multiple Git repositories.
Written in TypeScript (with pre-built binaries), under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/richardgill/patchy&quot;&gt;Patchy 🩹&lt;/a&gt;
is a CLI for generating and applying patches to Git repositories.
    &lt;ul&gt;
      &lt;li&gt;Similar in a way to &lt;a href=&quot;https://stacked-git.github.io/&quot;&gt;Stacked Git&lt;/a&gt;,
StGit for short, first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/07/20/edition-17/&quot;&gt;Git Rev News Edition #17&lt;/a&gt;, 
to a lesser extent to &lt;a href=&quot;http://jk.ozlabs.org/projects/patchwork/&quot;&gt;patchwork&lt;/a&gt;,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News Edition #20&lt;/a&gt;,
or to &lt;a href=&quot;https://mystor.github.io/git-revise.html&quot;&gt;git-revise&lt;/a&gt;,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/08/21/edition-54&quot;&gt;Git Rev News Edition #54&lt;/a&gt; - where
you can find links to other similar tools.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://patchwork.readthedocs.io/projects/git-pw/en/latest/usage.html&quot;&gt;git-pw&lt;/a&gt;
is a tool for integrating Git with Patchwork.
Written in Python, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Leleat/git-forge&quot;&gt;git-forge&lt;/a&gt;
is a simple CLI tool for basic interactions with issues and pull requests
across GitHub, GitLab, Gitea, and Forgejo.
(Re)Written in Rust, under MIT license.&lt;br /&gt;
See also &lt;a href=&quot;https://neverready.app/blog/2025/03-git-forge/&quot;&gt;git-forge: Faster Issues and PRs From Your Terminal&lt;/a&gt;
blog post by Anh Tuan Le.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/coderabbitai/git-worktree-runner&quot;&gt;gtr - Git Worktree Runner&lt;/a&gt;
by the CodeRabbit team
is a portable, cross-platform CLI for managing Git worktrees with ease,
with editor and AI tool integration.
It automates per-branch worktree creation, configuration copying,
dependency installation, and workspace setup.
Written in Bash, under Apache 2.0 license.&lt;br /&gt;
See also &lt;a href=&quot;https://dev.to/nemesiscodex/a-better-way-to-run-git-worktrees-finally-1lh9&quot;&gt;A Better Way to Run Git Worktrees Finally!&lt;/a&gt;
by Julio Daniel Reyes on DEV.to,
with &lt;a href=&quot;https://www.youtube.com/watch?v=r9uGLZ3AkWo&quot;&gt;video on YouTube&lt;/a&gt; [5:52].
    &lt;ul&gt;
      &lt;li&gt;There is also &lt;a href=&quot;https://github.com/jarredkenny/worktree-manager&quot;&gt;Worktree Manager (wtm)&lt;/a&gt;
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/10/31/edition-128/&quot;&gt;Git Rev News Edition #128&lt;/a&gt;, and
&lt;a href=&quot;https://github.com/satococoa/wtp&quot;&gt;wtp (Worktree Plus)&lt;/a&gt;
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/07/31/edition-125/&quot;&gt;Git Rev News Edition #125&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/markrai/gitpow&quot;&gt;Git Pow&lt;/a&gt;
is an open-source, cross-platform Git client.
It implements conditional strategies to handle larger repositories,
showing image previews to visualize what changed,
and grouping commits by month/year, among other features.
Written in Rust and JavaScript using the &lt;a href=&quot;https://tauri.app/&quot;&gt;Tauri&lt;/a&gt; framework.
Under GNU GPL v3.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/reposquirrel/reposquirrel&quot;&gt;Git Repository Squirrel 🐿️ (reposquirrel)&lt;/a&gt;
is a comprehensive Git repository analytics tool
that provides detailed insights into developer contributions, subsystem ownership,
and codebase evolution over time.
Written in Python (using the Flask library) and JavaScript,
under &lt;a href=&quot;https://creativecommons.org/licenses/by-nc-sa/4.0/&quot;&gt;CC-BY-NC-SA 4.0 license&lt;/a&gt;.
&lt;a href=&quot;http://13.61.92.173:5555/&quot;&gt;Demo&lt;/a&gt; and Docker image available.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/antonmedv/gitmal&quot;&gt;Gitmal&lt;/a&gt;
is a static page generator for Git repositories.
Gitmal generates static HTML pages with files, commits, code highlighting, and Markdown rendering.
Written in Go, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mikelane/git-rewind&quot;&gt;Git Rewind&lt;/a&gt;
is a GitHub App that provides Your GitHub year in review — with privacy-first,
read-only access (using fine-grained permissions).
Written in TypeScript, under MIT license.
Available at &lt;a href=&quot;https://git-rewind.vercel.app/&quot;&gt;git-rewind.vercel.app&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jensl/critic&quot;&gt;Critic&lt;/a&gt;
is a code review system.
It is a web application written in Python, tightly integrated with Git.
Under Apache 2.0 license.&lt;br /&gt;
See also &lt;a href=&quot;https://sudonull.com/post/135595&quot;&gt;Meet Critic: Code Inspection System in Opera Software&lt;/a&gt;
on Sudo Null IT News.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.dillo-browser.org/buggy/tree/README.md?h=main&quot;&gt;Buggy: Fast and simple bug tracker&lt;/a&gt;.
The buggy program compiles a set of issues written in Markdown into HTML pages
suitable to be read from a web browser. It is intended to be used
alongside a version control system (VCS) like Git to track changes in the issues.
Written in C, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jbranchaud/til?tab=readme-ov-file#git&quot;&gt;Today I Learned: Git&lt;/a&gt;
by Josh Branchaud, under MIT license.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.9.2&quot;&gt;1.9.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.19/admin/release-notes#3.19.0&quot;&gt;3.19.0&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.18/admin/release-notes#3.18.3&quot;&gt;3.18.3&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.9&quot;&gt;3.17.9&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.12&quot;&gt;3.16.12&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.16&quot;&gt;3.15.16&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.21&quot;&gt;3.14.21&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.18/admin/release-notes#3.18.2&quot;&gt;3.18.2&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.8&quot;&gt;3.17.8&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.11&quot;&gt;3.16.11&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.15&quot;&gt;3.15.15&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.20&quot;&gt;3.14.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/12/18/gitlab-18-7-released/&quot;&gt;18.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/12/10/patch-release-gitlab-18-6-2-released/&quot;&gt;18.6.2, 18.5.4, 18.4.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-desktop/current/&quot;&gt;11.7.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.15.html&quot;&gt;4.2.15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v2.4.0&quot;&gt;2.4.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v2.5.0&quot;&gt;2.5.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.17.0&quot;&gt;4.17.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.18.3&quot;&gt;0.18.3&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.18.2&quot;&gt;0.18.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sublime Merge &lt;a href=&quot;https://www.sublimemerge.com/download&quot;&gt;Build 2121&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Kinetic Merge &lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.13.2&quot;&gt;1.13.2&lt;/a&gt;,
&lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.13.1&quot;&gt;1.13.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.13.0&quot;&gt;1.13.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.12.2&quot;&gt;1.12.2&lt;/a&gt;,
&lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.12.1&quot;&gt;1.12.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.12.0&quot;&gt;1.12.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Lucas Seiki Oshiro and David Aguilar.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 129 (November 30th, 2025)</title>
      <link>https://git.github.io/rev_news/2025/11/30/edition-129/</link>
      <pubDate>Sun, 30 Nov 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/11/30/edition-129/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-129-november-30th-2025&quot;&gt;Git Rev News: Edition 129 (November 30th, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 129th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of October and November 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CAEyHQXWd77_jJachC6FYbWMJ+L=KkKoUqiACQ7z8r-ZwYq8JYw@mail.gmail.com/&quot;&gt;[Bug report] &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt; silently ignores error whereas &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git apply&lt;/code&gt; fails for hunk apply&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Bhavik Bavishi filed and sent a bug report to the mailing
list. Running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt; failed to apply some changes but
didn’t report any error. On the contrary, when creating a patch
using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; from the same commit and applying it using
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git apply --verbose&lt;/code&gt;, the latter command also failed to apply the
same changes but errored out. It seemed that there shouldn’t be such
a behavior discrepancy and that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt; should have
reported an error, too.&lt;/p&gt;

    &lt;p&gt;Johannes Sixt suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git apply --3way&lt;/code&gt; to apply the
patch. He was interested not only in the success or failure of the
command, but also in the end result of applying the patch. Was that
end result similar to the result of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt; or
different?&lt;/p&gt;

    &lt;p&gt;Bhavik reported back that indeed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git apply --3way&lt;/code&gt; succeeded and
produced the same end result as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt;. Even though it looked
like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt; worked as expected, that still seemed a
strange behavior.&lt;/p&gt;

    &lt;p&gt;Johannes Sixt replied that a merge strategy is used by both
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git apply --3way&lt;/code&gt;. Unlike a simple patch
application, a merge strategy is intelligent enough to detect if a
change has already been applied. He illustrated this with an example
where text repeats in a file, but only specific instances are
modified.&lt;/p&gt;

    &lt;p&gt;In the meantime, Chris Torek also replied to Bhavik providing a
wealth of explanations. He explained that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git apply&lt;/code&gt; works with a
&lt;em&gt;patch&lt;/em&gt;, which is essentially a “we expect the file looks like this”
instruction. If the file doesn’t match the expected context lines
exactly, the patch fails.&lt;/p&gt;

    &lt;p&gt;In contrast, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt; performs a &lt;em&gt;3-way merge&lt;/em&gt;. It locates
a “common base version” (the ancestor), compares it to “Ours”
(current branch), and “Theirs” (the commit being picked) . If the
merge logic sees that “Theirs” introduces a change that “Ours” has
already made, it silently discards the duplicate change rather than
erroring out. This confirms that the command was working as
intended, using the full history to resolve what looked like a
conflict to the simpler &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git apply&lt;/code&gt; tool.&lt;/p&gt;

    &lt;p&gt;Bhavik thanked Chris for the helpful explanations.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-ayush-chandekar&quot;&gt;Developer Spotlight: Ayush Chandekar&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Editor’s note: This edition features a retrospective interview with a
contributor who contributed to Git through a mentoring program.
We hope the reflections shared by the GSoC contributor will
provide an insightful perspective that benefits the community.
As always, we welcome your thoughts and feedback!&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I am Ayush Chandekar, a GSoC 2025 alumnus under Git, my project was
titled ‘&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/no7dVMeG&quot;&gt;Refactoring in order to reduce Git’s global state&lt;/a&gt;’.
Currently I am an engineering undergraduate at IIT Roorkee,
I consider myself to be a jack of all trades, with interests
ranging from low-level programming to game development,
cybersecurity, and blockchain. I am also a member of
&lt;a href=&quot;https://sdslabs.co/&quot;&gt;SDSLabs&lt;/a&gt;, a student run technical club
at my university which also focuses on making software and
tech accessible for the campus.&lt;/p&gt;

    &lt;p&gt;As a kid I always enjoyed tinkering with computers and would
spend majority of my time on games, but slowly I started enjoying
the chance that development gave me to be the one behind the scene,
controlling and making stuff which works. My approach is driven by
curiosity and a desire to understand how things really function.
Whenever I start learning something new, I naturally end up going
deeper and deeper into the smaller, niche details, not because
I have to, but because it genuinely fascinates me. I enjoy peeling
back the layers, figuring out the underlying mechanisms, and
understanding the “why” behind everything I work on. It’s that
curiosity that keeps pulling me into new domains and motivates me
to keep exploring.  Apart from this, for fun, I like to participate
in hackathons, GameJams and Cyber security Capture-The-Flag(CTF)
competitions. Outside of tech, I enjoy listening to music, brewing
coffee, skateboarding, and learning guitar, they help me unwind
and keep a balance beyond the screen.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How did you initially become interested in contributing to Git,
and what motivated you to choose it as your GSoC project?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I wanted to start my journey of contributing to open source projects.
Before that, I was working on small C projects, and that’s when I
came across Git. I was immediately drawn to understanding how
developers actually work on Git itself. The workflow felt new to me,
kind of old-school in a good way, and it definitely took some time
to get used to, but I really enjoyed the process. As I dug deeper,
I realized how Git’s internals work, and that made me even more
curious. The idea that I could learn from such a mature codebase,
while also improving a tool used globally, was extremely motivating.
It felt like the perfect place to challenge myself, improve my skills,
and contribute to a big project.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Is there any aspect of Git that you now see differently after
having contributed to it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;It is about how there are so many different commands. Before my GSoC,
I was only aware of the usual &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt;,
etc. Now, I know many more commands like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git range-diff&lt;/code&gt;,
etc. I even understand how some of them work internally. Contributing
to Git really opened my eyes to the depth and complexity of the tool.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you balance your contributions with other responsibilities
like work or school?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Balancing contributions with other responsibilities is a bit
challenging. As an undergrad student, I’m involved in various
activities at my university, including sports and other commitments,
so my schedule gets busy. But whenever I sit down to work or study,
I get very absorbed in it, and I often end up spending long stretches
of time without even realizing it. That focus helps me make steady
progress even with a packed routine.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Can you share how GSoC helped enhance your technical and
non-technical skills (like communication, project management,
etc.)?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;GSoC helped me grow in both technical and non-technical areas.
On the technical side, I became much more comfortable reading
large codebases, debugging tricky issues, and writing clean,
well-structured patches. I also learned the importance of clear
and detailed commit messages. On the non-technical side, GSoC
improved my communication skills a lot, especially explaining
my ideas, asking the right questions, and discussing feedback
with the community. It also taught me how to plan my work, break
tasks into smaller steps, and manage my time over a long project.
Overall, it made me more confident in collaborating in an open-source
environment. I would also like to thank my mentor, Christian, for
his guidance and patience throughout the project. His feedback
played a big role in helping me improve.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was your biggest takeaway or learning from GSoC that
you now apply regularly in your work?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My biggest takeaway from GSoC was the importance of writing
clear and detailed commit messages. Before the program, I
didn’t pay much attention to how a commit was explained,
but contributing to Git made me realise how essential it
is. A good commit message not only describes what changed
but also why the change was necessary, making it much easier
for reviewers and future contributors to understand the context.&lt;/p&gt;

    &lt;p&gt;Another major learning was understanding how to handle reviews
from multiple people. In the Git community, different contributors
often suggest different things, and figuring out how to take in
all that feedback while still taking ownership of my work was a
big shift for me. I learned how to look at each suggestion carefully,
understand the reasoning behind it, and decide what improves the
patch. It also taught me when to explain my choices and when to
adjust my approach. This experience helped me become more confident
in iterating on my work and communicating clearly, while staying
responsible for the decisions I make.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was the biggest challenge you faced during your contributions
to Git, and how did you overcome it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;There were a few challenges which I faced. Initially, it was
getting accustomed to the mailing list workflow as it was new to
me. Most of the challenges were making sure that the community
accepted your patches. A lot of people reviewed my patches and
got different responses. Here, I learnt to take ownership of
my patches.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Have you thought about mentoring new GSoC / Outreachy students?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Yes, I’ve definitely thought about mentoring future GSoC students,
most likely as a co-mentor. I feel it would be a great way to
give back to the community and support newcomers the same way
I was supported.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;It would be removing the global state from Git, which was my
GSoC project and is also an ongoing effort in the community
for the maintainability and modularity of the codebase.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What upcoming features or changes in Git are you particularly
excited about?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’ve been following Patrick’s &lt;a href=&quot;https://public-inbox.org/git/20251027-b4-pks-history-builtin-v6-0-407dd3f57ad3@pks.im/&quot;&gt;patch series on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git history&lt;/code&gt;&lt;/a&gt;.
I am excited about that feature’s release.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I have heard of &lt;a href=&quot;https://jj-vcs.github.io/jj/latest/&quot;&gt;Jujutsu&lt;/a&gt;,
I haven’t tried it yet but it seems cool, other than that
sticking to my essentials, GitLab and GitHub.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I just use Gmail to view and reply mails most of the time. But when
it comes to sending patches, I use the good ol’ &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;.
I had set up &lt;a href=&quot;http://www.mutt.org/&quot;&gt;mutt&lt;/a&gt; once, but didn’t use it
as much.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you envision your own involvement with Git or other open
source projects in the future?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I don’t have anything planned out in particular but I do really
admire the way my mentor and other contributors in the organisation
contribute. Open source is something which basically runs the world,
organisations like Git and Linux function because of collective and
voluntary efforts; they are what makes the world as it is today,
and carrying that forward I want to contribute in a way which makes
software accessible to everyone and help build up on these
foundational blocks.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Git is an amazing project to learn all aspects of development.
It helps you to learn/improve your C and debugging skills. Another
important thing is how you get to work with different contributors
in the community. You get reviews from everyone which helps you
understand different perspectives. To start with, I would suggest
going through this page called ‘&lt;a href=&quot;https://git.github.io/Hacking-Git/&quot;&gt;Hacking Git&lt;/a&gt;’
and checking different articles mentioned there along with the
&lt;a href=&quot;https://git-scm.com/docs/MyFirstContribution&quot;&gt;Contribution Guidelines&lt;/a&gt;.
It is quite difficult to decide what to work on initially, as there
are no traditional issues as other organizations have. Being active
on the mailing list, checking out the ongoing topics might help you
decide what to work on. Everyone on the mailing list and discord is
very friendly and is always looking forward to help you out, so feel
free to ask if you have any doubts :)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Would you recommend other students or contributors to participate
in the GSoC, Outreachy or other mentoring programs, working on Git?
Why? Do you have advice for them?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;As I answered before, it is sometimes difficult to decide what you
can work on. I feel that for Git, since projects are already listed
on the &lt;a href=&quot;https://git.github.io/SoC-2025-Ideas/&quot;&gt;GSoC and Outreachy pages&lt;/a&gt;,
it takes away the pain of figuring out where to start. You just need
to pick a project that interests you and then spend some time studying
it. Other than that, you’re also mentored by someone experienced in
Git development, and with their guidance you’re able to follow best
practices and learn a lot of new things. These programs really help
build confidence, especially when contributing to a large and complex
codebase. You also get to improve your communication skills through
discussions, reviews, and patch iterations. And most importantly, it
opens doors for future contributions, networking, and long-term
involvement in open source. My advice would be to learn to be patient
with reviews. A lot of people in the community contribute voluntarily,
so you may not get reviews on your patches quickly, and that’s
completely normal.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/whats-new-in-git-2-52-0/&quot;&gt;What’s new in Git 2.52.0?&lt;/a&gt;
by Christian Couder, Patrick Steinhardt, Toon Claes on GitLab Blog.
Highlights include &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git last-modified&lt;/code&gt; command,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fast-export&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fast-import&lt;/code&gt; signature-related improvements,
new and improved &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git maintenance&lt;/code&gt; strategies,
a new subcommand for the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repo&lt;/code&gt; to display repository metrics, etc.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/highlights-from-git-2-52/&quot;&gt;Highlights from Git 2.52&lt;/a&gt;
by Taylor Blau on GitHub Blog.
Mentions the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git last-modified&lt;/code&gt; command for tree-level blame information,
advanced repository maintenance strategies for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git maintenance&lt;/code&gt;,
new subcommands added to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git refs&lt;/code&gt;, the experimental &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repo&lt;/code&gt; command, etc.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lakefs.io/media-mentions/lakefs-acquires-dvc-uniting-data-version-control-pioneers/&quot;&gt;lakeFS Acquires DVC, Uniting Data Version Control Pioneers to Accelerate AI-ready Data&lt;/a&gt;
announcement by lakeFS on their Mentions Media page.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://dvc.org/blog/dvc-joins-lakefs-your-questions-answered/&quot;&gt;DVC Joins lakeFS: Your Questions Answered!&lt;/a&gt;
by Jeny De Figueiredo on DVC Blog.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://dvc.org/blog/a-shared-vision-for-the-future-of-dvc/&quot;&gt;A Shared Vision for the Future of DVC&lt;/a&gt;
by Dmitry Petrov on DVC Blog.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.com/kelvins/awesome-mlops#data-management&quot;&gt;“Data Management” section of Awesome MLOps&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/10/31/edition-116/&quot;&gt;Git Rev News Edition #116&lt;/a&gt;.
That edition also includes references to DVC and lakeFS,
and other similar tools (though the list there is missing
&lt;a href=&quot;https://meltano.com/&quot;&gt;Meltano&lt;/a&gt; (first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;) and
&lt;a href=&quot;https://www.pachyderm.com/&quot;&gt;Pachyderm&lt;/a&gt; (first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/20-years-of-git-2-days-at-github-hq-git-merge-2025-highlights/&quot;&gt;20 Years of Git, 2 days at GitHub HQ: Git Merge 2025 highlights 🎉&lt;/a&gt;
by Lee Reilly on GitHub Blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://git.github.io/rev_news/2025/10/31/edition-128/&quot;&gt;the previous edition of Git Rev News&lt;/a&gt;
for more links about Git Merge 2025.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/version-control-in-the-age-of-ai&quot;&gt;Version Control in the Age of AI: The Complete Guide&lt;/a&gt;
by Bruno Brito on Git Tower blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://benknoble.github.io/blog/2025/11/14/git-patch-series-length/&quot;&gt;Analyzing 10 years of accepted patch series to Git&lt;/a&gt;
by D. Ben Knoble on his Junk Drawer personal blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1042355/&quot;&gt;Mergiraf: syntax-aware merging for Git&lt;/a&gt;
by Daroc Alden on LWN.net.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://mergiraf.org/introduction.html&quot;&gt;Mergiraf&lt;/a&gt; is a merge-conflict resolver
that uses a generic algorithm plus a small amount of language-specific knowledge
to solve conflicts that Git’s default strategy cannot.
It was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/11/30/edition-117/&quot;&gt;Git Rev News Edition #117&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;The Mergiraf author recommends using the tool together with
&lt;a href=&quot;https://difftastic.wilfred.me.uk/&quot;&gt;Difftastic&lt;/a&gt;, a structural diff tool
that understands syntax, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://etodd.io/2025/10/02/should-i-switch-from-git-to-jujutsu/&quot;&gt;Should I Switch From Git to Jujutsu&lt;/a&gt;
by Evan Todd on his personal blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://jj-vcs.github.io/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; is a Git-compatible
version control system written in Rust, which was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://www.stavros.io/posts/switch-to-jujutsu-already-a-tutorial/&quot;&gt;Switch to Jujutsu already: a tutorial&lt;/a&gt;
by Stavros on Stavros’ Stuff,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/10/31/edition-128/&quot;&gt;the previous edition&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.howtogeek.com/beginning-git-what-it-is-and-why-its-crucial/&quot;&gt;Why Git is the first tool every new developer needs to learn&lt;/a&gt;
by Graeme Peacock on How-To Geek.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.kdnuggets.com/git-for-vibe-coders&quot;&gt;Git for Vibe Coders&lt;/a&gt;,
just enough to stop Claude from accidentally deleting your code and database.
By Abid Ali Awan on KDnuggets.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.howtogeek.com/advanced-git-commands-you-probably-havent-heard-of/&quot;&gt;4 advanced git commands you probably haven’t heard of&lt;/a&gt;:
&lt;a href=&quot;https://git-scm.com/docs/git-clean&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clean&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://git-scm.com/docs/git-bisect&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://git-scm.com/docs/git-cherry-pick&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://git-scm.com/docs/git-revert&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git revert&lt;/code&gt;&lt;/a&gt;,
by Bobby Jack on How-To Geek.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.tvaidyan.com/2025/11/13/setting-file-permissions-in-git/&quot;&gt;Setting File Permissions in Git&lt;/a&gt;
by Tom Vaidyan on his personal blog;
though I wonder why he shows the low-level &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git update-index --chmod=+x &amp;lt;file&amp;gt;&lt;/code&gt; “plumbing” command
first, instead of the corresponding user-facing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add --chmod=+x &amp;lt;file&amp;gt;&lt;/code&gt; “porcelain” command.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.randombits.host/why-you-should-be-using-git-worktrees/&quot;&gt;Why You Should Be Using Git Worktrees&lt;/a&gt;
by Conor in Quick Tip on their Random Bits personal blog
(it includes their helper &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gwc&lt;/code&gt;, i.e. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree create&lt;/code&gt;, shell script).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://haacked.com/archive/2025/11/21/tree-me/&quot;&gt;tree-me: Because git worktrees shouldn’t be a chore&lt;/a&gt;
by Phil Haack on his You’ve Been Haacked blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.brandonpugh.com/til/git/skip-worktree-ignore-modified-files/&quot;&gt;Use skip-worktree to ignore modified files&lt;/a&gt;
by Brandon Pugh in the “TIL: Today I learned…” section on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/k-kibet/managing-multiple-projects-in-one-repository-submodules-subtrees-monorepos-partial-cloning-21mc&quot;&gt;Managing Multiple Projects in One Repository: Submodules, Subtrees, Monorepos &amp;amp; Partial Cloning Explained&lt;/a&gt;
by Kibet Korir (K-kibet) for Codespear on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/enbis/automatically-switching-git-identities-and-ssh-keys-on-the-same-machine-75n&quot;&gt;Automatically switching Git Identities and SSH Keys on the same machine&lt;/a&gt;
with the help of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;includeIf&lt;/code&gt; directive in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitconfig&lt;/code&gt; file,
by Enrico Bison (enbis) on DEV.to.  See also:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://iamjonfry.com/splitting-ssh-and-git-configs/&quot;&gt;Splitting SSH and git configs&lt;/a&gt;
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-handle-multiple-git-configurations-in-one-machine/&quot;&gt;How to Use Multiple Git Configs on One Computer&lt;/a&gt;
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/01/28/edition-71/&quot;&gt;Git Rev News Edition #71&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.benji.dog/articles/git-config/&quot;&gt;How I configure my Git identities&lt;/a&gt;
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/11/30/edition-117/&quot;&gt;Git Rev News Edition #117&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://medium.com/@matteopampana/one-pc-multiple-git-configs-this-will-save-you-time-f702880744f7&quot;&gt;One PC, Multiple Git Configs (This Will Save You Time!)&lt;/a&gt;
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/02/28/edition-120/&quot;&gt;Git Rev News Edition #120&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ylan.segal-family.com/blog/2025/11/15/git-ammend-any-commit/&quot;&gt;Git: Amend any commit&lt;/a&gt;
(scripting around &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --amend&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --fixup&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --autosquash&lt;/code&gt;)
by Ylan Segal on his “on.code &amp;amp;&amp;amp; such” blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/sylwia-lask/if-you-think-your-commit-messages-are-bad-just-wait-3fgk&quot;&gt;If You Think YOUR Commit Messages Are Bad, Just Wait…&lt;/a&gt;
by Sylwia Laskowska on DEV.to,
with others providing more examples in comments.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.seangoedecke.com/good-code-reviews/&quot;&gt;Mistakes I see engineers making in their code reviews&lt;/a&gt;
by Sean Goedecke on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://shunk031.me/post/testable-dotfiles-management-with-chezmoi/&quot;&gt;Testable Dotfiles Management With Chezmoi&lt;/a&gt;
by Shunsuke Kitada (北田俊輔), Ph.D. on shunk031.me.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.kulman.sk/self-hosted-gitea-backup/&quot;&gt;Backing up my repositories to self-hosted Gitea&lt;/a&gt;
by Igor Kulman on his personal blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://about.gitea.com/&quot;&gt;Gitea&lt;/a&gt; is a Go-based software forge,
a fork of &lt;a href=&quot;https://gogs.io/&quot;&gt;Gogs&lt;/a&gt;.
It was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/01/25/edition-23/&quot;&gt;Git Rev News Edition #23&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.pavlinbg.com/posts/fix-vercel-git-author-error&quot;&gt;Fixing Vercel’s ‘Git Author Must Have Access’ Error&lt;/a&gt;,
which was caused by the way how Vercel handles multiple accounts.
Written by Pavlin Gunov (PavlinBG) on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dvc.org/blog/dvc-slurm-cluster-exscientia/&quot;&gt;Running DVC on a SLURM cluster&lt;/a&gt;
by Dom Miketa on DVC Blog (2024).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://dvc.org/&quot;&gt;DVC&lt;/a&gt; (Data Version Control),
an open-source version control system for data science projects,
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/01/25/edition-23/&quot;&gt;Git Rev News Edition #23&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=vKsOFHNSb4Q&quot;&gt;How to ensure the Git community is and stays healthy: Emily Shaffer / Patrick Steinhardt &amp;amp; guests&lt;/a&gt;
on GitButler channel on YouTube [duration: 44:42].&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/unhappychoice/gitlogue&quot;&gt;gitlogue&lt;/a&gt;
is a cinematic Git commit replay tool for the terminal,
turning your Git history into a living, animated story;
with realistic typing animations, syntax highlighting, and file tree transitions,
transforming code changes into a visual experience.
Written mainly in Rust, under ISC License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ishepard/pydriller&quot;&gt;PyDriller&lt;/a&gt; is a Python framework
that helps developers in analyzing Git repositories.
With PyDriller you can easily extract information about
commits, developers, modified files, diffs, and source code.
Written in Python, under Apache 2.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/haacked/dotfiles/blob/main/bin/tree-me&quot;&gt;tree-me&lt;/a&gt;
is a minimal &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt; helper
that leverages Git’s native capabilities.
It uses Git-like subcommands and follows conventions so you don’t have to think:
auto-detects the repository name from your Git remote,
auto-detects the default branch, organizes by repo, provides tab completion, etc.
Single bash script, part of &lt;a href=&quot;https://github.com/haacked/dotfiles&quot;&gt;haacked dotfiles&lt;/a&gt;.
No license.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.com/jarredkenny/worktree-manager&quot;&gt;Worktree Manager&lt;/a&gt; (wtm),
a fast, modern CLI tool for managing Git worktrees in bare repositories,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/10/31/edition-128/&quot;&gt;Git Rev News Edition #128&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/haacked/spelungit&quot;&gt;Spelungit&lt;/a&gt; is a Model Context Protocol (MCP) server
for exploring Git commit history using semantic search.
With this tool you can search through commits with natural language commands
like “Search Git history to find out why this class was added”,
or “search_commits(query=”authentication login changes”, limit=5)”.
Uses Microsoft’s all-MiniLM-L6-v2 embedding model via &lt;a href=&quot;https://www.sbert.net/&quot;&gt;sentence-transformers&lt;/a&gt;,
or deterministic hash-based embeddings when sentence-transformers is unavailable.
Written in Python (with a few Bash scripts), under MIT License.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://haacked.com/archive/2025/09/29/announcing-spelungit/&quot;&gt;Spelungit: When &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --grep&lt;/code&gt; isn’t enough&lt;/a&gt;
by Phil Haack on You’ve Been Haacked blog.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/wfxr/forgit&quot;&gt;forgit&lt;/a&gt; is a utility tool
powered by &lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;fzf&lt;/a&gt; (command-line fuzzy finder)
for using Git interactively.
Written in shell, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/reemus-dev/gitnr&quot;&gt;gitnr&lt;/a&gt; is a cross-platform CLI utility
to create &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; files using one or more templates
from &lt;a href=&quot;https://github.com/toptal/gitignore&quot;&gt;TopTal&lt;/a&gt; (&lt;a href=&quot;https://gitignore.io&quot;&gt;https://gitignore.io&lt;/a&gt;),
&lt;a href=&quot;https://github.com/github/gitignore&quot;&gt;GitHub&lt;/a&gt;, or your own collection.
Written in Rust, under MIT License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://manicli.com/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mani&lt;/code&gt;&lt;/a&gt; is a CLI tool
that helps you manage multiple repositories.
It’s useful when you are working with microservices, multi-project systems,
multiple libraries, or just a collection of repositories,
and want a central place for pulling all repositories and running commands across them.
Written in Go, under MIT License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zyedidia/eget&quot;&gt;eget&lt;/a&gt; is a command-line tool
for easily fetching and extracting pre-built binaries from GitHub releases.
Written in Go, under MIT License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/darrenburns/dunk&quot;&gt;dunk&lt;/a&gt; is a tool
to provide prettier Git diffs in the terminal
by piping &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; output into it (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff | dunk&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff | dunk | less -R&lt;/code&gt;).
In very early stages of development.
Written in Python, under MIT License.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://dandavison.github.io/delta/&quot;&gt;git-delta&lt;/a&gt;,
a syntax-highlighting pager for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt; output.
It was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;,
though there is another &lt;a href=&quot;https://github.com/octavore/delta&quot;&gt;delta&lt;/a&gt;
command-line diff tool which was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/11/11/edition-9/&quot;&gt;edition #9&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.com/so-fancy/diff-so-fancy&quot;&gt;diff-so-fancy&lt;/a&gt; tool,
which beside piping &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; output to it,
can also be used as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.pager&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;interactive.diffFilter&lt;/code&gt;.
It was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/03/16/edition-13/&quot;&gt;Git Rev News Edition #13&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;There is also a &lt;a href=&quot;https://github.com/git/git/tree/master/contrib/diff-highlight&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contrib/diff-highlight&lt;/code&gt;&lt;/a&gt;
diff pager script in the Git repository, written in Perl.
It was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/07/24/edition-53/&quot;&gt;Git Rev News Edition #53&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/unhappychoice/gittype&quot;&gt;GitType&lt;/a&gt; is a CLI tool
that turns your own source code into typing challenges.
Because why practice with boring &lt;a href=&quot;https://www.lipsum.com/&quot;&gt;lorem ipsum&lt;/a&gt;
when you can type your beautiful &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fn main()&lt;/code&gt; implementations?
Written in Rust, under MIT License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lusingander/serie&quot;&gt;Serie&lt;/a&gt; is a TUI tool that
provides a rich Git commit graph in your terminal.
Written in Rust, under MIT License.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://jonas.github.io/tig/&quot;&gt;tig&lt;/a&gt;,
an ncurses-based text-mode interface for Git,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/08/17/edition-18/&quot;&gt;Git Rev News Edition #18&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/prettydiff/prettydiff&quot;&gt;prettydiff&lt;/a&gt; is a beautifier and language aware
code comparison tool for many languages. It also minifies and does a few other things.
There is a web service showing how the tool works at &lt;a href=&quot;https://prettydiff.com/tool.xhtml&quot;&gt;https://prettydiff.com/tool.xhtml&lt;/a&gt;.
Written in TypeScript and HTML,
under &lt;a href=&quot;https://creativecommons.org/public-domain/cc0/&quot;&gt;CC0&lt;/a&gt; license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fnox.jdx.dev/&quot;&gt;fnox: Fort Knox for your secrets&lt;/a&gt;
is a tool to manage secrets with encryption, or cloud providers, or both.
Fnox uses a simple TOML config file (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fnox.toml&lt;/code&gt;) that you check into Git;
secrets are either encrypted inline, or provided as references
that point to a secret in age, AWS, 1Password, etc.
Written in Rust, under MIT License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://asdf-vm.com/guide/introduction.html&quot;&gt;asdf&lt;/a&gt; is a tool version manager.
All tool version definitions are contained within one file (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.tool-versions&lt;/code&gt;)
which you can check in to your project’s Git repository to share with your team,
ensuring everyone is using the exact same versions of tools.
Written mainly in Bash and Go, under MIT License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://grebedoc.dev/&quot;&gt;grebedoc.dev&lt;/a&gt; is a service
that offers static site hosting for Git forges;
it publishes the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pages&lt;/code&gt; branch in your Git repository as a website on your domain.
More specifically, it is a public deployment of
&lt;a href=&quot;https://codeberg.org/git-pages/git-pages&quot;&gt;git-pages&lt;/a&gt;
and &lt;a href=&quot;https://caddyserver.com/&quot;&gt;Caddy&lt;/a&gt;, configured to work especially with
&lt;a href=&quot;https://codeberg.org/&quot;&gt;Codeberg&lt;/a&gt; but also with other Git forges.
It is operated by Catherine ‘whitequark’ and teammates.
    &lt;ul&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://docs.github.com/en/pages&quot;&gt;GitHub Pages&lt;/a&gt;,
&lt;a href=&quot;https://docs.gitlab.com/user/project/pages/&quot;&gt;GitLab Pages&lt;/a&gt;,
&lt;a href=&quot;https://support.atlassian.com/bitbucket-cloud/docs/publishing-a-website-on-bitbucket-cloud/&quot;&gt;static websites on Bitbucket Cloud&lt;/a&gt;,
&lt;a href=&quot;https://codeberg.page/&quot;&gt;Codeberg Pages&lt;/a&gt; (can’t guarantee high availability),
&lt;a href=&quot;https://srht.site/&quot;&gt;sourcehut pages&lt;/a&gt;, and
&lt;a href=&quot;https://pages.cloudflare.com/&quot;&gt;Cloudflare Pages&lt;/a&gt; (JAMstack platform), etc.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/csurfer/gitsuggest&quot;&gt;gitsuggest&lt;/a&gt; is a tool
to suggest GitHub repositories based on the repositories you have shown interest in
by “starring”. It is using the Latent Dirichlet Allocation (LDA) method.
There is also a &lt;a href=&quot;http://www.gitsuggest.com/&quot;&gt;gitSuggest&lt;/a&gt; service (in beta) on Heroku.
Written on Python, under MIT License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://josh-project.github.io/josh/&quot;&gt;Josh&lt;/a&gt; (Just One Single History)
(&lt;a href=&quot;https://github.com/josh-project/josh&quot;&gt;repo&lt;/a&gt;)
is a tool that combines the advantages of monorepos with those of multirepos
by leveraging a blazingly fast, incremental, and reversible implementation
of Git history filtering.
Note that to guarantee filters are reversible
Josh restricts the kind of filter that can be used.
Use cases include partial cloning, workspaces, simplified CI/CD;
this tool also provides a GraphQL API.
Josh is distributed via &lt;a href=&quot;https://hub.docker.com/r/joshproject/josh-proxy&quot;&gt;Docker Hub&lt;/a&gt;,
and you can start it with the appropriate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker run&lt;/code&gt; command.
See its &lt;a href=&quot;https://josh-project.github.io/josh/faq.html#frequently-asked-questions&quot;&gt;Frequently Asked Questions&lt;/a&gt;
for comparison with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git sparse-checkout&lt;/code&gt;, partial clone, submodules, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git subtree&lt;/code&gt;,
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-repo&lt;/code&gt;.
Written mainly in Rust, under MIT License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://villosa.lindenii.org/furgit//repos/furgit/&quot;&gt;Furgit&lt;/a&gt;
(&lt;a href=&quot;https://github.com/runxiyu/furgit&quot;&gt;GitHub mirror&lt;/a&gt;)
is a fast Git library in pure Go (and a little bit of optional Go Assembly).
Written for &lt;a href=&quot;https://villosa.lindenii.org/villosa//repos/villosa/&quot;&gt;Lindenii Villosa&lt;/a&gt;
(successor to &lt;a href=&quot;https://forge.lindenii.org/forge/-/repos/server/&quot;&gt;Lindenii Forge&lt;/a&gt;),
a software forge primarily designed for self-hosting
by small organizations and individuals.
Under AGPL 3.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/veqqq/git-embigenner&quot;&gt;git-embigenner&lt;/a&gt;
is a very simple shell script to cheat a high score on GitHub,
which will spam commits to populate your profile’s contribution graph.
    &lt;ul&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://github.com/ben174/git-draw&quot;&gt;Git Draw&lt;/a&gt;,
a Chrome extension which will allow you to freely draw on your GitHub heatmap,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/02/10/edition-12/&quot;&gt;Git Rev News Edition #12&lt;/a&gt;&lt;br /&gt;
and &lt;a href=&quot;https://github.com/gelstudios/gitfiti&quot;&gt;gitfiti&lt;/a&gt;,
a tool for crafting graffiti in a GitHub commit history calendar,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/07/18/edition-41/&quot;&gt;Git Rev News Edition #41&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Contrast &lt;a href=&quot;https://trufflesecurity.com/blog/vigilante-justice-on-github&quot;&gt;Vigilante Justice on GitHub: GitHub Graffiti&lt;/a&gt; by Dylan Ayrey,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/12/31/edition-118/&quot;&gt;Git Rev News Edition #118&lt;/a&gt;,
about how you can paint funny pixel art (graffiti) with fake commit Git histories
on spammer/phisher’s GitHub profiles (that is, on their activity heatmap plot).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://lore.kernel.org/git/xmqqh5usmvsd.fsf@gitster.g/&quot;&gt;2.52.0&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/xmqqzf8rqihh.fsf@gitster.g/&quot;&gt;2.52.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/xmqqqzubhyj9.fsf@gitster.g/&quot;&gt;2.52.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/xmqqwm47t4x3.fsf@gitster.g/&quot;&gt;2.52.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.52.0.windows.1&quot;&gt;v2.52.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.52.0-rc2.windows.1&quot;&gt;v2.52.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.52.0-rc1.windows.1&quot;&gt;v2.52.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.52.0-rc0.windows.1&quot;&gt;v2.52.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/11/26/patch-release-gitlab-18-6-1-released/&quot;&gt;18.6.1, 18.5.3, 18.4.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/11/20/gitlab-18-6-released/&quot;&gt;18.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/11/12/patch-release-gitlab-18-5-2-released/&quot;&gt;18.5.2, 18.4.4, 18.3.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Data Center &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/release-notes-872139866.html&quot;&gt;10.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3109&quot;&gt;3.10.9&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3116&quot;&gt;3.11.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3117&quot;&gt;3.11.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3123&quot;&gt;3.12.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3130&quot;&gt;3.13.0-rc5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3130&quot;&gt;3.13.0&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3131&quot;&gt;3.13.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.18/admin/release-notes#3.18.1&quot;&gt;3.18.1&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.7&quot;&gt;3.17.7&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.10&quot;&gt;3.16.10&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.14&quot;&gt;3.15.14&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.19&quot;&gt;3.14.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-desktop/current/&quot;&gt;11.6.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.5.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.16.1&quot;&gt;4.16.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.18.1&quot;&gt;0.18.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.18.0&quot;&gt;0.18.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Kinetic Merge &lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.11.2&quot;&gt;1.11.2&lt;/a&gt;,
&lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.11.1&quot;&gt;1.11.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.11.0&quot;&gt;1.11.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-15&quot;&gt;15&lt;/a&gt; (&lt;a href=&quot;https://youtu.be/xTrxb2dJP8M&quot;&gt;YouTube tour&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/blog/tower-windows-10&quot;&gt;10&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Ayush Chandekar, Štěpán Němec,
Bruno Brito and D. Ben Knoble.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 128 (October 31st, 2025)</title>
      <link>https://git.github.io/rev_news/2025/10/31/edition-128/</link>
      <pubDate>Fri, 31 Oct 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/10/31/edition-128/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-128-october-31st-2025&quot;&gt;Git Rev News: Edition 128 (October 31st, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 128th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of September and October 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/organizations/git&quot;&gt;Git participated in GSoC (Google Summer of Code) 2025&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;All the contributors have successfully passed their final evaluation
and published a final report:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Lucas Oshiro &lt;a href=&quot;https://lucasoshiro.github.io/gsoc-en/#weeks&quot;&gt;worked&lt;/a&gt; on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/fGgMYHwl&quot;&gt;Machine-Readable Repository Information Query Tool&lt;/a&gt;
project. He was mentored by Patrick Steinhardt and Karthik Nayak. The final
report can be found on
&lt;a href=&quot;https://lucasoshiro.github.io/gsoc-en/#final-report&quot;&gt;his website&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Meet Soni &lt;a href=&quot;https://inosmeet.github.io/posts/gsoc25/&quot;&gt;worked&lt;/a&gt; on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/xVrT5e2q&quot;&gt;Consolidate ref-related functionality into git-refs&lt;/a&gt;
project. He was mentored by Patrick Steinhardt and Jialuo She. The final
report can be found on
&lt;a href=&quot;https://inosmeet.github.io/posts/gsoc25/gsoc25_final/&quot;&gt;his website&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Ayush Chandekar &lt;a href=&quot;https://ayu-ch.github.io/&quot;&gt;worked&lt;/a&gt; on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/no7dVMeG&quot;&gt;Refactoring in order to reduce Git’s global state&lt;/a&gt;
project. He was mentored by Christian Couder and Ghanshyam Thakkar. The final
report can be found on
&lt;a href=&quot;https://ayu-ch.github.io/2025/08/29/gsoc-final-report.html&quot;&gt;his website&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Kaartic Sivaraam and Christian Couder were
&lt;a href=&quot;https://developers.google.com/open-source/gsoc/help/oa-tips&quot;&gt;“org admins”&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Congratulations to the contributors, their mentors and the org admins!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge 2025 conference&lt;/a&gt; and &lt;a href=&quot;https://lore.kernel.org/git/aOQVeVYY6zadPjln@nand.local/&quot;&gt;Contributor’s Summit 2025&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The Git Merge conference happened on
&lt;a href=&quot;https://github.blog/open-source/git/20-years-of-git-2-days-at-github-hq-git-merge-2025-highlights/&quot;&gt;September 29th and 30th&lt;/a&gt;
in San Francisco, hosted by &lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt; at their
GitHub HQ. The &lt;a href=&quot;https://www.youtube.com/playlist?list=PLNXkW_le40U6Ms1XlsYKi_yUh5J2FOSlf&quot;&gt;session records&lt;/a&gt;
are available.&lt;/p&gt;

    &lt;p&gt;On the second day, there was also
&lt;a href=&quot;https://lore.kernel.org/git/aOQVeVYY6zadPjln@nand.local/&quot;&gt;the Contributor’s Summit&lt;/a&gt;.
The &lt;a href=&quot;https://docs.google.com/document/d/1arvvXP8DrF3F8PCKQOmGvYh5jUg8P9Clx9m-FgDD4EI/&quot;&gt;full notes&lt;/a&gt;
as well as &lt;a href=&quot;https://lore.kernel.org/git/aOQV6iM49QDhcC+C@nand.local/#r&quot;&gt;notes broken down by topic&lt;/a&gt;
are available.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/aGwHt9HCd86hVuKh@pks.im/&quot;&gt;Git Mini Summit 2025&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;On August 28 in Amsterdam, a &lt;a href=&quot;https://lore.kernel.org/git/aGwHt9HCd86hVuKh@pks.im/&quot;&gt;Git Mini Summit&lt;/a&gt;
happened as
&lt;a href=&quot;https://osseu2025.sched.com/event/28R2Q/git-mini-summit-additional-fee-pre-registration-required&quot;&gt;a co-hosted event of the Open Source Summit Europe&lt;/a&gt;,
sponsored by GerritForge, GitButler, GitLab, and Google.
The &lt;a href=&quot;https://drive.google.com/file/d/1vacimnS9NUTcYUsRe8100El8Hdl_C7GD/view&quot;&gt;schedule&lt;/a&gt;
and &lt;a href=&quot;https://blog.gitbutler.com/git-mini-summit-2025&quot;&gt;session records&lt;/a&gt;
are available.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/01c101dc2842$38903640$a9b0a2c0$@nexbridge.com/&quot;&gt;[Change] Git build issue on NonStop&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Randall S. Becker reported on the mailing list that CI tests on the
NonStop x86 platform were broken after the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uintptr_t&lt;/code&gt; type started
to be used in &lt;a href=&quot;https://github.com/clar-test/clar&quot;&gt;clar&lt;/a&gt; tests when
displaying error messages in test failures (in case pointer comparisons
fail).&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, replied to Randall that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uintptr_t&lt;/code&gt; was
already used in many places in the regular code, and guessed the
issue might come from how clar defined that type. He noted though
that the line in the clar test where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uintptr_t&lt;/code&gt; appeared also
contained &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRIxPTR&lt;/code&gt; which is a macro that is not used in the regular
code. So he wondered if just replacing that macro with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRIuMAX&lt;/code&gt;
(which is often used) would be enough to fix the issue.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRIxPTR&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRIuMAX&lt;/code&gt; and similar macros are format specifier macros
from the C standard library (defined in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;inttypes.h&amp;gt;&lt;/code&gt;) that provide
portable ways to print integer types using functions like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;printf()&lt;/code&gt;
across different platforms. They are all named in the same way, with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRI&lt;/code&gt; meaning &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;printf&lt;/code&gt;, the next letter indicating the format, like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x&lt;/code&gt; for hexadecimal and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;u&lt;/code&gt; for unsigned decimal, and the last part
indicating the type, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PTR&lt;/code&gt; for pointer-sized integers, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MAX&lt;/code&gt;
for maximum-width integers, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;64&lt;/code&gt; for 64-bit, etc.&lt;/p&gt;

    &lt;p&gt;Randall replied to Peff that replacing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRIxPTR&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRIuMAX&lt;/code&gt;
would work, and that he was going to try it.&lt;/p&gt;

    &lt;p&gt;Patrick Steinhardt also replied to Randall and Peff saying it would
work, and asked Peff if he wanted to send that change.&lt;/p&gt;

    &lt;p&gt;Peff replied to Patrick that he’d be happy if Patrick sent the
change, but noted that using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRIxMAX&lt;/code&gt; might be better than
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRIuMAX&lt;/code&gt; as the code wanted to print hexadecimal values.&lt;/p&gt;

    &lt;p&gt;Patrick then reported to Peff that Peff’s suggestion to use the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRIxMAX&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRIuMAX&lt;/code&gt; format specifier macros didn’t work on 32 bit
systems, because casting a pointer to an integer of different size
(the pointer is 32 bits, but &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uintmax_t&lt;/code&gt; is 64 bits) fails.&lt;/p&gt;

    &lt;p&gt;Patrick proposed using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%p&lt;/code&gt; as a format specifier saying it might be
a better trade-off. The downside was that the output format would be
unpredictable across platforms as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%p&lt;/code&gt; doesn’t have a standardized
output format. So tests that validated the exact error message
format would have to be dropped. But at least &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%p&lt;/code&gt; would work
everywhere and produce stable output.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, agreed with Patrick that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%p&lt;/code&gt; was
“the most appropriate solution”.&lt;/p&gt;

    &lt;p&gt;Randall then confirmed that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%p&lt;/code&gt; worked on NonStop x86 even if the
man pages warned to the contrary.&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%p&lt;/code&gt; solution was eventually merged to the ‘master’ branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-kristoffer-haugsbakk&quot;&gt;Developer Spotlight: Kristoffer Haugsbakk&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m Kristoffer from Norway. My day job is working on a Java webapp
primarily used for clinical mental health questionnaires.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What would you name your most important contribution to Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;One I like was when I and the mailing list collaborators fixed a bug
related to Git notes handling by &lt;a href=&quot;https://git-scm.com/docs/git-format-patch&quot;&gt;git-format-patch(1)&lt;/a&gt;. It’s
small and niche but Git notes handling is very important to me; I
think Notes are a great way to maintain metadata between patch
submissions. In fact I think it’s great for most commit metadata
that I am interested in maintaining.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What are you doing on the Git project these days, and why?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The one I am focusing on is improving the &lt;a href=&quot;https://git-scm.com/docs/git-patch-id&quot;&gt;git-patch-id(1)&lt;/a&gt;
documentation. It so happens that you can use that command to make a
commit—patch-id mapping for the whole repository, which you then in
turn can use to make an improved &lt;a href=&quot;https://git-scm.com/docs/git-cherry&quot;&gt;git-cherry(1)&lt;/a&gt; oneliner (one
that says what the upstream commit hash is) as well as, say, using
commands like git-range-diff to see if the upstream committer made
any changes to your submission like fixing commit message typos. But
most uses of this command that I see just use it to figure out what
the patch ID of one single commit is and have to script everything
around that, like loop over &lt;a href=&quot;https://git-scm.com/docs/git-rev-list&quot;&gt;git-rev-list(1)&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I would ask them to find a way for projects to define their own
conventions and preferences that can be easily shared with all
contributors. Something better than asking each contributor to
download and install hooks. Projects need a better and more
declarative way to configure how their project is supposed to
work. One example might be that a project does not want merge
commits to land in the mainline. It should be simple to take that
high-level goal and make sure that the in-effect central repository
never gets any merge commits.&lt;/p&gt;

    &lt;p&gt;Git will not be replaced any time soon, despite it being more
difficult to use than it ought to be. But we can already see what
the effects of the high difficulty of using it is: some projects
outsource all commit messages to issue trackers, and change
proposals (pull requests and patch series descriptions) to webapp
forges. (Meaning they don’t even duplicate the PR description
somewhere in Git like in a commit message.)  What you end up with is
still Git but with all the interesting information living at least
one hyperlink away.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I can’t think of a single thing to remove that would have a big
impact.&lt;/p&gt;

    &lt;p&gt;I guess I would remove &lt;a href=&quot;https://git-scm.com/docs/git-filter-branch&quot;&gt;git-filter-branch(1)&lt;/a&gt;. People can use
&lt;a href=&quot;https://github.com/newren/git-filter-repo&quot;&gt;git-filter-repo(1)&lt;/a&gt;. And with that one removed I wouldn’t have to ask
people to not use it any more. ;)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Documentation contributions require understanding both the technical
implementation and the user perspective. How do you approach
bridging that gap? Do you have strategies for ensuring documentation
stays accurate as code evolves?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Most of the challenge in bridging the gap for me is about trying to
describe things accurately while not being tedious and verbose. The
worst challenge is when I realistically have one paragraph to
explain something but there are eight factors to mention. (Not a
real case; just the feeling of a challenge that I have encountered
before.)&lt;/p&gt;

    &lt;p&gt;For things that are either just difficult or have many factors to
consider I think the best approach we have right now is to mention
other documentation pages in parentheses. An obvious candidate is
&lt;a href=&quot;https://git-scm.com/docs/gitglossary&quot;&gt;gitglossary(7)&lt;/a&gt; where we can gather all kinds of jargon and be
as verbose as we want to. :)&lt;/p&gt;

    &lt;p&gt;I don’t have any strategies for ensuring that documentation stays
accurate as code evolves. Let’s take something concrete as an
example: an update to the documentation adds a very similar
paragraph to two documentation pages. That is an obvious maintenance
burden since a later update is likely to necessitate a change in
both places, but you are likely to only deal with one of them. The
obvious fix is to parameterize the paragraph. But I don’t have good
indirect experience with that in &lt;a href=&quot;https://asciidoc.org/&quot;&gt;AsciiDoc&lt;/a&gt;; the last time I saw
something parameterized was when an &lt;a href=&quot;https://asciidoc.org/&quot;&gt;AsciiDoc&lt;/a&gt; macro forced
inline formatting to be handled literally. The cure seems worse than
the disease to me.&lt;/p&gt;

    &lt;p&gt;The best I can do now when making updates is to investigate the
lines that I am changing and find the histories of any possible
near-duplicate texts.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt;. An Emacs Git frontend.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Do you happen to have any memorable experience w.r.t. contributing
to the Git project? If yes, could you share it with us?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;When I added a test case to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t/t7001-mv.sh&lt;/code&gt; that &lt;a href=&quot;https://lore.kernel.org/git/pull.1908.git.1745593515875.gitgitgadget@gmail.com/&quot;&gt;made the continuous
build routine on Windows (CI) time out&lt;/a&gt;. The test was
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_expect_failure&lt;/code&gt; and triggered a C assertion, and the Windows
CI pops up a modal dialog on assertion failures. That dialog is of
course never dismissed by any operator and so the suite eventually
timed out.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I use the builtin commands for making patches and sending them
(&lt;a href=&quot;https://git-scm.com/docs/git-format-patch&quot;&gt;git-format-patch(1)&lt;/a&gt; and &lt;a href=&quot;https://git-scm.com/docs/git-send-email&quot;&gt;git-send-email(1)&lt;/a&gt;). For programming and
writing I use the basic, needed tools along with Emacs. Very
occasionally I will use GDB.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Find something technically wrong in the documentation and fix
it. That’s what I did in 2016; I wanted to test out this new (to me)
“email-based workflow”. Focus on fixing things instead of
subjectively improving something. Because someone might object and
propose that you send a new version. Making subjective documentation
improvements is the next step in terms of difficulty I guess.&lt;/p&gt;

    &lt;p&gt;It sounds trivial but someone used to Git forges will have enough
challenges just sending proper patches to the project over email.&lt;/p&gt;

    &lt;p&gt;Also read through &lt;a href=&quot;https://git-scm.com/docs/SubmittingPatches&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Documentation/SubmittingPatches&lt;/code&gt;&lt;/a&gt;. I don’t
really see many corrections that refer to other documents. You could
of course get a correction that refers to some &lt;a href=&quot;https://lore.kernel.org/git&quot;&gt;&lt;em&gt;lore&lt;/em&gt;&lt;/a&gt; but that
is unlikely to happen for simple changes if you just structure it
similar to recent, accepted submissions that you find.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;You won’t get any C programming tips from me since I can’t write or
edit three lines of C code without segfaulting five times.&lt;/p&gt;

    &lt;p&gt;Take advantage of the fact that the Git history is so
well-structured. Maybe you find some questionable behavior or
code. Use the “pickaxe” technique (see &lt;a href=&quot;https://git-scm.com/docs/git-log#Documentation/git-log.txt--Gregex&quot;&gt;git-log(1)&lt;/a&gt;) on some
good candidate text and trace the behavior back to the start. Maybe
the commit message explains the issue or behavior. If not use
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;refs/notes/amlog&lt;/code&gt; (which you should be “subscribed” to already) and
see if something relevant was discussed on the patch discussion. If
not there is likely to be no written record out there; another thing
that this project is disciplined about is keeping the relevant
discussion on the mailing list, not the mailing list and N other
satellite fora.&lt;/p&gt;

    &lt;p&gt;Those links (to commits and archived emails) are very valuable when
you want to discuss a change to something that has been in
&lt;a href=&quot;https://git-scm.com/docs/git&quot;&gt;git(1)&lt;/a&gt; for years and years.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1042172/&quot;&gt;Git considers SHA-256, Rust, LLMs, and more&lt;/a&gt;
by Jonathan Corbet on LWN.net.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/news/Git-3.0-Release-Talk-2026&quot;&gt;Git Developers Talk About Potentially Releasing Git 3.0 By The End Of Next Year&lt;/a&gt;
by  Michael Larabel on Phoronix.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.redhotcyber.com/en/post/github-is-migrating-to-azure-and-goodbye-to-new-development-for-a-year/&quot;&gt;GitHub is migrating to Azure! And goodbye to new development for a year.&lt;/a&gt;
by Redazione RHC on Red Hot Cyber.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fedoramagazine.org/fedora-moves-towards-forgejo-a-unified-decision/&quot;&gt;Fedora Moves Towards Forgejo&lt;/a&gt;
by Matthew Miller and Akashdeep Dhar on December 4, 2024
in Fedora Magazine.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://forgejo.org/&quot;&gt;Forgejo&lt;/a&gt; is a self-hosted lightweight software forge,
written in Go; nowadays a hard fork of Gitea (which in turn was based on Gogs).
It was first mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News Edition #103&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://anirudh.fi/future&quot;&gt;Building for the future: on Tangled’s existence and direction&lt;/a&gt;
by Anirudh Oppiliappan on their blog;
also published &lt;a href=&quot;https://icy.leaflet.pub/3m47cll72hs25&quot;&gt;at icy takes blog&lt;/a&gt; on ATProto.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.tangled.sh/intro&quot;&gt;Tangled.sh&lt;/a&gt; is a new social-enabled Git collaboration platform
built on top of the AT Protocol / ATProto
(which is behind the &lt;a href=&quot;https://bsky.app/&quot;&gt;BlueSky&lt;/a&gt; microblogging federated social media service).
It was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/07/31/edition-125/&quot;&gt;Git Rev News Edition #125&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.tangled.org/6-months&quot;&gt;6 months of Tangled: a quick recap, and notes on the future&lt;/a&gt;
by Anirudh Oppiliappan and Akshay Oppiliappan on Tangled Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://anil.recoil.org/notes/disentangling-git-with-bluesky&quot;&gt;Socially self-hosting source code with Tangled on Bluesky&lt;/a&gt;
by Anil Madhavapeddy, Professor of Planetary Computing, on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fiatjaf.com/18ff5416.html&quot;&gt;Redistributing Git with Nostr&lt;/a&gt;
by início on their blog.
    &lt;ul&gt;
      &lt;li&gt;There exists &lt;a href=&quot;https://github.com/fiatjaf/gitstr&quot;&gt;gitstr (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git str&lt;/code&gt;)&lt;/a&gt;,
which is a tool to send and receive Git patches
over &lt;a href=&quot;https://nostr.com/&quot;&gt;Nostr&lt;/a&gt;, using &lt;a href=&quot;https://github.com/nostr-protocol/nips/pull/997&quot;&gt;NIP-34&lt;/a&gt;
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/03/31/edition-109/&quot;&gt;Git Rev News Edition #109&lt;/a&gt;).&lt;/li&gt;
      &lt;li&gt;Note that &lt;a href=&quot;https://github.com/hickford/git-credential-oauth&quot;&gt;git-credential-oauth&lt;/a&gt;,
a Git credential helper that securely authenticates to GitHub, GitLab, BitBucket and Gerrit
using &lt;a href=&quot;https://datatracker.ietf.org/wg/oauth/about/&quot;&gt;OAuth&lt;/a&gt;,
can replace the “create an account; pick a password; confirm an email address; set up SSH keys for pushing” steps.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoworld.com/article/4069045/how-github-won-software-development.html&quot;&gt;How GitHub won software development&lt;/a&gt;
by Nick Hodges on Rubber Duck Reflections opinions blog on InfoWorld.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://maurycyz.com/misc/easy_git/&quot;&gt;You already have a git server&lt;/a&gt;
on Maurycy’s blog;
describes how one can serve Git repositories via SSH (with SSH access)
or via dumb HTTP (with a web server).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://garrido.io/notes/simple-automated-deployments-git-push/&quot;&gt;Simple automated deployments using git push&lt;/a&gt;
by Gabriel Garrido on his blogs / notes (2024).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://yeldirium.de/2025/10/09/pre-commit-hooks/index.html&quot;&gt;Discussion of the Benefits and Drawbacks of the Git Pre-Commit Hook&lt;/a&gt;
by Hannes Leutloff on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jvns.ca/til/fzf-preview-git-commits/&quot;&gt;You can use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fzf&lt;/code&gt; to review git commits&lt;/a&gt;
by Julia Evans in her TIL (Today I’ve Learned) section.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://seb.jambor.dev/posts/improving-shell-workflows-with-fzf/&quot;&gt;Improving shell workflows with fzf&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/04/30/edition-74/&quot;&gt;Git Rev News Edition #74&lt;/a&gt;, and
&lt;a href=&quot;https://oppi.li/posts/curing_a_case_of_git-UX/&quot;&gt;Curing A Case Of Git-UX&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/08/31/edition-126/&quot;&gt;Git Rev News Edition #126&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.stavros.io/posts/switch-to-jujutsu-already-a-tutorial/&quot;&gt;Switch to Jujutsu already: a tutorial&lt;/a&gt;
by Stavros on Stavros’ Stuff.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://jj-vcs.github.io/jj/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; is a Git-compatible version control system
written in Rust, which was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://heiwiper.com/posts/magit-is-awesome/&quot;&gt;Magit Is Amazing!&lt;/a&gt;
by Abdallah Maouche (heiwiper) on his blog
(how it does things that others need to use Jujutsu over Git for).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt; is a popular &lt;a href=&quot;https://www.gnu.org/software/emacs&quot;&gt;Emacs&lt;/a&gt; editor interface to Git,
first mentioned (in passing) in &lt;a href=&quot;https://git.github.io/rev_news/2015/08/05/edition-6/&quot;&gt;Git Rev News Edition #6&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://engineering.fb.com/2025/10/16/developer-tools/branching-in-a-sapling-monorepo/&quot;&gt;Branching in a Sapling Monorepo&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://sapling-scm.com/&quot;&gt;Sapling&lt;/a&gt; is a scalable, user-friendly, and open-source source control system
that powers Meta’s (Facebook’s) monorepo.
It was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/11/30/edition-93/&quot;&gt;Git Rev News Edition #93&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/dolig/stop-rebasing-everything-your-git-history-isnt-that-special-ln3&quot;&gt;Stop Rebasing Everything: Your Git History Isn’t That Special&lt;/a&gt;,
an argument in the merge-vs-rebase debate.
by Guillaume on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://flo.znkr.io/diff/&quot;&gt;Diff Algorithms&lt;/a&gt;
by Florian Zenker on his website.&lt;br /&gt;
The result of this exploration was &lt;a href=&quot;https://znkr.io/diff&quot;&gt;znkr.io/diff&lt;/a&gt;,
a difference algorithm module for Go.
    &lt;ul&gt;
      &lt;li&gt;Note that with &lt;a href=&quot;https://git-scm.com/docs/git-diff&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt;&lt;/a&gt;
you can choose between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;myers&lt;/code&gt; (default), &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;minimal&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;patience&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;histogram&lt;/code&gt; algorithms.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://qsantos.fr/2024/05/01/git-super-power-the-three-way-merge/&quot;&gt;Git Super-Power: The Three-Way Merge&lt;/a&gt;
by Quentin Santos on his blog (2024).&lt;br /&gt;
Provides the following tl;dr: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config --global merge.conflictstyle diff3&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.nickyt.co/blog/anyone-can-commit-code-as-you-on-github-heres-how-to-stop-them-2in7/&quot;&gt;Anyone Can Commit Code as You on GitHub (Here’s How to Stop Them)&lt;/a&gt;
with signed commits (with tutorial focusing on macOS using GPG Keychain).
Written by Nick Taylor on his Just Some Dev blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dbushell.com/2025/08/11/github-ensloppification/&quot;&gt;GitHub Ensloppification&lt;/a&gt;
by David Bushell on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mistys-internet.website/blog/blog/2024/07/12/github-is-starting-to-feel-like-legacy-software/&quot;&gt;“GitHub” Is Starting to Feel Like Legacy Software&lt;/a&gt;
rant by Misty De Méo on her blog (2024).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://heristop.github.io/blog/2024-07-09-conventional-commit-jira/&quot;&gt;Implementing Conventional Commits with Jira Ticket Prefix Validation&lt;/a&gt;
by Alexandre Mogère (heristop) on Zazen Code.
    &lt;ul&gt;
      &lt;li&gt;The &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; specification
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;,
and in many editions since.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://larr.net/p/cc.html&quot;&gt;Conventional Commits considered harmful&lt;/a&gt;
(or rather overly strict enforcement of the standard),
rant by Salih Muhammed, with a few further links.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jtemporal.com/contribute-to-gitfichas/&quot;&gt;Contribute to GitFichas&lt;/a&gt;
by Jessica Temporal on her blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://gitfichas.com/en&quot;&gt;GitFichas&lt;/a&gt; (also know as GitStudyCards)
is a collection of study cards about Git,
for devs that might need a refresher about Git commands.
Mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/09/30/edition-127/&quot;&gt;the previous edition of Git Rev News&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLySCWiWz9cNuiJK2Uy3foHGvkxL3fBLUC&quot;&gt;Gerrit User Summit 2025, featuring also GitButler and Jujutsu&lt;/a&gt;
by Luca Milanesio on GerritForge’s YouTube channel.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=v9Ob5yPpC0A&amp;amp;list=PLOU2XLYxmsILM5cRwAK6yKdtKnCK6Y4Oh&amp;amp;index=8&quot;&gt;Jujutsu at Google&lt;/a&gt;
(&lt;a href=&quot;https://drive.google.com/file/d/1dVzug1lHoOxdbFu8gcCJCu-G_uVMUATI/edit&quot;&gt;slides&lt;/a&gt;)
on Google for Developers channel on YouTube;
part of &lt;a href=&quot;https://www.youtube.com/playlist?list=PLOU2XLYxmsILM5cRwAK6yKdtKnCK6Y4Oh&quot;&gt;JJ Con 2025 playlist&lt;/a&gt;.&lt;br /&gt;
In this talk, Martin von Zweigbergk presents
on Jujutsu architecture and future plans.&lt;br /&gt;
JJ Con 2025 was a dedicated conference hosted by Google
for the &lt;a href=&quot;https://jj-vcs.github.io/jj/latest/&quot;&gt;Jujutsu&lt;/a&gt; version control system.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ulJ_Pw8qqsE&quot;&gt;Solving Git’s Pain Points with Jujutsu (with Martin von Zweigbergk)&lt;/a&gt;
on Developer Voices channel on YouTube.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Scientific papers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ya-Nan Li, Yaqing Song, Qiang Tang, Moti Yung:
&lt;em&gt;“End-to-End Encrypted Git Services”&lt;/em&gt;,
Cryptology {ePrint} Archive, Paper 2025/1208,
&lt;a href=&quot;https://eprint.iacr.org/2025/1208&quot;&gt;https://eprint.iacr.org/2025/1208&lt;/a&gt;,
DOI:10.1145/3719027.3744815
    &lt;ul&gt;
      &lt;li&gt;See &lt;a href=&quot;https://techxplore.com/news/2025-10-scientists-encryption-git.html&quot;&gt;&lt;em&gt;“Scientists develop end-to-end encryption for git services”&lt;/em&gt;&lt;/a&gt;
article by University of Sydney, edited by Stephanie Baum, reviewed by Robert Egan,
on TechXplore.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;S.R.P. van Hal, M. Post, K. Wendel:
&lt;em&gt;“Generating Commit Messages from Git Diffs”&lt;/em&gt;,
&lt;a href=&quot;https://arxiv.org/abs/1911.11690&quot;&gt;arXiv:1911.11690&lt;/a&gt; (2019)&lt;br /&gt;
mentions “inherent shortcoming of current commit message generation models,
which perform well by memorizing certain constructs.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://git.sr.ht/~nhaehnle/diff-modulo-base&quot;&gt;diff-modulo-base&lt;/a&gt;
is a tool that allows you to compare the relevant changes
of two versions of a rebased branch given three input diffs:
two &lt;em&gt;base&lt;/em&gt; diffs that show the changes since the respective merge bases
and a &lt;em&gt;target&lt;/em&gt; diff between the branches you are actually interested in.&lt;/p&gt;

    &lt;p&gt;It is very similar to (and actually builds on) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git range-diff&lt;/code&gt;,
but differs in resulting output.
Written in Rust, under MIT License.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jarredkenny/worktree-manager&quot;&gt;Worktree Manager&lt;/a&gt; (wtm)
is a fast, modern CLI tool for managing Git worktrees in bare repositories.
Written in TypeScript for Bun, under MIT License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jdrouet/git-metrics&quot;&gt;git-metrics&lt;/a&gt;
is a Git extension that makes it possible to track metrics about your project,
which are stored within the git repository (using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git notes&lt;/code&gt;).
Written in Rust, under MIT License.&lt;br /&gt;
Described in &lt;a href=&quot;https://dev.to/jdrouet/build-metrics-and-budgets-with-git-metrics-4pb4&quot;&gt;Build metrics and budgets with git-metrics&lt;/a&gt;
article by Jérémie Drouet on DEV.to (2024).
    &lt;ul&gt;
      &lt;li&gt;There is another &lt;a href=&quot;https://github.com/Praqma/git-metrics&quot;&gt;git-metrics&lt;/a&gt; tool,
by the Praqma / Eficode DevOps company,
which consists of a set of scripts to analyse a Git repository for metrics
such as lead time and open branches.  Written in Python, no license provided.
It was mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Git Rev News Edition #48&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://abhinav.github.io/git-spice/&quot;&gt;git-spice&lt;/a&gt; is a tool for stacking Git branches.
It lets you manage and navigate stacks of branches, conveniently modify and rebase them,
and create GitHub Pull Requests or GitLab Merge Requests from them.
Written in Go, under GPL 3.0 License.
    &lt;ul&gt;
      &lt;li&gt;A &lt;em&gt;stacked branch&lt;/em&gt; refers to a set of branches that build upon each other in a linear sequence.
Stacked branches or stacked diffs were first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/10/24/edition-44/&quot;&gt;Git Rev News #44&lt;/a&gt;,
and most recently in &lt;a href=&quot;https://git.github.io/rev_news/2025/09/30/edition-127/&quot;&gt;Git Rev News #127&lt;/a&gt;,
where you can find even more links about this technique.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.dbushell.com/dbushell/granary&quot;&gt;Git Granary&lt;/a&gt;
is a &lt;a href=&quot;https://git-lfs.com/&quot;&gt;Git Large File Storage&lt;/a&gt; (LFS)
server implementation written in TypeScript.  Under MIT License.
Git Granary was designed for self-hosted personal use.&lt;br /&gt;
See &lt;a href=&quot;https://dbushell.com/2024/07/25/git-granary/&quot;&gt;Git Granary&lt;/a&gt;
blog post by David Bushell on his blog (2024).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ytreister/gibr&quot;&gt;gibr&lt;/a&gt; is a Git CLI tool
for intelligently creating branch names.
It connects your Git workflow to your issue tracker for that purpose;
currently supporting GitHub, GitLab, Jira, and Linear
(with Monday.com support planned).
Written in Python, under MIT License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://0github.com/&quot;&gt;0github.com&lt;/a&gt;
is a service offering a heatmap diff viewer for code reviews,
color-coding every diff line/token by how much human attention it probably needs.
To try it, replace github.com with 0github.com in any GitHub pull request URL.
The &lt;a href=&quot;https://cmux.dev/&quot;&gt;cmux&lt;/a&gt; engine it uses is open source (MIT License).
It uses a LLM (Large Language Model) to perform this task.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://lore.kernel.org/git/xmqqo6psjq2n.fsf@gitster.g/&quot;&gt;2.51.2&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/xmqqa51suhh5.fsf@gitster.g/&quot;&gt;2.51.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.51.2.windows.1&quot;&gt;v2.51.2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.51.1.windows.1&quot;&gt;v2.51.1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.51.0.windows.2&quot;&gt;v2.51.0(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.18/admin/release-notes#3.18.0&quot;&gt;3.18.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/10/22/patch-release-gitlab-18-5-1-released/&quot;&gt;18.5.1, 18.4.3, 18.3.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/10/16/gitlab-18-5-released/&quot;&gt;18.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/10/08/patch-release-gitlab-18-4-2-released/&quot;&gt;18.4.2, 18.3.4, 18.2.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3109&quot;&gt;3.10.9&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3130&quot;&gt;3.13.0-rc0&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3130&quot;&gt;3.13.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3130&quot;&gt;3.13.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3130&quot;&gt;3.13.0-rc3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3130&quot;&gt;3.13.0-rc4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3130&quot;&gt;3.13.0-rc5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-desktop/current/&quot;&gt;11.5.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-desktop/current/&quot;&gt;11.5.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.5.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.16.0&quot;&gt;4.16.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.16.10&quot;&gt;0.16.10&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.16.9&quot;&gt;0.16.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Kinetic Merge &lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.10.0&quot;&gt;1.10.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.9.1&quot;&gt;1.9.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Kristoffer Haugsbakk, Lee Reilly,
Luca Milanesio and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 127 (September 30th, 2025)</title>
      <link>https://git.github.io/rev_news/2025/09/30/edition-127/</link>
      <pubDate>Tue, 30 Sep 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/09/30/edition-127/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-127-september-30th-2025&quot;&gt;Git Rev News: Edition 127 (September 30th, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 127th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of August and September 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/79ed51fbd94ec2793ab0388b33963b366e48c590.camel@aegee.org/&quot;&gt;Doing blobless clone by default; switching between blobless, treeless and full clones by a command&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Dilyan Palauzov (Дилян Палаузов) sent an email to the Git mailing
list where he proposed making blobless cloning
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--filter=blob:none&lt;/code&gt;) the default behavior for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; via a
global configuration option. He also suggested adding a command to
download all locally missing history, a command to convert a
repository to a pure treeless or pure blobless clone, and a config
option to make blobless clone the default behavior when running just
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone &amp;lt;URL&amp;gt;&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;He said that most users used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; to build or change software, not to
immediately analyze history with commands like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;. Therefore,
a reduced data download would speed up initialization, save
bandwidth, and reduce server load.&lt;/p&gt;

    &lt;p&gt;Kristoffer Haugsbakk replied saying the proposed command to
“download all locally missing history” for treeless and blobless
clones “sounds like git-backfill(1)”. He also noted that he had
“never used blob/treeless” clones himself.&lt;/p&gt;

    &lt;p&gt;Derrick Stolee, who likes to be called just “Stolee”, and who
contributed the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git backfill&lt;/code&gt; command, replied to Kristoffer
confirming that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git backfill&lt;/code&gt; is intended to assist with downloading
the missing blobs in a blobless partial clone.&lt;/p&gt;

    &lt;p&gt;About treeless clones though, he noted that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git backfill&lt;/code&gt; is not
optimized for them, and that treeless clones are generally not
intended for “refilling,” as downloading missing trees is
“particularly expensive”.&lt;/p&gt;

    &lt;p&gt;Stolee suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalar clone&lt;/code&gt;, which is already shipped with
Git, instead of making blobless cloning the default, as
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalar clone&lt;/code&gt; was contributed partly to allow users to opt into a
version of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; that incorporates “best practices and
advanced features as they are developed”, while &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt;
maintains backward compatibility. He recognized that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalar clone&lt;/code&gt;
might not be “discoverable enough” though.&lt;/p&gt;

    &lt;p&gt;Junio Hamano replied to Stolee’s suggestion that a future command
like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git big-clone&lt;/code&gt; could emerge from the feedback on
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scalar clone&lt;/code&gt;. He said a separate command like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git big-clone&lt;/code&gt;
would not be discoverable enough either. Instead as a new feature
matures, it should be a welcome change for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; to borrow it
as a new option. Such optimizations (like those for large repos)
could be automatically enabled based on the repository’s size,
provided it was done with end-user consent.&lt;/p&gt;

    &lt;p&gt;Patrick Steinhardt replied to Stolee about treeless clones. He
agreed that the existing command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git backfill&lt;/code&gt; is not optimized for
refilling treeless clones, and proposed an idea to backfill trees by
batching based on depth, but concluded that this method was
“definitely not ideal” and would perform “way worse compared to
backfilling blobs”.&lt;/p&gt;

    &lt;p&gt;Patrick also said that for these reasons he generally recommends not
to use treeless clones at all.&lt;/p&gt;

    &lt;p&gt;Stolee replied to Patrick agreeing with the general caution
regarding treeless clones, and that they were “not a good approach
for doing ongoing work as a human”.&lt;/p&gt;

    &lt;p&gt;However he noted that they are useful if a user needs the speed of a
shallow clone combined with the ability to analyze commit history
(though with no path history) for an “ephemeral scenario like a CI
build”. But they are a “tool for a very narrow case” and should only
be used by those who understand how to avoid their pitfalls. Patrick
then agreed with that point of view.&lt;/p&gt;

    &lt;p&gt;Konstantin Ryabitsev, the system administrator for kernel.org,
replied to the original email from Dilyan about making blobless
clones the default behavior for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt;. He said a
counter-rationale to this proposal was that shallow clones (which
include blobless clones) generate significantly more load on the
server side.&lt;/p&gt;

    &lt;p&gt;The reason is that for these partial clones, no pre-existing packs
are available for the operation, requiring more computation from the
server. So changing the default behavior for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; could
likely result in slower clones for everyone and lead to more
unavailable servers due to the high load.&lt;/p&gt;

    &lt;p&gt;Ben Knoble also replied to Dilyan’s original email by opposing the
proposal to make blobless clones the default behavior while agreeing
that managing this preference via a config option was a reasonable
compromise.&lt;/p&gt;

    &lt;p&gt;Ben’s opinion was that such a default behavior would defeat the
“tremendous advantage of distributed version control”, which is about
having the whole repository available independently. It would also
make some of his use cases more difficult as he frequently clones
repositories specifically to run “history spelunking searches”.&lt;/p&gt;

    &lt;p&gt;He noted that he primarily deals with repositories where the issue
isn’t about clones, but about mismanaging large binary files in
history, which causes large blobs and clone times.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-toon-claes&quot;&gt;Developer Spotlight: Toon Claes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m Toon from Belgium. My name is pronounced like “tone” (rhymes with
“bone”), and not like the “toon” in “cartoon”, but usually I’m already
happy if people remember my name 😉.&lt;/p&gt;

    &lt;p&gt;I’m employed by GitLab for more than 8 years, and since late 2024 I’ve
been part of the Git team, contributing to the Git project. I’ve started
my professional career in 2008 building software for a payment terminal
running embedded GNU/Linux using C &amp;amp; C++. Later I’ve transitioned into
doing web and mobile development for a while. And now recently, I’ve
been circling back to more lower-level programming, contributing to Git
using C.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What would you name your most important contribution to Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m fairly new in the Git community, but recently I’ve been working on
adding &lt;a href=&quot;https://git.github.io/htmldocs/git-last-modified.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git last-modified&lt;/code&gt;(1)&lt;/a&gt;.
It’s a sub-command that will be released in Git v2.52. This command
finds the commit that last modified each path in a tree. It can
be used on forges (like GitLab, GitHub, Codeberg), to show commit
data in a tree view.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What are you doing on the Git project these days, and why?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The subcommand &lt;a href=&quot;https://git.github.io/htmldocs/git-last-modified.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git last-modified&lt;/code&gt;(1)&lt;/a&gt;
was recently merged in the ‘master’. But there’s more work to be
done to improve its performance.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Once data is committed to Git, and it’s made part of the history (i.e.
committed or merged into the default branch), it’s trapped forever. This
is a core principle of Git: you cannot rewrite history without changing
commit hashes. This is very powerful, but also problematic in some
scenarios.&lt;/p&gt;

    &lt;p&gt;For example, at my $DAYJOB we receive commonly the request from
customers to remove confidential or sensitive information from a Git
repository. This is not possible without rewriting history. Or when, by
accident, large files are committed to Git, you cannot get them out
(without rewriting history). Or people might want to remove/change
their personal information in a repository, for example when they
transition genders.&lt;/p&gt;

    &lt;p&gt;Can we (and should we?) build something that removes and overwrites
pieces of history, without changing commit hashes? It’s a slippery
slope, because from experience I know Git users are very creative and
might use this feature in ways it was not intended for.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;The use of the double &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;..&lt;/code&gt; and triple &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;...&lt;/code&gt; dot notation in
&lt;a href=&quot;https://git-scm.com/docs/gitrevisions#_dotted_range_notations&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gitrevisions(7)&lt;/code&gt;&lt;/a&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff(1)&lt;/code&gt;. I even once ranted about it in &lt;a href=&quot;https://www.youtube.com/watch?v=phThP8DwJVs&quot;&gt;a video&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of
Git itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m a big fan of &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt;. It’s arguably the best tool to interact
with Git and I also learned a lot from it. I consider myself an
advanced Git user, but I wouldn’t be able to split up changes in
several commits without &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Do you happen to have any memorable experience w.r.t. contributing
to the Git project? If yes, could you share it with us?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;One of my earliest contributions to Git was a bug fix in the code used
by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bundle create&lt;/code&gt;. We noticed sometimes references didn’t end up in
the bundle. After a lot of digging I submitted a patch that removed
about 30 lines of code written way back in 2007. The code from 2007
caused references to be skipped if they were modified while the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bundle create&lt;/code&gt; process was running. But it wasn’t needed anymore
due some changes made in 2013, although no one ever realized that.
You can read more about it &lt;a href=&quot;https://lore.kernel.org/git/20241211-fix-bundle-create-race-v3-1-0587f6f9db1b@iotcl.com/&quot;&gt;in the patch&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;It was really satisfying to submit a patch that was nothing more than
code deletion of really old code (and adding some tests). And it taught
me to write a good commit message, which I was praised for by
&lt;a href=&quot;https://lore.kernel.org/git/xmqqzfl4l22t.fsf@gitster.g/&quot;&gt;the maintainer&lt;/a&gt;. It was a very nice experience as a newcomer in the
community.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I mostly live in Emacs and my terminal (zsh). I consume email in Emacs
using &lt;a href=&quot;https://notmuchmail.org/doc/latest/notmuch-emacs.html&quot;&gt;notmuch&lt;/a&gt;. To submit patches I use &lt;a href=&quot;https://github.com/mricon/b4&quot;&gt;b4&lt;/a&gt;, which I also
sometimes use to pull in patches. But I also sometimes pull in
the branches from &lt;a href=&quot;https://github.com/gitster/git&quot;&gt;Junio’s fork&lt;/a&gt; or the fork shared across
my colleagues.&lt;/p&gt;

    &lt;p&gt;In Git, I compile and unit test changes using Meson. Its use was
introduced in the Git project around the &lt;a href=&quot;https://lore.kernel.org/git/20241206-pks-meson-v11-0-525ed4792b88@pks.im/&quot;&gt;end of 2024&lt;/a&gt;. It’s
reliable because it prevents me from forgetting to recompile
before running tests; it’s fast because it parallelizes compilation
by default and automatically &lt;a href=&quot;https://mesonbuild.com/Feature-autodetection.html#ccache&quot;&gt;uses Ccache&lt;/a&gt;; it allows out-of-tree
builds, which is really convenient if you want to benchmark various
revisions of Git.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Learn to navigate &lt;a href=&quot;https://lore.kernel.org/git&quot;&gt;the mailing list archive&lt;/a&gt;. It lacks structure so
things can be hard to find, but there’s so much information up there. If
you’re interested in a topic, or you think you’ve found the bug, start digging.
Use &lt;a href=&quot;https://git-scm.com/docs/git-blame&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame(1)&lt;/code&gt;&lt;/a&gt; to find the commit that introduced the changes
and look up the conversation around it in the mailing list archive.
This will help you understand why some decisions are made. Also it
familiarizes you with the people in the community, how they think,
how they communicate, and what’s expected from you. Having the
knowledge from those conversations can help you build a strong case
whenever you’re submitting a feature change or bug fix.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/whats-next-for-git-20-years-in-the-community-is-still-pushing-forward/&quot;&gt;What’s next for Git? 20 years in, the community is still pushing forward&lt;/a&gt;
by Lee Reilly on GitHub Blog - mainly about
the &lt;a href=&quot;https://git-merge.com/#speakers&quot;&gt;Git Merge 2025 talks lineup&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/news/Git-Weighs-Mandatory-Rust&quot;&gt;Git Developers Debate Making Rust Mandatory&lt;/a&gt;
by Michael Larabel on Phoronix.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1037069/&quot;&gt;A policy for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Link:&lt;/code&gt; tags&lt;/a&gt; (for Linux),
by Jonathan Corbet on LWN.net.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7378744230275350528/&quot;&gt;Working almost continuously for six months&lt;/a&gt;, Yasin Dehfuli completed the &lt;a href=&quot;https://git-scm.com/book/fa/v2&quot;&gt;Persian translation of the ProGit book&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;An initiative &lt;a href=&quot;https://github.com/git/git-scm.com/issues/2046&quot;&gt;to refresh the look and content of https://git-scm.com/&lt;/a&gt; has been kicked off by Toon Claes. Contributions welcome, especially from visual designers!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/git-flow-next&quot;&gt;git-flow-next: The Next Iteration of Advanced Git Workflows&lt;/a&gt;
by Bruno Brito on Tower Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://benknoble.github.io/blog/2025/09/17/blame/&quot;&gt;A kludgy new way to git-blame&lt;/a&gt;
by D. Ben Knoble on his Junk Drawer personal blog,
about the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-greb&lt;/code&gt; script that feeds &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt;
(with appropriate options) in order to blame matching lines.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.plover.com/2025/09/21/#what-changed-twice&quot;&gt;My new git utility &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;what-changed-twice&lt;/code&gt; needs a new name&lt;/a&gt;
by Mark Dominus (陶敏修) on his The Universe of Discourse blog,
about the tool to help get related changes into the same commit.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/supercharge-your-git-workflows/&quot;&gt;Supercharge your Git workflows&lt;/a&gt;
by Darwin Sanoy on GitLab Blog, about how to
optimize &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; operations in any environment, reducing clone time and disk space,
with the &lt;a href=&quot;https://gitlab.com/gitlab-accelerates-embedded/misc/git-much-faster&quot;&gt;Git Much Faster&lt;/a&gt; script.
    &lt;ul&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://github.com/microsoft/scalar&quot;&gt;Scalar&lt;/a&gt;,
a tool that helps Git scale to handle large Git repositories
by enabling some advanced Git features.
Scalar was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News Edition #60&lt;/a&gt;,
and now is part of Git: &lt;a href=&quot;https://git-scm.com/docs/scalar&quot;&gt;scalar - A tool for managing large Git repositories&lt;/a&gt;.
&lt;a href=&quot;https://github.blog/2022-10-13-the-story-of-scalar/&quot;&gt;The Story of Scalar&lt;/a&gt;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/10/26/edition-92/&quot;&gt;Edition #92&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mergify.com/blog/the-origin-story-of-merge-queues&quot;&gt;The Origin Story of Merge Queues&lt;/a&gt;
by Julien Danjou on Mergify Blog.
This article traces merge queues history
(from Bors and Homu to Bulldozer, Kodiak, Mergify, GitHub and GitLab),
why they emerged, and how they became a standard in modern software development.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://mergify.com/&quot;&gt;Mergify.com&lt;/a&gt;,
a web service for automating pull requests (free for open-source projects),
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/05/26/edition-87/&quot;&gt;Git Rev News Edition #87&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/rubansi/git-fun-fact-45de&quot;&gt;Git - Fun Facts&lt;/a&gt;
by Rubansi Vincent on DEV.to:
a mix of fun and surprising facts about Git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://neugierig.org/software/blog/2025/08/jj-binary-stat.html&quot;&gt;diff –stat for binary files (in the Jujutsu version control system)&lt;/a&gt;
by Evan Martin on neugierig.org: Tech Notes.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://jj-vcs.github.io/jj/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; is a Git-compatible version control system
written in Rust, first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://maddie.wtf/posts/2025-07-21-jujutsu-for-busy-devs/entry/1&quot;&gt;Jujutsu For Busy Devs, Part 2: “How Do I…?”&lt;/a&gt;
by Madeleine Mortensen, continues the &lt;a href=&quot;https://maddie.wtf/posts/2025-07-21-jujutsu-for-busy-devs&quot;&gt;Jujutsu For Busy Devs&lt;/a&gt;
series, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/07/31/edition-125/&quot;&gt;Git Rev News Edition #125&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.yossarian.net/2025/09/22/dear-github-no-yaml-anchors&quot;&gt;Dear GitHub: no YAML anchors, please&lt;/a&gt;
by William Woodruff (yossarian) on his ENOSUCHBLOG blog.
He says that they are redundant with existing functionality,
make CI/CD human and machine comprehension harder,
and their support in GitHub Actions does not introduce any new, previously unavailable features.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.rahuljuliato.com/posts/vc-git-functions&quot;&gt;Custom VC-Focused Emacs Functions I Created to Enhance My Git Workflow&lt;/a&gt;
by Rahul M. Juliato on Rahul’s Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://whitep4nth3r.com/blog/how-to-delete-all-squash-merged-local-git-branches-with-one-terminal-command/&quot;&gt;How to delete all squash-merged local git branches with one terminal command&lt;/a&gt;
(which you probably shouldn’t use),
by Salma Alam-Naylor on her blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://kjelsrud.dev/blog/finding-deleted-content-using-git-logs/&quot;&gt;finding deleted content using git logs&lt;/a&gt;
by Sindre Kjelsrud, also known as “Sid”, on Sids’ blog:
a short note on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -S&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://marijkeluttekes.dev/blog/articles/2025/09/03/git-exclude-a-handy-feature-you-might-not-know-about/&quot;&gt;Git exclude, a handy feature you might not know about&lt;/a&gt;
by Marijke Luttekes on her blog, about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/info/exclude&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://zanshin.net/2025/09/02/git-dual-remotes/&quot;&gt;Git Dual Remotes&lt;/a&gt;:
a short note by Mark H. Nichols on his Zanshin.net personal site,
about the difference between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt; with multiple URLs,
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj git push --all-remotes&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://msfjarvis.dev/posts/migrating-from-gitea-to-forgejo-the-long-way/&quot;&gt;Migrating from Gitea to Forgejo the long way&lt;/a&gt;
by Harsh Shandilya on his blog.&lt;br /&gt;
&lt;a href=&quot;https://about.gitea.com/&quot;&gt;Gitea&lt;/a&gt; and &lt;a href=&quot;https://forgejo.org/&quot;&gt;Forgejo&lt;/a&gt; are software forges.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://shkspr.mobi/blog/2025/09/some-thoughts-on-personal-git-hosting/&quot;&gt;Some thoughts on personal git hosting&lt;/a&gt;
by Terence Eden on Terence Eden’s Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.sixfoisneuf.fr/posts/setting-up-cgit-with-caddy2/&quot;&gt;Setting up cgit with Caddy v2 web server&lt;/a&gt;
by Simon Garrelou on his SixFoisNeuf blog (2022).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.eric-fritz.com/articles/sourcegraph-went-dark/&quot;&gt;Sourcegraph went dark&lt;/a&gt;
by Eric Fritz on his blog (2024),
about the work that went into ensuring that references are kept alive
after the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sourcegraph/sourcegraph&lt;/code&gt; repository went private
(there is a public snapshot available at &lt;a href=&quot;https://github.com/sourcegraph/sourcegraph-public-snapshot&quot;&gt;sourcegraph/sourcegraph-public-snapshot&lt;/a&gt;,
which is a read-only archived repository).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://graphite.dev/blog/stacked-prs&quot;&gt;How to use stacked PRs to unblock your entire team&lt;/a&gt;
by Ninad Pathak on Graphite Blog (2024), and&lt;br /&gt;
&lt;a href=&quot;https://dev.to/semgrep/a-guide-to-using-graphites-stacked-prs-for-github-users-5c47&quot;&gt;A guide to using Graphite’s stacked PRs for GitHub users&lt;/a&gt;
by Martin Jambon for Semgrep on DEV.to.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://blog.gitbutler.com/stacked-branches-with-gitbutler/&quot;&gt;Stacked Branches with GitButler&lt;/a&gt;
by Scott Chacon on the GitButler Blog,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/12/31/edition-118/&quot;&gt;Git Rev News Edition #118&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://www.git-tower.com/blog/stacked-prs/&quot;&gt;Understanding the Stacked Pull Requests Workflow&lt;/a&gt; by Bruno Brito on Tower’s blog,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/05/31/edition-111/&quot;&gt;Git Rev News Edition #111&lt;/a&gt;
together with various other articles and tools about stacked diffs, stacked PRs, and stacked branches.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://www.aviator.co/blog/rethinking-code-reviews-with-stacked-prs/#&quot;&gt;Rethinking code reviews with stacked PRs&lt;/a&gt;
by Ankit Jain on the Aviator blog,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/09/30/edition-115/&quot;&gt;Git Rev News Edition #115&lt;/a&gt;
with links to more sites and tools related to stacked PRs, etc.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/gitbutlers-new-patch-based-code-review&quot;&gt;GitButler’s new patch based Code Review (Beta)&lt;/a&gt;
by Scott Chacon on GitButler’s Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dotat.at/@/2025-09-11-cover-letter.html&quot;&gt;first-class merges and cover letters&lt;/a&gt;
by Tony Finch on his blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Slightly heavier reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2508.06879&quot;&gt;Quo Vadis, Code Review? Exploring the Future of Code Review&lt;/a&gt;,
a scientific article from August 2025, arXiv:2508.06879
(most authors of the paper are from Blekinge Institute of Technology, Karlskrona, Sweden).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2507.09637&quot;&gt;Code Review as Decision-Making – Building a Cognitive Model from the Questions Asked During Code Review&lt;/a&gt;,
a scientific article from July 2025, arXiv:2507.09637
(all authors are from Lund University, Lund, Sweden).
Submitted to &lt;em&gt;Empirical Software Engineering&lt;/em&gt;, Springer Nature.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/git-mini-summit-2025&quot;&gt;Git Mini Summit 2025 Videos&lt;/a&gt;
by Scott Chacon on GitButler’s Blog.&lt;/li&gt;
  &lt;li&gt;Kinetic Merge in action
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://youtu.be/JHb9DKK0LIA&quot;&gt;Merging through a file split&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://youtu.be/6jry6NKxGJA&quot;&gt;Complex merge demonstration&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sm4Naq_zJU0&amp;amp;t=2s&quot;&gt;Merging code embedded inside an if-statement&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=C2aFC8wFp2A&quot;&gt;12 Git commands visualized in 3D: a spatial approach to understanding version control&lt;/a&gt;
[4:58], on the Initial Commit channel on YouTube.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=M6S-9Y8peDY&quot;&gt;Stacked Branches With Lazygit&lt;/a&gt;
[12:18] by Jesse Duffield (Lazygit author) on YouTube.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;lazygit&lt;/a&gt; is a simple [windowed] terminal UI for Git,
written in Go.  It was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge&quot;&gt;Kinetic Merge&lt;/a&gt;
is a command-line tool that helps you merge a heavily refactored codebase and stay sane.
Its goals are to:
    &lt;ul&gt;
      &lt;li&gt;Merge two branches of a Git repository &lt;em&gt;holistically across the entire codebase&lt;/em&gt;.&lt;/li&gt;
      &lt;li&gt;Take into account the motion of code in either branch due to refactoring.&lt;/li&gt;
      &lt;li&gt;Handle file renames, file splits, file concatenation.&lt;/li&gt;
      &lt;li&gt;Handle code being excised from one place in a file and moved elsewhere in that file or to somewhere within another file, or hived off all by itself in its own new file.&lt;/li&gt;
      &lt;li&gt;Work alongside the usual Git workflows, allowing ordinary Git merge to take over at the end if necessary.&lt;/li&gt;
      &lt;li&gt;Be a simple command line tool that tries to do as much as it can without supervision, and with minimal supervision when complexities are encountered.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Written in Scala, under an MIT license.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitlab.com/gitlab-accelerates-embedded/misc/git-much-faster&quot;&gt;Git Much Faster&lt;/a&gt;
is a comprehensive benchmarking tool for comparing different Git clone strategies,
especially for large repositories.
Written as a Bash shell script, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://prek.j178.dev/&quot;&gt;&lt;em&gt;prek&lt;/em&gt;&lt;/a&gt; is a reimagined version of &lt;a href=&quot;https://pre-commit.com/&quot;&gt;pre-commit&lt;/a&gt;, built in Rust.
It is a framework to run hooks written in many languages,
and it manages the language toolchain and dependencies for running the hooks.
prek is not production-ready yet: some subcommands and languages are not implemented.
Under MIT license.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://hugovk.dev/blog/2025/ready-prek-go/&quot;&gt;Ready prek go!&lt;/a&gt;
article by Hugo van Kemenade on his blog.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/cannadayr/git-sqlite&quot;&gt;git-sqlite&lt;/a&gt;
is a collection of shell scripts,
including a custom diff and merge driver for SQLite,
that allows a SQLite database to be tracked using the Git version control system.
Under MIT license.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://learngit.io/&quot;&gt;LearnGit.io&lt;/a&gt; teaches version control
using animated visualizations of Git internals—and is
&lt;a href=&quot;https://learngit.io/posts/learngit-io-is-now-free-for-students&quot;&gt;now free&lt;/a&gt; for students and teachers. 
Created by Jack Lot of &lt;a href=&quot;https://www.youtube.com/@themoderncoder&quot;&gt;The Modern Coder&lt;/a&gt; YouTube channel,
LearnGit offers 41 video lessons across 11 modules, along with quizzes,
a Git command search, and high-quality written documentation.
Educators can email jack@learngit.io for bulk vouchers.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/02/29/edition-108/&quot;&gt;Git Rev News Edition #108&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitfichas.com/en&quot;&gt;GitFichas&lt;/a&gt; (also know as GitStudyCards)
is a collection of study cards about Git,
for devs that might need a refresher about Git commands.
GitFichas is now &lt;a href=&quot;https://github.com/jtemporal/gitfichas&quot;&gt;open-source&lt;/a&gt;
and undergoing some construction.&lt;/li&gt;
  &lt;li&gt;Git’s home page now has a &lt;a href=&quot;https://git-scm.com/learn&quot;&gt;Learn&lt;/a&gt; section, including &lt;a href=&quot;https://git-scm.com/cheat-sheet&quot;&gt;a handy Git Cheat Sheet&lt;/a&gt;, contributed by the ever-industrious
&lt;a href=&quot;https://jvns.ca/&quot;&gt;Julia Evans&lt;/a&gt;. These contributions are part of &lt;a href=&quot;https://github.com/git/git-scm.com/issues/2046&quot;&gt;the initiative to refresh the look and contents of git-scm.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.51.0.windows.2&quot;&gt;v2.51.0(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.13.html#3130&quot;&gt;3.13.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Data Center &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/release-notes-872139866.html&quot;&gt;10.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.6&quot;&gt;3.17.6&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.9&quot;&gt;3.16.9&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.13&quot;&gt;3.15.13&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.18&quot;&gt;3.14.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/09/25/patch-release-gitlab-18-4-1-released/&quot;&gt;18.4.1, 18.3.3, 18.2.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/09/18/gitlab-18-4-released/&quot;&gt;18.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/09/10/patch-release-gitlab-18-3-2-released/&quot;&gt;18.3.2, 18.2.6, 18.1.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-desktop/current/&quot;&gt;11.4.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.14.html&quot;&gt;4.2.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;tig &lt;a href=&quot;https://github.com/jonas/tig/releases/tag/tig-2.6.0&quot;&gt;2.6.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v2.3.0&quot;&gt;2.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.15.0&quot;&gt;4.15.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.16.8&quot;&gt;0.16.8&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.16.7&quot;&gt;0.16.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Kinetic Merge &lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.9.0&quot;&gt;1.9.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.16.0&quot;&gt;0.16.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac&quot;&gt;14.4, 14.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-flow-next &lt;a href=&quot;https://git-flow.sh/&quot;&gt;0.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Toon Claes, Johannes Schindelin,
Bruno Brito, Gerard Murphy, Jack Lot, Ben Knoble
and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 126 (August 31st, 2025)</title>
      <link>https://git.github.io/rev_news/2025/08/31/edition-126/</link>
      <pubDate>Sun, 31 Aug 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/08/31/edition-126/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-126-august-31st-2025&quot;&gt;Git Rev News: Edition 126 (August 31st, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 126th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of July and August 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/010001980c1ee007-2797fc86-fdf3-46e9-bec9-f8da2c9ebb8d-000000@email.amazonses.com/&quot;&gt;[BUG] &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; ignores &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pull.autostash=true&lt;/code&gt; configuration when used with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--git-dir&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--work-tree&lt;/code&gt; flags on a bare repository&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Bryan Lee posted a bug report about the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pull.autostash&lt;/code&gt;
configuration variable being ignored in a repository used to manage
his dotfiles.&lt;/p&gt;

    &lt;p&gt;He expected his unstaged changes to be automatically stashed before
a pull when that configuration variable is set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt;. Instead,
the command failed with an error message telling him to “Please
commit or stash them”. So he thought Git ignored the autostash
configuration completely due to the setup, which consisted of a bare
repository and a separate work tree accessed through the following
alias:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ alias dot=&apos;git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME&apos;&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;Lidong Yan replied to Bryan admitting that he wasn’t sure why the
autostash feature would be ignored when using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--git-dir&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--work-tree&lt;/code&gt; flags. He suggested setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase.autostash&lt;/code&gt; instead
of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pull.autostash&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; though.&lt;/p&gt;

    &lt;p&gt;Bryan Lee thanked Lidong saying that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pull.autostash&lt;/code&gt; was not a Git
configuration option and that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase.autostash&lt;/code&gt; did work for
rebase operations. But he raised the issue that Git silently accepts
invalid configuration keys without any warning, which can cause
users to waste a lot of time debugging.&lt;/p&gt;

    &lt;p&gt;Lidong replied with a suggestion to add a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config verify&lt;/code&gt;
subcommand. But Junio Hamano, the Git maintainer, chimed in
expressing doubts about such a command, as Git cannot distinguish
between a typo of a known variable and a legitimate custom variable
that a user or a third-party tool might be using. Lidong elaborated
that such a command could work by having Git maintain an internal
registry of all valid keys, which could also be extended by users
and tools for their own custom configurations.&lt;/p&gt;

    &lt;p&gt;Johannes Sixt suggested that instead of building a complex
verification system, it would be easier to fix the origin of the
misconception that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pull.autostash&lt;/code&gt; was the correct configuration.&lt;/p&gt;

    &lt;p&gt;Junio replied to Johannes that having &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; pay attention to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase.autostash&lt;/code&gt; was at least a documentation failure, if not a
bug. He argued that users have different expectations for a
relatively safe local rebase compared to a pull from a remote, which
could be riskier. Also it didn’t make sense for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; to
respect &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase.autostash&lt;/code&gt; but not &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge.autostash&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Ben Knoble then chimed in with a counter-argument to Junio. He
reasoned that since a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; that rebases is conceptually a
fetch followed by a rebase, it would be “far more inconsistent” if
it didn’t honor the rebase configuration. Breaking that expectation
would be unnatural for users taught to think of pull in that
way. Following this logic, he also supported the idea that a merging
pull should respect &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge.autostash&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Then Junio wondered if introducing a new, dedicated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pull.autostash&lt;/code&gt;
variable would be a good idea. But soon Lidong came up with
&lt;a href=&quot;https://lore.kernel.org/git/20250717030732.75106-1-yldhome2d2@gmail.com/&quot;&gt;a patch&lt;/a&gt;
to actually add this configuration variable.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine reviewed the patch and left a number of suggestions to
improve it in many ways. After some discussions with Lidong and
Junio, Lidong posted
&lt;a href=&quot;https://lore.kernel.org/git/20250720124334.12045-1-yldhome2d2@gmail.com/&quot;&gt;a version 2 of the patch&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;This new version implemented a number of improvements based on the
discussion. Some tests were added. The logic was updated to fall
back to either &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase.autostash&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge.autostash&lt;/code&gt; depending on
whether the pull performed a rebase or a merge. The order of
precedence was also clarified: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pull.autostash&lt;/code&gt; now overrides the
more general &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase.autostash&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge.autostash&lt;/code&gt;
settings. Finally, the documentation was updated with more precise
explanations.&lt;/p&gt;

    &lt;p&gt;This feature was released recently as part of Git v2.51.0.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-seyi-kuforiji&quot;&gt;Developer Spotlight: Seyi Kuforiji&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Editor’s note: This edition features a retrospective interview with a
contributor who contributed to Git through a mentoring program. We hope
the reflections shared by the Outreachy contributor will provide an
insightful perspective that benefits the community. As always, we
welcome your thoughts and feedback!&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My name is Seyi Kuforiji, and I’m an Outreachy alum who worked on
&lt;a href=&quot;https://seyi-kuforiji-902b48.gitlab.io/posts/week-1-Introduce-yourself&quot;&gt;modernizing Git’s unit testing platform&lt;/a&gt;
by converting its homegrown unit test framework to use &lt;a href=&quot;https://github.com/clar-test/clar&quot;&gt;Clar&lt;/a&gt;.
I studied geography at the University of Lagos, but my curiosity
and passion for computers and software drove me to start learning
Python and Git immediately after graduating.&lt;/p&gt;

    &lt;p&gt;Since then, I’ve enjoyed exploring different areas of IT, from
software engineering to data science and DevOps, because I genuinely
love learning and experimenting with new tools. I also earned a
certification in Health Data Science and Precision Medicine from
Stanford University, which reflects my commitment to leveraging
technology to improve lives. Participating in Outreachy through Git
demonstrated to me the impact of open-source collaboration, and it has
strengthened my passion for developing solutions that give back to the
community.&lt;/p&gt;

    &lt;p&gt;Outside of work, I’m usually diving into something new. Right now, the
&lt;a href=&quot;https://lwn.net/Articles/955376/&quot;&gt;Linux graphics stack&lt;/a&gt; has caught my
attention, but when I decide to give my brain a break from tech, I play
chess or watch sports.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How did you initially become interested in contributing to Git,
and what motivated you to choose it as your Outreachy project?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Git was one of the first tools I ever learned years ago. At first, I
didn’t really understand it; I only knew a few commands like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add .&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit -m &quot;&amp;lt;message&amp;gt;&quot;&lt;/code&gt;, and I was
living life with just those. I remember during my 12-month software
engineering bootcamp, I helped some of my colleagues with Git because
I had this so-called “prior knowledge”, and for a while, I was treated
like a genius, at least until they caught up!&lt;/p&gt;

    &lt;p&gt;So when I saw Git on the list of Outreachy projects, I knew right away
that this was where I needed to be: to deepen my understanding of the
tool and maybe level up from “genius” to something closer to expert
wizardry. These days, some say I’m a wizard, others say I’m a maestro,
but I’m just a humble guy who enjoys learning and sharing knowledge.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you feel your contribution has impacted the Git community
or the broader open source ecosystem?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My contribution to Git, which was modernizing its homegrown unit
testing framework to use Clar, has helped improve Git’s testing
capabilities by making the tests more maintainable, easier to
understand, and easier to extend to cover more edge cases in the
future. Clar brings additional benefits such as clearer test
reporting, a more structured way to organize tests, and improved
readability, which makes the testing process more approachable for new
contributors. While this was primarily an internal-facing improvement,
I believe it plays an important role in maintaining the reliability of
Git’s functions and operations. A stronger testing framework makes it
easier for both new and experienced contributors to work with the
codebase confidently, which in turn strengthens Git for the millions
of people who rely on it every day.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Is there any aspect of Git that you now see differently after
having contributed to it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Like I said earlier, I started out only knowing a handful of Git
commands to do basic operations. My biggest takeaway since
contributing to Git has been discovering the full power of its
interactive rebase. I always saw rebase on cheat sheets but never
really experienced its capabilities until I worked more deeply with
Git. The best way I can describe it is that it feels like a time
machine: I make changes and commits, Git captures those states in
time, and with interactive rebase, I can go back, rewrite history, and
improve it as if it were the first time.&lt;/p&gt;

    &lt;p&gt;I still find it so cool that in my text editor, I can see files I had
already deleted in later commits come back to life during a rebase. It
completely changed how I view Git, not just as a version control
system, but as a powerful storytelling tool for code.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you balance your contributions with other responsibilities
like work or school?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I usually create a schedule with a clear timeframe dedicated to
working on the Git project. For example, during Outreachy, I set aside
specific blocks of time each day, treating it almost like a regular
job. This helped me stay consistent, avoid distractions, and make
steady progress.&lt;/p&gt;

    &lt;p&gt;I’ve learned that balancing open-source contributions with other
responsibilities is all about structure and prioritization. By
planning my week ahead, I can make sure that my work, personal life,
and contributions don’t clash. Of course, I also try to stay flexible;
some weeks are more demanding than others, but having a framework
keeps me grounded and ensures I can keep giving my best to Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Can you share how Outreachy helped enhance your technical and
non-technical skills (like communication, project management, etc.)?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My C and low-level engineering skills have improved immensely through
this experience. I now feel much more confident working in a large and
complex codebase, and I’ve built the mindset to take on hard problems
without shying away. This confidence is what’s encouraging me to dive
deeper into the Linux kernel, where I’ve been learning and
experimenting with the graphics stack and GPU drivers. My knowledge of
Git itself has also grown significantly, particularly with the
interactive rebase functionality, which has completely changed how I
think about version control and history management.&lt;/p&gt;

    &lt;p&gt;On the non-technical side, I grew a lot in communication and project
management. I learned how to break down tasks into smaller, achievable
goals, track progress against deadlines, and ask for help effectively
when I was stuck. Collaborating with mentors and the wider Git
community also taught me the importance of giving clear updates in
blog posts and writing thoughtful commit messages.&lt;/p&gt;

    &lt;p&gt;Overall, the experience didn’t just make me a better programmer; it
made me more disciplined, collaborative, and confident in working on
real-world projects.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was your biggest takeaway or learning from Outreachy that
you now apply regularly in your work?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My biggest takeaway from Outreachy is the balance between
understanding deeply and taking action. My mentor encouraged me to not
just know how things work but also to dig into why they work. At the
same time, I learned that it’s easy to get stuck in the learning
phase, waiting until you feel “ready.” During my first few weeks, I
hesitated too much. What really helped me was realizing that you don’t
need to know everything before you start; you just need enough to
begin, and the rest comes as you build and iterate. That shift has
stayed with me and is something I now apply regularly in my life.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was the biggest challenge you faced during your contributions
to Git, and how did you overcome it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;One of the biggest challenges I faced was understanding the Git
codebase. Git is a very large and complex project with many
interconnected parts, and even though my task was limited to the unit
testing section, I also needed to understand the underlying
functionality being tested. At first, it felt daunting, but I overcame
this by burning the midnight candle, digging deeper, and committing
myself to continuous learning. Bit by bit, things started to make
sense. What really helped was breaking down the complexity into
smaller pieces and focusing on one area at a time, while also asking
lots of questions and referring back to documentation.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Have you thought about mentoring new GSoC / Outreachy students?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Yes, I hope to mentor future Outreachy interns if the opportunity arises.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;A first-class graphical interface officially maintained by the Git
project, for those who prefer using an app instead of the command
line.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What upcoming features or changes in Git are you particularly
excited about?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’ve been reading recent discussions on the Git mailing list about how
Git might evolve in the age of AI, particularly around enabling
integrations with AI agents. The idea of extending Git’s capabilities
so that AI tools can better understand, interact with, and even
automate certain workflows is quite exciting. For example, AI-assisted
code reviews, intelligent merge conflict resolution, or automated
repository maintenance could become more seamless if Git had
standardized ways for agents to plug into its internals.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;GitHub and GitLab.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I mostly work from the command line. For sending contributions, I use
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;, since I’m more comfortable with
CLI tools.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you envision your own involvement with Git or other open
source projects in the future?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I intend to remain active in the Git community for many years by
making steady contributions. At the moment, I’m still learning and
exploring the project to identify areas where I can improve and add
value. Over time, I hope to grow into a consistent contributor and
take on more responsibility within the project.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;For anyone starting Git development, I’d recommend a few key
resources. The “&lt;a href=&quot;https://git.github.io/Hacking-Git/&quot;&gt;Hacking Git&lt;/a&gt;”
guide is definitely a go-to resource for understanding how the
project is structured and how to navigate the codebase.
The &lt;a href=&quot;https://git-scm.com/docs/MyFirstContribution&quot;&gt;MyFirstContribution&lt;/a&gt;
page is also very helpful for learning how to get started with making
changes. Beyond that, the general Git documentation is valuable for
building a solid foundation. Starting small, asking questions, and
getting familiar with these resources can make the process much
smoother.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Would you recommend other students or contributors to participate in
the GSoC, Outreachy or other mentoring programs, working on Git?
Why? Do you have advice for them?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;100% yes. Programs like GSoC and Outreachy give you the unique
opportunity to learn directly from some of the smartest and most
experienced contributors in the Git community. Having a mentor to
guide you through real contributions accelerates your learning, helps
you build confidence and good practices early on. I’d absolutely
recommend it. My advice would be: come with curiosity, patience, and
the willingness to learn. Don’t worry if you don’t understand
everything at first. Ask questions, read the documentation, and engage
with the community. The mentorship and the experience you gain are
invaluable.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/what-s-new-in-git-2-51-0/&quot;&gt;What’s new in Git 2.51.0?&lt;/a&gt;
by Karthik Nayak on GitLab Blog.  It describes performance optimizations
for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt; (most significant when using the “reftable”
backend for references), further plans for Git 3.0 (which can be
found in the &lt;a href=&quot;https://gitlab.com/gitlab-org/git/-/blob/master/Documentation/BreakingChanges.adoc&quot;&gt;BreakingChanges document&lt;/a&gt;), semi-removal of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git whatchanged&lt;/code&gt;
(still available with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--i-still-use-this&lt;/code&gt; flag), and marking
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt; as no longer experimental,
adding a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--start-after&lt;/code&gt; flag for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git for-each-ref&lt;/code&gt; (that can be
combined with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--count&lt;/code&gt; flag to support pagination), etc.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/highlights-from-git-2-51/&quot;&gt;Highlights from Git 2.51&lt;/a&gt;
by Taylor Blau on GitHub Blog.  It describes cruft-free multi-pack indexes
(which currently require setting a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repack.MIDXMustContainCruft&lt;/code&gt; config option),
smaller packs with a “path walk” method of collecting objects when repacking
(which you can try out with the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--path-walk&lt;/code&gt; command-line option),
a variant of the internal stash representation that can be used for stash interchange
(with new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;export&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;import&lt;/code&gt; commands for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt;), etc.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://huggingface.co/changelog/xet-default-for-new-users&quot;&gt;Xet is now the default storage option for new users and organizations&lt;/a&gt;
at &lt;a href=&quot;https://huggingface.co/&quot;&gt;Hugging Face&lt;/a&gt;, switching from &lt;a href=&quot;https://git-lfs.com/&quot;&gt;Git LFS&lt;/a&gt;.
This includes moving existing repositories from LFS to Xet.
To get the most out of Xet storage &lt;a href=&quot;https://huggingface.co/docs/hub/en/storage-backends#using-xet-storage&quot;&gt;read the usage instructions in the Hub docs&lt;/a&gt;.
Note that Xet remains backward compatible with legacy clients optimized for Git LFS.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://xethub.com/&quot;&gt;XetHub&lt;/a&gt; was first mentioned in passing in
&lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;Git Rev News #95&lt;/a&gt;,
and its &lt;a href=&quot;https://about.xethub.com/blog/benchmarking-the-modern-development-experience&quot;&gt;benchmark by XetHub against S3, DVC, and Git LFS&lt;/a&gt;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/07/31/edition-113/&quot;&gt;Git Rev News Edition #113&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://dagshub.com/blog/launching-data-streaming-and-upload/&quot;&gt;DagsHub launching Direct Data Access in 2022&lt;/a&gt;.
&lt;a href=&quot;https://dagshub.com/&quot;&gt;DagsHub&lt;/a&gt; was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;,
then in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;#85&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2023/02/28/edition-96/&quot;&gt;#96&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2024/01/31/edition-107/&quot;&gt;#107&lt;/a&gt;, and
&lt;a href=&quot;https://git.github.io/rev_news/2024/07/31/edition-113/&quot;&gt;#113&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://tylercipriani.com/blog/2025/08/15/git-lfs/&quot;&gt;The future of large files in Git is Git&lt;/a&gt;
by Tyler Cipriani on his blog.  It describes how one can use
partial clone today (and large object promisors in the future,
which are work in progress) instead of using &lt;a href=&quot;https://git-lfs.com/&quot;&gt;Git LFS&lt;/a&gt;
or similar solutions like &lt;a href=&quot;https://git-annex.branchable.com/&quot;&gt;git-annex&lt;/a&gt;
(or no longer actively developed solutions like git-media and git-fat)
or &lt;a href=&quot;https://dvc.org/&quot;&gt;DVC&lt;/a&gt; (Data Version Control).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tigerbeetle.com/blog/2025-08-04-code-review-can-be-better/&quot;&gt;Code Review Can Be Better&lt;/a&gt;
(than GitHub’s default code review process)
by matklad (Alex Kladov) on the TigerBeetle blog.&lt;br /&gt;
Mentions their &lt;a href=&quot;https://github.com/tigerbeetle/tigerbeetle/pull/2732&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-review&lt;/code&gt;&lt;/a&gt;
work-in-progress tool, and also the
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://fossil-scm.org/&quot;&gt;Fossil&lt;/a&gt; version control system with built-in project management
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/01/13/edition-11/&quot;&gt;Git Rev News Edition #11&lt;/a&gt;), the&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://gerrit-review.googlesource.com/Documentation/note-db.html&quot;&gt;NoteDb&lt;/a&gt; backend
for &lt;a href=&quot;https://www.gerritcodereview.com/&quot;&gt;Gerrit&lt;/a&gt; - which allows storing review state in Git,
(NoteDb was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;Git Rev News Edition #40&lt;/a&gt;), the&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/git-bug/git-bug&quot;&gt;git-bug&lt;/a&gt; tool that uses Git to store information about issues / bugs
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/09/19/edition-43/&quot;&gt;Git Rev News Edition #43&lt;/a&gt;), the&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/google/git-appraise&quot;&gt;git-appraise&lt;/a&gt; tool that uses Git to store information about reviews
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/01/13/edition-11/&quot;&gt;Git Rev News Edition #11&lt;/a&gt;), the&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://doc.dxuuu.xyz/prr/index.html&quot;&gt;prr&lt;/a&gt; (‘pull request review’) tool that brings mailing list style code reviews to GitHub PRs
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/08/31/edition-90/&quot;&gt;Git Rev News Edition #90&lt;/a&gt;), the&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://pr.pico.sh/&quot;&gt;git-pr&lt;/a&gt; project that leverages Git native features to replace the entire pull request workflow,
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/07/31/edition-113/&quot;&gt;Git Rev News Edition #113&lt;/a&gt;), and the&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.janestreet.com/tech-talks/janestreet-code-review/&quot;&gt;How Jane Street Does Code Review&lt;/a&gt;
article by Ian Henry on Jane Street Tech Talks site.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://radicle.xyz/2025/08/14/jujutsu-with-radicle&quot;&gt;Jujutsu + Radicle = ❤️&lt;/a&gt;
by fintohaps on Radicle Blog, describing how the author uses Jujutsu in tandem with Radicle.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://jj-vcs.github.io/jj/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; is a Git-compatible version control system
written in Rust, and was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt;, a peer-to-peer, local-first code collaboration stack built on Git,
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.tangled.sh/ci&quot;&gt;introducing spindle&lt;/a&gt; by Anirudh &amp;amp; Akshay on Tangled blog;
spindle is Tangled’s new CI runner built atop Nix and the AT Protocol.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.tangled.sh/intro&quot;&gt;Tangled.sh&lt;/a&gt; is a new social-enabled Git collaboration platform
built on top of the AT Protocol (which is behind &lt;a href=&quot;https://bsky.app/&quot;&gt;BlueSky&lt;/a&gt;
microblogging federated social media service).
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/07/31/edition-125/&quot;&gt;the previous edition of Git Rev News&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Compare the &lt;a href=&quot;https://radicle.xyz/2025/07/23/using-radicle-ci-for-development&quot;&gt;Using Radicle CI for Development&lt;/a&gt;
article by Lars Wirzenius, also mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/07/31/edition-125/&quot;&gt;Git Rev News #125&lt;/a&gt;.
&lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt; is another distributed Git hosting system,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://radicle.xyz/2025/05/30/radicle-with-github-actions&quot;&gt;How we used Radicle with GitHub Actions&lt;/a&gt;:
Quick guide to trying Radicle without dropping GitHub or whatever CI you’re using.
Published by rudolfs (Rūdolfs Ošiņš) on Radicle Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/tonymet/archive-legacy-github-repos-with-subtree-1dj3&quot;&gt;Archive Legacy GitHub Repos with Subtree&lt;/a&gt;
by Tony Metzidis on DEV.to, about how to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git subtree&lt;/code&gt; to consolidate
hundreds of legacy experimental repos into an archive,
preserving all of the commit history.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ninkovic.dev/blog/2025/think-twice-before-using-github-actions&quot;&gt;I’ll think twice before using Github Actions again&lt;/a&gt;
by Nemanja Ninković on their blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.chiark.greenend.org.uk/~sgtatham/quasiblog/git-no-forge/&quot;&gt;Git without a forge&lt;/a&gt;
by Simon Tatham on his quasiblog, describing how to interact with a bare Git repo,
and explaining why he personally does not use any of the Git forges.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/emrahg/how-i-cleaned-up-my-git-history-like-a-boss-aka-fixing-wrong-author-emails-19lb&quot;&gt;How I Cleaned Up My Git History Like a Boss (a.k.a. Fixing Wrong Author Emails)&lt;/a&gt;
by Emrah G. on DEV.to.  The solution uses the (deprecated) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-branch&lt;/code&gt; tool;
the recommended replacement is &lt;a href=&quot;https://github.com/newren/git-filter-repo&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-repo&lt;/code&gt;&lt;/a&gt;.
Also, you can correct the &lt;em&gt;visible&lt;/em&gt; e-mail with the &lt;a href=&quot;https://git-scm.com/docs/gitmailmap&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.mailmap&lt;/code&gt;&lt;/a&gt; file
(changing what Git shows, without having to rewrite history).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.bampouris.eu/blog/mcp-git-commit-generator/&quot;&gt;Revolutionizing Git Workflows: The MCP Git Commit Generator&lt;/a&gt;
by Theoklitos Bampouris on his blog (and also &lt;a href=&quot;https://dev.to/theoklitosbam7/revolutionizing-git-workflows-the-mcp-git-commit-generator-530m&quot;&gt;on DEV.to&lt;/a&gt;),
about using Agentic AI and an LLM chatbot,
leveraging the &lt;a href=&quot;https://modelcontextprotocol.io/introduction&quot;&gt;Model Context Protocol (MCP)&lt;/a&gt;.
The generated commit message will follow &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; conventions.&lt;br /&gt;
Note: please read the proposed commit message before accepting it,
especially for more complex changes.  While AI agents can take information
from changes and from an issue tracker, they cannot write whys of the change;
they cannot access your thoughts.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://git.github.io/rev_news/2023/03/31/edition-97/&quot;&gt;Git Rev News Edition #97&lt;/a&gt;
lists a few other tools that use the GPT-3 / ChatGPT Large Language Model (LLM)
to help write commit messages.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://purpleidea.com/blog/2025/08/04/better-git-status/&quot;&gt;Better git status&lt;/a&gt;
by James (@purpleidea) on his blog.  He uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git alias&lt;/code&gt; which examines
the terminal width, and then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status --column=nodense&lt;/code&gt; if the terminal is wide enough.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fev.al/posts/git-tools/&quot;&gt;Some Pretty Cool Git Tools To Save Your Sanity&lt;/a&gt;
by Charles Féval on his blog.
Mentions &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git revise&lt;/code&gt; for splitting pull requests (PRs),
and custom &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git backup&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reparent&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git split&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git move-branch&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bookmark&lt;/code&gt; commands.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.kulman.sk/git-worktree/&quot;&gt;Using Git worktrees for development&lt;/a&gt;
by Igor Kulman on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://oppi.li/posts/curing_a_case_of_git-UX/&quot;&gt;Curing A Case Of Git-UX&lt;/a&gt;
by Akshay on their blog; describes how one can improve git worktree UX
with the help of &lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;fzf&lt;/a&gt;
(or &lt;a href=&quot;https://github.com/lotabout/skim&quot;&gt;skim&lt;/a&gt; or &lt;a href=&quot;https://github.com/jhawthorn/fzy&quot;&gt;fzy&lt;/a&gt;),
and shell functions.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://seb.jambor.dev/posts/improving-shell-workflows-with-fzf/&quot;&gt;Improving shell workflows with fzf&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/04/30/edition-74/&quot;&gt;Git Rev News Edition #74&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://leanrada.com/notes/github-heatmap-widget/&quot;&gt;Making my GitHub heatmap widget&lt;/a&gt; by
Lean Rada on their blog.  The created tool partially scrapes and reformats HTML input,
but is constructed in such way that it could consume JSON from GitHub API instead.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jacen.moe/blog/20250805-tryhackme-git-happens/&quot;&gt;TryHackMe - Git Happens&lt;/a&gt;
by Jacen Sekai on his blog, about &lt;a href=&quot;https://tryhackme.com/room/githappens&quot;&gt;Git Happens&lt;/a&gt;:
an easy-ranked box on &lt;a href=&quot;https://tryhackme.com/&quot;&gt;TryHackMe&lt;/a&gt;, website for
hands-on cyber security training through real-world scenarios.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.swgillespie.me/posts/monorepo-ingredients/&quot;&gt;The Ingredients of a Productive Monorepo&lt;/a&gt;
by Sean Gillespie on his blog.
    &lt;ul&gt;
      &lt;li&gt;You can find a definition of “monorepo” and a list of various tools on the &lt;a href=&quot;https://monorepo.tools/&quot;&gt;Monorepo.tools&lt;/a&gt; site,
 which was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/02/28/edition-84/&quot;&gt;Git Rev News Edition #84&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/base-topic-parent-branches&quot;&gt;Git Branching Explained: Base, Topic, and Parent Branches&lt;/a&gt;
by Bruno Brito on Tower Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lottia.net/notes/0013-git-jujutsu-miniature.html&quot;&gt;Git and jujutsu: in miniature&lt;/a&gt;
by Charlotte (lottia) on her blog (2024).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://salferrarello.com/git-interactive-rebase-order-is-wrong/&quot;&gt;Git Interactive Rebase TODO Order is Wrong&lt;/a&gt;
by Sal Ferrarello on his blog (2019), stating a personal preference for stack-like order,
with latest commits appearing on the top.&lt;br /&gt;
The author even wrote a Vim plugin,
&lt;a href=&quot;https://github.com/salcode/vim-interactive-rebase-reverse&quot;&gt;Interactive Rebase Reverse Vim&lt;/a&gt;,
to reverse the order of the commits in an interactive &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mislav.net/2014/02/hidden-documentation/&quot;&gt;Every line of code is always documented&lt;/a&gt;
by Mislav Marohnić on his blog (2014).  The article describes how to
extract information about a code snippet from project history using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt;,
‘pickaxe’ search with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -S&lt;/code&gt;, and a
&lt;a href=&quot;https://github.com/garybernhardt/dotfiles/blob/f0c0ff92209e5aed4fa3ef6faf056eb9944a8f12/bin/git-churn&quot;&gt;git-churn&lt;/a&gt; script,
and how to stay on the right side of history
(among others, to be able to use this technique effectively).&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bahdotsh/wrkflw&quot;&gt;WRKFLW&lt;/a&gt; is a command-line tool
for validating and executing GitHub Actions workflows locally,
without requiring a full GitHub environment.
It helps developers test their workflows directly on their machines
before pushing changes to GitHub.
Written in Rust, under MIT license.
    &lt;ul&gt;
      &lt;li&gt;Compare with the &lt;a href=&quot;https://github.com/nektos/act&quot;&gt;Act&lt;/a&gt; command line tool
to run your GitHub Actions locally, using the Docker Engine API.
Written in Go, under MIT license.
Mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/07/31/edition-113/&quot;&gt;Git Rev News Edition #113&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/marketplace/actions/setup-dvc-data-version-control&quot;&gt;Setup DVC Action&lt;/a&gt;
by Iterative is a JavaScript action that can be used as a step in GitHub Actions.&lt;br /&gt;
&lt;a href=&quot;https://dvc.org&quot;&gt;DVC&lt;/a&gt; (Data Version Control) was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;
and many times since (most recently in &lt;a href=&quot;https://git.github.io/rev_news/2024/10/31/edition-116/&quot;&gt;Edition #116&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codeberg.org/natkr/lappverk/&quot;&gt;Lappverk&lt;/a&gt; is a tool for modifying other people’s software.
It works by keeping a series of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.patch&lt;/code&gt; files as its source of truth
(like &lt;a href=&quot;https://savannah.nongnu.org/projects/quilt&quot;&gt;quilt&lt;/a&gt;),
but using temporary Git repositories as an interface to modify the patches,
rather than implementing its own version control system from scratch.
Written in Rust, under Apache 2.0 License.
Started out as Patchable internal tool.&lt;br /&gt;
You might also be interested in reading the announcement blog post:
&lt;a href=&quot;https://natkr.com/2025-08-14-modifying-other-peoples-software/&quot;&gt;Modifying Other People’s Software&lt;/a&gt;
by Natalie Klestrup Röijezon (natkr) on natkr’s ramblings.
    &lt;ul&gt;
      &lt;li&gt;Compare &lt;a href=&quot;http://jk.ozlabs.org/projects/patchwork/&quot;&gt;patchwork&lt;/a&gt; - a web-based patch tracking system
designed to facilitate contribution and management of contributions to an open-source project,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News Edition #20&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Compare &lt;a href=&quot;https://stacked-git.github.io/&quot;&gt;Stacked Git (StGit)&lt;/a&gt;,
an application for managing Git commits as a stack of patches,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/07/20/edition-17/&quot;&gt;Git Rev News Edition #17&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Compare &lt;a href=&quot;https://github.com/mricon/b4&quot;&gt;B4 Tools&lt;/a&gt;, a helper utility
to work with patches made available via a &lt;a href=&quot;https://public-inbox.org/README.html&quot;&gt;public-inbox&lt;/a&gt; archive like &lt;a href=&quot;https://lore.kernel.org/&quot;&gt;lore.kernel.org&lt;/a&gt;.
This tool is written to make it easier to participate in patch-based workflows,
like those used in the Linux kernel development.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/03/25/edition-61/&quot;&gt;Git Rev News Edition #61&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kworkflow/patch-hub/tree/unstable&quot;&gt;patch-hub&lt;/a&gt; is a TUI tool
that streamlines the interaction of Linux developers
with patches archived on &lt;a href=&quot;https://lore.kernel.org/&quot;&gt;lore.kernel.org&lt;/a&gt;.
Written in Rust, under GPL 2.0 license.&lt;br /&gt;
It is a spin-off of &lt;a href=&quot;https://github.com/kworkflow/kworkflow&quot;&gt;kw&lt;/a&gt;,
a tool for helping Linux kernel developers in everyday tasks
(which is written in shell, and is under GPL 2.0 license).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://selvaneyas.github.io/gitgenius&quot;&gt;GitGenius&lt;/a&gt; is a smart and simple CLI tool
that explains Git errors in plain English and helps you fix them quickly.
Written in Python, under MIT license.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.com/nvbn/thefuck&quot;&gt;thefuck&lt;/a&gt;, a command line application
which corrects your previous console command (for example Git command)
if you made an error (like typos in command name), and it &lt;em&gt;didn’t&lt;/em&gt; do what you wanted;
the tool was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/07/31/edition-101/&quot;&gt;Git Rev News Edition #101&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Compare the &lt;a href=&quot;http://ohshitgit.com/&quot;&gt;Oh Shit, Git!?!&lt;/a&gt; / &lt;a href=&quot;https://dangitgit.com/&quot;&gt;Dangit, Git!?!&lt;/a&gt;
website by Katie Sylor-Miller,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/09/14/edition-19/&quot;&gt;Git Rev News Edition #19&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.wtf/&quot;&gt;GIT.WTF!?!&lt;/a&gt; is a website with articles in which you can
find solutions to your Git problems,
along with tips &amp;amp; tricks to improve your Git workflows.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/PatNei/GITHUB2FORGEJO&quot;&gt;GITHUB2FORGEJO&lt;/a&gt;
is a Bash script for migrating all repositories from a GitHub user account
to a specified Forgejo instance. It supports mirroring or one-time cloning
and includes a cleanup feature for removing repositories on Forgejo
that no longer exist on GitHub.
Under GPL 3.0 license.&lt;br /&gt;
Based on &lt;a href=&quot;https://github.com/RGBCube/GitHub2Forgejo&quot;&gt;GitHub2Forgejo&lt;/a&gt;
Nushell script, also under GPL 3.0 license.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://forgejo.org/&quot;&gt;Forgejo&lt;/a&gt; is a self-hosted lightweight software forge,
which started as a “soft” fork of Gitea (itself a fork of Gogs),
and was first mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News Edition #103&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-revise.readthedocs.io/&quot;&gt;git-revise&lt;/a&gt; is a Git subcommand and Python library
for efficiently updating, splitting, and rearranging commits.
Under MIT License.&lt;br /&gt;
The &lt;a href=&quot;https://mystor.github.io/git-revise.html&quot;&gt;Introducing git-revise&lt;/a&gt;
blog post was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/08/21/edition-54/&quot;&gt;Git Rev News Edition #54&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cfe84/git-tools&quot;&gt;git-tools&lt;/a&gt; is a set of additional Git commands
to “help you make crazy stuff in a very unsafe way”.
Includes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git backup&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git move-branch&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reparent&lt;/code&gt; (similar to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --onto&lt;/code&gt;),
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git split&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bookmark&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git newbranch&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git get&lt;/code&gt;.
Written in Go, under GPL 2.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/andrewmcwattersandco/git-fetch-file&quot;&gt;git-fetch-file&lt;/a&gt; is a utility
for importing specific files from other Git repositories into your own project,
while keeping a manifest (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git-remote-files&lt;/code&gt;) that remembers where they came from
and what commit they belong to.
Written in Python, under GPL 2.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://framagit.org/mdamien/git-word-blame&quot;&gt;git-word-blame&lt;/a&gt;
is a tool that shows word-by-word authors of a file, creating TSV and HTML files.
Written in Python, under GPL 3.0 license.
The README includes links to a few alternative tools in the “See also” section.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/withshubh/gguser&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gguser&lt;/code&gt;&lt;/a&gt; is a CLI tool
to easily switch between different Git user profiles.
It simplifies managing multiple GitHub or GitLab accounts
by allowing users to switch between profiles effortlessly.
Written in JavaScript for Node.js (npm), under Apache 2.0 License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitlabform.github.io/gitlabform/&quot;&gt;GitLabForm&lt;/a&gt; is a specialized configuration-as-code tool
for GitLab’s application settings, groups, projects, and more,
using hierarchical configuration written in YAML.
Written in Python, under MIT license.&lt;br /&gt;
See the &lt;a href=&quot;https://www.mikestreety.co.uk/blog/gitlabform-for-gitlab-repository-automation/&quot;&gt;GitlabForm for Gitlab repository automation&lt;/a&gt;
blog post by Mike Street on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/seeyebe/gmap&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gmap&lt;/code&gt;&lt;/a&gt; is a fast command-line tool
(with terminal interface) to explore Git activity - heatmaps, churn, authorship, and more.
It helps you understand your Git repository at a glance - not just what changed,
but when, how much, and by whom.
Written in Rust, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ayllu-forge.org/&quot;&gt;Ayllu&lt;/a&gt; is a code forge optimized for single instance deployments.
It is still a work in progress.  Written in Rust, under AGPL license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Growth-Kinetics/DiffMem&quot;&gt;DiffMem&lt;/a&gt; is a lightweight,
Git-based memory backend designed for AI agents and conversational systems.
It uses Markdown files for human-readable storage,
Git for tracking temporal evolution through differentials,
and an in-memory BM25 index for fast, explainable retrieval.
This project is a proof-of-concept (PoC).
Written in Python, no license (!).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://lore.kernel.org/git/xmqqikikk1hr.fsf@gitster.g/&quot;&gt;2.51.0&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/xmqqh5ybcfwt.fsf@gitster.g/&quot;&gt;2.51.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/xmqqikizoybn.fsf@gitster.g/&quot;&gt;2.51.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/xmqqms8f5889.fsf@gitster.g/&quot;&gt;2.51.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.51.0.windows.1&quot;&gt;v2.51.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.51.0-rc2.windows.1&quot;&gt;v2.51.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.51.0-rc1.windows.1&quot;&gt;v2.51.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.51.0-rc0.windows.1&quot;&gt;v2.51.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/08/27/patch-release-gitlab-18-3-1-released/&quot;&gt;18.3.1, 18.2.5, 18.1.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/08/21/gitlab-18-3-released/&quot;&gt;18.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/08/18/gitlab-18-2-4-released/&quot;&gt;18.2.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/08/15/gitlab-17-11-7-released/&quot;&gt;17.11.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/08/13/patch-release-gitlab-18-2-2-released/&quot;&gt;18.2.2, 18.1.4, 18.0.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3108&quot;&gt;3.10.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3115&quot;&gt;3.11.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3122&quot;&gt;3.12.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.5&quot;&gt;3.17.5&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.8&quot;&gt;3.16.8&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.12&quot;&gt;3.15.12&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.17&quot;&gt;3.14.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.14.0&quot;&gt;4.14.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.15.16&quot;&gt;0.15.16&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.15.15&quot;&gt;0.15.15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sublime Merge &lt;a href=&quot;https://www.sublimemerge.com/download&quot;&gt;Build 2112&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-14&quot;&gt;14&lt;/a&gt; (&lt;a href=&quot;https://youtu.be/WYhtxBAzOB0&quot;&gt;YouTube video&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Kinetic Merge &lt;a href=&quot;https://github.com/sageserpent-open/kineticMerge/releases/tag/v1.9.0&quot;&gt;1.9.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Štěpán Němec, Gerard Murphy,
Seyi Kuforiji and Bruno Brito.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 125 (July 31st, 2025)</title>
      <link>https://git.github.io/rev_news/2025/07/31/edition-125/</link>
      <pubDate>Thu, 31 Jul 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/07/31/edition-125/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-125-july-31st-2025&quot;&gt;Git Rev News: Edition 125 (July 31st, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 125th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of June and July 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;20 years ago: &lt;a href=&quot;https://lore.kernel.org/git/Pine.LNX.4.58.0507262004320.3227@g5.osdl.org/&quot;&gt;Meet the new maintainer..&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;On July 26 2005, so 20 years ago, Linus Torvalds announced on
the mailing list that Junio Hamano accepted the maintainership of
the Git project and that Junio “was the obvious choice”. Linus said
he wasn’t dropping Git but he just preferred working on it as a
contributor.&lt;/p&gt;

    &lt;p&gt;Junio replied with an &lt;a href=&quot;https://lore.kernel.org/git/7vmzo8ss2l.fsf@assigned-by-dhcp.cox.net/&quot;&gt;A note from the new GIT maintainer&lt;/a&gt;
email where he acknowledged his new role as Git maintainer, thanked
the community for their support and collaboration, and promised to
take a more careful and deliberate approach in shepherding the
project. He also said he would post his own patches to the mailing
list for review before including them in the repository, and
encouraged community feedback.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/aGwHt9HCd86hVuKh@pks.im/&quot;&gt;[ANNOUNCE] Git Mini Summit at Open Source Summit Europe, Amsterdam, August 28th&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Patrick Steinhardt announced a Git Mini Summit co-located with the
&lt;a href=&quot;https://events.linuxfoundation.org/open-source-summit-europe/&quot;&gt;Open Source Summit Europe&lt;/a&gt;
in Amsterdam on August 28th 2025.&lt;/p&gt;

    &lt;p&gt;There will be lightning talks and some time for people to
connect. Proposals for the lightning talks should be sent to
Patrick, while the possibility to have remote talks is still
investigated.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://events.linuxfoundation.org/open-source-summit-europe/features/co-located-events/#git-mini-summit-2025&quot;&gt;Registration is open&lt;/a&gt;
for both the Git Mini Summit only and for the Open Source Summit Europe including the Git Mini Summit.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/PN3PR01MB9597A83D537E3AE96144227EB8BA2@PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM/&quot;&gt;[PATCH v4 0/3] send-email: add oauth2 support and fix outlook breaking threads&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Last April, Aditya Garg sent a patch series containing three main
changes to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;. He mentioned that he was sending the
email series using the very patches he was proposing, via Outlook.&lt;/p&gt;

    &lt;p&gt;The first patch was a rebased version of
&lt;a href=&quot;https://lore.kernel.org/git/20250125190131.48717-1-julian@swagemakers.org/&quot;&gt;an earlier patch by Julian Swagemakers&lt;/a&gt;
adding support for OAuth2 authentication, which started to be
required by Microsoft. Julian’s patch unfortunately had been waiting
for review for over a year before Aditya picked it up.&lt;/p&gt;

    &lt;p&gt;The second patch fixed thread breaking caused by Outlook’s
proprietary Message-ID handling.&lt;/p&gt;

    &lt;p&gt;The final patch added a new option for generating passwords, such as
OAuth2 tokens, via an external script.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, reviewed the three patches saying
he liked the commit messages, documentation and code comments even
though he suggested a few small style improvements to the code
style plus a number of grammar and formatting changes to the
documentation.&lt;/p&gt;

    &lt;p&gt;He also asked for reviews from others as he said he was not familiar
with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Authen::SASL&lt;/code&gt; library.&lt;/p&gt;

    &lt;p&gt;Aditya replied to Junio’s review acknowledging the need for more
reviews and saying that OAuth2 was a significant and more secure
technology. He then took the initiative to Cc Greg Kroah-Hartman,
who wrote a precursor of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt; for the Linux kernel.&lt;/p&gt;

    &lt;p&gt;M Hickford also replied to Aditya expressing enthusiasm for the work
but wondering why the v4 version of the patch series was sent in a
new email thread rather than as a reply to the previous version.&lt;/p&gt;

    &lt;p&gt;brian m. carlson commented on the second patch saying that replacing
message IDs like Outlook does is technically allowed by
standards. They raised concerns about hardcoding only two Outlook
server hostnames, and suggested adding configuration options for
Message-ID generation modes.&lt;/p&gt;

    &lt;p&gt;Julian Swagemakers then pointed out that the goal of the third patch
could already be achieved using Git’s existing custom credential
helper mechanism. Aditya confirmed this worked and said he was
unaware of this feature, which led to the decision to drop the third
patch. Recognizing that the existing feature was poorly
discoverable, the discussion led to improvements in Git’s
documentation, adding clearer examples of using credential helpers
for OAuth2 tokens.&lt;/p&gt;

    &lt;p&gt;Erik Huelsmann, the maintainer of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Authen::SASL&lt;/code&gt; Perl module,
joined the conversation after Aditya emailed him directly
referencing a GitHub issue about the lack of OAuth2 support in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Authen::SASL&lt;/code&gt;. In that issue Erik had
&lt;a href=&quot;https://github.com/gbarr/perl-authen-sasl/issues/18#issuecomment-2453040190&quot;&gt;commented that he would be happy to support XOAUTH2&lt;/a&gt;,
but needed a patch and a way to test it.&lt;/p&gt;

    &lt;p&gt;Aditya and Julian then worked together, with guidance from Erik, to
add the necessary XOAUTH2 and OAUTHBEARER support directly into
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Authen::SASL&lt;/code&gt;. Shortly after, a new version of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Authen::SASL&lt;/code&gt;
module was officially released with this new functionality. This
successful collaboration meant the first patch in the series, which
was a workaround for the missing library support, was no longer
needed and was subsequently dropped. Instead, the new version of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Authen::SASL&lt;/code&gt; started to benefit all Perl users.&lt;/p&gt;

    &lt;p&gt;Greg Kroah-Hartman echoed what brian had suggested about using a
configurable solution in the second patch. Greg noted that the
initial approach would not cover company-hosted Outlook servers. Yao
Zi also contributed to this discussion, noting that Tencent’s mail
service had similar issues, further reinforcing the need for a
flexible solution beyond just hardcoding specific server names.&lt;/p&gt;

    &lt;p&gt;That suggestion was then refined by Junio Hamano, who proposed a
concrete implementation for the new option by providing an example
patch. The final &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--[no-]outlook-id-fix&lt;/code&gt; option auto-detects known
Outlook servers but allows manual override for other deployments.&lt;/p&gt;

    &lt;p&gt;After several iterations on its name and behavior, with Eric
Sunshine helping refine the user-facing documentation, Aditya
submitted a final, simplified patch series (v6). It now contained
only the single, refined patch to fix Outlook thread breaking, with
the other two patches having been made obsolete by the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Authen::SASL&lt;/code&gt; library update and the use of existing Git features.&lt;/p&gt;

    &lt;p&gt;Aditya’s patch was merged and released as part of Git v2.50.0.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-usman-akinyemi&quot;&gt;Developer Spotlight: Usman Akinyemi&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Editor’s note: This edition features a retrospective interview with a
contributor who contributed to Git through a mentoring program. We hope
the reflections shared by the Outreachy contributor will provide an
insightful perspective that benefits the community. As always, we
welcome your thoughts and feedback!&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m Usman Akinyemi, a final-year CS and AI student, and an open-source
contributor passionate about Linux, distributed systems, and developer
tools. I’ve contributed to core projects like Git, systemd, LLVM, and
LibreOffice. During &lt;a href=&quot;https://uniqueusman.hashnode.dev/my-outreachy-internship-experience-at-git&quot;&gt;my Outreachy internship&lt;/a&gt;,
I improved Git’s v2 protocol by adding OS-level metadata for better
diagnostics and security.&lt;/p&gt;

    &lt;p&gt;Currently, I’m a &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/wBCitF8F&quot;&gt;Google Summer of Code contributor&lt;/a&gt;
building a containerized pipeline for medical imaging using Kaapana,
Kubernetes and Airflow. I am also currently working on creating a
new subtype for RISC-V assembly instructions through the
Linux Foundation’s LFX program.&lt;/p&gt;

    &lt;p&gt;Outside code, I mentor new contributors, volunteer with DesignIT and
LEAD and CODE to teach digital skills, and organize a tech webinar for
Nigerian students. I’ll be &lt;a href=&quot;https://git-merge.com/#usman-akinyemi&quot;&gt;speaking at Git Merge 2025&lt;/a&gt;,
sharing insights from my open-source journey. I believe in the power of
community, collaboration, and curiosity to build a career that crosses
borders.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How did you initially become interested in contributing to Git,
and what motivated you to choose it as your Outreachy project?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Though I have been contributing to other projects before applying for
Outreachy (Dec 2024), I was just a user of the Git project. When it
comes to the Outreachy contribution period when I had to pick a
project, I picked both Git and LibreOffice. I picked Git as it is a
project I use every time, also the thought of contributing to a
project used by almost all the developers in the whole world was
definitely a dream coming true. To also maximize my getting selected
for Outreachy, I picked Git because it is written in C,
which many other participants are always scared to pick (going for the
hard thing). The story did not end there as I got selected for both
LibreOffice and Git and I had to choose one as my Outreachy projects.
It was a hard decision but I picked it mainly because the Git
community is a community where it is so easy to communicate with other
team members, and it is a community where I clearly know who is who and
what they do in the community. Also Git is more well recognised.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you feel your contribution has impacted the Git community
or the broader open source ecosystem?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20250215155130.1756934-1-usmanakinyemi202@gmail.com/&quot;&gt;My contribution&lt;/a&gt;
makes a fundamental improvement to the Git v2 protocol by enabling
Git clients to share their operating system information via the user
agent string. This helps platforms like GitHub, GitLab, and others
gain visibility into which OS environments are interacting
with their servers. It significantly improves debugging, security
auditing, and telemetry, helping maintainers understand usage patterns
and tailor support or upgrade strategies accordingly. Since this
change is part of the core Git client, it means it is used by all Git
users. I’m proud to have contributed something with such
wide-reaching, foundational impact.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Is there any aspect of Git that you now see differently after
having contributed to it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Before contributing to Git, I saw it as a complex tool that “just
works”. Although I knew Git was different from GitHub, I struggled to
clearly differentiate between the two. But after contributing, I could
clearly differentiate between the two and I now see Git as a carefully
designed software project with a strong emphasis on performance,
cross-platform compatibility, and community-driven development.&lt;/p&gt;

    &lt;p&gt;I’ve come to appreciate the level of thought and care that goes into
every change, from writing clean patches and commit messages to
engaging in technical discussions and defending your design decisions.&lt;/p&gt;

    &lt;p&gt;Contributing to Git isn’t also about hierarchical review; instead,
it’s a collaborative process where every contributor is expected to
take full ownership of their patches, understand the problem they are
trying to fix, the solution and explain their rationale clearly by
writing clean patches, commit messages and engaging in technical
discussions and defending your design decisions. In fact, there have
been moments when some of my contributions led to insights even long
time contributors hadn’t considered, including Junio Hamano. That
boosted my confidence not just in contributing to Git, but to other
software projects as well, i.e., I can get my patches accepted anywhere,
I just need to convince others that it actually solves a problem.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you balance your contributions with other responsibilities
like work or school?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Seriously, it has not been easy, most of my contributions to all
open source projects have always been during college. But, I have sort
of made contributions to open source as one important aspect of my
life and also as a way to learn new technologies and also practice
whatever new skills I learnt. Contributing to projects millions of
people use is also definitely rewarding and satisfying.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Can you share how Outreachy helped enhance your technical and
non-technical skills (like communication, project management, etc.)?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Technically, I have been able to improve my C programming and bash
scripting skills. Also reading and understanding very large codebases
like Git. Of course now I can call myself an expert in using Git as a
tool itself.&lt;/p&gt;

    &lt;p&gt;To contribute to Git, you must be able to communicate well, as all the
Git workflows happen remotely and over mailing lists. Most of the time
in the Git community it is not about the correctness of your code – it
is about how well you can communicate your rationale to the community
before your patches can be accepted. So, over time, as a Git
contributor, my communication skills in a technical environment have
really improved.&lt;/p&gt;

    &lt;p&gt;I have also learnt to write clean code, organize my changes into well
formatted patches, and write clear commit messages.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was your biggest takeaway or learning from Outreachy that
you now apply regularly in your work?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’d say my biggest takeaway from Outreachy is learning how to write
clear, structured commit messages. Git commits, like those in the
Linux kernel, follow a thoughtful format: describe the current state,
the problem, and the fix. From reading most of the commit messages in
Git, you would have understood and been able to visualize what the changes
will look like. It also makes it easy to track the changes to other
prerequisite commits. I have been using the Git commit messages format
in other projects and I really love it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was the biggest challenge you faced during your contributions
to Git, and how did you overcome it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I think the challenge which I initially faced is sending patches to
Git, not really a big challenge though as I was able to make my first
patch in a few days after joining the community. And the reason is
that Git does not use GitHub or GitLab, something someone would have
thought they will be using. Git uses a mailing list just like the
Linux kernel. While writing this, I remember that I had a challenge
retrieving patches from the mailing list as my project depended on some
patches that were sent by my mentor previously. I had to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt;,
something I never used before.  Help from my mentor really helped,
as well as reading through the “&lt;a href=&quot;https://git.github.io/Hacking-Git/&quot;&gt;Hacking Git&lt;/a&gt;”
page.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Have you thought about mentoring new GSoC / Outreachy students?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Yeah, I am planning to put in as a mentor for the coming Outreachy
period and hopefully for GSoC also. I will be starting as a co-mentor
though.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Smile, I will definitely say the Rustication of some parts of Git
which has been going on currently, I think one that has already been
integrated to Git is &lt;a href=&quot;https://lore.kernel.org/git/cover.1738187176.git.steadmon@google.com/&quot;&gt;libgit-rs&lt;/a&gt;.
Rust seems to be a language that focuses more on safety/security,
and safety/security is very important in Git. I am also a Rustacean
so I should be able to help hopefully if that happens.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I really do not have anything in mind for now.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What upcoming features or changes in Git are you particularly
excited about?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I think it is one of the &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/fGgMYHwl&quot;&gt;GSoC projects by Lucas&lt;/a&gt;.
I have been passively following the project. It is about introducing
a new Git sub-command (currently intended to be called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repo-info&lt;/code&gt;)
that will centralize data currently retrieved by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse&lt;/code&gt; in a
JSON format.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I think it’s both GitHub and GitLab – if I have to choose one, I will say GitHub.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I started with &lt;a href=&quot;https://gitgitgadget.github.io/&quot;&gt;GitGitGadget&lt;/a&gt; initially
just to get my patches to the mailing list faster but, along the line
I switched to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt; and really, it is more flexible and easy
to use than I thought of it. For my machine, I basically use Arch Linux
and Neovim as my text editor.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you envision your own involvement with Git or other open
source projects in the future?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;As I said earlier, open source has really been part of my life and it
has really helped me a lot in improving my skills, meeting new people
and even making some few bucks through internships. After my
internship at Outreachy, I did send patches to the Git community and I
planned to keep doing that. After Outreachy, I have contributed to a
few other projects like RISC-V and OSIPI (through GSoC). I currently
mentor people who want to start their open source journey, and I plan
to do more of it. I planned to keep contributing to open source
projects and hopefully get a job in open source.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I have been in many open source projects and see how their workflows
are, I will definitely say Git is one of the easiest and most
interesting projects to contribute to. The community members are
really supportive. Seriously, it is one of the best open source
communities I have been to. The best place to start is going through
the “&lt;a href=&quot;https://git.github.io/Hacking-Git/&quot;&gt;Hacking Git&lt;/a&gt;” page. It has
all the information on how to start contributing and you can make
your first contribution to Git. You should generally start with a
microproject which aims to introduce you to the Git contribution
workflow. Everything can be found above. Making your first contribution
to Git is actually very much easier than you might have thought.
Also, do not be scared to ask for help, Git developers are always ready to render help.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Would you recommend other students or contributors to participate in
the GSoC, Outreachy or other mentoring programs, working on Git?
Why? Do you have advice for them?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Definitely, Outreachy and GSoC are very much interesting mentoring
programs to start your open source journey. They both really make it
easy to start contributing to open source. You get assigned to mentors
who are experts in open source and the organization. It is a way to get
skills you will never be able to get in your classroom and skills
needed to thrive and excel in the software engineering world. Apart
from skills, it is a way to have proof of work before graduation and
also gain global recognition. As I have said, Git is a well known and
recognized software project in the whole world, contributing to it is
an achievement on its own.&lt;/p&gt;

    &lt;p&gt;&lt;em&gt;Shout session&lt;/em&gt;&lt;/p&gt;

    &lt;p&gt;I would like to shout out to all Git contributors, you are doing a
great job! I would also like to shout out to my Outreachy mentor
Christian Couder, he was really supportive during my Outreachy
program! Thanks to the Git Rev teams also!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1029182/&quot;&gt;[LWN.net] A set of Git security-fix releases&lt;/a&gt;
by Jonathan Corbet on LWN.net, and&lt;br /&gt;
&lt;a href=&quot;https://www.openwall.com/lists/oss-security/2025/07/08/4&quot;&gt;Multiple vulnerabilities fixed in Git&lt;/a&gt;
by Taylor Blau on oss-security mailing list.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqzfdevcov.fsf@gitster.g/t/#u&quot;&gt;[ANNOUNCE] Git v2.50.1 and friends&lt;/a&gt;
by Junio C Hamano on the Git mailing list.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://launchpad.net/&quot;&gt;Launchpad&lt;/a&gt; is &lt;a href=&quot;https://discourse.ubuntu.com/t/phasing-out-bazaar-code-hosting/62189&quot;&gt;phasing out Bazaar code hosting&lt;/a&gt;.
This post provides a link to the &lt;a href=&quot;https://jugmac00.github.io/blog/migrate-a-repository-from-bazaar-to-git/&quot;&gt;Migrate a Repository From Bazaar to Git&lt;/a&gt; article.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://drew.silcock.dev/blog/artisanal-git/&quot;&gt;Artisanal Handcrafted Git Repositories&lt;/a&gt;
by Drew Silcock on drew’s dev blog.
This article talks about how to handmake your Git repositories without using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; commands.
You might also learn a bit more about how Git works under the hood during the process.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.andreagrandi.it/posts/how-to-use-git-worktree-effectively-with-python-projects/&quot;&gt;How to use git worktree effectively with Python projects&lt;/a&gt;
(with the help of a simple &lt;a href=&quot;https://gist.github.com/andreagrandi/542b438bf0017d93aff2b640037e3ce1&quot;&gt;git-add-worktree.sh&lt;/a&gt; Bash script)
by Andrea Grandi on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/parallel-claude-code/&quot;&gt;Managing Multiple Claude Code Sessions Without Worktrees&lt;/a&gt;
by Scott Chacon on Butler’s Log (GitButler Blog).
With &lt;a href=&quot;https://www.anthropic.com/claude-code&quot;&gt;Claude Code&lt;/a&gt;’s new &lt;a href=&quot;https://docs.anthropic.com/en/docs/claude-code/hooks&quot;&gt;lifecycle hooks&lt;/a&gt;,
&lt;a href=&quot;https://gitbutler.com/&quot;&gt;GitButler&lt;/a&gt; Git client auto-sorts simultaneous AI coding into separate branches,
without manual &lt;a href=&quot;https://www.anthropic.com/engineering/claude-code-best-practices#c-use-git-worktrees&quot;&gt;use of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt;&lt;/a&gt;.
With this feature you can write three features, and get three clean branches.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/satococoa/wtp-a-better-git-worktree-cli-tool-4i8l&quot;&gt;wtp: A Better Git Worktree CLI Tool&lt;/a&gt;
by Satoshi Ebisawa on DEV.to.
The &lt;a href=&quot;https://github.com/satococoa/wtp&quot;&gt;wtp&lt;/a&gt; tool was created to make
working with multiple tasks in parallel using &lt;a href=&quot;https://www.anthropic.com/claude-code&quot;&gt;Claude Code&lt;/a&gt;
easier than with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.pamelafox.org/2025/07/automated-repo-maintenance-with-github.html&quot;&gt;Automated repo maintenance via GitHub Copilot coding agent&lt;/a&gt;
by Pamela Fox on her Blogger-based blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.nickyt.co/blog/git-worktrees-git-done-right-2p7f/&quot;&gt;Git Worktrees: Git Done Right&lt;/a&gt;
by Nick Taylor on Just Some Dev blog (and also &lt;a href=&quot;https://dev.to/nickytonline/git-worktrees-git-done-right-2p7f&quot;&gt;on DEV.to&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/karandeepsingh7070/i-lost-my-git-stash-so-i-built-a-tool-to-share-it-27bn&quot;&gt;I Lost My Git Stash, So I Built a Tool (VS Code Extension) to Share It&lt;/a&gt;
by Karandeep Singh on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://adamj.eu/tech/2025/07/15/git-share-fast-export/&quot;&gt;Git: share a full repository as a file with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fast-export&lt;/code&gt;&lt;/a&gt;
by Adam Johnson on his blog
(for some reason the post does not mention the alternative of using
&lt;a href=&quot;https://git-scm.com/docs/git-bundle&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bundle&lt;/code&gt;&lt;/a&gt;).
    &lt;ul&gt;
      &lt;li&gt;Adam Johnson is the author of “&lt;a href=&quot;https://adamchainz.gumroad.com/l/bygdx&quot;&gt;Boost Your Git DX&lt;/a&gt;” book,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/10/31/edition-104/&quot;&gt;Git Rev News Edition #104&lt;/a&gt;,
then its updates in &lt;a href=&quot;https://git.github.io/rev_news/2024/04/30/edition-110/&quot;&gt;#110&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2025/01/31/edition-119/&quot;&gt;#119&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://srazkvt.codeberg.page/posts/2025-07-06-conventional-commits-makes-me-sad.html&quot;&gt;Conventional Commits makes me sad&lt;/a&gt;
by Sarah Mathey on her Codeberg Pages powered Sarah’s Website blog.&lt;br /&gt;
The &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; specification
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pksunkara.com/thoughts/git-experts-should-try-jujutsu/&quot;&gt;Git experts should try Jujutsu&lt;/a&gt;
by Pavan Sunkara on his personal blog.&lt;br /&gt;
&lt;a href=&quot;https://github.com/martinvonz/jj&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; is a version control system
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://maddie.wtf/posts/2025-07-21-jujutsu-for-busy-devs&quot;&gt;Jujutsu For Busy Devs&lt;/a&gt; and
by Madeleine Mortensen on her personal blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://radicle.xyz/2025/07/23/using-radicle-ci-for-development&quot;&gt;Using Radicle CI for Development&lt;/a&gt;
by Lars Wirzenius on Radicle Blog.&lt;br /&gt;
&lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt; is the distributed git hosting system,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.circusscientist.com/2025/07/23/cutting-github-out-of-the-loop/&quot;&gt;Cutting GitHub out of the loop&lt;/a&gt;
(by deploying to a VPS with Git and SSH).
Written by tomjuggler on The Circus Scientist Site.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ratfactor.com/cards/super-easy-2-stage-git-deployment&quot;&gt;Super Easy* 2-Stage Git Deployment&lt;/a&gt;
by Dave Gauer on Dave’s Virtual Box of Cards.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://trufflesecurity.com/blog/guest-post-how-i-scanned-all-of-github-s-oops-commits-for-leaked-secrets&quot;&gt;Guest Post: How I Scanned all of GitHub’s “Oops Commits” for Leaked Secrets&lt;/a&gt;
by Sharon Brizinov on The Dig, the Truffle Security blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/vaib/top-17-essential-git-tools-for-enhanced-developer-productivity-7f3&quot;&gt;Top 17 Essential Git Tools for Enhanced Developer Productivity&lt;/a&gt;
by vAlber on DEV.to.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://diffx.org/&quot;&gt;DiffX - Next-Generation Extensible Diff Format&lt;/a&gt;:
describes problem with Unified Diff format, and proposes as a solution
a new file format specification for Extensible Diffs,
fully backwards-compatible with existing tools,
while also being future-proof and remaining human-readable.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/yaitskov/git-phoenix&quot;&gt;git-phoenix&lt;/a&gt; is a command line tool
that does repository recovery after accidental removal or file system failure,
using &lt;a href=&quot;https://www.cgsecurity.org/wiki/PhotoRec&quot;&gt;photorec&lt;/a&gt; (or similar tool).
Written in Haskell, under 3-clause BSD license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/satococoa/wtp&quot;&gt;wtp (Worktree Plus)&lt;/a&gt; is a Git worktree management tool
that extends git’s worktree functionality with
automated setup, branch tracking, and project-specific hooks.
Written in Go, under the MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitnifty.js.org/index.html&quot;&gt;GitNifty&lt;/a&gt; is a robust and promise-based Git utility for Node.js,
offering developers smart, automation-ready commands for common Git operations.
Created for building CLI tools, automation scripts, or custom Git workflows.
Written in TypeScript, and released under the Apache License.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/yoshiko-pg/difit&quot;&gt;difit&lt;/a&gt; is a CLI tool
that lets you view and review local git diffs with a GitHub-style viewer
(in a browser).  Written in TypeScript, under MIT license.&lt;br /&gt;
See &lt;a href=&quot;https://dev.to/unhappychoice/difit-preview-github-like-diffs-locally-before-you-push-37gc&quot;&gt;difit: Preview GitHub-like diffs locally before you push&lt;/a&gt;
by Yuji Ueki on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://flintable.com/docs/flint/&quot;&gt;Flint&lt;/a&gt; is a Git-integrated code formatter
that lets each developer work in their preferred style locally,
while maintaining a consistent style remotely.
By automatically applying “local” and “remote” formatting passes during pull and push operations,
Flint prevents formatting noise in commits and code reviews.
It is currently in &lt;em&gt;alpha&lt;/em&gt; and is available exclusively on npm.
Written in Bash, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dotproj.ac-jr.com/&quot;&gt;DotProj&lt;/a&gt; is a developer-centric CLI tool
designed to manage project-specific configuration files with Git versioning.
It helps keep your development environment settings organized, versioned, and synchronized
across multiple machines and projects.
DotProj uses Git commands (commit, push, pull, clone) making it intuitive for developers.
Written as a Bash shell script, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/chrislloyd/git-remote-sqlite&quot;&gt;git-remote-sqlite&lt;/a&gt;
is a &lt;a href=&quot;https://git-scm.com/docs/gitremote-helpers&quot;&gt;Git protocol helper&lt;/a&gt;
that helps you store a Git repository in a SQLite database.
Written in Zig, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://backlog.md/&quot;&gt;Backlog.md&lt;/a&gt; is a tool that turns any folder with a Git repo
into a self-contained project board, powered by plain Markdown files
and a zero-config CLI.  Written in TypeScript, under MIT license.  AI ready.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://elixir.bootlin.com/linux/v6.16-rc3/source/scripts/git-resolve.sh&quot;&gt;git-resolve.sh&lt;/a&gt;
is a Bash script that resolves a short git commit ID to its full SHA-1 hash,
which is particularly useful for fixing references in commit messages.
Under GPL-2.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.githubtrends.io/&quot;&gt;GitHub Trends&lt;/a&gt; is a service that
uses the GitHub API to bring you insightful metrics on your contributions,
broken by repository and language.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://deepwiki.com/&quot;&gt;DeepWiki&lt;/a&gt;: AI-generated docs for any repo.
This service turns any public GitHub repo into up-to-date documentation you can talk to
(see for example &lt;a href=&quot;https://deepwiki.com/git/git&quot;&gt;DeepWiki: git/git&lt;/a&gt;.
DeepWiki is the free public version of &lt;a href=&quot;https://docs.devin.ai/work-with-devin/devin-wiki&quot;&gt;Devin Wiki&lt;/a&gt; and &lt;a href=&quot;https://docs.devin.ai/work-with-devin/devin-search&quot;&gt;Devin Search&lt;/a&gt;.&lt;br /&gt;
There are a few similar projects, like
&lt;a href=&quot;https://github.com/AsyncFuncAI/deepwiki-open&quot;&gt;Open Source DeepWiki&lt;/a&gt; and
&lt;a href=&quot;https://github.com/AIDotNet/OpenDeepWiki&quot;&gt;OpenDeepWiki&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pamelafox/github-repo-maintainer-agent/&quot;&gt;GitHub Repository Maintenance Agent&lt;/a&gt;
is an AI-powered agent for triaging failed &lt;a href=&quot;https://docs.github.com/en/code-security/getting-started/dependabot-quickstart-guide&quot;&gt;Dependabot&lt;/a&gt; pull requests
across one’s GitHub repositories. The agent uses &lt;a href=&quot;https://ai.pydantic.dev/&quot;&gt;Pydantic AI&lt;/a&gt;
for LLM-based decisions and the GitHub API for repository, PR, and issue management.
Written in Python, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tangled.sh/&quot;&gt;tangled&lt;/a&gt; is a new social-enabled git collaboration platform
built on the &lt;a href=&quot;https://atproto.com/&quot;&gt;AT Protocol&lt;/a&gt; (that powers the Bluesky social network).
Written in Go, under MIT license; note that it is in alpha stage of development.&lt;br /&gt;
Compare with:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt;, a peer-to-peer, local-first code collaboration stack built on Git
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;).&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://forgefed.org/&quot;&gt;ForgeFed&lt;/a&gt; (formerly GitPub), a federation protocol for software forges
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/11/27/edition-69/&quot;&gt;Git Rev News Edition #69&lt;/a&gt;).&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://scuttlebot.io/apis/community/git-ssb.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-ssb&lt;/code&gt;&lt;/a&gt;
(see the &lt;a href=&quot;https://github.com/hackergrrl/git-ssb-intro&quot;&gt;git-ssb-intro&lt;/a&gt; guide), a
decentralized Git repo hosting and issue tracking on &lt;a href=&quot;https://www.scuttlebutt.nz/&quot;&gt;Secure-ScuttleButt (SSB)&lt;/a&gt;
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/04/19/edition-26/&quot;&gt;Git Rev News Edition #26&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/fiatjaf/gitstr&quot;&gt;gitstr (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git str&lt;/code&gt;)&lt;/a&gt;,
a tool to send and receive Git patches
over &lt;a href=&quot;https://nostr.com/&quot;&gt;Nostr&lt;/a&gt;, using &lt;a href=&quot;https://github.com/nostr-protocol/nips/pull/997&quot;&gt;NIP-34&lt;/a&gt;
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/03/31/edition-109/&quot;&gt;Git Rev News Edition #109&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sr.ht/~meejah/git-withme/&quot;&gt;Git With Me&lt;/a&gt; is a tool for
peer-to-peer, encrypted, ephemeral Git collaboration.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git withme&lt;/code&gt; provides a way for a single host to invite numerous peers
 with short, one-time secure codes. The peers connect directly via
 &lt;a href=&quot;https://meejah.ca/blog/fow-wormhole-forward&quot;&gt;Dilated Magic Wormhole channels&lt;/a&gt;,
 allowing collaborators to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone git://localhost/&amp;lt;repo-name&amp;gt;&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://desktop.radicle.xyz/&quot;&gt;Radicle Desktop&lt;/a&gt; is a desktop application
that lets you interact with &lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt;,
a peer-to-peer code collaboration and publishing stack.
Written in TypeScript for Node.js and Rust, using the Tauri framework.
Under GPLv3 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dvig14/gitbug&quot;&gt;GitBug: Git Learning Simulator&lt;/a&gt;
is a CLI app that teaches Git through hands-on bug fixing.
It uses a realistic merge conflict scenario with visual feedback at every step.
The goal of the app is to help you learn by doing, not just reading.
Written in Python, under MIT license, in early stage (alpha).&lt;br /&gt;
Compare with:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://learngitbranching.js.org/&quot;&gt;Learn Git Branching&lt;/a&gt;,
mentioned first in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;Git Rev News Edition #30&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nic-hartley.github.io/git-gud/&quot;&gt;Git Gud&lt;/a&gt;, a visual web-based Git simulator,
meant to help understand Git better, announced by its author Nic Hartley in
&lt;a href=&quot;https://dev.to/nichartley/git-gud-at-git-5d9k&quot;&gt;Git Gud at git&lt;/a&gt;.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Git Rev News Edition #48&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/benthayer/git-gud&quot;&gt;Git Gud&lt;/a&gt;, a command line game
designed to help you learn how to use the Git version control system.
Written in Python by Ben Thayer. First mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://ohmygit.org/&quot;&gt;Oh My Git!&lt;/a&gt;, an open source game about learning Git,
written using the Godot game engine (&lt;a href=&quot;https://github.com/git-learning-game/oh-my-git&quot;&gt;source&lt;/a&gt;).
There was a lightning talk about this game at FOSDEM 2021:
&lt;a href=&quot;https://fosdem.org/2021/schedule/event/git_learning_game/&quot;&gt;Building a Git learning game: A playful approach to version control&lt;/a&gt;.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/initialcommit-com/git-sim&quot;&gt;Git-Sim&lt;/a&gt; tool (written in Python)
to visually simulate Git operations in your own repos with a single terminal command.
Described in &lt;a href=&quot;https://initialcommit.com/blog/git-sim&quot;&gt;Git-Sim: Visually Simulate Git Operations In Your Own Repos&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;Git Rev News Edition #95&lt;/a&gt;)
and &lt;a href=&quot;https://initialcommit.com/blog/git-sim-3-month-dev-update&quot;&gt;Git-Sim 3 Month Dev Update: Community Response, New Features, &amp;amp; The Future&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/04/30/edition-98/&quot;&gt;Edition #98&lt;/a&gt;).&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://git-school.github.io/visualizing-git/&quot;&gt;Visualize Git&lt;/a&gt; web app
that illustrates what’s going on under the hood when you use common Git operations,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/01/31/edition-107/&quot;&gt;Git Rev News Edition #107&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://devlands.com/&quot;&gt;Devlands&lt;/a&gt;, which is the game that creates
immersive experience to help learning Git.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2025/04/30/edition-122/&quot;&gt;Git Rev News Edition #122&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dawedawe/ferriby&quot;&gt;Ferriby&lt;/a&gt; is a CLI game
where you try to keep Ferrises alive and happy
by feeding them commits in your repositories.
Written in Rust, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pridever.org/&quot;&gt;Pride Versioning&lt;/a&gt;,
a &lt;a href=&quot;https://mastodon.online/@nikitonsky/113691789641950263&quot;&gt;joking take&lt;/a&gt;
on &lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning (SemVer)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://lore.kernel.org/git/xmqq5xg2wrd1.fsf@gitster.g/&quot;&gt;2.50.1 and friends&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.50.1.windows.1&quot;&gt;2.50.1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.50.0.windows.2&quot;&gt;2.50.0(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.49.1.windows.1&quot;&gt;2.49.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.4&quot;&gt;3.17.4&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.7&quot;&gt;3.16.7&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.11&quot;&gt;3.15.11&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.16&quot;&gt;3.14.16&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.3&quot;&gt;3.17.3&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.6&quot;&gt;3.16.6&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.10&quot;&gt;3.15.10&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.15&quot;&gt;3.14.15&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.2&quot;&gt;3.17.2&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.5&quot;&gt;3.16.5&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.9&quot;&gt;3.15.9&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.14&quot;&gt;3.14.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/07/23/patch-release-gitlab-18-2-1-released/&quot;&gt;18.2.1, 18.1.3, 18.0.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/07/17/gitlab-18-2-released/&quot;&gt;18.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/07/09/patch-release-gitlab-18-1-2-released/&quot;&gt;18.1.2, 18.0.4, 17.11.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3107&quot;&gt;3.10.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3114&quot;&gt;3.11.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3121&quot;&gt;3.12.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.2.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.2.0&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.1.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.1.0&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.5.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.5.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.13.html&quot;&gt;4.2.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.15.8&quot;&gt;0.15.8&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.15.7&quot;&gt;0.15.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sublime Merge &lt;a href=&quot;https://www.sublimemerge.com/download&quot;&gt;Build 2110&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;13.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;9.1&lt;/a&gt; - &lt;a href=&quot;https://youtu.be/4pNRUz0bNIU&quot;&gt;YT video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Usman Akinyemi, brian m. carlson, Aditya Garg,
Erik-B. Ernst, Bruno Brito and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 124 (June 30th, 2025)</title>
      <link>https://git.github.io/rev_news/2025/06/30/edition-124/</link>
      <pubDate>Mon, 30 Jun 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/06/30/edition-124/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-124-june-30th-2025&quot;&gt;Git Rev News: Edition 124 (June 30th, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 124th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of May and June 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/TO1PPF29324B4CE6D3518208073452C3C51CD97A@TO1PPF29324B4CE.CANPRD01.PROD.OUTLOOK.COM/&quot;&gt;[BUG] &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; incorrectly showing submodule branch instead of superproject branch&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Stuart MacDonald sent a bug report to the mailing list. The report
described a workflow where people worked on a UI project that
included a hardware SDK as a submodule. Both the UI project (the
“superproject”) and the SDK project (the submodule) had their own
branches.&lt;/p&gt;

    &lt;p&gt;When using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; on a bug fix branch on the superproject,
while the submodule was on a feature branch, it appeared that the
command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash list&lt;/code&gt; output a message, like:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stash@{0}: On feature_sdk_foo: debugging&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;indicating the stash had been created on the submodule’s branch
instead of the superproject’s branch. The branch &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feature_sdk_foo&lt;/code&gt;
didn’t even exist in the superproject.&lt;/p&gt;

    &lt;p&gt;Stuart mentioned he thought this used to work correctly around 2021,
though he wasn’t 100% certain.&lt;/p&gt;

    &lt;p&gt;K Jayatheerth replied to Stuart confirming the bug happened on
different OSes, showing minimal steps to reproduce it, and saying it
was “one of the most interesting Git bugs” he had seen in a while.&lt;/p&gt;

    &lt;p&gt;Jayatheerth came back later with
&lt;a href=&quot;https://lore.kernel.org/git/20250512164001.62065-1-jayatheerthkulkarni2005@gmail.com/&quot;&gt;a patch&lt;/a&gt;
that fixed the bug. It appeared that the branch name was obtained
via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;refs_resolve_ref_unsafe()&lt;/code&gt; function, which returns a
pointer to a static buffer, but that static buffer was overwritten.
To fix this, the patch copied the branch name instead of pointing to
the static buffer.&lt;/p&gt;

    &lt;p&gt;Stuart thanked Jayatheerth even though he couldn’t rebuild Git with
the patch.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to the patch with small
suggestions, while Eric Sunshine noted that the change should also
be accompanied by a new test.&lt;/p&gt;

    &lt;p&gt;Jayatheerth replied to Eric and Junio saying he would fix the small
issues and add tests, which he later did in
&lt;a href=&quot;https://lore.kernel.org/git/20250608063537.233243-1-jayatheerthkulkarni2005@gmail.com/&quot;&gt;an updated patch&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;René Scharfe reviewed the updated patch and suggested a number of
improvements to the code and the test.&lt;/p&gt;

    &lt;p&gt;Jayatheerth then sent
&lt;a href=&quot;https://lore.kernel.org/git/20250608144542.275836-1-jayatheerthkulkarni2005@gmail.com/&quot;&gt;a v2 of his patch&lt;/a&gt;
which addressed René’s comments. Junio reviewed it and suggested
further improvements.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20250611014204.24994-1-jayatheerthkulkarni2005@gmail.com/&quot;&gt;The v3 patch from Jayatheerth&lt;/a&gt;
addressed Junio’s comments and was merged.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;community-spotlight-luca-milanesio&quot;&gt;Community Spotlight: Luca Milanesio&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Luca Milanesio is a long standing contributor to both JGit and Gerrit
Code Review, an open-source veteran who’s been accelerating Application
Lifecycle workflows for 30+ years—from founding GerritHub.io to pioneering
AI-powered repository optimization research.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a continuation of our initiative to interview community
contributors outside of our mailing list. Our previous interviews
were with &lt;a href=&quot;https://git.github.io/rev_news/2023/12/31/edition-106/#community-spotlight-vonc&quot;&gt;VonC in edition 106&lt;/a&gt; and &lt;a href=&quot;https://git.github.io/rev_news/2025/02/28/edition-120/#community-spotlight-chris-torek&quot;&gt;Chris Torek in edition 120&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My name is Luca Milanesio, and I am the CEO of GerritForge Inc.,
a company I founded 6 years ago, which is fully dedicated to the
development and support of Git and the Gerrit Code Review ecosystem
for medium and large enterprises around the globe.&lt;/p&gt;

    &lt;p&gt;I am a passionate Open-Source contributor, and I have helped many
projects grow over my 30+ years of software development career,
including Jenkins, JGit, GitBlit, Swagger/Open-API, Kibana, Avro,
and Gerrit Code Review.&lt;/p&gt;

    &lt;p&gt;I am a maintainer and release manager of Gerrit Code Review, a
member of its Engineering Steering Committee, and committer of the
JGit project.&lt;/p&gt;

    &lt;p&gt;I introduced GerritHub.io 11 years ago, a free Gerrit Code Review
service for all public and private projects on GitHub. It has over
50k subscribers and is currently used by over 300 organisations and
open-source projects worldwide.&lt;/p&gt;

    &lt;p&gt;My latest work is research about using AI, specifically reinforcement
learning, to dynamically understand and learn how Git repository metrics
evolve and execute actions to improve their performance by up to 100x.
The research has been selected for the 50th edition of the &lt;a href=&quot;https://conf.researchr.org/home/icse-2025&quot;&gt;IEEE/ACM
International Conference on Software Engineering in Ottawa (CA)&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What would you name your most important contribution to the Git ecosystem?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I have introduced a multi-site replication plugin between the Git
repositories managed by JGit and Gerrit Code Review [&lt;a href=&quot;https://gerrit.googlesource.com/plugins/multi-site/+/refs/heads/master/DESIGN.md&quot;&gt;ref&lt;/a&gt;].&lt;/p&gt;

    &lt;p&gt;Google introduced the multi-site replication concept in JGit from
the very beginning in 2012, &lt;a href=&quot;https://review.gerrithub.io/c/eclipse-jgit/jgit/+/3930&quot;&gt;with the introduction of DFS&lt;/a&gt;, a
multi-site distributed storage mechanism for Git. Although DFS was
a completely abstract interface layer that could have been
implemented on top of any distributed storage, in practice, it was
effectively implemented and used only by Google in its internal
implementation of JGit.&lt;/p&gt;

    &lt;p&gt;In the meantime, the rest of the Open-Source community was left with
the traditional filesystem-based implementation and its extensions
to work effectively and efficiently with a shared filesystem (e.g., NFS).
I started using the NFS implementation of JGit on GerritHub.io and
contributed many patches and improvements over the years. Still, I
was soon hit with all the quirks and limitations of the NFS protocol
in trying to mock the “illusion” of a POSIX filesystem over a network
protocol, including locking, stale file handles, and caching
inconsistencies. After working for 4 years on the NFS implementation
of JGit on GerritHub.io on a shared filesystem, I forked the
&lt;a href=&quot;https://gerrit.googlesource.com/plugins/high-availability&quot;&gt;high-availability plugin project&lt;/a&gt; and started the
&lt;a href=&quot;https://gerrit.googlesource.com/plugins/multi-site/+/refs/heads/master/DESIGN.md&quot;&gt;multi-site project&lt;/a&gt;, which has now entered its 6th year of adoption.&lt;/p&gt;

    &lt;p&gt;Thanks to the multi-site support, anyone worldwide can use Git
replication across Gerrit primary nodes without fearing a
split-brain disaster, as it &lt;a href=&quot;https://github.blog/news-insights/company-news/oct21-post-incident-analysis/&quot;&gt;historically happened years ago&lt;/a&gt;
on a large-scale Git service.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;With over 30 years in software development, how have you seen version
control systems evolve, and what makes Git stand out in this evolution?&lt;/strong&gt;
`
I started using RCS on my Unix box for tracking the local version of files
and avoiding bad surprises, and since then I’ve seen so many so-called
revolutions of the version control that promised “the moon” but ended up
creating yet another commercial silo. To name a few, consider
&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_DevOps_Code_ClearCase&quot;&gt;Rational ClearCase&lt;/a&gt; and &lt;a href=&quot;https://www.perforce.com/&quot;&gt;Perforce&lt;/a&gt;, and the legacy
they have made for the software industry.&lt;/p&gt;

    &lt;p&gt;In my experience, version control is the foundation of any Software
Development Life Cycle (SDLC for short) and should always be thought of
as an evolving technology: I don’t believe that Git is here to stay
forever as-is, even though it would be difficult to imagine an
Open-Source project starting today not using Git as version control.&lt;/p&gt;

    &lt;p&gt;But if you roll back to the year 2000, you could have swapped Microsoft
with VA Software and Git with Subversion, and asked the same question:
&lt;em&gt;`“What version control and hosting site should a new Open-Source project
use?”&lt;/em&gt; I believe the answer would differ significantly from the one you
have today [&lt;a href=&quot;https://en.wikipedia.org/wiki/SourceForge&quot;&gt;ref&lt;/a&gt;].&lt;/p&gt;

    &lt;p&gt;What makes Git different from its predecessors is its adoption in
large Open-Source projects unlikely to be discontinued any time soon,
such as Linux and the Android OS project. With the advent of IoT and
the extensive adoption of Android OS everywhere, from appliances to
aerospace and automotive, Git version control has become responsible
for powering the SDLC of most devices we use daily.&lt;/p&gt;

    &lt;p&gt;A second factor that has brought Git to the world stage as the future
of VCS is its ability to abstract from any vendor bias and be truly
driven by only its user base: software developers. Git was invented
by Linus Torvalds because he needed it, not because a company X wanted
to disrupt the market of the existing version control system Y to
achieve goal Z.&lt;/p&gt;

    &lt;p&gt;A third factor is the growth of other Git-compatible version control
systems, such as &lt;a href=&quot;https://jj-vcs.github.io/jj/latest/&quot;&gt;JJ (aka Jujutsu)&lt;/a&gt;. Git is, first of all, a data
format for versioned directories and BLOBs and a protocol on how this
data can be safely transferred between peers: no implementation-specific
quirks, no vendor lock-ins, no silos, just data and protocol.
This has led other developers, like &lt;a href=&quot;https://github.com/martinvonz&quot;&gt;Martin Von Zweigbergk&lt;/a&gt;
(Senior Software Engineer @Google), to create version control systems
on top of it, assuring interoperability with the existing code and
innovation simultaneously.&lt;/p&gt;

    &lt;p&gt;This is unprecedented and unique in the history of VCSs I have seen
in my whole 30+ career as a Software Developer. Do I believe that
Git will continue to exist in its current form in 25 years from
now? No, I believe it will be very different in the future, but
its foundations will remain the same, and I see many more
evolutions similar to Martin’s JJ project.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;You’ve been working on comparing Git reftable implementations
with JGit alternatives. Could you walk us through what motivated
this research and preview any interesting findings you’ve
discovered?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Being the Gerrit Code Review release manager comes with many
responsibilities, including verifying that whatever we release
is production-ready and always better than what has ever been
released. That also includes, first and foremost, the Git
performance, following Shawn Pearce’s (Gerrit Code Review
project founder, R.I.P.) mantra, “performance is a feature.”&lt;/p&gt;

    &lt;p&gt;We have been working in Q1 of 2025 to release and certify
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html&quot;&gt;Gerrit v3.12&lt;/a&gt;, which includes the latest and
greatest of JGit’s implementation of reftable, which was
available since 2019 but not used in Gerrit because of the
lack of support from the C Git project. Some parts of Gerrit
use the “C Git” implementation for some scripting side
and replication; therefore, a Git repository with reftable
would not have been compatible with Gerrit until Git v2.45,
which was &lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/RelNotes/2.45.0.adoc&quot;&gt;released last year&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;In February 2024, at the time of the release of reftable
support in Git v2.45, I was busy with my AI research work
for &lt;a href=&quot;https://conf.researchr.org/home/icse-2025&quot;&gt;optimising Git performance&lt;/a&gt;, and I immediately
thought that it was the right time to put JGit and C Git
implementation of reftable in the arena and see how they
interoperate and perform during heavy workload.&lt;/p&gt;

    &lt;p&gt;The first finding was that reftable has an entirely different
philosophy from any other ref storage used before by Git.
Loose refs and packed refs are both based on the concept of
file-level locking and caching. Both C Git and JGit ensure
that every update is atomic by carefully creating and releasing
ref-level or packed-refs-level lock files and using atomic
filesystem updates to ensure that the concurrency of reads
and updates does not impact the normal functionality of
in-flight operations. JGit has a “wait for lock” mechanism
where the in-flight operation would wait for the lock file
to be released before acquiring the resource, with an exponential
backoff mechanism on packed-refs, whilst C Git just fails the
operation with a lock failure.&lt;/p&gt;

    &lt;p&gt;Reftable is different because it is designed to be highly
scalable and performant, compared to loose refs or packed-refs.
To prioritise performance and low latency, reftable decides
to give up thread safety and locking altogether, relying on an
optimistic locking pattern. In a nutshell, whilst packed-refs
blocks the file and waits until it is released, reftable allows
multiple users to access the same data on disk and refer
directly without locking. The operation is always safe because,
unlike packed-refs and loose-refs, the reftable files are always
immutable and therefore safe to be shared concurrently without
any locks.&lt;/p&gt;

    &lt;p&gt;What’s the catch? The concurrent updates of the same refs by
two different threads or processes will want to update the
list of reftables simultaneously. Whoever manages to perform
the update is gaining the “logical lock” and will cause any
other concurrent threads or processes to fail the whole
transaction they may have prepared.&lt;/p&gt;

    &lt;p&gt;Why is this different from loose-refs and packed-refs? The
client interaction and compensation behaviour with a reftable
needs to be substantially different: if with loose-refs or
packed-refs the client was retrying the operation, or just
waiting in case of JGit, with reftable the client should
abort the whole logical operation, destroy the current
snapshot of the reftable read in memory, and restart the
whole transaction from scratch.&lt;/p&gt;

    &lt;p&gt;The issue here is that reftable is simply configured
as a storage format for the refs, and the higher layers
are currently unprepared to manage the difference in
behaviour. This is currently causing trouble in the
JGit world, with &lt;a href=&quot;https://github.com/eclipse-jgit/jgit/issues/102&quot;&gt;some initial issues reported&lt;/a&gt; at the
API level, like the lack of “auto-refresh” and even more
problematic &lt;a href=&quot;https://github.com/eclipse-jgit/jgit/issues/130&quot;&gt;stability problems reported on Gerrit Code Review&lt;/a&gt;
when using reftable from concurrent threads.&lt;/p&gt;

    &lt;p&gt;The $1M question about reftable is, &lt;em&gt;“Is it ready for mainstream
use in production?”&lt;/em&gt; My answer is obviously a bold yes, but with
a very important caveat: whoever is using reftable should be aware
of what it is and how it should be used, and cannot be simply used
blindly, assuming that it works exactly as a loose-ref or
packed-refs. Reftable is ready, Git and Gerrit Code Review aren’t
ready yet to leverage it, and I am sure they will soon be adjusted
to get the best use of it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What’s your approach to load testing Git repositories - which
tools work best, what key metrics should organizations monitor,
and what are some interesting findings from your research in
this area?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;At GerritForge, we’ve been investing a lot of time and effort
in testing and improving the performance of Git repositories,
as demonstrated by the recent research paper published on the
use of AI to improve repository performance 100x times.&lt;/p&gt;

    &lt;p&gt;Over the years, we have developed much experience, successfully
using the &lt;a href=&quot;https://gatling.io/&quot;&gt;Gatling framework&lt;/a&gt; and extending it to support
the &lt;a href=&quot;https://docs.gatling.io/reference/script/third-parties/&quot;&gt;Git protocol over HTTPS and SSH&lt;/a&gt;. The use of Gatling
is great because it allows us to create very comprehensive
scenarios using a  DSL (domain-specific language), which is
high-level and can replicate real-life user behaviour.
Replicating real-life traffic is paramount when testing a Git
repository performance because it allows creating future volumes
in terms of length of delta-chains, number and distribution of
refs, and number of packfiles / loose objects, that reflect the
project lifecycle.&lt;/p&gt;

    &lt;p&gt;Another key aspect of generating a workload against a Git repository
is scaling up the clients and making their requests parametric enough
to avoid different requests locking each other. With Gatling, you
have the concept of “user sessions” where different logical users
can have dynamic variables used in the Git requests that can be used
for making the operation independent (e.g., branch name fragments,
or tags) and avoiding them from failing or ending up in a deadlock.&lt;/p&gt;

    &lt;p&gt;As part of &lt;a href=&quot;https://conf.researchr.org/home/icse-2025&quot;&gt;our research work&lt;/a&gt;, I managed to recreate 10 years
of Git traffic generated by hundreds of users and execute it in
just 12 hours, thanks to Gatling and the Git-Gatling plugin.&lt;/p&gt;

    &lt;p&gt;An interesting finding from the research and experiments is that
over 95% of the CPU time is spent in serving git-upload-pack
commands (not really a surprise though), of which 90% of it is
spent in &lt;a href=&quot;https://github.com/eclipse-jgit/jgit/blob/46d0d1b40b147e4282043a6c404947166c71be93/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java#L1452&quot;&gt;the “search-for-reuse” phase&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;A second interesting finding is that the presence of a bitmap,
single or multi-pack, is not a guarantee of fast and effective
Git operations: the quality of the bitmap also matters a lot.
A bad bitmap could be so detrimental that removing it could
make the Git repository much faster, which may sound
counterintuitive.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Based on your testing, what improvements do you think are most
needed in Git’s core implementation?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I believe that the Git GC process needs a full revamp: the way
it is designed today isn’t suitable for large repositories. I
have presented a simple “role play” demo of what could happen
to a large mono-repo when you are trying to resolve a production
slowdown &lt;a href=&quot;https://youtu.be/xhxrGxvChU0?t=395&quot;&gt;running a Git GC&lt;/a&gt;: in my imaginary scenario, a
large team of developers is pushing a lot of changes to get the
latest features through on their product’s mono-repo, not unlike
what happens when a large developer conference is approaching
and company ABC wants to launch a new version of their product DEF.
The operation raises the main metrics of the repository and makes
the “search-for-reuse” phase explode, causing the complete blockage
of the CI/CD pipeline. The Git SCM Manager knows what to do … and
runs a Git GC, causing even more damage than the original problem.&lt;/p&gt;

    &lt;p&gt;I believe Git GC needs to be redesigned from the ground up.
Instead of being a simple sequence of operations, it needs to be
much more intelligent and adaptive to perform the right operation
at the right time. This could also be &lt;em&gt;“do nothing”&lt;/em&gt; as the CPU
load is too high or the volatility of the repository is diverging.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;How do you see the relationship between Git and JGit evolving
in the future?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I believe Git and JGit have a wonderful symbiosis of ideas and
code: many popular features in JGit ended up innovating and
inspiring similar implementations in Git (e.g., bitmap,
ref-table, just to name a couple). Also, the other way around
is happening, with the implementation of MIDX in JGit recently
merged, thanks to the collaboration of GerritForge and Google.&lt;/p&gt;

    &lt;p&gt;I like Git because it makes the language absolutely irrelevant
to the implementation: extending Git doesn’t mean you have to
write C code, and you can always start a brand new Git functionality
in a language XYZ in the future. Git is all about data and protocol
specification, not language, code, or operating system.&lt;/p&gt;

    &lt;p&gt;I believe that should remain the case, and I am looking forward to
new languages implementing and innovating on Git, like the recent
&lt;a href=&quot;https://github.com/GitoxideLabs/gitoxide&quot;&gt;Gitoxide project&lt;/a&gt;, a pure-native implementation in Rust.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could get a team of expert developers to work full-time
on something in Git for a full year, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I may repeat myself, but I would redesign the Git GC command from
the ground up.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Well, I would get rid of SHA-1 altogether immediately, forget
about the legacy, and force everyone to use SHA-256 … but
change requires time.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is one of your most favourite features of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I thank all the Git developers every single day for the
interactive rebase. I use it as my bread and butter every
morning.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I am shamelessly admitting that I love Git command line and
I do not feel I need anything else as a tool or library to
interact with it. Many people find it confusing, and I agree
that some syntax could be misleading. Nevertheless, it is worth
using it, proposing changes, and improving how it works and is
perceived by the developers.&lt;/p&gt;

    &lt;p&gt;A tool that requires other tools is a symptom of a problem.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Could you brief a bit about one of your most memorable experience
with Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;As you haven’t mentioned if the experience should be positive or
negative, I always mention the world-stage attention I got from
force-pushing hundreds of Git repositories on the Jenkins CI
organisation &lt;a href=&quot;https://www.infoq.com/news/2013/11/use-the-force/&quot;&gt;over 12 years ago&lt;/a&gt;. It was bad and good at
the same time, because despite the panic caused in hundreds of
Jenkins CI projects, it demonstrated that force pushing isn’t
a destructive operation, and all the BLOBs were easily recovered,
and the refs pointed again to the expected SHA1.&lt;/p&gt;

    &lt;p&gt;Also, my unfortunate mistake highlighted the resilience of the
Git repository model, where there isn’t a “single source of truth”
and GitHub’s repository is just “one of the peer repositories”
around the globe. You can always recover from any type of damage
with Git, at least from what I’ve seen in my 15 years of
contributing and using it with real-life large-scale repositories
and customers.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your advice for people who want to start using Git?
Where and how should they start?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;This could have been a valid question 15 years ago, when Git was
still “quite recent” and not widely adopted yet. Nowadays, Git is
taught at school and universities and has become the de facto
standard of any Open-Source project around the globe. I was also
pleasantly surprised to learn that my 10-year-old son was
introduced to Git by his Computer Science teacher at primary school.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;There’s a common conception that “Git is confusing”. What are your
thoughts about the same?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I believe the most confusing part of Git is the working copy and the
staging area. That’s the reason why &lt;a href=&quot;https://jj-vcs.github.io/jj/latest/&quot;&gt;JJ&lt;/a&gt; gets rid of it altogether
and introduces the concept of “unnamed” commit. That’s genius from
Martin Von Zweigbergk, if you think about it: you just stage files
because you’d like to create a commit. So the stage is the
“next commit you’re about to write”, therefore the unnamed commit.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If there’s one tip you would like to share with other users of Git,
what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Never use an IDE to manage your Git repository and commits: always
stay in control of what happens and learn something every day by using
the Git command line.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If there’s one tip you would like to share with other Git developers,
what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I am not currently contributing to C Git, so my tip would be more for
JGit developers instead. I would love to see more end-to-end JGit
features and protocols testing using tools like &lt;a href=&quot;https://gatling.io/&quot;&gt;Gatling&lt;/a&gt;
and the &lt;a href=&quot;https://docs.gatling.io/reference/script/third-parties/&quot;&gt;Git-Gatling plugin&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Anything else that you’d like to share with us?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;In the future, I’d like to see Git become just one standard feature
of each operating system: anyone should version a file on their
system, regardless of whether that file is source code, a document,
a video, or a drawing. Maybe it is not a random event that the father
of Linux is also the creator of the Git version control system,
isn’t it?&lt;/p&gt;

    &lt;p&gt;Thanks for allowing me to share my experience with Git and my history
of being a JGit contributor and committer.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;The Git Merge 2025 &lt;a href=&quot;https://git-merge.com/#speakers&quot;&gt;speaker list&lt;/a&gt;
and &lt;a href=&quot;https://git-merge.com/#schedule&quot;&gt;schedule&lt;/a&gt; have been announced.
It will be held on September 29 - 30, 2025, in San Francisco, CA, USA.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/git/xmqq1prj1umb.fsf@gitster.g/T/#u&quot;&gt;[ANNOUNCE] Git v2.50.0&lt;/a&gt;
by Junio C Hamano on the Git mailing list.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/highlights-from-git-2-50/&quot;&gt;Highlights from Git 2.50&lt;/a&gt;
by Taylor Blau on GitHub Blog.&lt;br /&gt;
Mentions
improvements for multiple cruft packs, including &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repack --combine-cruft-below-size&lt;/code&gt;
(and improvements to its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--max-cruft-size&lt;/code&gt; option),
incremental multi-pack reachability bitmaps (highly experimental),
the “ort” merge strategy replacing the “recursive” strategy entirely,
various &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cat-file&lt;/code&gt; improvements, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git maintenance&lt;/code&gt; new tricks, and more.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/what-s-new-in-git-2-50-0/&quot;&gt;What’s new in Git 2.50.0?&lt;/a&gt;
by Justin Tobler on GitLab Blog.&lt;br /&gt;
Mentions the
new &lt;a href=&quot;https://git-scm.com/docs/git-diff-pairs&quot;&gt;git-diff-pairs(1)&lt;/a&gt; command
which accepts “raw” formatted filepair info (from e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff-tree&lt;/code&gt;)
as input on stdin to determine exactly which patches to output,
batched reference updates with &lt;a href=&quot;https://git-scm.com/docs/git-update-ref&quot;&gt;git-update-ref(1)&lt;/a&gt;
and its new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--batch-updates&lt;/code&gt; option
(which allows the updates to proceed even when one or more reference updates fails),
the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--filter&lt;/code&gt; option for &lt;a href=&quot;https://git-scm.com/docs/git-cat-file&quot;&gt;git-cat-file(1)&lt;/a&gt;,
improved performance when generating bundles with &lt;a href=&quot;https://git-scm.com/docs/git-bundle&quot;&gt;git-bundle(1)&lt;/a&gt;
(used by GitLab to generate repository backups
and also as part of the &lt;a href=&quot;https://git-scm.com/docs/bundle-uri&quot;&gt;bundle-URI&lt;/a&gt; mechanism),
and better bundle URI unbundling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/how-to-install-gitea&quot;&gt;How to Install Gitea (with SQLite3 and HTTPS!) on a VPS&lt;/a&gt;
by Bruno Brito on Tower Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/reduce-the-load-on-gitlab-gitaly-with-bundle-uri/&quot;&gt;Reduce the load on GitLab Gitaly with bundle URI&lt;/a&gt;.
Discover what the bundle URI Git feature is, how it is integrated into Gitaly,
configuration best practices, and how GitLab users can benefit from it.
GitLab Blog post writen by Olivier Campeau.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/how-we-decreased-gitlab-repo-backup-times-from-48-hours-to-41-minutes/&quot;&gt;How we decreased GitLab repo backup times from 48 hours to 41 minutes&lt;/a&gt;
by Karthik Nayak and Manuel Kraft on GitLab Blog.
Describes how the GitLab team tracked a performance bottleneck in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bundle create&lt;/code&gt;
to a 15-year-old Git function and fixed it.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://andrewlock.net/working-with-stacked-branches-in-git-part-2/&quot;&gt;Working with stacked branches in git (part 2)&lt;/a&gt;
by Andrew Lock on his blog, .NET Escapades, continues where
&lt;a href=&quot;https://andrewlock.net/working-with-stacked-branches-in-git-is-easier-with-update-refs/&quot;&gt;Working with stacked branches&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/11/30/edition-93/&quot;&gt;Git Rev News Edition #93&lt;/a&gt;) left off.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lucasoshiro.github.io/posts-en/2024-04-08-please_dont_squash/&quot;&gt;Git: please stop squash merging!&lt;/a&gt;
and &lt;a href=&quot;https://lucasoshiro.github.io/posts-en/2024-06-27-squash-submodule/&quot;&gt;Git: the danger of squash merging submodules&lt;/a&gt;
by Lucas Seiki Oshiro on his GitHub Pages-powered personal blog.
    &lt;ul&gt;
      &lt;li&gt;The first of those blog posts mentions
&lt;a href=&quot;https://dev.to/wesen/squash-commits-considered-harmful-ob1&quot;&gt;Squash commits considered harmful&lt;/a&gt; by Manuel Odendahl and
&lt;a href=&quot;https://medium.com/bananatag-engineering-blog/squash-merges-are-evil-171f55139c51&quot;&gt;Squash merges are evil&lt;/a&gt; by L. Holanda.&lt;/li&gt;
      &lt;li&gt;See the &lt;a href=&quot;https://wizardzines.com/comics/combining-branches/&quot;&gt;Combining branches&lt;/a&gt;
comic by Julia Evans (@b0rk) for an explanation about the differences between merge, rebase, and squash merge.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://haacked.com/archive/2025/04/17/git-gone/&quot;&gt;Cleaning up gone branches&lt;/a&gt;
by Phil Haack on his You’ve Been Haacked blog.
Describes how to delete all the branches that have been merged into the default branch,
even if the project uses Squash and Merge when merging PRs
(also known as squash merge).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://danielsada.tech/blog/carreer-part-7-how-office-moved-to-git-and-i-loved-devex/&quot;&gt;Part 7: Office Migration from Source Depot to Git, or how I learned to love DevEx&lt;/a&gt;
by Daniel Sada on his personal blog
(part of his &lt;a href=&quot;https://danielsada.tech/series/my-career-so-far/&quot;&gt;My career so far&lt;/a&gt; series).
    &lt;ul&gt;
      &lt;li&gt;Nicely complements &lt;a href=&quot;https://devblogs.microsoft.com/devops/microsofts-performance-contributions-to-git-in-2017/&quot;&gt;Microsoft’s Performance Contributions to Git in 2017&lt;/a&gt;
by Derrick Stolee on Microsoft Dev Blogs, mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;Git Rev News Edition #40&lt;/a&gt;,
and other posts at &lt;a href=&quot;https://stolee.dev/&quot;&gt;https://stolee.dev/&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://daveschumaker.net/git-branch-manager-a-manager-for-git-branches/&quot;&gt;Git Branch Manager: a manager for git branches&lt;/a&gt;
by Dave Schumaker on his blog,
describes how he created the &lt;a href=&quot;https://github.com/daveschumaker/gbm&quot;&gt;Git Branch Manager&lt;/a&gt;
tool by “vibe coding” with Claude Code.  The ‘P.S.’ part just kills it…&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://kjelsrud.dev/blog/no-more-gitmojis/&quot;&gt;no more gitmojis&lt;/a&gt;
on Sids’ blog; moving from &lt;a href=&quot;https://gitmoji.dev/&quot;&gt;gitmojis&lt;/a&gt;
to just using &lt;a href=&quot;https://conventionalcommits.org/&quot;&gt;conventional commits&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://gitmoji.dev/&quot;&gt;Gitmoji&lt;/a&gt; was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/01/23/edition-47/&quot;&gt;Git Rev News Edition #47&lt;/a&gt;,
though then under a &lt;a href=&quot;https://gitmoji.carloscuesta.me/&quot;&gt;different URL&lt;/a&gt;
(which now redirects to the current one).&lt;/li&gt;
      &lt;li&gt;The similar &lt;a href=&quot;https://github.com/ahmadawais/Emoji-Log&quot;&gt;Emoji-Log&lt;/a&gt; commit log messages standard
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/07/31/edition-101/&quot;&gt;Git Rev News Edition #101&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;The &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; specification
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;,
and in many editions since.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://garrit.xyz/posts/2025-06-11-git-diff-ignore-all-space-makes-code-reviews-way-easier&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff --ignore-all-space&lt;/code&gt; makes code review way easier&lt;/a&gt;
by Garrit Franke on Garrit’s Notes blog;
a TIL (Today I’ve Learned) style post.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tylercipriani.com/blog/2025/05/21/git-commits/&quot;&gt;Per-project git commit templates&lt;/a&gt;
by Tyler Cipriani on his blog.
Mentions in passing different commit guidelines used by various projects, like
&lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt;,
  &lt;a href=&quot;https://gitmoji.dev/&quot;&gt;Gitmoji&lt;/a&gt;,
&lt;a href=&quot;https://zeromq.org/how-to-contribute/#write-good-commit-messages&quot;&gt;Problem/Solution format&lt;/a&gt; used by ZeroMQ, and
&lt;a href=&quot;https://docs.kernel.org/process/submitting-patches.html#when-to-use-acked-by-cc-and-co-developed-by&quot;&gt;Acked-by:, Cc:, and Co-developed-by: trailers&lt;/a&gt;
used by Linux kernel developers.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20180122-00/&quot;&gt;The history of change-packing tools at Microsoft (so far)&lt;/a&gt;
by Raymond Chen on Microsoft Dev Blogs: The Old New Thing (2018).&lt;br /&gt;
Change-packing is a way to save a whole changeset or commit to a single file,
to be able to save changes without committing them (like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt;),
or to get another developer’s opinion on code you’ve written (&lt;em&gt;buddy build&lt;/em&gt;), etc.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://willhbr.net/2025/06/16/gif-the-git-interchange-format/&quot;&gt;GIF: The Git Interchange Format&lt;/a&gt;
by Will Richardson on his blog,
about how to cram a whole git repo (with history) into an animated GIF.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Scientific papers&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Shane McIntosh, &lt;u&gt;Luca Milanesio&lt;/u&gt;, Antonio Barone, Jacek Centkowski, Marcin Czech, Fabio Ponciroli:
&lt;em&gt;“Using Reinforcement Learning to Sustain the Performance of Version Control Repositories”&lt;/em&gt;,
ICSE 2025: 47th International Conference on Software Engineering,
&lt;a href=&quot;https://rebels.cs.uwaterloo.ca/papers/icse2025nier_mcintosh.pdf&quot;&gt;https://rebels.cs.uwaterloo.ca/papers/icse2025nier_mcintosh.pdf&lt;/a&gt; (preprint).&lt;/li&gt;
  &lt;li&gt;Jakub Narębski, Mikołaj Fejzer, Krzysztof Stencel, Piotr Przymus:
&lt;em&gt;“PatchScope - A Modular Tool for Annotating and Analyzing Contributions”&lt;/em&gt;,
ISSTA 2025: 34th ACM SIGSOFT International Symposium on Software Testing and Analysis,
&lt;a href=&quot;https://dl.acm.org/doi/10.1145/3713081.3731727&quot;&gt;DOI:10.1145/3713081.3731727&lt;/a&gt; (short paper, free access).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/ncusi/PatchScope&quot;&gt;PatchScope&lt;/a&gt; was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2024/11/30/edition-117/&quot;&gt;Git Rev News Edition #117&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://ezpieco.github.io/GetHooky/&quot;&gt;GetHooky&lt;/a&gt; is a simple git hook manager for everyone.
Inspired by &lt;a href=&quot;https://typicode.github.io/husky/&quot;&gt;Husky&lt;/a&gt;,
but a CLI tool, thus works for every stack.
Written in Go, under MIT license.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/typicode/husky&quot;&gt;Husky&lt;/a&gt;, a Git hook management tool, was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;;
you can find links to other articles talking about it in
&lt;a href=&quot;https://git.github.io/rev_news/2022/05/26/edition-87/&quot;&gt;#87&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2022/07/31/edition-89/&quot;&gt;#89&lt;/a&gt;, and
&lt;a href=&quot;https://git.github.io/rev_news/2023/08/31/edition-102/&quot;&gt;#102&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/daveschumaker/gbm&quot;&gt;Git Branch Manager&lt;/a&gt; is
a terminal-based (TUI) Git branch management tool
that provides an interactive interface for managing Git branches,
with rich visual feedback and advanced features.
Written in Python (with the help of Claude Code), under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Murmele/Gittyup&quot;&gt;Gittyup&lt;/a&gt; is a graphical Git client
designed to help you understand and manage your source code history.
Written in C++ using Qt, under MIT license.
It is a continuation of the &lt;a href=&quot;https://github.com/gitahead/gitahead&quot;&gt;GitAhead&lt;/a&gt; client,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/01/22/edition-59/&quot;&gt;Git Rev News Edition #59&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/conventional-changelog/conventional-changelog&quot;&gt;Conventional Changelog&lt;/a&gt;
is an npm tool to generate changelogs and release notes
from a project’s commit messages and metadata.
Written in TypeScript and JavaScript, under ISC license.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/11/29/edition-81/&quot;&gt;Git Rev News Edition #81&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq1prj1umb.fsf@gitster.g/&quot;&gt;2.50.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqfrg8surr.fsf@gitster.g/&quot;&gt;2.50.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqsekgn4gk.fsf@gitster.g/&quot;&gt;2.50.0-rc1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.50.0.windows.1&quot;&gt;2.50.0.windows.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.50.0-rc2.windows.1&quot;&gt;2.50.0-rc2.windows.1 (pre-release)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.50.0-rc1.windows.1&quot;&gt;2.50.0-rc1.windows.1 (pre-release)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.50.0-rc0.windows.1&quot;&gt;2.50.0-rc0.windows.1 (pre-release)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.9.1&quot;&gt;1.9.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/06/25/patch-release-gitlab-18-1-1-released/&quot;&gt;18.1.1, 18.0.3, 17.11.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/06/19/gitlab-18-1-released/&quot;&gt;18.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/06/11/patch-release-gitlab-18-0-2-released/&quot;&gt;18.0.2, 17.11.4, 17.10.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.1&quot;&gt;3.17.1&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.4&quot;&gt;3.16.4&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.8&quot;&gt;3.15.8&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.13&quot;&gt;3.14.13&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.13/admin/release-notes#3.13.16&quot;&gt;3.13.16&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.0&quot;&gt;3.17.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.2.0&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.1.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.1.0&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.5.0&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.21&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.35&quot;&gt;0.14.35&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.34&quot;&gt;0.14.34&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac&quot;&gt;13&lt;/a&gt; - &lt;a href=&quot;https://www.git-tower.com/blog/posts/tower-mac-13&quot;&gt;Release Blog Post&lt;/a&gt; / &lt;a href=&quot;https://youtu.be/2hjLn9mq9fY&quot;&gt;YouTube video&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/beta/windows&quot;&gt;9.1&lt;/a&gt; (Beta) - &lt;a href=&quot;https://www.git-tower.com/blog/posts/tower-windows-91&quot;&gt;Release Blog Post&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Luca Milanesio, Bruno Brito,
Lee Reilly and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 123 (May 31st, 2025)</title>
      <link>https://git.github.io/rev_news/2025/05/31/edition-123/</link>
      <pubDate>Sat, 31 May 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/05/31/edition-123/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-123-may-31st-2025&quot;&gt;Git Rev News: Edition 123 (May 31st, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 123rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of April and May 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/A2C60325-F96A-49FC-8910-035BFC209EB5@gmail.com/&quot;&gt;[GSoC] Welcoming our 2025 contributors and thanking our applicants&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The Git project was accepted in the
&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code (GSoC)&lt;/a&gt;
this year again, and 3 applicants were selected:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Meet Soni will work on
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/xVrT5e2q&quot;&gt;the “Consolidate ref-related functionality into git-refs” project&lt;/a&gt;
mentored by Patrick Steinhardt and Jialuo She. See Meet’s
&lt;a href=&quot;https://inosmeet.github.io/posts/&quot;&gt;blog&lt;/a&gt; and
&lt;a href=&quot;https://github.com/inosmeet/git&quot;&gt;repository&lt;/a&gt; for more.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Lucas Seiki Oshiro will work on
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/fGgMYHwl&quot;&gt;the “Machine-Readable Repository Information Query Tool” project&lt;/a&gt;
mentored by Karthik Nayak and Patrick
Steinhardt. See Lucas’s &lt;a href=&quot;https://lucasoshiro.github.io/en/&quot;&gt;blog&lt;/a&gt;
and &lt;a href=&quot;https://github.com/lucasoshiro/git&quot;&gt;repository&lt;/a&gt; for more.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Ayush Chandekar will work on
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/no7dVMeG&quot;&gt;the “Refactoring in order to reduce Git’s global state” project&lt;/a&gt;
mentored by Christian Couder and Ghanshyam Thakkar. See Ayush’s
&lt;a href=&quot;https://ayu-ch.github.io/archive.html&quot;&gt;blog&lt;/a&gt; and
&lt;a href=&quot;https://github.com/ayu-ch/git&quot;&gt;repository&lt;/a&gt; for more.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.1899.git.1743719888430.gitgitgadget@gmail.com/&quot;&gt;[PATCH] git: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-hooks&lt;/code&gt; global option&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Derrick Stolee, who prefers to be called just Stolee, sent a patch
to the mailing list that added a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-hooks&lt;/code&gt; global option and
an equivalent &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_HOOKS&lt;/code&gt; environment variable to Git. The goal was
to allow users to disable all Git hooks during command execution.&lt;/p&gt;

    &lt;p&gt;This could be useful for expert users who would want to bypass
pre-commit hooks when they have poor performance or perform useless
checks.&lt;/p&gt;

    &lt;p&gt;Switching between enabled and disabled hooks and other workarounds,
like setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.hooksPath&lt;/code&gt; to a “bogus path”, did not look
convenient and very safe.&lt;/p&gt;

    &lt;p&gt;brian m. carlson, who spell their name using only lowercase letters,
replied to Stolee acknowledging the need for this functionality as
some Jenkins users already set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.hooksPath&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/null&lt;/code&gt; for
security reasons. They warned that disabling hooks could break
&lt;a href=&quot;https://git-lfs.com/&quot;&gt;Git LFS&lt;/a&gt; in a way that is “less noticeable
and detectable” than the current &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/null&lt;/code&gt; approach.&lt;/p&gt;

    &lt;p&gt;They agreed that certain hooks like pre-commit hooks should be
optional, for example to make it easy to commit some
work-in-progress that doesn’t meet standards, but saw fewer reasons
to bypass hooks that could be important for repository integrity.&lt;/p&gt;

    &lt;p&gt;Stolee agreed that some hooks are important for integrity, but said
his intention was on the side of optional hooks.&lt;/p&gt;

    &lt;p&gt;Phillip Wood also replied to Stolee’s initial email noting that
there is already &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --no-verify&lt;/code&gt; which bypasses the
pre-commit and commit-msg hooks. He argued that hooks so slow that
users want to bypass them are self-defeating and that the solution
should be to fix the hook’s performance rather than make it easier
to skip. About setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.hooksPath&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/null&lt;/code&gt;, he asked why
it could be unsafe. In general he said he wasn’t convinced that
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-hooks&lt;/code&gt; was a good idea, and later asked for “a clearer
motivation” to better understand its usefulness.&lt;/p&gt;

    &lt;p&gt;Stolee agreed that setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.hooksPath&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/null&lt;/code&gt; was safe,
and said he had forgotten that could be used instead of a bogus
path.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, then replied to Phillip thanking
him for pushing back on the idea, and saying that there should be a
“compelling reason” to justify a change.&lt;/p&gt;

    &lt;p&gt;Also instead of implementing options to disable hooks or
configuration in some user facing “porcelain” commands, Junio
advocated for cleaning up and refactoring these commands into new
stable “plumbing” commands designed to be easily used in scripts.&lt;/p&gt;

    &lt;p&gt;In the meantime, Lucas Seiki Oshiro replied to Phillip. Lucas had
noticed that using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/null&lt;/code&gt; to disable hooks wasn’t mentioned in
the documentation of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.hooksPath&lt;/code&gt;, even though it was tested in a
test script. He asked if Stolee’s patch should therefore be turned
into a documentation patch.&lt;/p&gt;

    &lt;p&gt;brian agreed with Lucas that documenting how to disable hooks was a
good idea even if the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-hooks&lt;/code&gt; option wasn’t implemented.&lt;/p&gt;

    &lt;p&gt;D. Ben Knoble also replied to Stolee’s initial patch. He supported
the addition of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-hooks&lt;/code&gt; option, sharing his own
frustrations with poorly performing or difficult-to-manage hooks. He
described how a tool re-enables hooks after every &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm install&lt;/code&gt;
leading him to overuse &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-verify&lt;/code&gt;, which he considered a worse
situation. He believed there should be a safe and sane way to
disable optional client-side hooks and felt that a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-hooks&lt;/code&gt;
option would be useful, potentially encouraging better practices
like moving certain checks to server-side hooks.&lt;/p&gt;

    &lt;p&gt;Stolee then replied to Junio thanking him for deciding about this
and saying he would follow up with a version 2 of his patch that
would only document that setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.hooksPath&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/null&lt;/code&gt; was
the supported mechanism to disable hooks.&lt;/p&gt;

    &lt;p&gt;In &lt;a href=&quot;https://lore.kernel.org/git/pull.1899.v2.git.1744818135435.gitgitgadget@gmail.com/&quot;&gt;the version 2 of his patch&lt;/a&gt;,
Stolee just updated the documentation of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.hooksPath&lt;/code&gt;
configuration option, adding the following small paragraph:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;You can also disable all hooks entirely by setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.hooksPath&lt;/code&gt;
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/null&lt;/code&gt;. This is usually only advisable for expert users and
on a per-command basis using configuration parameters of the form
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git -c core.hooksPath=/dev/null ...&lt;/code&gt;.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Lucas replied to that new patch. He suggested rewording the
documentation to focus on non-expert users rather than
experts. Stolee disagreed, explaining he intentionally targeted
expert users as a “there be dragons here” warning about the risks of
disabling hooks.&lt;/p&gt;

    &lt;p&gt;brian supported Stolee’s approach, agreeing that this feature should
be presented as expert-only due to the potential for data loss (like
missing Git LFS uploads). He appreciated Stolee’s gracious pivot
from code changes to documentation.&lt;/p&gt;

    &lt;p&gt;Junio also thanked Stolee for gracefully changing direction and
ensuring no loose ends were left after abandoning the original
approach.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;!--
__Various__
--&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://zerowidth.com/2025/what-ive-learned-from-jj/&quot;&gt;What I’ve learned from jj (Jujutsu)&lt;/a&gt;
by Nathan Witmer on zerowidth positive lookahead blog.&lt;br /&gt;
&lt;a href=&quot;https://jj-vcs.github.io/&quot;&gt;Jujutsu&lt;/a&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;) is an experimental Git-compatible DVCS,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://heitorpb.github.io/bla/git-aliases/&quot;&gt;Git aliases&lt;/a&gt;
by Heitor de Bittencourt on Heitor’s Log blog,
which includes comparison with shell aliases,
and is only missing the trick to set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; completion for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;!&lt;/code&gt; alias.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://andrewlock.net/pushing-a-whole-stack-of-branches-with-a-single-git-command/&quot;&gt;Pushing a whole stack of branches with a single Git command&lt;/a&gt;
(with the help of git aliases)
by Andrew Lock on .NET Escapades.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://calebhearth.com/tally-git-trailers.page&quot;&gt;Tally All Git Trailers in a Repository&lt;/a&gt;,
with a list of interesting and useful trailers &lt;em&gt;(with many links)&lt;/em&gt;,
by Caleb Hearth on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.xda-developers.com/you-can-use-git-to-version-control-your-notes/&quot;&gt;You can use Git to version control your notes, and here’s how I do it&lt;/a&gt;
by Ayush Pande on XDA Developers
(with Joplin as an example of a note-taking application one can use with Git).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://anfalmushtaq.com/articles/a-short-guide-on-git-for-vibe-coders&quot;&gt;A Short Guide on Git for Vibe Coders&lt;/a&gt;
by Anfal Mushtaq on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackaday.com/2025/05/14/version-control-to-the-max/&quot;&gt;Version Control To The Max&lt;/a&gt;
by Al Williams on Hackaday,
about backing up the entire development environment
(with QEMU or VirtualBox or VMWare).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://eev.ee/blog/2016/06/04/converting-a-git-repo-from-tabs-to-spaces/&quot;&gt;Converting a Git repo from tabs to spaces&lt;/a&gt;
with the help of the “filter” gitattribute and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;expand&lt;/code&gt; tool (part of the &lt;em&gt;coreutils&lt;/em&gt;),
by Eevee on Fuzzy Notepad blog (2016).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/how-the-github-cli-can-now-enable-triangular-workflows/&quot;&gt;How the GitHub CLI can now enable triangular workflows&lt;/a&gt;
by Tyler McGoffin on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.screenshotbot.io/2025/05/09/using-git-upload-pack-for-a-simpler-ci-integration/&quot;&gt;Using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-upload-pack&lt;/code&gt; for a simpler CI integration&lt;/a&gt;,
on how Screenshotbot can now extract commit graph data from remote repositories
(assuming one has SSH access to their Git repositories),
by Arnold Noronha on Screenshotbot Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/hastycodea/fixing-ssh-conflicts-using-a-separate-ssh-key-for-github-4in1&quot;&gt;Fixing SSH Conflicts: Using a Separate SSH Key for GitHub&lt;/a&gt;
by Hastycode Andreh on DEV.to.
One trick to add is the possible use of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;url.&amp;lt;base&amp;gt;.insteadOf&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/iegik/the-reductionist-theory-or-rethinking-of-gitignore-bloat-4gfo&quot;&gt;The reductionist theory or rethinking of .gitignore bloat&lt;/a&gt;
by Arturs Jansons on DEV.to.
Mentions &lt;a href=&quot;https://www.gitignore.io/&quot;&gt;gitignore.io&lt;/a&gt;,
first mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2015/08/05/edition-6/&quot;&gt;Git Rev News Edition #6&lt;/a&gt;,
then linked to (with new final URL) in &lt;a href=&quot;https://git.github.io/rev_news/2022/12/31/edition-94/&quot;&gt;Git Rev News Edition #94&lt;/a&gt;,
and &lt;a href=&quot;https://github.com/github/gitignore&quot;&gt;github/gitignore&lt;/a&gt; - which was
first mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2016/11/16/edition-21/&quot;&gt;Git Rev News Edition #21&lt;/a&gt;,
then also linked to in &lt;a href=&quot;https://git.github.io/rev_news/2022/12/31/edition-94/&quot;&gt;Edition #94&lt;/a&gt;,&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://yingtongli.me/blog/2025/05/16/cgit.html&quot;&gt;A modern theme for cgit&lt;/a&gt;
by Lee Yingtong Li on Inane Observations blog.
The source code for this themed fork of &lt;a href=&quot;https://git.zx2c4.com/cgit/tree/README&quot;&gt;cgit&lt;/a&gt;
is available at &lt;a href=&quot;https://yingtongli.me/git/cgit-yli-theme&quot;&gt;https://yingtongli.me/git/cgit-yli-theme&lt;/a&gt;.
Under GPL v2 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/FPGArtktic/AutoGit-o-Matic&quot;&gt;AutoGit-o-Matic&lt;/a&gt; is a Bash script
that automates Git operations across multiple repositories. It helps you
pull or fetch updates from multiple repositories with a single command
(with dry-run capability),
scans directories for Git repositories automatically,
logs operations in both TXT and JSON formats,
and is configurable via an INI file.
Under GPL-3.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/z1cheng/statscat&quot;&gt;StatsCat&lt;/a&gt; is a CLI tool
to get per-author and per-directory statistics of all your Git repositories.
Written in Go, under MIT license.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqzfewsml1.fsf@gitster.g/&quot;&gt;2.50.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/05/21/patch-release-gitlab-18-0-1-released/&quot;&gt;18.0.1, 17.11.3, 17.10.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/05/15/gitlab-18-0-released/&quot;&gt;18.0&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/05/07/patch-release-gitlab-17-11-2-released/&quot;&gt;17.11.2, 17.10.6, 17.9.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3106&quot;&gt;3.10.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3113&quot;&gt;3.11.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3120&quot;&gt;3.12.0-rc5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3120&quot;&gt;3.12.0-rc6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3120&quot;&gt;3.12.0&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#3911&quot;&gt;3.9.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.3&quot;&gt;3.16.3&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.7&quot;&gt;3.15.7&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.12&quot;&gt;3.14.12&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.13/admin/release-notes#3.13.15&quot;&gt;3.13.15&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.17/admin/release-notes#3.17.0&quot;&gt;3.17.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.1.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.1.0&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v2.2.0&quot;&gt;2.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.13.0&quot;&gt;4.13.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.26&quot;&gt;0.14.26&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.25&quot;&gt;0.14.25&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.15.1&quot;&gt;0.15.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 122 (April 30th, 2025)</title>
      <link>https://git.github.io/rev_news/2025/04/30/edition-122/</link>
      <pubDate>Wed, 30 Apr 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/04/30/edition-122/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-122-april-30th-2025&quot;&gt;Git Rev News: Edition 122 (April 30th, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 122nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of March and April 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/89757bec-4d7e-1d90-5697-44651c6128df@gmx.de/&quot;&gt;Let’s celebrate Git’s 20th anniversary this coming Monday!&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Johannes Schindelin (alias Dscho) posted on the mailing list that
the oldest Git commit was performed on April 7th, 2005. So Monday
April 7th, 2025 was the 20th anniversary of Git!&lt;/p&gt;

    &lt;p&gt;To celebrate this event, Dscho created
&lt;a href=&quot;https://discord.gg/UcjvsNQR&quot;&gt;a channel on Git’s Discord, called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#20th-anniversary&lt;/code&gt;&lt;/a&gt;
where everyone is welcome, especially to talk about their encounter
with Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/Z+L3Mt58n18KUNzs@nand.local/&quot;&gt;[ANNOUNCE] Git Merge 2025, September 29-30, San Francisco, CA&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Taylor Blau announced a new &lt;a href=&quot;https://git-merge.com&quot;&gt;Git Merge 2025&lt;/a&gt;
conference on September 29-30 at GitHub HQ in San Francisco along
with a Contributor’s Summit on September 30.&lt;/p&gt;

    &lt;p&gt;Registration and a Call for Proposals, which closes on May 13th, are
open. Requests for financial assistance with travel costs can be
sent to the Git PLC at &lt;a href=&quot;mailto:git@sfconservancy.org&quot;&gt;git@sfconservancy.org&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/1119284365.3926.15.camel@localhost.localdomain/&quot;&gt;Patch (apply) vs. Pull&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;To celebrate Git’s 20th anniversary in our own way let’s talk about
a discussion on the Git mailing list that happened nearly 20 years
ago.&lt;/p&gt;

    &lt;p&gt;On June 20, 2005, Darrin Thompson sent an email about a discrepancy
he was perceiving between his mental model of how Git worked and a
common practice he observed on mailing lists.&lt;/p&gt;

    &lt;p&gt;He understood that on one hand Git was about people duplicating
locally the remote history they were interested in, which provided
common points in history that enabled “intelligent merging”, while
on the other hand mailing lists were filled with emailed patches.&lt;/p&gt;

    &lt;p&gt;He asked how the patches were created and handled to ensure they
could be properly dealt with by the receivers and those who would
later pull from those initial receivers.&lt;/p&gt;

    &lt;p&gt;He was basically trying to reconcile the patch-based workflow on
mailing lists with Git’s design, especially its merging philosophy
based on a common history.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, who would later become the Git maintainer, then
replied to Darrin acknowledging that emailed patches were essentially
“out of band” communications. Merges could still work if the same
patch had been applied independently. Even if that wasn’t ideal, it
was “manageable”.&lt;/p&gt;

    &lt;p&gt;Junio then described his workflow, which consisted of regularly
pulling from Linus, discarding his HEAD, using Linus’ HEAD instead,
and reapplying onto it some patches that Linus had rejected but he
still considered good. Then he would work on new changes and commit
them on top.&lt;/p&gt;

    &lt;p&gt;Darrin, questioning this approach, asked for ways to manage patches
as a series of commits, and wondered if that would still allow
cherry-picking patches.&lt;/p&gt;

    &lt;p&gt;Then Daniel Barkalow and Catalin Marinas chimed in
to talk about &lt;a href=&quot;https://stacked-git.github.io/&quot;&gt;StGit (Stacked Git)&lt;/a&gt;
which helps manage Git commits as a stack of patches. Catalin
Marinas was the creator of StGit, which seems to still be developed
these days as there was a 2.5.0 release in January 2025.&lt;/p&gt;

    &lt;p&gt;Daniel suggested integrating functionality similar to StGit into Git
to help with applying patches and bridging the gap between the
patch-based workflow and Git’s commit-based model in general, even
though he thought that commits were “fundamentally resistant to
cherry-picking”.&lt;/p&gt;

    &lt;p&gt;Catalin over the course of the discussion provided specific details
about how StGit could address Junio’s workflow. For example, StGit
would automatically detect when a patch was already merged upstream
and warn the user. It could also handle conflicts during the
reapplication process using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff3&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Catalin also mentioned that StGit would soon support pulling changes
from a remote tree along with patch series information, making it
easier to apply patches from different branches.&lt;/p&gt;

    &lt;p&gt;Meanwhile, Linus also replied to the email where Junio described his
workflow, proposing “a different kind of merge logic” to automate
some of the steps, as individual developers often want to move their
work forward to the current tip, instead of merging it. The new
script would “try to re-base all the local commits from the common
parent onwards on top of the new remote head”.&lt;/p&gt;

    &lt;p&gt;Linus showed some steps that the script would perform, some of them
using a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-cherry-pick&lt;/code&gt; script that “basically takes an old
commit ID, and tries to re-apply it as a patch (with author data and
commit messages, of course) on top of the current head”.&lt;/p&gt;

    &lt;p&gt;Then Linus, Junio and Daniel discussed how to implement this. One
problem appeared to be how to automatically detect patches that had
already been merged even where there were small changes, like typo
fixes or whitespace changes, in the patches.&lt;/p&gt;

    &lt;p&gt;Daniel suggested that authors could give an ID that would be
preserved across various later modifications to each of their
patches. Linus didn’t like this idea because he thought that they
could be useful for specific projects but should be tracked outside
of Git. Inside Git, he thought they could create confusion as it
wouldn’t be clear if a patch has been modified or not.&lt;/p&gt;

    &lt;p&gt;Daniel then asked Linus if he actually modified patches before
applying them. Linus replied that he very often did modify them and
that he absolutely didn’t want to apply them first and then modify
them as he didn’t want “crap” in his code. He further elaborated
that his &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-apply&lt;/code&gt; tool was strict and refused to apply patches
with any ‘fuzz’ (mismatched context lines), only allowing patches
that matched exactly, potentially after adjusting for line number
offsets. He said:&lt;/p&gt;

    &lt;p&gt;“So I want things to be cleaned up before they hit the tree, rather
than have a really dirty history. A dirty history just makes it
harder to read, and I don’t believe in a second that it’s ‘closer to
reality’ like some people claim.”&lt;/p&gt;

    &lt;p&gt;“I don’t believe anybody wants to see the ‘true’ history. If they
did, we’d be logging keystrokes, and sending all of that
around. Nope, people want (and need, in order to be able to follow
it) an ‘idealized’ history.”&lt;/p&gt;

    &lt;p&gt;Martin Langhoff also contributed to the discussion, noting that
rebasing and replaying local history was an approach he had used
successfully with &lt;a href=&quot;https://en.wikipedia.org/wiki/GNU_arch&quot;&gt;Arch&lt;/a&gt;. He
suggested that the rebasing process should be restartable after
encountering a failed cherry-pick, and proposed adding features like
a “skip list” for patches already merged upstream and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stop-at&lt;/code&gt;
option to handle batches of commits incrementally.&lt;/p&gt;

    &lt;p&gt;Daniel and Linus continued to discuss practical ways to identify and
manage patches across repositories. Linus proposed hashing the
actual changes in a patch, ignoring line numbers and whitespace,
rather than relying on explicit IDs or commit metadata. He
implemented this idea in the form of a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-patch-id&lt;/code&gt; and tested it
on the Linux kernel repository where it found 15 duplicate patches
in the kernel history and processed around 2788 patches in under a
minute with no false positives.&lt;/p&gt;

    &lt;p&gt;Junio replied with a series of three patches to the email where
Linus had suggested some steps that the script to re-base all the
local commits would perform. The cover letter of his series was
named “Rebasing for ‘individual developer’ usage”.&lt;/p&gt;

    &lt;p&gt;The first patch added a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-m&lt;/code&gt; flag to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-commit-script&lt;/code&gt; which
allowed committing using the commit message and author information
from an existing commit.&lt;/p&gt;

    &lt;p&gt;The second patch implemented a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-cherry&lt;/code&gt; script to find
commits that are in the current branch but not in another branch, so
it can help find commits that haven’t been merged upstream.&lt;/p&gt;

    &lt;p&gt;The third patch implemented a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-rebase-script&lt;/code&gt; that used the
functionality from the two previous patches to actually implement
rebasing.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;community-interview&quot;&gt;Community interview&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Editor note: For Git’s 20th anniversary, we are doing an exclusive collaborative
community interview and curating answers of various community members. Also,
there’s a &lt;a href=&quot;#short-qa-with-our-maintainer-junio-c-hamano&quot;&gt;short Q&amp;amp;A&lt;/a&gt; with our
zealous, inclusive and tireless maintainer that follows below.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What’s your favorite Git trick or workflow that you wish more people
knew about?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://discord.com/channels/1042895022950994071/1361310935427584213/1361316878819131452&quot;&gt;&lt;em&gt;Thalia Rose&lt;/em&gt;&lt;/a&gt;: For rebase-heavy workflows, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git range-diff&lt;/code&gt; is incredibly
useful. To compare against upstream, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git range-diff @{u}...@&lt;/code&gt;,
and to compare against the previous HEAD, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git range-diff @{1}...@&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/AE27429C-97B1-4226-8F30-5B635A050498@gmail.com/&quot;&gt;&lt;em&gt;Lucas Seiki Oshiro&lt;/em&gt;&lt;/a&gt;: Everything related to code archaeology
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -S/-G&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -L&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt;). Those are
my primary debugging tools and every time I explained them to other
people they find them mind-blowing and useful.
And they also started loving it :-)&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CABPp-BH2yH4iJ28Bo7Q=uryu68LLk7a0Tvb2SzAbAiHK8QpRug@mail.gmail.com/&quot;&gt;&lt;em&gt;Elijah Newren&lt;/em&gt;&lt;/a&gt;: &lt;a href=&quot;https://git-scm.com/docs/git-range-diff&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;range-diff&lt;/code&gt;&lt;/a&gt;. The ideas behind
it ought to be the basis for code review, IMO.  Commits should be the
unit of review (including commit messages as a fundamental and primary
thing to be reviewed), and a series of commits should be the unit of
merging.  I dislike most code review tools, because they get one or
both of those things wrong. Getting both of those things right naturally
leads to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;range-diff&lt;/code&gt; or something like it being a very important part
of the workflow, at a minimum for detecting which commits in a series
are unmodified and which have been updated and need to be further reviewed.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was your worst Git disaster, and how did you recover from it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://discord.com/channels/1042895022950994071/1361310935427584213/1361316878819131452&quot;&gt;&lt;em&gt;Thalia Rose&lt;/em&gt;&lt;/a&gt;: When I was first starting with Git, I wanted to make a repo
to preserve my first coding project when I was twelve, a bunch of VBS scripts.
I had assumed that Git maintained file modification timestamps, so I deleted
the originals because they were now redundant. I now no longer know exactly
when I wrote them and have been careful about timestamps ever since.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/04A328E9-1146-4D4A-84E7-456FFEB66A5A@gmail.com/&quot;&gt;&lt;em&gt;Luca Milanesio&lt;/em&gt;&lt;/a&gt;: I suspect to be one of the worst offenders :-) [ &lt;a href=&quot;https://www.infoq.com/news/2013/11/use-the-force&quot;&gt;ref&lt;/a&gt; ]&lt;/p&gt;

    &lt;p&gt;Thankfully I was using Gerrit Code Review and the replication plugin:
the refs were not lost but just rewind and we could reset all the
correct SHA1s for all of them.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/AE27429C-97B1-4226-8F30-5B635A050498@gmail.com/&quot;&gt;&lt;em&gt;Lucas Seiki Oshiro&lt;/em&gt;&lt;/a&gt;: I don’t remember something that I did,
but I remember a simple and curious disaster: our deploy workflows
stopped working, only leaving a message like “cannot fetch
ambiguous reference &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;”. I decided to investigate what happened
and I found out that someone by mistake (I don’t know how) created a
tag called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; and pushed it to GitHub. By the time we used the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; branch for deploy, and the workflows didn’t know if they
should use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; branch or tag. GitHub didn’t have a feature
for deleting tags through the web interface, so we thought
“what should we do?”.&lt;/p&gt;

    &lt;p&gt;The solution was to run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push origin :refs/tags/master&lt;/code&gt;. Simple,
but not obvious. A classic case where it only required a screw to be
turned, but all the hard work was to find which screw should be turned.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CABPp-BH2yH4iJ28Bo7Q=uryu68LLk7a0Tvb2SzAbAiHK8QpRug@mail.gmail.com/&quot;&gt;&lt;em&gt;Elijah Newren&lt;/em&gt;&lt;/a&gt;:
My worst Git-related disaster wasn’t with Git directly but with our
Git hosting software we used at a prior job, Gerrit.  ‘twas a
“startup” that was still forming good practices.  We had both a
production and a staging instance.  The staging instance was seeded
with a copy of production data so we could do scale testing…but that
seeding process was a multi-step manual thing; it hadn’t been
automated.  One step was, as best I recall, “drop database gerrit”,
followed by loading the production copy of the mysql database (this
was long before &lt;a href=&quot;https://www.gerritcodereview.com/notedb.html&quot;&gt;NoteDB&lt;/a&gt; arrived).  And as many readers
probably have guessed by now, I was on the wrong host one day when
I ran that command.&lt;/p&gt;

    &lt;p&gt;The actual git repositories were still intact, but the review metadata
was toast.  Luckily, we had a backup from about 7 hours earlier, so we
could recover the older review metadata and with some hackery fix the
mysql metadata mismatch with the newer repository contents.  And since
Gerrit emailed folks comments from reviews as they were posted, we
could tell people to look at their emails for the pieces we couldn’t
recover.&lt;/p&gt;

    &lt;p&gt;It was a really long night trying to fix things.  Some folks told me
they thought I was going to throw up just looking at me.  But I
learned how wonderful it was to be at a company with blameless
post-mortems, and I appreciated the many folks who reached out to tell
me stories of mistakes they had made.  They were more interested in
whether we learned our lesson and put processes into place to prevent
repeats, and I definitely did both.&lt;/p&gt;

    &lt;p&gt;I did, of course, also get some good-natured ribbing, such as people
saying I got to play the part of little Bobby Tables once (see
&lt;a href=&quot;https://xkcd.com/327/&quot;&gt;this xkcd comic&lt;/a&gt; if you don’t know that reference).
I kindly reminded them that I didn’t drop a table – I dropped the whole
database (plus, it wasn’t injection, it was just running a command in
the wrong location).  Also, one of my colleagues helpfully modified
the prompt on production to be red and bold, “This is PROD Gerrit”,
and the prompt on staging to be green, “This is staging Gerrit; it’s
okay to drop database here!”  The prompts ended up not mattering since
I automated the process, and made sure the process just error’ed out
if run on prod instead of staging.  But the prompt persisted for many
years anyway, because I thought it was a hilarious way to poke fun at
my blunder.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could go back in time and change one design decision in Git,
what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/04A328E9-1146-4D4A-84E7-456FFEB66A5A@gmail.com/&quot;&gt;&lt;em&gt;Luca Milanesio&lt;/em&gt;&lt;/a&gt;: Use SHA-256 straight away, as it was
published 24 years ago and already existed at the time Git was designed.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/AE27429C-97B1-4226-8F30-5B635A050498@gmail.com/&quot;&gt;&lt;em&gt;Lucas Seiki Oshiro&lt;/em&gt;&lt;/a&gt;: Perhaps writing a more abstract CLI. After
studying Git a little more deeper it makes sense for me, but I would group
the functionality into more high-level subcommands and would make the flags
and options more consistent across the subcommands.&lt;/p&gt;

    &lt;p&gt;For example, Docker CLI have all the image operations under
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker image&lt;/code&gt; and all the network operations under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker network&lt;/code&gt;.
If I want to delete an image, I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker image rm&lt;/code&gt;, if I want to
delete a network, I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker network rm&lt;/code&gt;, and so on. I would make
Git CLI work based on that idea, for example:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch add my_branch&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch delete my_branch&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch list&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git remote add my_remote ...&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git remote delete my_remote&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git remote list&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git tag add my_tag&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git tag delete my_tag&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git tag list&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;With some shorter alias, just like Docker has &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker rmi&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker rm&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CABPp-BH2yH4iJ28Bo7Q=uryu68LLk7a0Tvb2SzAbAiHK8QpRug@mail.gmail.com/&quot;&gt;&lt;em&gt;Elijah Newren&lt;/em&gt;&lt;/a&gt;: The index.  For a few reasons.&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;Performance.
        &lt;ol&gt;
          &lt;li&gt;
            &lt;p&gt;The index is pervasive throughout the codebase, and while it works
great for small repositories, it means that many operations are O(size
of repository) instead of O(size of changes).  &lt;a href=&quot;https://git-scm.com/docs/sparse-index&quot;&gt;sparse indices&lt;/a&gt;
help, but the code has to be carefully audited for sparse indices to
work with each codepath, and even then there tends to be a fallback of
just-load-everything-anyway because the data structure doesn’t lend
nicely to just expanding a little more.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;An under-appreciated aspect of the performance improvements that
came from our new merge strategy, &lt;a href=&quot;https://git-scm.com/docs/merge-strategies#Documentation/merge-strategies.txt-ort&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge-ort&lt;/code&gt;&lt;/a&gt;, were due
to dispensing with the index as the primary data structure.  The index
had two problems:&lt;/p&gt;
            &lt;ol&gt;
              &lt;li&gt;
                &lt;p&gt;first of all it meant loading every path in the repository,
which would have prevented ort’s optimization to avoid recursing into
subtrees when unnecessary (an optimization that often made merges e.g.
50x faster).  Sparse indices didn’t exist back then, but even if they
had we would have had to complicate them significantly in order to
have their sparseness be determined by renames and the intersection of
modified paths on the two sides of history instead of having
sparseness determined by user-defined path rules; I think that’d have
been much more complicated than just dispensing with the index as the
data structure, but we didn’t even have sparse indices back then
anyway.&lt;/p&gt;
              &lt;/li&gt;
              &lt;li&gt;
                &lt;p&gt;Second, the use of the index as done in the old merge strategy,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge-recursive&lt;/code&gt;, resulted in O(N^2) behavior since entries (including
conflicted higher order stages) had to be inserted in sorted order.
Deleting entries didn’t have the same O(N^2) problem due to some
tricks to queue the deletion for later, but attempting to do the same
for insertions was far from straightforward and I believe would have
required making some other data structure primary and then forming the
index at the end. (Note that the primary data structure used, whatever
it is, cannot just have a list of things to insert, it also needs to
be checked for various properties intermingled with insertions…and
those sometimes relied on the fact that the index was sorted for quick
lookups.) &lt;br /&gt;&lt;br /&gt;
(Note that a tree-structured index rather than a linear index would
resolve these problems.  But retrofitting the entire codebase is
probably never going to happen…)&lt;/p&gt;
              &lt;/li&gt;
            &lt;/ol&gt;
          &lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;Cognitive Complexity. &lt;br /&gt;The funny thing is, although I say this,
  I use the index all the time. I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add -p&lt;/code&gt; a lot.  I very much
  need to slice and dice my changes into different commits, and tend to
  have dirty changes that I don’t want pushed. &lt;br /&gt; &lt;br /&gt;
  But slicing and dicing before things are committed, as opposed to
  being able to slice and dice after, is a choice that adds a lot of
  complexity to the user interface and does so even for users who aren’t
  interested in slicing and dicing commits.  We don’t have a
  sufficiently flexible set of tooling for slicing and dicing commits
  after-the-fact within git to switch to a post-commit-slice-and-dice
  workflow even today, but I suspect that some of the ideas from &lt;a href=&quot;https://github.com/jj-vcs/jj?tab=readme-ov-file#introduction&quot;&gt;JJ&lt;/a&gt;
  would or could be much better than the methods I use today in git to
  slice and dice commits.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Which Git feature or improvement over the past 20 years do you think
had the biggest impact on your workflow?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/AE27429C-97B1-4226-8F30-5B635A050498@gmail.com/&quot;&gt;&lt;em&gt;Lucas Seiki Oshiro&lt;/em&gt;&lt;/a&gt;: Sorry, but I can’t answer. I am from a
generation that started programming when Git was already the de facto
VCS so I can’t compare a world that has it with a world that doesn’t have.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CABPp-BH2yH4iJ28Bo7Q=uryu68LLk7a0Tvb2SzAbAiHK8QpRug@mail.gmail.com/&quot;&gt;&lt;em&gt;Elijah Newren&lt;/em&gt;&lt;/a&gt;: Speed.&lt;/p&gt;

    &lt;p&gt;Being able to instantly switch branches (in smaller repos, sure, but
CVS and SVN couldn’t pull it off even in small repos) was a game
changer.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What Git problem that existed 10 years ago has been most
successfully solved?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/AE27429C-97B1-4226-8F30-5B635A050498@gmail.com/&quot;&gt;&lt;em&gt;Lucas Seiki Oshiro&lt;/em&gt;&lt;/a&gt;: Sorry again, but 10 years ago I was only
starting to use Git and when I started to use more complex features they
already were there.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CABPp-BH2yH4iJ28Bo7Q=uryu68LLk7a0Tvb2SzAbAiHK8QpRug@mail.gmail.com/&quot;&gt;&lt;em&gt;Elijah Newren&lt;/em&gt;&lt;/a&gt;: Merging and rebasing with lots of renames
(and generally merging without a worktree or index).  I’m obviously
a bit biased on this point, but that doesn’t mean I’m wrong.  ;-)
It used to be awful and works great now.&lt;/p&gt;

    &lt;p&gt;Relatedly, merging without a worktree or index was problematic; you
had to either use an alternative merge strategy with limited
capabilities, or use something other than git (e.g. &lt;a href=&quot;https://libgit2.org/&quot;&gt;libgit2&lt;/a&gt;).
But now git handles it well with its default merge strategy.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Which Git commands or workflows do you think are still misunderstood
or underutilized today?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/AE27429C-97B1-4226-8F30-5B635A050498@gmail.com/&quot;&gt;&lt;em&gt;Lucas Seiki Oshiro&lt;/em&gt;&lt;/a&gt;: I think &lt;a href=&quot;https://git-scm.com/docs/git-merge#Documentation/git-merge.txt---squash&quot;&gt;squash merges&lt;/a&gt; and
&lt;a href=&quot;https://git-scm.com/docs/git-submodule&quot;&gt;submodules&lt;/a&gt; are really misunderstood, yet they are the opposite
of being underutilized. Sadly I saw several people using them in daily basis,
based on the wrong idea of what they are and then using them incorrectly.&lt;/p&gt;

    &lt;p&gt;What I think is underutilized is the full power of commits being
a good source of documentation and good resource for, again, performing
code archaeology that may help understanding what the code does and
debugging it. Several developers treat the commits as just checkpoints.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CABPp-BH2yH4iJ28Bo7Q=uryu68LLk7a0Tvb2SzAbAiHK8QpRug@mail.gmail.com/&quot;&gt;&lt;em&gt;Elijah Newren&lt;/em&gt;&lt;/a&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;range-diff&lt;/code&gt; is very under-utilized, but I
already discussed that above.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What’s one Git based project, tool, or extension you think deserves
more recognition from the community?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/AE27429C-97B1-4226-8F30-5B635A050498@gmail.com/&quot;&gt;&lt;em&gt;Lucas Seiki Oshiro&lt;/em&gt;&lt;/a&gt;: Perhaps it would be better to leave this
question for other less known tools. But if you want an answer, I think:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href=&quot;https://github.com/dandavison/delta&quot;&gt;Delta&lt;/a&gt; is a really cool tool
 for formatting the diff-related outputs;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href=&quot;https://kworkflow.org/&quot;&gt;Kworkflow&lt;/a&gt; is a powerful tool for
 contributing to the Linux kernel source code (I should also
 try it for contributing to the Git source code);&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Merge drivers in general. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff3&lt;/code&gt; works in most cases but it is
  only based on pure diffs, without performing deeper operations based
  on the file format they are merging.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What Git feature or capability surprised you most when you first
discovered it?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/AE27429C-97B1-4226-8F30-5B635A050498@gmail.com/&quot;&gt;&lt;em&gt;Lucas Seiki Oshiro&lt;/em&gt;&lt;/a&gt;:  As you may have noticed, I’m really
a fan of Git archaeology :-), so I would say all that I mentioned
in the first answer (i.e., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -S/-G&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -L&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt;). But my favorite is still &lt;a href=&quot;https://git-scm.com/docs/git-bisect&quot;&gt;bisect&lt;/a&gt;.
It’s an egg of Columbus and everyone that I have shown it to
was equally amazed by it!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What’s your boldest prediction about how version control might look
in another 20 years?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/AE27429C-97B1-4226-8F30-5B635A050498@gmail.com/&quot;&gt;&lt;em&gt;Lucas Seiki Oshiro&lt;/em&gt;&lt;/a&gt;: I still see Git as the dominant VCS
in the future, but I think more Git-based VCSs (like &lt;a href=&quot;https://github.com/jj-vcs/jj?tab=readme-ov-file#introduction&quot;&gt;Jujutsu&lt;/a&gt;
will arise. Just like we have today programming languages built on top
of the stack of the other languages (e.g. Clojure, Kotlin and Scala on
JVM, TypeScript on JS), networking protocols written on top of other
protocols (e.g. QUIC on UDP, gRPC on HTTP) and so on.&lt;/p&gt;

    &lt;p&gt;The Git core is simple, flexible, transparent and powerful and there’s
still room for people using it directly in several creative ways. Once
I saw &lt;a href=&quot;https://www.kenneth-truyers.net/2016/10/13/git-nosql-database&quot;&gt;a project using it as a backend for a NoSQL database&lt;/a&gt;,
who knows how many use cases we still have for it.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CABPp-BH2yH4iJ28Bo7Q=uryu68LLk7a0Tvb2SzAbAiHK8QpRug@mail.gmail.com/&quot;&gt;&lt;em&gt;Elijah Newren&lt;/em&gt;&lt;/a&gt;: I’m more interested in what storms might be
brewing along that path, and what we might be able to do to avoid them.
In particular, some questions and observations in that area:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;With monorepos growing ever larger, do we have hard-to-workaround-or-fix
design decisions that pose scaling challenges?  e.g.
        &lt;ul&gt;
          &lt;li&gt;the index data structure&lt;/li&gt;
          &lt;li&gt;per-directory .gitignore files, per-directory .gitattribute files, etc.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;…or do the prominent Git forges have hard-to-workaround-or-fix
design decisions that’ll give Git a reputation for not scaling?  e.g.
        &lt;ul&gt;
          &lt;li&gt;making refs/pull/NNN/merge a public ref and excessively
implicitly updating it&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Will we face a crisis of interest?  e.g.
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; is currently written in C.  Even if that’s not a liability
already, coupled with “decades” I think it is.  Young developers
probably don’t want to learn C, and older ones who already know C
may worry about C becoming a Fortran or Cobol.&lt;/li&gt;
          &lt;li&gt;Companies employing Git developers think “git already won” and
redeploy those engineers on other problems&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Will the combination of issues above result in folks who want improvements
deciding their best bet is not improving Git but in creating/funding
an alternative? Will that snowball?&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;&lt;br /&gt;
To me, the entry of new projects like &lt;a href=&quot;https://github.com/jj-vcs/jj?tab=readme-ov-file#introduction&quot;&gt;JJ&lt;/a&gt; and &lt;a href=&quot;https://sapling-scm.com/&quot;&gt;sapling&lt;/a&gt;
suggest the above are real concerns already rather than just theoretical.
Both projects have compelling things that git lacks.  I like the friendly
competition, and the JJ and sapling developers are awesome to talk to
at Git Merge conferences.  But there is a risk that this friendly
competition mirrors that of Git and Mercurial from years past, and
that Git at some future point down the road ends up on the other side
of that history and gets largely displaced by the alternatives.  I’d
rather not see that happen, but I sometimes wonder if we’re taking
enough measures to avoid marching towards such an outcome.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;short-qa-with-our-maintainer-junio-c-hamano&quot;&gt;Short Q&amp;amp;A with our maintainer, Junio C Hamano&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Looking back over ~20 years of maintaining Git, what has been the
most surprising or unexpected evolution in the project — technically
or community-wise?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Technically, one of the things I found surprising is how many lines
from Linus’s original version still survive in today’s codebase. The
&lt;a href=&quot;https://github.com/git/git/commit/e83c5163316f89bfbde7d9ab23ca2e25604af290&quot;&gt;initial version of Git&lt;/a&gt;
was 1244 lines spread across 11 files, which is miniscule compared
to 300+ thousands of lines in 4600+ files in v2.49.0, but it is not
fair to say Linus’s original genius is less than 0.3% of what we have.
If you try running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt; in reverse, you’ll see that about 10%
of lines we have in our tree came from the original version Linus
released 20 years ago. You can check out a
&lt;a href=&quot;https://git.kernel.org/pub/scm/git/git.git/tree/Linus?h=todo&quot;&gt;little script called “Linus”&lt;/a&gt;
out of my “todo” branch and run it to see for yourself.&lt;/p&gt;

    &lt;p&gt;Community-wise, there weren’t many things that surprised me. I
expected a bit more developers who are interested in the core part of
system to stick around, say for more than 10 years, and I hoped that
some of them would be from younger generations who have never seen any
version control system other than Git, but how many among the active
contributors we see on the list every week fall into that category? We
have long-timers who are respected in the community, but we want to
grow that pool by say 5 every year or so, some of them ready to stick
around for another 10 years. In &lt;a href=&quot;https://github.blog/open-source/git/git-turns-20-a-qa-with-linus-torvalds/&quot;&gt;a recent interview&lt;/a&gt;,
Linus said he wanted somebody with good taste who sticks around, and
I do believe it is essential to have a sufficient number of long-timers
who can guide new folks into the community.&lt;/p&gt;

    &lt;p&gt;So that is a bit of surprise that makes me a little sad, but at the
same time, I think what is happening is that a development community
of an extremely popular and successful system that is mature with
friendly atmosphere has attracted many aspiring new folks, they
scratch their own itches and have fun, but then they find more
interesting things to do and go back to be happy end-users, which is
totally expected and natural thing.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What are your thoughts about AI-assisted development tools in the
context of Git? Do you see a place for Git itself to become more
“intelligent”?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’ve kept saying that
&lt;a href=&quot;https://lore.kernel.org/git/Pine.LNX.4.58.0504150753440.7211@ppc970.osdl.org/&quot;&gt;https://lore.kernel.org/git/Pine.LNX.4.58.0504150753440.7211@ppc970.osdl.org/&lt;/a&gt;
is one of the most important design discussion in the early days of
Git. In that article, Linus outlines how his “ideal” SCM tool would
let you follow the history of a single function in today’s codebase
backwards, notice that at certain revision the function appeared, but
the tool finds five functions disappeared in the same revision, all
looking very similar to the function we are interested in that was
added there, and the tool can explain that the commit consolidated
duplicated reimplementations done in various subdirectories into a
single common function and adjusted the existing callers of them to
the SCM user (if you want to learn more details, go to the original
and read it twice, I’ll wait).&lt;/p&gt;

    &lt;p&gt;We can do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -S&amp;lt;the-body-of-that-function&amp;gt;&lt;/code&gt; repeatedly to drill
down the history to find the revision that introduced that new
(possibly consolidated) function.  In fact, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-S&amp;lt;pickaxe&amp;gt;&lt;/code&gt; feature
was invented exactly for the purpose of serving as the first step of
Linus’s “ideal” SCM tool described in the article. But “finding
similar existing (and possibly getting lost) code in the same or
possibly nearby revisions” have been nebulous. I do not think anybody
in the Git circle tried it yet. I wonder, after 20 years, perhaps we
can feed a project’s codebase to LLMs and let them figure out such a
fact?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What’s your boldest prediction about how version control might look in
another 20 years?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I do not even foresee what software development in 20 years would look
like. I am not an insight kind of person.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What advice would you give to someone who might one day step into your
role as Git maintainer?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Be original. I didn’t aim to duplicate the style Linus ran his tree
during the first four months of the project. My successor does not
have to duplicate my style of running the project, either. Having said
that, personally I would like to see more distribution of
responsibility. The maintainer may play a role of the final arbiter,
but it would be great if we can come up with a mechanism to allow list
participants to bear more of the burden of picking and choosing good
direction to go, deciding if a particular change is worth doing or
are there better ways to do the same thing, etc. I’ve been trying to
nudge the list discussions in that direction for the past few years,
but without much success, I think.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/git-turns-20-a-qa-with-linus-torvalds/&quot;&gt;Git turns 20: A Q&amp;amp;A with Linus Torvalds&lt;/a&gt;
by Taylor Blau on GitHub blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2025/04/07/celebrating-gits-20th-anniversary-with-creator-linus-torvalds/&quot;&gt;Celebrating Git’s 20th anniversary with creator Linus Torvalds&lt;/a&gt;
by Patrick Steinhardt on GitLab blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.zdnet.com/article/linus-torvalds-built-git-in-10-days-and-never-imagined-it-would-last-20-years/&quot;&gt;Linus Torvalds built Git in 10 days - and never imagined it would last 20 years&lt;/a&gt;
by Steven Vaughan-Nichols on ZDNet.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/20-years-of-git/&quot;&gt;20 years of Git. Still weird, still wonderful.&lt;/a&gt;
by Scott Chacon on Butler’s Log (GitButler).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2025/04/14/journey-through-gits-20-year-history/&quot;&gt;Journey through Git’s 20-year history&lt;/a&gt;
by Patrick Steinhardt on GitLab blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2025-04-04-github-mcp-server-public-preview/&quot;&gt;GitHub MCP Server is now available in public preview&lt;/a&gt;.
&lt;a href=&quot;https://modelcontextprotocol.io/introduction&quot;&gt;Model Context Protocol (MCP)&lt;/a&gt;
is an AI tool calling standard that gives LLMs (Large Language Models)
a standardized way to call functions, look up data, and interact with the world.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://andrewlock.net/verifiying-tricky-git-rebases-with-range-diffs/&quot;&gt;Verifying tricky git rebases with git range-diff&lt;/a&gt;
by Andrew Lock on his .NET Escapades blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dustri.org/b/mirroring-my-git-repositories.html&quot;&gt;Mirroring my git repositories&lt;/a&gt;
using &lt;a href=&quot;https://git.zx2c4.com/cgit/about/&quot;&gt;cgit&lt;/a&gt; for the interface and nginx as a web server.
By Julien (jvoisin) Voisin on their blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cleberg.net/blog/git-mirror.html&quot;&gt;Mirroring my Repositories from GitHub to GitLab&lt;/a&gt;,
including both public and private repositories on GitLab Free tier.
By Christian Cleberg on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jensknipper.de/blog/gitlab-ci-pages-asciidoc-documentation-as-code/&quot;&gt;Documentation as Code with AsciiDoctor, GitLab CI, and GitLab Pages&lt;/a&gt;
by Jens Knipper on his personal blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dammit.nl/afraid-to-git.html&quot;&gt;Afraid to Git&lt;/a&gt;:
a rant by Michiel Scholten on his dammIT blog, explaining how misbehaving AI scrapers
cause him not to put his Gitea instance (his Git server) on the Internet,
and force others - like &lt;a href=&quot;https://git.kernel.org/&quot;&gt;Linux’ kernel.org&lt;/a&gt; - to use tools like &lt;a href=&quot;https://github.com/TecharoHQ/anubis&quot;&gt;Anubis&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1014979/&quot;&gt;Fedora change aims for 99% package reproducibility&lt;/a&gt;
by Joe Brockmeier on LWN.net.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/how-to-exclude-commits-from-git-blame&quot;&gt;How to Exclude Commits from Git Blame&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sCr_gb8rdEI&quot;&gt;Two decades of Git: A conversation with creator Linus Torvalds&lt;/a&gt;
video interview (YouTube, 41:49).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://devlands.com/&quot;&gt;Devlands&lt;/a&gt; is the game that creates immersive experience
to help learning Git.  Created by Jacob Stopak, the author of the &lt;a href=&quot;https://github.com/initialcommit-com/git-sim&quot;&gt;Git-Sim&lt;/a&gt;
tool to visualize Git commands directly in your own repo, which was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;Git Rev News Edition #95&lt;/a&gt;.
Described in &lt;a href=&quot;https://initialcommit.com/blog/im-making-a-git-game&quot;&gt;I struggled with Git, so I’m making a game to spare others the pain&lt;/a&gt;
article on Initial Commit Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://justinpaulson.github.io/git_game_show/&quot;&gt;Git Game Show&lt;/a&gt; is a text interface app
that transforms your project’s Git commit history into a live, multiplayer trivia game.
One user hosts a session, other players join remotely, and the system rotates
through rounds of different question-based “mini-games,” awarding points
and declaring a final winner.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://manpages.debian.org/testing/dgit/dgit.1.en.html&quot;&gt;dgit&lt;/a&gt; is a tool that
allows you to treat the Debian archive as if it was a Git repository.
Conversely, it allows Debian to publish the source of its packages as Git branches,
in a format which is directly useable by ordinary people.
    &lt;ul&gt;
      &lt;li&gt;Note that GitHub’s Spokes system that stores multiple distributed copies
of Git repositories was once called DGit.  See the &lt;a href=&quot;https://github.blog/engineering/infrastructure/stretching-spokes/&quot;&gt;Stretching Spokes&lt;/a&gt;
article by Michael Haggerty on GitHub Blog mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2016/04/20/edition-14/&quot;&gt;Git Rev News Edition #14&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/web3infra-foundation/mega&quot;&gt;Mega&lt;/a&gt;
is an unofficial open source implementation of Google Piper (a proprietary, massive,
centralized version control system that Google uses internally to manage their vast codebase).
It is a monorepo &amp;amp; monolithic codebase management system that supports Git. 
More information can be found in &lt;a href=&quot;https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext&quot;&gt;Why Google Stores Billions of Lines of Code in a Single Repository&lt;/a&gt;.
Written in Rust and TypeScript.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lucasoshiro/oshit&quot;&gt;Oshit aka Oshiro’s git&lt;/a&gt;: VCS written in Haskell
that tries to be compatible with Git.  This is not safe to use,
and is only meant for learning how Git works and how hard it is.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://kertal.github.io/codeowner-filter/&quot;&gt;codeowner-filter&lt;/a&gt; is a simple web tool
that solves the problem of finding just the files your team owns based
on the contents of &lt;a href=&quot;https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners&quot;&gt;CODEOWNERS&lt;/a&gt; file.
It will generate search filters for VSCode, scope configuration for IDEA IDEs, and a list.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/akowalska622/codeowners-filter&quot;&gt;CodeOwners Filter&lt;/a&gt; is a Visual Studio Code extension
that gives you a visual representation of the CODEOWNERS file
and helps you generate glob include patterns for any code owner.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kpcyrd/rebuilderd&quot;&gt;rebuilderd&lt;/a&gt;
is a tool that monitors the package repository
of a Linux distribution and uses rebuilder backends
like archlinux-repro to verify the provided binary packages
can be reproduced from the given source code.
Written in Rust, under GPL license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vltpkg/reproduce&quot;&gt;reproduce&lt;/a&gt; is an open-source tool
designed to independently verify whether a published npm package
can be faithfully rebuilt from its declared source.
It is described in the &lt;a href=&quot;https://blog.vlt.sh/blog/reproducibility&quot;&gt;Reproducibility vs. Provenance: Trusting the JavaScript Supply Chain&lt;/a&gt;
blog post by Darcy Clarke.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://graft.rs/&quot;&gt;Graft&lt;/a&gt; is an open-source transactional storage engine
designed for efficient data synchronization at the edge.
It is described in the &lt;a href=&quot;https://sqlsync.dev/posts/stop-syncing-everything/&quot;&gt;Stop syncing everything&lt;/a&gt;
article by Carl Sverre, his &lt;a href=&quot;https://www.youtube.com/watch?v=eRsD8uSAi0s1&quot;&gt;Storing small things in big places&lt;/a&gt;
Vancouver Systems talk (video on YouTube, 55:04), and his
&lt;a href=&quot;https://www.youtube.com/watch?v=dJurdmhPLH411&quot;&gt;Building a serverless database replica with Carl Sverre&lt;/a&gt;
High Performance SQLite talk (video on YouTube, 1:10:19).
Written in Rust.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://docs.github.com/enterprise-server@3.16/admin/release-notes#3.16.2&quot;&gt;3.16.2&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.15/admin/release-notes#3.15.6&quot;&gt;3.15.6&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.14/admin/release-notes#3.14.11&quot;&gt;3.14.11&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/enterprise-server@3.13/admin/release-notes#3.13.14&quot;&gt;3.13.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/04/23/patch-release-gitlab-17-11-1-released/&quot;&gt;17.11.1, 17.10.5, 17.9.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/04/17/gitlab-17-11-released/&quot;&gt;17.11&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/04/09/patch-release-gitlab-17-10-4-released/&quot;&gt;17.10.4, 17.9.6, 17.8.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/04/02/gitlab-17-10-3-released/&quot;&gt;17.10.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/04/02/gitlab-17-9-5-released/&quot;&gt;17.9.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3120&quot;&gt;3.12.0-rc0&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3120&quot;&gt;3.12.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3120&quot;&gt;3.12.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3120&quot;&gt;3.12.0-rc3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.12.html#3120&quot;&gt;3.12.0-rc4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.19&quot;&gt;0.14.19&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.18&quot;&gt;0.14.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/beta&quot;&gt;13.0 (BETA)&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-13/&quot;&gt;Release blog post&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Junio Hamano, Lucas Seiki Oshiro,
Luca Milanesio, Thalia Rose, Elijah Newren,
Toon Claes, Lee Reilly, Bruno Brito and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 121 (March 31st, 2025)</title>
      <link>https://git.github.io/rev_news/2025/03/31/edition-121/</link>
      <pubDate>Mon, 31 Mar 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/03/31/edition-121/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-121-march-31st-2025&quot;&gt;Git Rev News: Edition 121 (March 31st, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 121st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of February and March 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://git.github.io/rev_news/archive/&quot;&gt;10 years of Git Rev News&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Git Rev News started 10 years ago with
&lt;a href=&quot;https://git.github.io/rev_news/2015/03/25/edition-1/&quot;&gt;edition 1 published on March 25, 2015&lt;/a&gt;,
and then one edition per month.&lt;/p&gt;

    &lt;p&gt;To celebrate, let’s look at some stats that we have gathered about
these first 120 editions.&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;First we would like to thank all those who helped us so far.&lt;/p&gt;

        &lt;p&gt;This includes those who helped with ideas, links, PRs, small
corrections, letting us know about a Git related software release,
and even sometimes full articles without being part of our editor
team. Here is the top 12 along with the number of editions they
helped us with, according to our “Credits” section, and the number
of commits they contributed:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;Johannes Schindelin: 29 editions and 71 commits&lt;/li&gt;
          &lt;li&gt;Bruno Brito: 25 editions and 36 commits&lt;/li&gt;
          &lt;li&gt;Luca Milanesio: 19 editions and 23 commits&lt;/li&gt;
          &lt;li&gt;Štěpán Němec: 18 editions and 22 commits&lt;/li&gt;
          &lt;li&gt;Junio Hamano: 13 editions and 22 commits&lt;/li&gt;
          &lt;li&gt;Philip Oakley: 10 editions and 10 commits&lt;/li&gt;
          &lt;li&gt;Elijah Newren: 10 editions and 9 commits&lt;/li&gt;
          &lt;li&gt;Andrew Ardill: 8 editions and 15 commits&lt;/li&gt;
          &lt;li&gt;David Pursehouse: 8 editions and 12 commits&lt;/li&gt;
          &lt;li&gt;Jeff King: 8 editions and 5 commits&lt;/li&gt;
          &lt;li&gt;Matthieu Moy: 6 editions and 14 commits&lt;/li&gt;
          &lt;li&gt;Lars Schneider: 6 editions and 14 commits&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;In total, more than 125 people helped this way.&lt;/p&gt;

        &lt;p&gt;Former members of the editor team helped a lot, too:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;Thomas Ferris Nicolaisen: 33 editions and 135 commits&lt;/li&gt;
          &lt;li&gt;Gabriel Alcaras: 22 editions and 7 commits&lt;/li&gt;
          &lt;li&gt;Nicola Paolucci: 16 editions and 5 commits&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;A small number of people have also helped us by contributing to
&lt;a href=&quot;https://github.com/chriscool/getreleases/&quot;&gt;our scripts&lt;/a&gt; to
automate parts of the edition and publication process:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;Gabriel Alcaras: 9 commits&lt;/li&gt;
          &lt;li&gt;David Aguilar: 3 commits&lt;/li&gt;
          &lt;li&gt;Mirth Hickford: 2 commits&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;A number of people helped by accepting to be interviewed in our
“Developer Spotlight” or “Community Spotlight” sections. Thanks to
them, too:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;Total interviews: 72&lt;/li&gt;
          &lt;li&gt;Unique interviewees: 70&lt;/li&gt;
          &lt;li&gt;Repeat interviews: 2 (David Aguilar and Eric Sunshine have been interviewed twice)&lt;/li&gt;
          &lt;li&gt;Developer interviews: 70&lt;/li&gt;
          &lt;li&gt;Community interviews: 2&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Most of the long articles are in a “Discussions” section and in
one of its subsections: “General”, “Reviews” or “Support”. Here
are some related stats:&lt;/p&gt;

        &lt;p&gt;Total over all the editions:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;Discussions articles: 254&lt;/li&gt;
          &lt;li&gt;General articles: 106&lt;/li&gt;
          &lt;li&gt;Reviews articles: 79&lt;/li&gt;
          &lt;li&gt;Support articles: 69&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;Average per edition:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;Discussions: 2.12&lt;/li&gt;
          &lt;li&gt;General: 0.88&lt;/li&gt;
          &lt;li&gt;Reviews: 0.66&lt;/li&gt;
          &lt;li&gt;Support: 0.57&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;Text Statistics:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;Total words: 100,434&lt;/li&gt;
          &lt;li&gt;Total lines: 14,090&lt;/li&gt;
          &lt;li&gt;Total paragraphs: 3,097&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;Average per article:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;Words: 395.4&lt;/li&gt;
          &lt;li&gt;Lines: 55.5&lt;/li&gt;
          &lt;li&gt;Paragraphs: 12.2&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;Total words per section:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;General: 29,220 words&lt;/li&gt;
          &lt;li&gt;Reviews: 35,912 words&lt;/li&gt;
          &lt;li&gt;Support: 35,302 words&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Among those long articles, 16 articles were written by people
outside the editor team. Big thanks to them! The top 3 is:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;Junio Hamano: 4&lt;/li&gt;
          &lt;li&gt;Matthieu Moy: 3&lt;/li&gt;
          &lt;li&gt;Jacob Keller: 2&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;The following people wrote one article each:&lt;/p&gt;

        &lt;p&gt;Andrew Ardill, Elijah Newren, Eric S. Raymond, Eric Sunshine,
Jiang Xin, Lars Schneider.&lt;/p&gt;

        &lt;p&gt;One article was also written collaboratively by the following
students:&lt;/p&gt;

        &lt;p&gt;François Beutin, Jordan De Gea, William Duclot, Samuel Groot,
Erwan Mathonière, Antoine Queru, Simon Rabourg and Tom Russello.&lt;/p&gt;

        &lt;p&gt;These articles were mostly written towards the first years of Git
Rev News:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;2015: 8 articles&lt;/li&gt;
          &lt;li&gt;2016: 2 articles&lt;/li&gt;
          &lt;li&gt;2018: 2 articles&lt;/li&gt;
          &lt;li&gt;2019: 1 article&lt;/li&gt;
          &lt;li&gt;2020: 3 articles&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;There were 2298 entries in the “Other News” section,
which gathers links to various news, articles, sites, tools,
and sometimes media about Git (or related to Git).&lt;/p&gt;

        &lt;p&gt;Those entries include:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;1090 entries in “Light reading” over 114 editions
with 1777 links; around 13.76% of entries mention previous editions.&lt;/li&gt;
          &lt;li&gt;691 entries in “Git tools and sites” over 118 editions
with 1270 links; around 11.72% of entries mention previous editions.&lt;/li&gt;
          &lt;li&gt;411 entries in “Various” over 110 editions
with 635 links; around 7.06% of entries mention previous editions.&lt;/li&gt;
          &lt;li&gt;20 entries in “Events” over 12 editions
with 39 links&lt;/li&gt;
          &lt;li&gt;15 entries in “Easy watching” over 12 editions
with 31 links; of those, 3 entries mention previous editions.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;There were quite a few one-off names of sub-lists, like
“Slightly heavier reading”, “April Fool’s”, “Listening and watching”.
The template with standardized names was not present in the 1st edition,
but was created later.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.outreachy.org/alums/2024-12/&quot;&gt;Git participated in the December 2024 Outreachy round&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;All the Outreachy interns have successfully completed their
internship:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Seyi Kuforiji worked on the “Convert unit tests to use the clar
testing framework” project, mentored by Patrick Steinhardt and
Phillip Wood. See
&lt;a href=&quot;https://lore.kernel.org/git/CAGedMtcLRjr0GVNYmUU_tacrA0aRvOCYFGyOy0FACTBL=X3cwA@mail.gmail.com/&quot;&gt;his completion email&lt;/a&gt;
and
&lt;a href=&quot;https://seyi-kuforiji-902b48.gitlab.io/posts/a-retrospect-on-new-test-conversions&quot;&gt;his retrospect blog post&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Usman Akinyemi worked on the “Finish adding a ‘os-version’
capability to Git protocol v2” project, mentored by Christian
Couder. See
&lt;a href=&quot;https://uniqueusman.hashnode.dev/my-outreachy-internship-experience-at-git&quot;&gt;his completion blog post&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-peter-krefting&quot;&gt;Developer Spotlight: Peter Krefting&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My name is Peter Krefting and I am a software engineer. Hailing from Sweden,
I moved to Norway for my first job, at Opera Software, mostly working on
internals such as Unicode support and internal libraries. I ended up staying
in Norway and am currently working for a small company providing monitoring
equipment for digital TV.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What are you doing on the Git project these days, and why?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My answers to these two are the same, I am the maintainer of the
&lt;a href=&quot;https://github.com/git-l10n/git-po/blob/master/po/sv.po&quot;&gt;Swedish translation of Git&lt;/a&gt;.
I like having software running in my own language, and sometimes
you have to take matters in your own hands.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I think &lt;a href=&quot;https://git-scm.com/docs/git-gui&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git gui&lt;/code&gt;&lt;/a&gt; and
&lt;a href=&quot;https://git-scm.com/docs/gitk&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gitk&lt;/code&gt;&lt;/a&gt; could need some extra love,
these are my daily drivers, in addition to the command line.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Is there something that developers could do to ease the life of
translators?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My main gripe is using library function names as verbs,
like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cannot fsync&lt;/code&gt;. That’s hard to read even in the original
language, even for a C developer like myself.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of
Git itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I like simple and clean interfaces, so using &lt;a href=&quot;https://wiki.archlinux.org/title/Cgit&quot;&gt;cgit&lt;/a&gt;
to visualize history on a web server is very nice.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I mostly just read the mailing list, and only a small percentage of the
posts to it; the localization is handled through &lt;a href=&quot;https://github.com/git-l10n/git-po/pulls?q=is%3Apr&quot;&gt;GitHub pull requests&lt;/a&gt;,
so that’s where that work happens. The few patches I have sent to the
mailing list have been very manual, using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; and
the &lt;a href=&quot;https://alpineapp.email/&quot;&gt;Alpine mail client&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Find some small part you want to improve, and work on that. Git is a
fairly complex piece of software, implemented in several different
languages, making it hard to get an overview. I most definitely do not have that,
even after having read (and translated) most of the user-visible strings.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2025/03/14/whats-new-in-git-2-49-0/&quot;&gt;What’s new in Git 2.49.0?&lt;/a&gt;
by Toon Claes on GitLab Blog.  This blog post mentions, among other things,
improved performance thanks to zlib-ng, a new name-hashing algorithm, and git-backfill.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/highlights-from-git-2-49/&quot;&gt;Highlights from Git 2.49&lt;/a&gt;
by Taylor Blau on GitHub Blog.  Mentioned items include faster packing with name-hash v2,
backfilling historical blobs in partial clones, building Git with zlib-ng,
and the libgit-sys and libgit Rust crates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/going-down-the-rabbit-hole-of-gits-new-bundle-uri/&quot;&gt;Going down the rabbit hole of Git’s new bundle-uri&lt;/a&gt;
by Scott Chacon on GitButler blog.&lt;br /&gt;
The &lt;a href=&quot;https://git-scm.com/docs/bundle-uri&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bundle-uri&lt;/code&gt;&lt;/a&gt; was mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;Git Rev News Edition #95&lt;/a&gt;
(in &lt;em&gt;“Developer Spotlight”&lt;/em&gt;) and in &lt;a href=&quot;https://git.github.io/rev_news/2023/10/31/edition-104/&quot;&gt;Edition #104&lt;/a&gt;
(in &lt;em&gt;“Git tools and sites”&lt;/em&gt;, when mentioning &lt;a href=&quot;https://github.com/git-ecosystem/git-bundle-server&quot;&gt;git-bundle-server&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mtlynch.io/no-longer-my-favorite-git-commit/&quot;&gt;No Longer My Favorite Git Commit&lt;/a&gt;
by Michael Lynch on his blog, talks about how one could &lt;em&gt;improve&lt;/em&gt; the commit message
described in David Thompson’s &lt;a href=&quot;https://dhwthompson.com/2019/my-favourite-git-commit&quot;&gt;“My favourite Git commit”&lt;/a&gt; - which
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/11/20/edition-57/&quot;&gt;Git Rev News Edition #57&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2024/02/29/edition-108/&quot;&gt;#108&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;The article mentions the &lt;a href=&quot;https://refactoringenglish.com/chapters/commit-messages/&quot;&gt;How to Write Useful Commit Messages&lt;/a&gt;
guide by Michael Lynch, one of the sample chapters for his prospective book,
&lt;em&gt;“Refactoring English: Effective writing for software developers”&lt;/em&gt;.&lt;/li&gt;
      &lt;li&gt;Another post by Michael Lynch, &lt;a href=&quot;https://mtlynch.io/code-review-love/&quot;&gt;How to Make Your Code Reviewer Fall in Love with You&lt;/a&gt;,
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/12/26/edition-70/&quot;&gt;Git Rev News Edition #70&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://daniel.haxx.se/blog/2025/03/14/19000-curl-commits/&quot;&gt;19000 curl commits&lt;/a&gt;
by Daniel Stenberg on his blog, presenting some statistics about those commits.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fabiensanglard.net/fastdoom/index.html&quot;&gt;Why fastDOOM is fast&lt;/a&gt;
by Fabien Sanglard, examines FastDOOM performance evolution over time,
doing some nice Git archeology.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doocot.sh/blog/2025/03/28/time-tracking-with-git&quot;&gt;Personal Agency With Git Time Logging&lt;/a&gt;
by Doug Bridgens on doocot blog.  The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit-msg&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pre-push&lt;/code&gt; hooks from
&lt;a href=&quot;https://github.com/thisdougb/git-time-hooks&quot;&gt;git-time-hooks&lt;/a&gt; are used to measure time spans
from creating a new branch to merging that branch.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://theweeklychallenge.org/blog/git-bisect/&quot;&gt;git bisect …&lt;/a&gt;
by Mohammad Sajid Anwar (MANWAR) on The Weekly Challenge blog.
The blog post shows how to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt; on a detailed example (in Perl).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://chrismati.cz/posts/uv-pex-monorepo/&quot;&gt;Python monorepo with uv and pex&lt;/a&gt;
by Christoph Pröschel on his blog.  The article discusses the benefits of a
lightweight solution built with regular Python tooling
over, for example, the &lt;a href=&quot;https://www.pantsbuild.org/&quot;&gt;Pants&lt;/a&gt; build tool,
because it was easier to justify its adoption for the rest of the team.
    &lt;ul&gt;
      &lt;li&gt;You can find a definition of “monorepo” and a list of various tools on the &lt;a href=&quot;https://monorepo.tools/&quot;&gt;Monorepo.tools&lt;/a&gt; site,
which was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/02/28/edition-84/&quot;&gt;Git Rev News Edition #84&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitenterprise.me/2025/03/10/gerrit-code-review-a-how-to-guide-for-new-users/&quot;&gt;Gerrit Code Review: A How-To Guide for new users!&lt;/a&gt;
by Daniele Sassoli on GerritForge Blog.  See also:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://medium.com/@danielesassoli/how-github-taught-the-world-code-reviews-the-wrong-way-f840a072f5be&quot;&gt;How GitHub taught the world code review the wrong way&lt;/a&gt;
by Daniele Sassoli (2024) on his Medium-based blog.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/helping-others-review-your-changes&quot;&gt;Pull requests / Collaborate with pull requests / Getting started / Helping others review your changes&lt;/a&gt;
on GitHub Docs.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.erethon.com/log/2025-03-03-hugo-git-info/&quot;&gt;TIL: Hugo’s GitInfo&lt;/a&gt;
by Dionysis Grigoropoulos, about the &lt;a href=&quot;https://gohugo.io/methods/page/gitinfo/&quot;&gt;GitInfo&lt;/a&gt; method
of &lt;a href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt;, the static site generator
in Go. The method returns Git information related to the
last commit of the given page.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://theweeklychallenge.org/blog/github-meets-gitlab/&quot;&gt;GitHub meets GitLab&lt;/a&gt;
by Mohammad Sajid Anwar (MANWAR) on The Weekly Challenge blog,
about the terminology differences between GitHub and GitLab
(part of the learning process to pick up GitLab).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.lloydatkinson.net/posts/2025/comparing-git-mirror-options/&quot;&gt;Comparing Git Mirror Options&lt;/a&gt;:
by Lloyd Atkinson on his blog.
The tools considered include gitweb, cgit, and Forgejo;
the last option (Forgejo) was ultimately selected.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.adyxax.org/blog/2025/03/25/migrating-git.adyxax.org-from-gitolite-and-cgit-to-forgejo/&quot;&gt;Migrating git.adyxax.org from gitolite and cgit to Forgejo&lt;/a&gt;:
How I am deploying &lt;a href=&quot;https://forgejo.org/&quot;&gt;Forgejo&lt;/a&gt; with &lt;a href=&quot;https://www.ansible.com/&quot;&gt;Ansible&lt;/a&gt;.
By Julien (Adyxax) Dessaux on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/learn-git-through-gamification&quot;&gt;Learn Git through Gamification – A Visual Guide to Key Version Control Concepts&lt;/a&gt;
by Jacob Stopak on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.xda-developers.com/reasons-run-git-server-nas/&quot;&gt;4 reasons you need to run a Git server on your NAS (even if you’re not a developer)&lt;/a&gt;
by Adam Conway on XDA Developers.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://runtimeterror.dev/manage-dns-records-github-actions-dnscontrol&quot;&gt;Manage DNS Records with GitHub Actions and DNSControl&lt;/a&gt;
by John Wq on [runtimeerror] blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.patriktrefil.com/posts/wsl_ssh_agent_and_git/&quot;&gt;WSL SSH agent and Git&lt;/a&gt;
by Patrik Trefil (2024) on his blog.
This article describes how you can avoid the hassle of copying and pasting your SSH passphrase
every time you want to connect to a machine via ssh.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jdsalaro.com/howto/fix-git-hang-connection-blocked-port-22-github-gitlab-bitbucket/&quot;&gt;Accessing git Servers Over Another Port When 22 is Blocked and Cloning Hangs Waiting for Connection&lt;/a&gt;
by Jayson Salazar Rodriguez (2024) on his site.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.reiterate.app/software/2024/07/09/automatic-versioning-with-xcode-and-git/&quot;&gt;Automatic Versioning with Xcode and Git&lt;/a&gt;
by Rat Troupe on Reiterations blog (2024).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://scripter.co/version-controlling-jenkins-config&quot;&gt;Version controlling Jenkins config&lt;/a&gt;
by Kaushal Modi (2022) on A Scripter’s Notes;
mentions &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jenkins-plugin-cli&lt;/code&gt; from &lt;a href=&quot;https://github.com/jenkinsci/plugin-installation-manager-tool&quot;&gt;Plugin Installation Manager Tool for Jenkins&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;Compare &lt;a href=&quot;https://www.theserverside.com/video/Tips-and-tricks-on-how-to-use-Jenkins-Git-Plugin&quot;&gt;How to use the Jenkins Git Plugin: Tips and tricks&lt;/a&gt;
by Cameron McKenzie from &lt;a href=&quot;https://git.github.io/rev_news/2018/10/24/edition-44/&quot;&gt;Git Rev News Edition #44&lt;/a&gt;,
about &lt;a href=&quot;https://plugins.jenkins.io/git/&quot;&gt;Git | Jenkins Plugin&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://scripter.co/using-git-delta-with-magit/&quot;&gt;Using Git Delta with Magit&lt;/a&gt;
by Kaushal Modi (2022) on A Scripter’s Notes.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/dandavison/delta&quot;&gt;Delta&lt;/a&gt; is a highly configurable command line utility
that makes the Git diffs look better, while also syntax-highlighting the code in the diffs.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt; is a popular Emacs interface to Git,
first mentioned (in passing) in &lt;a href=&quot;https://git.github.io/rev_news/2015/08/05/edition-6/&quot;&gt;Git Rev News Edition #6&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bryanbrattlof.com/how-to-proxy-git-connections/&quot;&gt;How to Proxy Git Connections: using socat to …Git… through a corporate firewall&lt;/a&gt;
by Bryan Brattlof (2022) on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://phili.pe/posts/git-aliases-supporting-main-and-master/&quot;&gt;Git aliases supporting main and master: How to make your aliases agnostic to the default branch&lt;/a&gt;
by Philipe Fatio (2022) on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://probablerobot.net/2021/05/keeping-&apos;live&apos;-dotfiles-in-a-git-repo/&quot;&gt;Keeping ‘live‘ dotfiles in a Git repo&lt;/a&gt;
by creating a repository directory named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.dotfiles/&lt;/code&gt; rather than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/&lt;/code&gt; via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--git-dir&lt;/code&gt; Git wrapper option.
From &lt;a href=&quot;https://probablerobot.net/&quot;&gt;https://probablerobot.net/&lt;/a&gt; (2021).&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://vcscompare.blogspot.com/2008/06/on-mainline-merges-and-fast-forwards.html&quot;&gt;On mainline merges and fast forwards&lt;/a&gt;
by aoeuo (2008) on the Blogger-based DVCS Comparison blog.
Compares Bazaar with Git and Mercurial.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.thomas-huehn.com/gplv2-is-not-impressed-by-git/&quot;&gt;GPLv2 is not impressed by git&lt;/a&gt;
by Thomas Huehn on his Bear-powered blog, a short musing about the following phrase from the license:
    &lt;blockquote&gt;
      &lt;p&gt;You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://programming.dev/post/27187038&quot;&gt;I found commit 0&lt;/a&gt;
(or rather a commit whose SHA-1 identifier begins with 0000000),
by Kissaki on the programming.dev Lemmy instance.&lt;br /&gt;
&lt;a href=&quot;https://join-lemmy.org/docs/index.html&quot;&gt;Lemmy&lt;/a&gt; is a self-hosted, federated social link aggregation and discussion forum,
somewhat similar to Reddit.
    &lt;ul&gt;
      &lt;li&gt;Note that there are tools like &lt;a href=&quot;https://git.anna.lgbt/anna/git-vain&quot;&gt;git-vain&lt;/a&gt;
and &lt;a href=&quot;https://github.com/mattbaker/git-vanity-sha&quot;&gt;git-vanity-sha&lt;/a&gt;,
most recently listed in &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News Edition #103&lt;/a&gt;,
which can be used to make the SHA-1 hash of a commit start with a specific pattern, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;000000&lt;/code&gt;,
by manipulating the commit date or message.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=zigbUJHBsL4&quot;&gt;What Git Clone REALLY Does (and why it matters)&lt;/a&gt;
on The Modern Coder YouTube channel, 3:16 minutes long.
It’s made by @JackLot who created the &lt;a href=&quot;https://learngit.io&quot;&gt;LearnGit.io&lt;/a&gt; resource,
which site was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/02/29/edition-108/&quot;&gt;Git Rev News Edition #108&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SdSllNeQuVc&quot;&gt;Git Interview Part 1: Easy | Ep. 8 Bits and Booze&lt;/a&gt; [29:09] and&lt;br /&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=FbW9wlve8sI&quot;&gt;Git Interview Part 2: Hard | Ep. 9 Bits and Booze&lt;/a&gt; [17:45]&lt;br /&gt;
on the GitButler YouTube channel.  Join Nico as he (mock) interviews Scott [Chacon] about Git.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sinclairtarget/git-who&quot;&gt;git-who&lt;/a&gt; is a command-line tool for finding
the people responsible for entire components or subsystems in a codebase.
You can think of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-who&lt;/code&gt; as a sort of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt; but for file trees rather than individual files.
Written in Go under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://chrondb.moclojer.com/&quot;&gt;chrondb&lt;/a&gt; (&lt;a href=&quot;https://github.com/moclojer/chrondb&quot;&gt;repo&lt;/a&gt;)
is a chronological key/value database,
where storing data is based on database-shaped &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; (core) architecture and Lucene for indexing.
Written in Clojure, uses MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2021/calendar-txt/&quot;&gt;Calendar.txt&lt;/a&gt; is a solution
to keep your calendar in a plain text file.
One of its advantages is that it is versionable: because it’s plain text, you can keep it in Git.
You can also easily take diffs of calendar files, as it’s one day one line.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;http://todotxt.org/&quot;&gt;Todo.txt&lt;/a&gt; to keep your TODO list in a plain text file,
and tools like &lt;a href=&quot;https://taskwarrior.org/&quot;&gt;Taskwarrior&lt;/a&gt; and
&lt;a href=&quot;https://plaintextaccounting.org/&quot;&gt;Plain Text Accounting (PTA)&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://programming.dev/post/26285997&quot;&gt;YSK there are open-source (gamified) tutorials to learn git&lt;/a&gt;
provides a list of some tutorials and interactive learning tools, including:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://ohmygit.org/&quot;&gt;Oh My Git!&lt;/a&gt;, an open source game about learning Git,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://learngitbranching.js.org/&quot;&gt;Learn Git Branching&lt;/a&gt;, visual and interactive way to learn Git on the web,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;Git Rev News Edition #30&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.gitmastery.me/&quot;&gt;Git Gud: Master Git Through Play&lt;/a&gt;, a modern website
to learn Git commands and concepts through an interactive game.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/vishal2376/git-coach&quot;&gt;Git+ Coach&lt;/a&gt;, a free education app
designed to help users learn Git and its commands.  Written in Kotlin, for Android.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/jlord/git-it-electron&quot;&gt;Git-it&lt;/a&gt; is a desktop (Mac, Windows and Linux) Electron app
that teaches you how to use Git and GitHub on the command line.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/09/09/edition-7/&quot;&gt;Git Rev News Edition #7&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://beanhub.io/&quot;&gt;BeanHub&lt;/a&gt; is a modern accounting book app
based on the most popular open source version control system Git
and the text-based double entry accounting book software &lt;a href=&quot;https://beancount.github.io/docs/index.html&quot;&gt;Beancount&lt;/a&gt;.
&lt;a href=&quot;https://beanhub.io/open-source/&quot;&gt;Mostly open-sourced&lt;/a&gt;.  See also the following posts by Fang-Pen Lin:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://fangpenlin.com/posts/2024/12/30/my-beancount-books-are-95-percent-automatic/&quot;&gt;My Beancount books are 95% automatic after 3 years&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://beanhub.io/blog/2024/04/23/how-beanhub-works-part1-sandboxing/&quot;&gt;How BeanHub works part 1: the danger of processing Beancount data with sandbox&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://beanhub.io/blog/2024/06/26/how-beanhub-works-part2-layer-based-git-repos/&quot;&gt;How BeanHub works part 2: large-scale auditable Git repository system based on container layers&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqfrjfilc8.fsf@gitster.g/&quot;&gt;2.49.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq34fk958s.fsf@gitster.g/&quot;&gt;2.49.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqjz94r8p0.fsf@gitster.g/&quot;&gt;2.49.0-rc1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.49.0.windows.1&quot;&gt;2.49.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.49.0-rc2.windows.1&quot;&gt;2.49.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.49.0-rc1.windows.1&quot;&gt;2.49.0-rc1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3105&quot;&gt;3.10.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3112&quot;&gt;3.11.2&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#3910&quot;&gt;3.9.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/03/26/patch-release-gitlab-17-10-1-released/&quot;&gt;17.10.1, 17.9.3, 17.8.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/03/20/gitlab-17-10-released/&quot;&gt;17.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/03/12/patch-release-gitlab-17-9-2-released/&quot;&gt;17.9.2, 17.8.5, 17.7.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.16/admin/release-notes#3.16.1&quot;&gt;3.16.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.15/admin/release-notes#3.15.5&quot;&gt;3.15.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.14/admin/release-notes#3.14.10&quot;&gt;3.14.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.13&quot;&gt;3.13.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.17&quot;&gt;3.12.17&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.16/admin/release-notes#3.16.0&quot;&gt;3.16.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.15/admin/release-notes#3.15.4&quot;&gt;3.15.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.14/admin/release-notes#3.14.9&quot;&gt;3.14.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.12&quot;&gt;3.13.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.16&quot;&gt;3.12.16&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;11.0.0&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.8.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.14&quot;&gt;0.14.14&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.13&quot;&gt;0.14.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-azure &lt;a href=&quot;https://github.com/hickford/git-credential-azure/releases/tag/v0.3.1&quot;&gt;0.3.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.15.0&quot;&gt;0.15.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;12.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows&quot;&gt;9.0&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/tower-windows-9/&quot;&gt;Release blog post&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Peter Krefting, Bruno Brito,
Daniele Sassoli, Toon Claes and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 120 (February 28th, 2025)</title>
      <link>https://git.github.io/rev_news/2025/02/28/edition-120/</link>
      <pubDate>Fri, 28 Feb 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/02/28/edition-120/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-120-february-28th-2025&quot;&gt;Git Rev News: Edition 120 (February 28th, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 120th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of January and February 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.1829.git.1731653548549.gitgitgadget@gmail.com/&quot;&gt;[PATCH] worktree: detect from secondary worktree if main worktree is bare&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Last November, Olga Pilipenco sent a patch to the mailing list
addressing an issue she had encountered while working with multiple
&lt;a href=&quot;https://git-scm.com/docs/git-worktree&quot;&gt;worktrees&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Git worktrees allow developers to check out multiple branches from
the same repository simultaneously, each in its own working
directory. Unlike creating separate clones, worktrees share the same
object database and references, saving disk space and avoiding the
need to push and fetch between copies of the repository. They can be
very useful when working on multiple features in parallel or when
needing to make a quick fix while in the middle of other development
work.&lt;/p&gt;

    &lt;p&gt;The issue happened when a repository had a main worktree that was
bare with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.bare = true&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.worktree&lt;/code&gt;. After creation of a new
secondary worktree, from that secondary worktree’s point-of-view
the main worktree appeared as non-bare. This prevented users from
checking out or working with the default branch of the main worktree
(typically “main” or “master”) in the secondary worktree.&lt;/p&gt;

    &lt;p&gt;When &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.worktreeConfig&lt;/code&gt; is enabled, each worktree has its
own configuration settings in a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.worktree&lt;/code&gt; file that can
override repository-wide settings in the common &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config&lt;/code&gt; file. This
allows different worktrees to have different configurations, but it
also means that settings from one worktree aren’t automatically
visible to commands running in another worktree.&lt;/p&gt;

    &lt;p&gt;Olga found that when inside the secondary worktree, the main
worktree’s configuration wasn’t initialized, and her patch fixed
that by loading the main worktree’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.worktree&lt;/code&gt; file only when
required.&lt;/p&gt;

    &lt;p&gt;Unfortunately Olga’s email fell through the cracks, receiving no
response. But last January she sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.1829.v2.git.1737063335673.gitgitgadget@gmail.com/&quot;&gt;version 2&lt;/a&gt;
of her patch. There was no code change compared to the first
version, but she added people in “Cc:”, and she had rebased the
patch on top of the “maint” branch.&lt;/p&gt;

    &lt;p&gt;This time Eric Sunshine replied. He acknowledged that this was a
real problem and noted that it had been documented in a “NEEDSWORK”
comment added in 2019 to the code which now got patched. He then
attempted to rewrite the commit message of the patch in a way that
was “more idiomatic” to the project and that added more details to
help understand the problem.&lt;/p&gt;

    &lt;p&gt;The suggested commit message especially mentioned that when
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.worktreeConfig&lt;/code&gt; is true, commands run in a secondary
worktree only consulted &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$commondir/config&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$commondir/worktrees/&amp;lt;id&amp;gt;/config.worktree&lt;/code&gt;. Thus they never saw
that the main worktree’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.bare&lt;/code&gt; setting was true in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$commondir/config.worktree&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Eric also suggested removing some parts of Olga’s commit message
that talked about other solutions she had considered, or
repeated in which circumstances the problem appeared. Finally, there
were a number of small comments on the code part of the patch.&lt;/p&gt;

    &lt;p&gt;Olga replied to Eric saying that the commit message he proposed was
“so much better” than the original one. She agreed with most of
Eric’s suggestions and answered the few questions he asked.&lt;/p&gt;

    &lt;p&gt;Eric replied explaining some technical details and making a few more
suggestions.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, then replied to Eric thanking him
“for an easy-to-read review” and thanking Olga for working on this
issue.&lt;/p&gt;

    &lt;p&gt;Eric and Olga further discussed technical improvements to the
patch. In the course of that discussion, Eric explained the
historical context related to using the “bare main worktree”
expression:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;It’s a historic “accident” that when worktree support was designed,
the idea of linking worktrees to a bare repository was not considered.
Support for using worktrees with a bare repository was added later.
However, by that time, the term “main worktree” was already well
established, with the very unfortunate result that even when there is
no actual “main worktree” but only a bare repository with “linked
worktrees” hanging off it, the repository itself is usually referred
to as the “bare main worktree”, which is an obvious misnomer; the
repository is just a repository (i.e. the object database and other
meta-information) and there is no actual main worktree.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Olga then sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.1829.v3.git.1738346881907.gitgitgadget@gmail.com/&quot;&gt;version 3&lt;/a&gt;
of her patch. It used the commit message suggested by Eric, and
implemented his suggestions.&lt;/p&gt;

    &lt;p&gt;Junio reviewed this new version of the patch and had a single
question about the code that decided when it was necessary to read
the main worktree’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.worktree&lt;/code&gt; file. Olga and Junio further
discussed how to make it clearer what that code was doing, and
eventually agreed on adding a four line long comment on top of it.&lt;/p&gt;

    &lt;p&gt;Olga then sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.1829.v4.git.1738737014194.gitgitgadget@gmail.com/&quot;&gt;version 4&lt;/a&gt;
of her patch which only added that four line long comment.&lt;/p&gt;

    &lt;p&gt;The patch was later merged into the ‘master’ branch, so
version 2.49 of Git, which should be released in a few weeks, will
finally resolve a long-standing issue and significantly enhance the
usability of Git worktrees for developers working with bare
repositories.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;community-spotlight-chris-torek&quot;&gt;Community Spotlight: Chris Torek&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://stackoverflow.com/users/1256452/torek&quot;&gt;Chris Torek&lt;/a&gt; has been a prolific
contributor to the Git topic on Stack Overflow. This edition features an interview
with him. This is a continuation of our initiative to interview community contributors
outside of our mailing list. Our first interview was &lt;a href=&quot;https://git.github.io/rev_news/2023/12/31/edition-106/#community-spotlight-vonc&quot;&gt;with VonC in edition 106&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;“Who am I” is way too complicated! 🙂 What I do … well, I’m now
retired, and you’d think that would give me more time to answer things
like this.&lt;/p&gt;

    &lt;p&gt;I used to do a lot of embedded systems programming, and a lot of
internal company education at times (about programming languages,
various hardware functions and limitations, software tools, and such).
That’s what led me to &lt;a href=&quot;https://stackoverflow.com/users/1256452/torek?tab=summary&quot;&gt;answering Stack Overflow questions&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What would you name your most important contribution to Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I haven’t put much into Git itself. I fixed a minor issue with
case-insensitive rename once, and something that was annoying me about
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; applied to merge commits [&lt;a href=&quot;https://public-inbox.org/git/pull.804.v4.git.git.1591978801.gitgitgadget@gmail.com/&quot;&gt;ref&lt;/a&gt;].&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What was your motivation behind answering questions about Git on
Stack Overflow?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Here, well, I got roped into explaining Git to a group that was moving
from Mercurial. I found existing descriptions to be lacking.
Eventually that particular job went away but the question-answering
persisted, until I got sufficiently annoyed at Stack Overflow itself
(for various reasons) to take a break that continues to this day.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m not entirely sure.  There are a few big issues today, such as
dealing with OS irregularities (the fact that Windows can’t name a
file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aux.h&lt;/code&gt; for instance is a trivial example of the overall problem;
very long file names, case and UTF-8 encoding sensitivities are
another example of the same underlying issue); the ongoing
&lt;a href=&quot;https://git-scm.com/docs/hash-function-transition&quot;&gt;transition from SHA-1 to SHA-256&lt;/a&gt;
(which works now but there’s no cross-compatibility); a number
of minor but sometimes important niggles with merging; support
for extremely large code bases, including submodules and other
ideas (Microsoft’s Git VFS). I have no ideas for &lt;em&gt;how&lt;/em&gt; to
achieve this but a better way to “see” history would,
I think, be a huge improvement.&lt;/p&gt;

    &lt;p&gt;One other thing that might be particularly good is an equivalent of
&lt;a href=&quot;https://www.mercurial-scm.org/doc/evolution/&quot;&gt;Mercurial’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;evolve&lt;/code&gt; extension&lt;/a&gt;.
But even Mercurial’s was never mainstreamed; this is very hard to
get right (whatever “right” means).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could remove something from Git without worrying about backwards
compatibility, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m not convinced anything needs to be &lt;em&gt;removed&lt;/em&gt;, but it would
simplify things a lot if we didn’t need SHA-1 compatibility, if
SHA-256 magically just worked and everything were converted over. (And
looking at &lt;a href=&quot;https://git.github.io/rev_news/2023/12/31/edition-106/#community-spotlight-vonc&quot;&gt;VonC’s reply&lt;/a&gt;
I agree that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;switch&lt;/code&gt;+&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;restore&lt;/code&gt; is a much better
split than the old &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;checkout&lt;/code&gt;.) And, although people like it for
convenience, it might be OK if we all had to use separate
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fetch&lt;/code&gt;-then-(whatever is needed) steps: see below.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I don’t think I have one. I’ve used &lt;a href=&quot;https://git-scm.com/docs/gitk&quot;&gt;gitk&lt;/a&gt;
for history browsing, and if it were somehow improved (see the list of
items above) it might be particularly useful.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is one of your most favourite features of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Speed. Having used the previous generations of version control (and
waited, and waited…), there’s nothing quite like doing an update and
having it take only seconds. The distributed nature is also pretty
crucial, though it has its pluses and minuses.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Could you brief a bit about one of your most memorable experiences with Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Hah, the most memorable one was probably one of the worst, back in the
days of Git 1.5 or so. Back then, an initial &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; wasn’t always
careful about a pre-populated working tree. I had it destroy a week’s
worth of code once. Ever since then I’ve separated pull into fetch
followed by merge-or-rebase. This is long since fixed, but it’s
instructive to new users to know that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pull&lt;/code&gt; is really two separate
steps. When I started, I didn’t know that: the tutorial I read just
said to run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your advice for people who want to start using Git? Where
and how should they start?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I’m not entirely fond of any of the introductions I’ve seen. I started
on a book once (between jobs) but stalled out when I went to work for
another startup. One of these days I plan to get back to it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;There’s a common conception that “Git is confusing”. What are your
thoughts about the same?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;There &lt;em&gt;are&lt;/em&gt; confusing parts, but they are inherent to the issues that
occur with distributed repositories and independent development. The
only way to really understand this is to get a good grounding—hence
the idea of writing a book.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;For &lt;em&gt;developers&lt;/em&gt; in particular, they should probably have a look at
what surprises Git users. If something didn’t work the way someone
expected it to, why? Was it an incorrect expectation (it probably was)
and if so, why did the user &lt;em&gt;have&lt;/em&gt; that expectation in the first
place?&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The Git project has been accepted as a &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/organizations/git&quot;&gt;Mentor Organization&lt;/a&gt;
for Google Summer of Code (GSoC) 2025. We can still add project ideas to our
&lt;a href=&quot;https://git.github.io/SoC-2025-Ideas/&quot;&gt;idea page&lt;/a&gt;, and volunteers to (co-)mentor
are still welcome. Feel free to join the discussion in the &lt;a href=&quot;http://public-inbox.org/git/6C29409D-691B-471F-B08C-83E14D35EE13@gmail.com/T/#mb087c1b0ed06fcbd56d4ffa320efbeb42fd4983f&quot;&gt;corresponding thread&lt;/a&gt;.
Also, feel free to spread the word about Git’s participation.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2025-02-25-repositories-updated-insight-views-general-availability/&quot;&gt;GitHub - Repositories – Updated insight views (General Availability)&lt;/a&gt;
in GitHub Changelog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/why-is-git-autocorrect-too-fast-for-formula-one-drivers/&quot;&gt;Why was Git Autocorrect too fast for Formula One drivers?&lt;/a&gt;
Why did Git’s autocorrect wait 0.1s before executing a mistyped command?
Post by Scott Chacon on GitButler Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/how-git-core-devs-configure-git/&quot;&gt;How Core Git Developers Configure Git&lt;/a&gt;
by Scott Chacon on GitButler Blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://jvns.ca/blog/2024/02/16/popular-git-config-options/&quot;&gt;Popular &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config&lt;/code&gt; options&lt;/a&gt;
by Julia Evans on her blog, which was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/02/29/edition-108/&quot;&gt;Git Rev News Edition #108&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/interdiff-review-with-git-range-diff/&quot;&gt;How to do patch-based review with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git range-diff&lt;/code&gt;&lt;/a&gt;
by Scott Chacon on GitButler Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/asciidoc-quick-guide&quot;&gt;Markdown’s Big Brother: Say Hello to AsciiDoc&lt;/a&gt;
by Marvin Blome on Git-Tower Blog.
    &lt;ul&gt;
      &lt;li&gt;Another similar file format for textual data and technical documentation
is &lt;a href=&quot;https://docutils.sourceforge.io/rst.html&quot;&gt;reStructuredText&lt;/a&gt; (RST, ReST, or reST).
It is used, among others, by the Python programming language community,
and is part of the Docutils project of the Python Doc-SIG.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/trunk-based-development&quot;&gt;Understanding the Trunk-Based Development Workflow&lt;/a&gt;
by Bruno Brito on Git-Tower Blog (2024).
    &lt;ul&gt;
      &lt;li&gt;See also the &lt;a href=&quot;https://trunkbaseddevelopment.com&quot;&gt;https://trunkbaseddevelopment.com&lt;/a&gt; site,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/&quot;&gt;Git Rev News Edition #24&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@matteopampana/one-pc-multiple-git-configs-this-will-save-you-time-f702880744f7&quot;&gt;One PC, Multiple Git Configs (This Will Save You Time!)&lt;/a&gt;
with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;includeIf&lt;/code&gt;, a short post by Matteo Pampana on Medium.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.itsecurityguru.org/2025/01/27/why-some-source-code-files-shouldnt-be-managed-via-git-based-version-control/&quot;&gt;Why Some Source Code Files Shouldn’t Be Managed via Git-Based Version Control&lt;/a&gt;
on IT Security Guru.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.brandonpugh.com/blog/git-stash-without-the-branch-name/&quot;&gt;Git Stash Without the Branch Name&lt;/a&gt;
post by Brandon Pugh.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devops.com/microsoft-engineers-highlight-git-repository-bloat-flaw/&quot;&gt;Microsoft Engineers Highlight Git Repository Bloat Flaw&lt;/a&gt;
by Adrian Bridgwater on DevOps.com blog (2024).&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://justinpombrio.net/2025/02/11/jj-cheat-sheet.html&quot;&gt;JJ (Jujutsu) Cheat Sheet&lt;/a&gt;
by Justin Pombrio.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://jj-vcs.github.io/jj/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt;, a Git-compatible version control system,
written in Rust, was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://beej.us/guide/bggit/&quot;&gt;Beej’s Guide to Git&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lmaxence.github.io/gookme/&quot;&gt;Gookme&lt;/a&gt; is a simple and easy-to-use,
yet powerful and language agnostic Git hook manager for &lt;a href=&quot;https://monorepo.tools/&quot;&gt;monorepos&lt;/a&gt;.
Successor of Mookme.  Written in Go, under MIT license.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqzfi8bljk.fsf@gitster.g/&quot;&gt;2.49.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.49.0-rc0.windows.1&quot;&gt;2.49.0-rc0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.48.1.windows.1&quot;&gt;2.48.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.16/admin/release-notes#3.16.0&quot;&gt;3.16.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.15/admin/release-notes#3.15.3&quot;&gt;3.15.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.14/admin/release-notes#3.14.8&quot;&gt;3.14.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.11&quot;&gt;3.13.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.15&quot;&gt;3.12.15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/02/26/patch-release-gitlab-17-9-1-released/&quot;&gt;17.9.1, 17.8.4, 17.7.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/02/20/gitlab-17-9-released/&quot;&gt;17.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/02/12/patch-release-gitlab-17-8-2-released/&quot;&gt;17.8.2, 17.7.4, 17.6.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.7.0&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.6.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.17&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.16&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.11.html&quot;&gt;4.2.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;tig &lt;a href=&quot;https://github.com/jonas/tig/releases/tag/tig-2.5.12&quot;&gt;2.5.12&lt;/a&gt;,
&lt;a href=&quot;https://github.com/jonas/tig/releases/tag/tig-2.5.11&quot;&gt;2.5.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v2.1.0&quot;&gt;2.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.12.0&quot;&gt;4.12.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.8&quot;&gt;0.14.8&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.7&quot;&gt;0.14.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;12.5, 12.5.1, 12.5.2&lt;/a&gt; — &lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-125/&quot;&gt;Release blog post&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Chris Torek, Štěpán Němec, Bruno Brito
and Brandon Pugh.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 119 (January 31st, 2025)</title>
      <link>https://git.github.io/rev_news/2025/01/31/edition-119/</link>
      <pubDate>Fri, 31 Jan 2025 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2025/01/31/edition-119/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-119-january-31st-2025&quot;&gt;Git Rev News: Edition 119 (January 31st, 2025)&lt;/h2&gt;

&lt;p&gt;Welcome to the 119th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of December 2024 and January 2025.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/5b4c09a9-64bb-e672-e604-120563fc1ad6@das-werkstatt.com/&quot;&gt;git support for “xattrs” (extended filesystem attributes)?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Peter B. asked on the Git mailing list if there was a way to store
&lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_file_attributes&quot;&gt;extended attributes (xattrs)&lt;/a&gt;
in Git. His use case was professional archival collection and he
needed bit-proof preservation of all xattrs, even larger ones.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied that Git only tracks
“contents, pathnames where these contents are stored, and the
executable bit”.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, also replied to Peter confirming that Git,
like most other version control systems, doesn’t store most
metadata, but pointing to other tools,
&lt;a href=&quot;https://etckeeper.branchable.com/&quot;&gt;etckeeper&lt;/a&gt; and
&lt;a href=&quot;https://github.com/przemoc/metastore&quot;&gt;metastore&lt;/a&gt;, that can help
with storing them in a separate file and restoring them on checkout.&lt;/p&gt;

    &lt;p&gt;Junio agreed with Peff that Git is extensible that way.&lt;/p&gt;

    &lt;p&gt;brian m. carlson replied to Peter mentioning other
possibilities. One is to use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitattributes&lt;/code&gt; files to store a
few xattrs with values that are “well stored as text”, and then
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git ls-attr&lt;/code&gt; and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;post-checkout&lt;/code&gt;
&lt;a href=&quot;https://git-scm.com/book/ms/v2/Customizing-Git-Git-Hooks&quot;&gt;hook&lt;/a&gt;
to restore them.&lt;/p&gt;

    &lt;p&gt;Another possibility is to use
&lt;a href=&quot;https://linux.die.net/man/8/mtree&quot;&gt;mtree&lt;/a&gt; utilities to store or
restore metadata from or into mtree files. brian especially pointed
to &lt;a href=&quot;https://github.com/vbatts/go-mtree&quot;&gt;go-mtree&lt;/a&gt; which supports
xattrs. As &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mtree&lt;/code&gt; is an extensible key-value format, brian uses it
to store the install location of his
&lt;a href=&quot;https://en.wikipedia.org/wiki/Hidden_file_and_hidden_directory&quot;&gt;dotfiles&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Peter replied to brian thanking everyone for the suggestions and
saying he would especially take a look at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mtree&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;metastore&lt;/code&gt;. He thanked brian again in the following message,
saying that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;go-mtree&lt;/code&gt; looked very promising and that he was going
to look at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;post-checkout&lt;/code&gt; hooks.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-justin-tobler&quot;&gt;Developer Spotlight: Justin Tobler&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My name is Justin Tobler and I am a relatively new contributor to the
Git project with my first contributions being made this last year. I
work at GitLab and these days spend my time integrating Git into
GitLab’s data access layer as well as upstreaming Git fixes/features.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;Most of my contributions thus far have been relatively minor bug fixes,
but &lt;a href=&quot;https://public-inbox.org/git/pull.1683.git.1709669025722.gitgitgadget@gmail.com/&quot;&gt;one bug I found&lt;/a&gt;
particularly interesting was with the table compaction algorithm in the
new reftable reference backend. There was a theoretical scenario where
certain Git operations could be performed and new tables written, but
table compaction would never occur. This was found when tests on certain
platforms started failing because of file descriptor limits being exceeded.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;One topic I’m currently working on is introducing a way to
&lt;a href=&quot;https://public-inbox.org/git/20241213042312.2890841-1-jltobler@gmail.com/&quot;&gt;generate batches of specific blob diffs&lt;/a&gt;.
This is not particularly useful for users, but for Git servers
it’s a nice feature.&lt;/p&gt;

    &lt;p&gt;I still have much to learn about the project so I also enjoy looking
into the inflight topics that pop on the mailing list.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I don’t have anything specific in mind, but it would probably be along
the lines of changes to make the Git CLI more consistent across its
various commands.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of
Git itself?&lt;/p&gt;

    &lt;p&gt;For my Git-related workflow, outside of GitLab, I primarily use the Git
CLI for everything.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;For interacting with the mailing list my workflow primarily consists of
using &lt;a href=&quot;https://neomutt.org/guide/gettingstarted.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;neomutt&lt;/code&gt;&lt;/a&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;, but I have also recently been
exploring &lt;a href=&quot;https://github.com/mricon/b4&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b4&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;For development, I use &lt;a href=&quot;https://neovim.io&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;neovim&lt;/code&gt;&lt;/a&gt; as my editor with
an assortment of plugins.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;If you are unfamiliar with the mailing workflow, &lt;a href=&quot;https://gitgitgadget.github.io/&quot;&gt;GitGitGadget&lt;/a&gt;
can help handle formatting patches and sending them off to the mailing
list. My first couple of patch series used this tool and I found it
useful to get started without having to be super familiar with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;. Other than that, I also
find it very helpful to observe how other contributors submit
patches and interact on the mailing list.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;I appreciate when the authors of a patch series provide as much
background as possible to the change being made. Reading incoming patch
series is a great way to learn about the project and it is very helpful
when the required context overhead is minimized.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/highlights-from-git-2-48/&quot;&gt;Highlights from Git 2.48&lt;/a&gt;
by Taylor Blau on GitHub Blog, about
faster SHA-1 computations for checksums, adding option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--remerge-diff&lt;/code&gt; to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git range-diff&lt;/code&gt; command,
memory-leak-free tests, introducing the Meson build system, and more.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2025/01/10/whats-new-in-git-2-48-0/&quot;&gt;What’s new in Git 2.48.0?&lt;/a&gt;
by Christian Couder on GitLab Blog, about
the Meson build system, Git becoming memory-leak-free, improved bundle URI checks,
adding reference consistency checks, more performant ‘reftables’ implementation,
support for reflogs in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-refs migrate&lt;/code&gt; (to migrate to ‘reftables’),
the ‘ref-filter’ subsystem optimizations, and more.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/git-security-vulnerabilities-announced-5/&quot;&gt;Git security vulnerabilities announced&lt;/a&gt;
by Taylor Blau on GitHub Blog:
&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2024-50349&quot;&gt;CVE-2024-50349&lt;/a&gt; (ANSI escape sequences in hostname and prompt for interactive credentials) and
&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2024-52006&quot;&gt;CVE-2024-52006&lt;/a&gt; (specially-crafted repository URL and credential helpers).
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://flatt.tech/research/posts/clone2leak-your-git-credentials-belong-to-us/&quot;&gt;Clone2Leak: Your Git Credentials Belong To Us&lt;/a&gt;
by RyotaK (@ryotkak), a security engineer at GMO Flatt Security Inc.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Adam Johnson’s book “Boost Your Git DX”
&lt;a href=&quot;https://adamj.eu/tech/2025/01/28/bygdx-second-update/&quot;&gt;has been updated&lt;/a&gt;
with 28 new pages of content. This book was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2023/10/31/edition-104/&quot;&gt;Git Rev News Edition #104&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://antonin.delpeuch.eu/posts/off-the-shelf-governance-models-for-small-foss-projects/&quot;&gt;Off-the-shelf governance models for small FOSS projects?&lt;/a&gt;
by Antonin Delpeuch, about an idea for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GOVERNANCE.md&lt;/code&gt; file template or generator,
as another recommended addition to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;README.md&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LICENSE&lt;/code&gt;, and Code of Conduct.
Mergiraf’s &lt;a href=&quot;https://codeberg.org/mergiraf/mergiraf/src/branch/main/GOVERNANCE.md&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GOVERNANCE.md&lt;/code&gt;&lt;/a&gt;
is his example - the goal here is to make it clear for project users
what one can do if there is an issue/bug, or if one wants to add a new feature to a project.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://inbox.sourceware.org/gdb/Z5esfoH+wMxmDyRP@ebb.org/&quot;&gt;Re: DCO&lt;/a&gt;
by Bradley M. Kuhn of Software Freedom Conservancy on GDB Development mailing list (via GDB public-inbox instance), 
about the considerations when adopting the Developer Certificate of Origin for a project (similarly to the Linux kernel and Git).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1005222/&quot;&gt;The many names of commit 55039832f98c&lt;/a&gt;
by Jonathan Corbet on LWN.net, about difficulties finding the commit in mainline kernel repository
that corresponds to the specific commit/patch sent to the stable-update mailing list,
in the presence of DRM community’s wide use of cherry-picking
(without something like “change ID” that is used by Gerrit).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1004988/&quot;&gt;The slow death of TuxFamily&lt;/a&gt;, a French free-software-hosting service,
by Joe Brockmeier on LWN.net.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mrochkind.com/mrochkind/docs/SCCSretro2.pdf&quot;&gt;A Retrospective on the Source Code Control System&lt;/a&gt;
by Marc J. Rochkind (PDF).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/engineering/user-experience/considerations-for-making-a-tree-view-component-accessible/&quot;&gt;Considerations for making a tree view component (in a web Git UI) accessible&lt;/a&gt;
by Eric Bailey on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://benknoble.github.io/blog/2025/01/04/git-subject-case/&quot;&gt;Commit subject case in Git history&lt;/a&gt;
analysis by D. Ben Knoble, as a blog post on his Junk Drawer site.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://people.kernel.org/kees/colliding-with-the-sha-prefix-of-linuxs-initial-git-commit&quot;&gt;Colliding with the SHA prefix of Linux’s initial Git commit&lt;/a&gt;
Or, how to break all the tools that parse the “Fixes:” tag,
by Kees Cook on people.kernel.org.  Note that the 12-character prefix collision
was generated with the help of the &lt;a href=&quot;https://github.com/not-an-aardvark/lucky-commit&quot;&gt;lucky-commit&lt;/a&gt; project;
this tool was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/03/31/edition-109/&quot;&gt;Git Rev News Edition #109&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://lwn.net/Articles/1001526/&quot;&gt;Facing the Git commit-ID collision catastrophe&lt;/a&gt;
by Jonathan Corbet on LWN.net, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/12/31/edition-118/&quot;&gt;the previous edition&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.xda-developers.com/set-up-your-own-git-server-at-home/&quot;&gt;How to set up your &lt;del&gt;own Git server&lt;/del&gt; Gitea instance at home for your personal projects&lt;/a&gt;
by Ty Sherback on XDA Developers.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://about.gitea.com/&quot;&gt;Gitea&lt;/a&gt;, a Go-based software forge (fork of &lt;a href=&quot;https://gogs.io/&quot;&gt;Gogs&lt;/a&gt;),
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/01/25/edition-23/&quot;&gt;Git Rev News Edition #23&lt;/a&gt;.
There is also &lt;a href=&quot;https://forgejo.org/&quot;&gt;Forgejo&lt;/a&gt;, a fork of Gitea,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/08/31/edition-114/&quot;&gt;Git Rev News Edition #114&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20241218-00/?p=110655&quot;&gt;Is there a way to split the git history of a file or combine the histories of two files without a merge commit?&lt;/a&gt;,
a short exploration by Raymond Chen on The Old New Thing, part of Microsoft Dev Blogs.
    &lt;ul&gt;
      &lt;li&gt;Some of the other blog posts referenced in the above-mentioned exploration also made their appearance in Git Rev News:
&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20190514-00/?p=102493&quot;&gt;Mundane git tricks: Combining two files into one while preserving line history&lt;/a&gt;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/05/22/edition-51/&quot;&gt;Edition #51&lt;/a&gt;.
&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20190916-00/?p=102892&quot;&gt;How do I split a file into two while preserving git line history?&lt;/a&gt;
was not present, but the related
&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20230728-00/?p=108498&quot;&gt;How to split off an older copy of a file while preserving git line history&lt;/a&gt;
appeared in &lt;a href=&quot;https://git.github.io/rev_news/2023/10/31/edition-104/&quot;&gt;Edition #104&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.brandonpugh.com/til/git/edit-commit-message-with-reword/&quot;&gt;Edit commit message with git reword (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --fixup:reword=&amp;lt;commit&amp;gt;&lt;/code&gt;)&lt;/a&gt;
in Brandon Pugh’s TILs: Today I learned… (2024).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://notes.billmill.org/blog/2024/03/How_I_use_git_worktrees.html&quot;&gt;How I use git worktrees&lt;/a&gt;
(with the help of custom &lt;a href=&quot;https://github.com/llimllib/personal_code/blob/daab9eb1/homedir/.local/bin/worktree#L1&quot;&gt;worktree&lt;/a&gt; script)
by Bill Mill on their blog (2024).
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://matklad.github.io/2024/07/25/git-worktrees.html&quot;&gt;How I Use Git Worktrees&lt;/a&gt;
by Alex Kladov (matklad) on his GitHub Pages-based blog,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/07/31/edition-113/&quot;&gt;Git Rev News Edition #113&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://alchemists.io/articles/git_trailers&quot;&gt;Git Trailers&lt;/a&gt; by Brooke Kuhlmann
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/02/29/edition-108/&quot;&gt;Git Rev News Edition #108&lt;/a&gt;,
but was since then updated.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.harmonyagreements.org/&quot;&gt;Project Harmony (Harmony Agreements)&lt;/a&gt;
is a community-centered group focused on &lt;em&gt;contributor agreements&lt;/em&gt;
for free and open source software (FOSS).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codeberg.org/lig/todo-md&quot;&gt;todo-md&lt;/a&gt; is a pre-commit hook written in Bash
that automatically maintains a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TODO.md&lt;/code&gt; file in your repository.
It collects &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TODO:&lt;/code&gt; comments from your code and organizes them into a Markdown file,
making it easy to track tasks and improvements.
Under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bodo-run/yek&quot;&gt;Yek&lt;/a&gt; (يک) is a fast Rust based tool
to serialize (selected) text-based files in a repository or directory
into a single file meant for LLM consumption.  Mentions similar projects.
Under MIT license.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq5xmh46oc.fsf@gitster.g/&quot;&gt;2.48.1 and friends (security releases)&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqplku7cvm.fsf@gitster.g/&quot;&gt;2.48.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqbjwjyalr.fsf@gitster.g/&quot;&gt;2.48.0-rc2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.47.1.windows.2&quot;&gt;2.47.1(2) (security release)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.48.0-rc2.windows.1&quot;&gt;2.48.0-rc2(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2025/01/22/patch-release-gitlab-17-8-1-released/&quot;&gt;17.8.1, 17.7.3, 17.6.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/01/16/gitlab-17-8-released/&quot;&gt;17.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/01/15/gitlab-17-7-2-released/&quot;&gt;17.7.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2025/01/08/patch-release-gitlab-17-7-1-released/&quot;&gt;17.7.1, 17.6.3, 17.5.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3104&quot;&gt;3.10.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3111&quot;&gt;3.11.1&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#399&quot;&gt;3.9.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.15/admin/release-notes#3.15.2&quot;&gt;3.15.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.14/admin/release-notes#3.14.7&quot;&gt;3.14.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.10&quot;&gt;3.13.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.14&quot;&gt;3.12.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.6.3&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.6.2&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.6.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.15&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.14&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v2.0.0&quot;&gt;2.0.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v1.10.1&quot;&gt;1.10.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.11.0&quot;&gt;4.11.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.6&quot;&gt;0.14.6&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.5&quot;&gt;0.14.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Justin Tobler, D. Ben Knoble,
Brandon Pugh, Štěpán Němec and Adam Johnson.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 118 (December 31st, 2024)</title>
      <link>https://git.github.io/rev_news/2024/12/31/edition-118/</link>
      <pubDate>Tue, 31 Dec 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/12/31/edition-118/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-118-december-31st-2024&quot;&gt;Git Rev News: Edition 118 (December 31st, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 118th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of November and December 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Git participates in &lt;a href=&quot;https://www.outreachy.org/alums/2024-12/&quot;&gt;Outreachy’s December 2024 to March 2025 round&lt;/a&gt;:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Seyi Kuforiji is working on the “Convert unit tests to use the
&lt;a href=&quot;https://github.com/clar-test&quot;&gt;clar testing framework&lt;/a&gt;” project. He is mentored by Patrick
Steinhardt and Phillip Wood and posting updates &lt;a href=&quot;https://seyi-kuforiji-902b48.gitlab.io/posts/index.html&quot;&gt;on his gitlab.io blog&lt;/a&gt;
while his work is on &lt;a href=&quot;https://github.com/Seyi007/git&quot;&gt;his GitHub repository&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Usman Akinyemi is working on the “Finish adding an ‘os-version’
capability to Git protocol v2” project. He is mentored by
Christian Couder and posting updates &lt;a href=&quot;https://uniqueusman.hashnode.dev/&quot;&gt;on his hashnode.dev blog&lt;/a&gt;
while his work is on &lt;a href=&quot;https://gitlab.com/Unique-Usman/git/-/branches&quot;&gt;his GitLab repository&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Congratulations to Usman and Seyi for being selected!&lt;/p&gt;

    &lt;p&gt;Thanks to GitHub for funding these two Outreachy internships!&lt;/p&gt;

    &lt;p&gt;Many thanks also to the other contributors who applied and worked on
micro-projects, but couldn’t be selected! We hope to continue to see
you in the community!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/GV1PR02MB848925A79A9DD733848182D58D662@GV1PR02MB8489.eurprd02.prod.outlook.com/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;./configure&lt;/code&gt; fails to link test program due to missing dependencies&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Last September Henrik Holst reported an issue when trying to compile
Git 2.44.0 with HTTPS/curl support on &lt;a href=&quot;https://www.linuxfromscratch.org/&quot;&gt;LFS&lt;/a&gt; 12.1. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;configure&lt;/code&gt; script
failed to detect libcurl’s dependencies properly when trying to link
statically.&lt;/p&gt;

    &lt;p&gt;The issue occurred because the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;configure&lt;/code&gt; script only used the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-lcurl&lt;/code&gt; build flag without running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config --libs libcurl&lt;/code&gt; to
add build flags for dependencies like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zstd&lt;/code&gt; that libcurl
needs. Henrik found that manually setting the LDFLAGS environment
variable to include build flags for all dependencies (like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-lcurl
-lssl -lcrypto -lzstd -lbrotlidec -lz&lt;/code&gt;) allowed the build to
succeed. This sparked a broader discussion about Git’s build system
situation.&lt;/p&gt;

    &lt;p&gt;Looking at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;configure.ac&lt;/code&gt;, Junio Hamano, the Git maintainer, noted
that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config&lt;/code&gt; isn’t used at all, instead &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;curl-config --libs&lt;/code&gt; is
used to detect curl’s flags. Even though the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;configure&lt;/code&gt; script was
added early in the history of the Git project, Junio said it was an
afterthought and nobody has considered “upgrading” from
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;curl-config&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg-config&lt;/code&gt; for dependency detection.&lt;/p&gt;

    &lt;p&gt;In fact, our own Jakub Narębski
&lt;a href=&quot;https://lore.kernel.org/git/200607030156.50455.jnareb@gmail.com/&quot;&gt;initially added the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;configure&lt;/code&gt; script&lt;/a&gt;
back in 2006 to make it much easier to create the RPM spec file for Git.
Creating &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*.spec&lt;/code&gt; files is especially easy when the
compilation follows traditional &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;/code&gt;
steps.&lt;/p&gt;

    &lt;p&gt;brian m. carlson replied to Junio that users shouldn’t statically
link libcurl or OpenSSL at all, as this creates security issues.
With static linking, security updates to these libraries would
require recompiling Git to take effect. In contrast, dynamic linking
allows security updates to be applied as soon as a new Git process
is spawned.&lt;/p&gt;

    &lt;p&gt;Patrick Steinhardt replied to Junio suggesting it might be time to
reconsider Git’s three build systems
(&lt;a href=&quot;https://www.gnu.org/software/make/&quot;&gt;GNU Make&lt;/a&gt;,
&lt;a href=&quot;https://www.gnu.org/software/autoconf/&quot;&gt;Autoconf&lt;/a&gt;, and
&lt;a href=&quot;https://cmake.org/&quot;&gt;CMake&lt;/a&gt;). He proposed potentially dropping
Autoconf and making CMake officially supported, or switching to
&lt;a href=&quot;https://mesonbuild.com/&quot;&gt;Meson&lt;/a&gt; as an alternative.&lt;/p&gt;

    &lt;p&gt;CMake was &lt;a href=&quot;https://lore.kernel.org/git/pull.614.git.1587700897.gitgitgadget@gmail.com/&quot;&gt;added more recently in 2020&lt;/a&gt;
by Sibi Siddharthan as the third build system with the main goal of
improving the build experience for developers on Windows.&lt;/p&gt;

    &lt;p&gt;Soon after Patrick’s reply, the Git Contributors’ Summit took place,
and the
&lt;a href=&quot;https://lore.kernel.org/git/Zu2E3vIcTzywWOx3@nand.local/&quot;&gt;“Modern Build System” topic&lt;/a&gt;
was discussed there. Patrick Steinhardt raised concerns about
maintaining three different build systems while others were
concerned about having good platform support and good Windows
developer experience. This led to an extensive discussion about
the merits of different build systems in the thread started by
Henrik.&lt;/p&gt;

    &lt;p&gt;Eli Schwartz, the Meson maintainer, made a detailed case for
preferring Meson over CMake, citing various CMake pain points and
limitations. Phillip Wood agreed with Patrick about getting rid of
Autoconf, but raised the importance of Visual Studio integration,
since CMake was originally added to improve the Windows developer
experience. Johannes Schindelin, alias Dscho, emphasized that
CMake’s deep Visual Studio integration was crucial for Windows
developers and cautioned against switching to alternatives that
would make the Windows experience worse. It appeared that Visual
Studio has Meson support via plugins though, which alleviated some
concerns.&lt;/p&gt;

    &lt;p&gt;Paul Smith, the GNU Make maintainer, noted that requiring additional
build tools like Meson, which are not yet often used and require
some other dependencies, like Python3 for Meson, adds friction,
though he acknowledged that for Git specifically this may be less of
a concern given its existing dependencies.&lt;/p&gt;

    &lt;p&gt;Junio seemed to agree that adding support for a fourth build system
would be worth it if it would allow the project to drop all other
three build systems eventually. He said the new build system would
have “to be something available widely and easy to learn”.&lt;/p&gt;

    &lt;p&gt;Patrick came up later in October with a
&lt;a href=&quot;https://lore.kernel.org/git/cover.1727881164.git.ps@pks.im/&quot;&gt;21 patch long RFC series&lt;/a&gt;
to add support for the Meson build system with the goal of
eventually replacing the current three build systems.&lt;/p&gt;

    &lt;p&gt;There were a number of iterations on that series. Among the many
comments, Taylor Blau asked about the eventual goals of the series
and plans for CMake support. He noted that CMake support in contrib/
was in an awkward position, neither fully supported nor properly
maintained out-of-tree. He was concerned about having to maintain
three build systems simultaneously during any transition period.&lt;/p&gt;

    &lt;p&gt;David Aguilar expressed concerns about Python being a dependency
through Meson. Eli replied that &lt;a href=&quot;https://github.com/muon-build/muon&quot;&gt;muon&lt;/a&gt;,
a C99 implementation of Meson,
could be used instead and demonstrated it working with Git’s build.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, asked about reliability for bisecting and
whether out-of-source builds would work correctly when moving
between commits. He also requested better documentation of common
developer workflows with Meson compared to Make.&lt;/p&gt;

    &lt;p&gt;Junio discussed the need to maintain build system compatibility
during any transition period. He noted that many of the Makefile
options were added over time for good reasons and dropping support
for them would need careful consideration.&lt;/p&gt;

    &lt;p&gt;A number of other developers participated in the reviews. Ramsay
Jones tested the patches on various platforms including
Cygwin. Phillip Wood reviewed CMake-related changes and provided
technical feedback. Johannes Sixt commented on changes to the
gitk-git subtree. Eric Sunshine provided technical feedback. Your
own Christian Couder provided feedback on the documentation.&lt;/p&gt;

    &lt;p&gt;Over the iterations, Patrick updated the series to improve
documentation, fix conflicts with in-flight patches, and address the
various technical concerns raised during review.&lt;/p&gt;

    &lt;p&gt;Eventually
&lt;a href=&quot;https://lore.kernel.org/git/20241206-pks-meson-v11-0-525ed4792b88@pks.im/&quot;&gt;version 11 of the patch series&lt;/a&gt;
was merged and will be part of Git v2.48.0 that should be released
in the next few weeks. It should be a properly supported modern
build system that can be faster and more easily configurable than
the three existing ones, which will hopefully get deprecated over
time.&lt;/p&gt;

    &lt;p&gt;The merged patch series especially adds
&lt;a href=&quot;https://lore.kernel.org/git/20241206-pks-meson-v11-24-525ed4792b88@pks.im/#Z31meson.build&quot;&gt;some documentation&lt;/a&gt;
(via comments in &lt;a href=&quot;https://git.kernel.org/pub/scm/git/git.git/tree/meson.build&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meson.build&lt;/code&gt;&lt;/a&gt;)
to help build Git with Meson and
&lt;a href=&quot;https://lore.kernel.org/git/20241206-pks-meson-v11-23-525ed4792b88@pks.im/#Z31Documentation:technical:build-systems.txt&quot;&gt;a build system comparison&lt;/a&gt;
(in &lt;a href=&quot;https://git.kernel.org/pub/scm/git/git.git/tree/Documentation/technical/build-systems.adoc&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Documentation/technical/build-systems.txt&lt;/code&gt;&lt;/a&gt;)
that might be interesting to read.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/news/Git-2.48-rc0&quot;&gt;Git 2.48-rc0 Released With git-fsck Warning Over “Curiously Formatted” Ref Contents&lt;/a&gt;
by Michael Larabel on Phoronix.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/git-merge-2024-talks/&quot;&gt;Git Merge 2024 Talks are Up (on YouTube)&lt;/a&gt;
by Scott Chacon on GitButler Blog.  The article includes a quick summary
of each of the talks.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/963095/&quot;&gt;Forgejo makes a full break from Gitea&lt;/a&gt;
by Joe Brockmeier on LWN.net (from February 23, 2024).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://about.gitea.com/&quot;&gt;Gitea&lt;/a&gt;, which is Go-based software forge, a fork of &lt;a href=&quot;https://gogs.io/&quot;&gt;Gogs&lt;/a&gt;,
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/01/25/edition-23/&quot;&gt;Git Rev News Edition #23&lt;/a&gt;;&lt;br /&gt;
&lt;a href=&quot;https://forgejo.org/&quot;&gt;Forgejo&lt;/a&gt;, which started as a “soft” fork of Gitea,
was first mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News Edition #103&lt;/a&gt;,
and again in &lt;a href=&quot;https://git.github.io/rev_news/2024/08/31/edition-114/&quot;&gt;Edition #114&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.developer-tech.com/news/emeraldwhale-exploits-vulnerable-git-configuration-files/&quot;&gt;EMERALDWHALE exploits vulnerable Git configuration files&lt;/a&gt;
by Ryan Daws on Developer Tech News, about a global operation known as EMERALDWHALE,
which has stolen over 15000 cloud service credentials by exploiting exposed Git configuration files
(via misconfigured web services, which were exposing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; directories of private repositories).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1001215/&quot;&gt;Abusing Git branch names to compromise a PyPI package&lt;/a&gt;
(caused by a project automatically processing pull requests with a flawed script),
short post by daroc on LWN.net.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/998115/&quot;&gt;NonStop discussion around adding Rust to Git&lt;/a&gt;
by Daroc Alden on LWN.net.  The Git project discussed the prospect in January 2024,
and then again at the Git Contributors’ Summit in September 2024.
    &lt;ul&gt;
      &lt;li&gt;The Git Contributors’ Summit 2024 was mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2024/09/30/edition-115/&quot;&gt;Git Rev News Edition #115&lt;/a&gt;,
with links to notes as posts to the Git mailing list (also available in read-only Google Docs)
and a repo with notes from the breakout unconference sessions.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://trufflesecurity.com/blog/vigilante-justice-on-github&quot;&gt;Vigilante Justice on GitHub: GitHub Graffiti&lt;/a&gt;
by Dylan Ayrey on The Dig (Truffle Security Co. blog), about
how you can paint funny pixel art (graffiti) with fake commit Git histories 
on spammer/phisher’s GitHub profiles (on their activity heatmap plot) -
which is [only] possible because of spammer attempts to leverage GitHub issues for phishing,
on a repo one has push access to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/1001526/&quot;&gt;Facing the Git commit-ID collision catastrophe&lt;/a&gt;
(in Linux kernel repository) by  Jonathan Corbet on LWN.net,
about the concern that, given the growth of the kernel repository, soon 12 digits will not be enough;
on the other hand, commits only make up about 1/8 of the total objects in the repository,
and abbreviated hashes should be accompanied by the short-form version of the changelog
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--format=reference&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/this-is-learning/optimizing-your-repository-for-speed-and-efficiency-5co2&quot;&gt;Optimizing Your Repository for Speed and Efficiency&lt;/a&gt; and
&lt;a href=&quot;https://dev.to/this-is-learning/using-git-maintenance-in-github-actions-optimize-your-repositories-automatically-39ka&quot;&gt;Using Git Maintenance in GitHub Actions: Optimize Your Repositories Automatically&lt;/a&gt;
posts by Emanuele Bartolesi for &lt;a href=&quot;https://dev.to/this-is-learning&quot;&gt;This is Learning on DEV.to&lt;/a&gt; constitute the 2 part series
&lt;a href=&quot;https://dev.to/kasuken/series/29808&quot;&gt;Streamline Your Workflow with the Git Maintenance Command&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;The &lt;a href=&quot;https://git-scm.com/docs/git-maintenance&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git maintenance&lt;/code&gt;&lt;/a&gt; command
was mentioned in &lt;a href=&quot;https://blog.gitbutler.com/git-tips-2-new-stuff-in-git/&quot;&gt;Git Tips 2: Some Subtle New Things&lt;/a&gt;
article on GitButler Blog by Scott Chacon, which in turn was mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2024/02/29/edition-108/&quot;&gt;Git Rev News Edition #108&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cyberdemon.org/2024/03/20/submodules.html&quot;&gt;Demystifying git submodules&lt;/a&gt;
by Dmitry Mazin on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/fearless-rebasing/&quot;&gt;Fearless Rebasing&lt;/a&gt; by Scott Chacon on GitButler Blog
is about “first class” conflict support in GitButler, based on the Jujutsu concept of
“&lt;a href=&quot;https://martinvonz.github.io/jj/latest/conflicts/&quot;&gt;first class conflicts&lt;/a&gt;”.
    &lt;ul&gt;
      &lt;li&gt;The article does not mention the built-in (but optional) &lt;a href=&quot;https://git-scm.com/docs/git-rerere&quot;&gt;git rerere&lt;/a&gt;
mechanism of reusing recorded resolutions of conflicting merges
(described for example in &lt;a href=&quot;https://git-scm.com/book/en/v2/Git-Tools-Rerere&quot;&gt;Git Tools - Rerere&lt;/a&gt;
section in “Pro Git” 2nd Edition), that can help when rebasing repeatedly.&lt;/li&gt;
      &lt;li&gt;In order to reduce the pain of resolving merge conflicts,
and allow a merge or a rebase to be saved, tested, interrupted, published,
and collaborated on while it is in progress, one can also use
&lt;a href=&quot;https://github.com/mhagger/git-imerge&quot;&gt;git-imerge&lt;/a&gt; tool
(see also &lt;a href=&quot;https://softwareswirl.blogspot.com/2013/05/git-imerge-practical-introduction.html&quot;&gt;git-imerge: A Practical Introduction&lt;/a&gt; article).&lt;br /&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-imerge&lt;/code&gt; was first mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2016/07/20/edition-17/&quot;&gt;Git Rev News Edition #17&lt;/a&gt;,
while Edition #34 includes &lt;a href=&quot;https://git.github.io/rev_news/2017/12/20/edition-34/#developer-spotlight-michael-haggerty&quot;&gt;Developer Spotlight: Michael Haggerty&lt;/a&gt;,
an interview with the author of this tool.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://jj-vcs.github.io/jj/&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt;, a Git-compatible version control system,
written in Rust, was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/stacked-branches-with-gitbutler/&quot;&gt;Stacked Branches with GitButler&lt;/a&gt;
by Scott Chacon on the GitButler Blog.
With the 0.14 release, GitButler can now manage dependent branches that are stacked,
including managing stacked GitHub PRs (Pull Requests).
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://www.git-tower.com/blog/stacked-prs/&quot;&gt;Understanding the Stacked Pull Requests Workflow&lt;/a&gt; by Bruno Brito on Tower’s blog,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/05/31/edition-111/&quot;&gt;Git Rev News Edition #111&lt;/a&gt;
together with various other articles and tools about stacked diffs, stacked PRs, and stacked branches.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://www.aviator.co/blog/rethinking-code-reviews-with-stacked-prs/#&quot;&gt;Rethinking code reviews with stacked PRs&lt;/a&gt;
by Ankit Jain on the Aviator blog,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/09/30/edition-115/&quot;&gt;Git Rev News Edition #115&lt;/a&gt;
with links to more sites and tools related to stacked PRs, etc.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/oj_redifined/enforcing-git-branch-naming-standards-tools-and-tips-for-developers-1p27&quot;&gt;&lt;del&gt;Enforcing&lt;/del&gt; Git Branch Naming Standards: &lt;del&gt;Tools and&lt;/del&gt; Tips for Developers&lt;/a&gt;
by Ojay on DEV.to (despite the title, the article does not include any technical way of
helping to enforce or even remind of branch naming conventions).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.xda-developers.com/manage-large-creative-projects-with-version-control-tools/&quot;&gt;9 ways to manage large creative projects with version control tools&lt;/a&gt;
by Ruby Helyer on XDA Developers.  Mentions CI/CD, Git LFS, commit message and file naming conventions.&lt;/li&gt;
  &lt;li&gt;Adam Ruka posted a series of articles on working with the Git source control system:
    &lt;ol&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.endoflineblog.com/gitflow-considered-harmful&quot;&gt;GitFlow considered harmful&lt;/a&gt; (2015)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.endoflineblog.com/follow-up-to-gitflow-considered-harmful&quot;&gt;Follow-up to ‘GitFlow considered harmful’&lt;/a&gt; (2015)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.endoflineblog.com/oneflow-a-git-branching-model-and-workflow&quot;&gt;OneFlow – a Git branching model and workflow&lt;/a&gt; (2017)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.endoflineblog.com/implementing-oneflow-on-github-bitbucket-and-gitlab&quot;&gt;Implementing OneFlow on GitHub, BitBucket and GitLab&lt;/a&gt; (2021)&lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;&lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;GitFlow: A successful Git branching model&lt;/a&gt;
was a blog post by Vincent Driessen from 2010, with a note of reflection from 2020;
the original author now suggests adopting a much simpler workflow (like
&lt;a href=&quot;https://guides.github.com/introduction/flow/&quot;&gt;GitHub flow&lt;/a&gt;) if the team is doing
continuous delivery of software, and using GitFlow only when necessary,
for explicitly versioned software - with multiple versions of it in the wild to be supported.&lt;br /&gt;
See also &lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
by Martin Fowler, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/JetBrains-Research/bus-factor-explorer&quot;&gt;bus-factor-explorer&lt;/a&gt;
by JetBrains Research is a web app for exploring the Bus Factor of GitHub projects
by analyzing the commit history.  Preferably run as a Docker image.
The repository includes evaluation results for 935 popular repositories on GitHub.
There is also a short video about the tool on YouTube: &lt;a href=&quot;https://youtu.be/uIoV79N14z8&quot;&gt;https://youtu.be/uIoV79N14z8&lt;/a&gt;.
Written in Kotlin (with evaluation done with Jupyter notebooks), under MIT license.
    &lt;ul&gt;
      &lt;li&gt;See &lt;a href=&quot;https://mclare.blog/posts/the-bus-factor/&quot;&gt;The Bus Factor&lt;/a&gt; and
&lt;a href=&quot;https://scannedinavian.com/the-github-plugin-my-coworkers-asked-me-not-to-write.html&quot;&gt;The github plugin my coworkers asked me not to write&lt;/a&gt;
articles mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/11/30/edition-117/&quot;&gt;Git Rev News Edition #117&lt;/a&gt;
(the previous edition), together with accompanying links.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://anonymous.4open.science/&quot;&gt;Anonymous GitHub&lt;/a&gt; is a service
that allows you to anonymize your GitHub repository for double-blind scientific reviews
(of scientific articles where source code is to be made available for open science reasons).
Several anonymization options are available to ensure that you do not break the double anonymization,
such as removing links, images or specific terms.
The goal is to make is as easy as possible for the reviewer to explore and review the repository.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.news/&quot;&gt;Git.News&lt;/a&gt; is a website which provides an infinite newsfeed of
trending repositories from GitHub, HackerNews &amp;amp; Reddit
(which you can then filter by programming language).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://octobox.io/&quot;&gt;Octobox&lt;/a&gt; is a service to help manage GitHub notifications.
Includes an optional GitHub app to add live information on issue, PR, CI status, labels, authors, etc.
Octobox is free for open source projects and the use of basic notifications is free for private projects.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.filestash.app/&quot;&gt;Filestash&lt;/a&gt; is a Dropbox-like enterprise-grade file manager,
connecting your storage with your identity provider and authorisations.
It adds a web interface to storage solutions like S3 buckets, SFTP/FTPS servers, Git repositories, etc.
Self-hosted deployment is free; it can be done using a Docker image.
Written in Go and JavaScript, under AGPLv3 license.
Demo available at &lt;a href=&quot;https://demo.filestash.app/&quot;&gt;https://demo.filestash.app/&lt;/a&gt;,
source code at &lt;a href=&quot;https://github.com/mickael-kerjean/filestash&quot;&gt;https://github.com/mickael-kerjean/filestash&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/release-engineering/dist-git&quot;&gt;DistGit (Distribution Git)&lt;/a&gt;
is Git with additional data storage, designed to hold content of source RPMs
(Linux distribution packages).  Written in Python, under MIT license,
but with scripts/httpd/upload.cgi under GPLv1,
and the dist-git-client subdirectory under GPLv2+.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://linbreux.github.io/wikmd/&quot;&gt;wikmd&lt;/a&gt; is a file-based wiki, with
documents written in Markdown, which uses Git for version control.
It is possible to connect Wikmd with an online repo.
Written in Python, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mycorrhiza.wiki/&quot;&gt;Mycorrhiza Wiki&lt;/a&gt; is a free and open-source wiki engine,
with data stored as simple files, and changes &lt;a href=&quot;https://mycorrhiza.wiki/hypha/git&quot;&gt;stored in Git&lt;/a&gt;.
It uses &lt;a href=&quot;https://mycorrhiza.wiki/hypha/mycomarkup&quot;&gt;Mycomarkup&lt;/a&gt;, a custom-made markup language,
with support for transcluding units of contents.
Written in Go, under AGPLv3 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jgm/gitit&quot;&gt;Gitit&lt;/a&gt; is a wiki engine written in Haskell,
that uses &lt;a href=&quot;http://happstack.com/&quot;&gt;Happstack&lt;/a&gt; (HAppS) for the web server
and &lt;a href=&quot;http://pandoc.org/&quot;&gt;pandoc&lt;/a&gt; for markup processing (with extended Markdown format as default).
Pages and uploaded files are stored in a Git, darcs, or Mercurial repository
and may be modified through the wiki’s web interface.
Under GPLv2 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.xandikos.org/&quot;&gt;Xandikos&lt;/a&gt; is a lightweight CardDAV/CalDAV server
that keeps history and backups in a Git repository.
It allows to share calendars (events, todo items, journal entries) via CalDAV
and contacts (vCard) via CardDAV.
Written in Python using Dulwich, Jinja2, icalendar, and defusedxml,
licensed under GPLv3+.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/thomiceli/opengist&quot;&gt;Opengist&lt;/a&gt; is a self-hosted pastebin powered by Git,
similar to &lt;a href=&quot;https://gist.github.com/&quot;&gt;GitHub Gist&lt;/a&gt;.
Demo available at &lt;a href=&quot;https://demo.opengist.io/&quot;&gt;https://demo.opengist.io/&lt;/a&gt;.
Written in Go, under AGPLv3 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/w4/rgit&quot;&gt;rgit&lt;/a&gt; is a gitweb/cgit-like fast web frontend for Git repositories.
You can see it in action at &lt;a href=&quot;https://git.inept.dev/&quot;&gt;https://git.inept.dev/&lt;/a&gt;.
Written in Rust using Axum, gitoxide, Askama and RocksDB.
Under WTFPL license
(which is not on the list of &lt;a href=&quot;https://opensource.org/licenses&quot;&gt;OSI approved Licenses&lt;/a&gt;,
but is on the list of &lt;a href=&quot;https://wiki.debian.org/DFSGLicenses#DO_WHAT_THE_FUCK_YOU_WANT_TO_PUBLIC_LICENSE&quot;&gt;licenses that meet Debian Free Software Guidelines&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jonashaag/klaus&quot;&gt;klaus&lt;/a&gt; is a simple, easy-to-set-up Git web viewer.
Supports syntax highlighting, Markdown + RestructuredText (reST) rendering support,
and code navigation using Exuberant ctags.  Can be installed as Docker image or via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pip&lt;/code&gt;.
You can see its demo at &lt;a href=&quot;http://klausdemo.lophus.org/&quot;&gt;http://klausdemo.lophus.org/&lt;/a&gt;.
Written in Python, under an unnamed custom permissive license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-activity.olets.dev/&quot;&gt;git-activity&lt;/a&gt; is a tool
to record your Git activity across multiple (or all) repos,
and read it optionally filtered by date,
activity type (e.g. commit, branch creation, etc.) regex pattern,
repo name regex pattern, branch name regex pattern, commit message regex pattern,
and/or commit SHA (first seven characters) regex pattern.
Useful for retroactively filling out a time sheet (or correcting a time sheet),
finding that time you solved a problem similar to the one you’re working on now, etc.
The log is stored in a plain text file.  Source code &lt;a href=&quot;https://github.com/olets/git-activity&quot;&gt;on GitHub&lt;/a&gt;.
Written as Bash shell script using AWK, licensed under (custom)
CC BY-NC-SA 4.0 with Hippocratic License v3 ethical requirements.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/conorsheppard/git-branches-script&quot;&gt;git-branches-script&lt;/a&gt;
is a convenience script that prints a menu of recent Git branches
and allows you to switch to a new branch by selecting its corresponding number.
Written as Bash shell script, no license provided.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqjzbhxeho.fsf@gitster.g/&quot;&gt;2.48.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqfrmn4hr9.fsf@gitster.g/&quot;&gt;2.48.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.48.0-rc1.windows.1&quot;&gt;2.48.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.48.0-rc0.windows.1&quot;&gt;2.48.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.9.0&quot;&gt;1.9.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.15/admin/release-notes#3.15.1&quot;&gt;3.15.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.14/admin/release-notes#3.14.6&quot;&gt;3.14.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.9&quot;&gt;3.13.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.13&quot;&gt;3.12.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.19&quot;&gt;3.11.19&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.15/admin/release-notes#3.15.0&quot;&gt;3.15.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.14/admin/release-notes#3.14.5&quot;&gt;3.14.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.8&quot;&gt;3.13.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.12&quot;&gt;3.12.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.18&quot;&gt;3.11.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/12/19/gitlab-17-7-released/&quot;&gt;17.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/12/11/patch-release-gitlab-17-6-2-released/&quot;&gt;17.6.2, 17.5.4, 17.4.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.11.html#3110&quot;&gt;3.11.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.6.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.12&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.11&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v1.10.0&quot;&gt;1.10.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.10.1&quot;&gt;4.10.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.10.0&quot;&gt;4.10.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.4&quot;&gt;0.14.4&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.3&quot;&gt;0.14.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 117 (November 30th, 2024)</title>
      <link>https://git.github.io/rev_news/2024/11/30/edition-117/</link>
      <pubDate>Sat, 30 Nov 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/11/30/edition-117/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-117-november-30th-2024&quot;&gt;Git Rev News: Edition 117 (November 30th, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 117th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of October and November 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/BA07EFA0-0793-420D-BED9-ACD7CEBE0112@townlong-yak.com/&quot;&gt;Bug report: v2.47.0 cannot fetch version 1 pack indexes&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Someone called ‘fox’ reported that when upgrading Git to v2.47.0
from v2.46.2 or a previous version, cloning from their website,
which uses the old “dumb HTTP” protocol, stopped working. With
v2.47.0 there is an error message indicating that some index files
“differ in contents”.&lt;/p&gt;

    &lt;p&gt;Using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt;, fox found the commit that introduced the
issue. That commit implemented a check that verified that the index
file downloaded from the remote was byte-for-byte identical with the
index file generated locally from the Git objects downloaded as part
of the clone.&lt;/p&gt;

    &lt;p&gt;That check failed because the remote had an index in the version 1
format, while the locally generated index was in a more recent
format. And fox wondered if this was intentional.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine replied to fox that he could reproduce the problem.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, also replied to fox saying that the breakage
was not intended. He thought that it was better to rely on the
locally generated index, but that there should be no guarantee for
it to be identical to the downloaded one.&lt;/p&gt;

    &lt;p&gt;Peff proposed a draft patch that discarded the downloaded version
before generating an index, but said it was hacky and didn’t check
that the content was the same. So he suggested a better solution.&lt;/p&gt;

    &lt;p&gt;He then proposed an improved draft patch, which implemented the
better solution he had suggested by marking the downloaded index as
temporary and then discarding it after a new one is generated.&lt;/p&gt;

    &lt;p&gt;Taylor Blau, who was the temporary Git maintainer while Junio
Hamano, the usual maintainer, had some time off, replied to Eric and
fox in the meantime confirming it was an unintentional breakage, and
saying he was going to look at Peff’s patches.&lt;/p&gt;

    &lt;p&gt;Taylor then discussed with Peff the first draft patch and agreed
with Peff that the solution implemented in the improved draft patch
was better.&lt;/p&gt;

    &lt;p&gt;So Taylor reviewed Peff’s improved draft patch. He made some
comments but found it good, and asked Peff to add a test and to
propose it as a regular patch.&lt;/p&gt;

    &lt;p&gt;Peff replied to Taylor’s comments, proposed a draft test, and said
he was going to work on a proper patch as well as some cleanups and
refactors in the dumb HTTP code.&lt;/p&gt;

    &lt;p&gt;Taylor found Peff’s draft test “beautifully written”.&lt;/p&gt;

    &lt;p&gt;Peff then sent
&lt;a href=&quot;https://lore.kernel.org/git/20241025064148.GA2110169@coredump.intra.peff.net/&quot;&gt;a series made of 11 patches&lt;/a&gt;
to fix the issue, clean up the dumb HTTP code and fix a couple of
other bugs or potential bugs he found in the process.&lt;/p&gt;

    &lt;p&gt;Taylor reviewed the patch series and discussed a few technical
details with Peff. Overall he found the series good to go and
eventually merged it.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-ghanshyam-thakkar&quot;&gt;Developer Spotlight: Ghanshyam Thakkar&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I am Ghanshyam Thakkar. I was an undergrad student in Electronics
when I started contributing to Git. I am now a Software Engineer at a
startup. I sometimes contribute to open source projects in my free time,
and explore/learn new technologies.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How did you initially become interested in contributing to Git,
and what motivated you to choose it as your GSoC project?&lt;/p&gt;

    &lt;p&gt;Before GSoC, I was quite familiar with the Linux ecosystem, and it had
been my primary OS for the majority of my college years. And during
those times I felt Git was the most impactful project enabling the vastly
collaborative Linux Desktop Ecosystem. So, I felt like contributing
to Git would be a great opportunity to learn and contribute to a
project that had been so crucial to my everyday workflow.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How do you feel your contribution has impacted the Git community
or the broader open source ecosystem?&lt;/p&gt;

    &lt;p&gt;Before my GSoC project, I had contributed some small patches, which
could be considered as bug fix, general code cleanup, expanding test
coverage, etc. Some of which can be observed in user-space. But my GSoC
project was about migrating Git’s test suite to a purely C-based
test framework, which was not user-facing, however, was a step in the
right direction for the project as a whole.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Is there any aspect of Git that you now see differently after
having contributed to it?&lt;/p&gt;

    &lt;p&gt;The mailing list workflow. Although, I was skeptical about it at first
because I had never used mailing lists before, I now see it as a very
effective way to communicate and collaborate on a project of such
massive scale. Although, I still am not a big fan of the all or nothing
nature of the mailing lists. Subscribing to mails of a specific area
would have been great. Although, I do understand that it can
probably be done with filtering using a script.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How do you balance your contributions with other responsibilities
like work or school?&lt;/p&gt;

    &lt;p&gt;When I was contributing to Git as part of GSoC, I was a student and I
also had summer vacation, so it was quite easy for me to balance my
contributions with my personal life. However, now that I am quite busy with my
$DAYJOB, I don’t have much bandwidth to contribute to open
source in the short term. But I am planning to start contributing again
after some time.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Can you share how GSoC helped enhance your technical and
non-technical skills (like communication, project management, etc.)?&lt;/p&gt;

    &lt;p&gt;I would say it helped me improve my technical communication skills immensely.
Going back and forth with the reviewers on the list, I learned quite a
bit about how to communicate effectively. Also, this was my first time
working in a C based project, so I learned some C hacks as well!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What was your biggest takeaway or learning from GSoC that you now
apply regularly in your work?&lt;/p&gt;

    &lt;p&gt;Technical communication and effective code review. Also more effective
Git usage.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What was the biggest challenge you faced during your contributions
to Git, and how did you overcome it?&lt;/p&gt;

    &lt;p&gt;More than the technical challenges solving a problem, I would say it was
more challenging finding the relevant work to do, as there is no
official issue tracker. I would search for #leftoverbits on the mailing
list and #TODOs in the codebase to find things to do. However,
most of them seemed quite out of reach in terms of difficulty. However,
I attempted them anyway and learned a lot in the process. The mailing
list folks were quite helpful in guiding me in the right direction.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Have you thought about mentoring new GSoC students?&lt;/p&gt;

    &lt;p&gt;Yes, although I don’t have the bandwidth to become a primary mentor,
I would love to be a co-mentor.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Honestly, I find Git to be quite mature and complete. I can’t
think of anything, off the top of my head, that I would like
people to work on for a full year.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What upcoming features or changes in Git are you particularly
excited about?&lt;/p&gt;

    &lt;p&gt;Rust adoption.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

    &lt;p&gt;I quite frequently find myself using &lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lazygit&lt;/code&gt;&lt;/a&gt;
on the command line for some quick and dirty Git operations.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;I use &lt;a href=&quot;https://aerc-mail.org/&quot;&gt;aerc&lt;/a&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;send-email&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;format-patch&lt;/code&gt;
for email interactions. And for development, I use &lt;a href=&quot;https://neovim.io/&quot;&gt;Neovim&lt;/a&gt;
and &lt;a href=&quot;https://gist.github.com/Strus/042a92a00070a943053006bf46912ae9&quot;&gt;clangd LSP&lt;/a&gt;
with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GENERATE_COMPILATION_DATABASE&lt;/code&gt; build flag.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How do you envision your own involvement with Git or other open
source projects in the future?&lt;/p&gt;

    &lt;p&gt;I think I will continue to be a part of the open source community in some
way or the other. My perspective towards open source has always been
very positive and I would like to continue contributing to it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;I would suggest to start from reading the docs, particularly
&lt;a href=&quot;https://git-scm.com/docs/MyFirstContribution&quot;&gt;MyFirstContribution&lt;/a&gt;
and &lt;a href=&quot;https://git-scm.com/docs/SubmittingPatches&quot;&gt;SubmittingPatches&lt;/a&gt;.
And then start with some &lt;a href=&quot;https://lore.kernel.org/git/?q=%23leftoverbits&quot;&gt;#leftoverbits&lt;/a&gt;
or if you are particularly interested in a specific area, you can
even reach out to people working on those areas to ask for guidance.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Would you recommend other students or contributors to participate in
the GSoC, or other mentoring programs, working on Git? Why? Do you
have advice for them?&lt;/p&gt;

    &lt;p&gt;Absolutely! GSoC is a great opportunity to learn and contribute to open
source projects. It is a great way to learn how a project of such
massive scale is managed and developed.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://mclare.blog/posts/the-bus-factor/&quot;&gt;The Bus Factor&lt;/a&gt;
by Maryanne Wachter (also known as &amp;lt;mclare&amp;gt; or m-clare) on her blog
(with visualizations built with Observable), and
&lt;a href=&quot;https://scannedinavian.com/the-github-plugin-my-coworkers-asked-me-not-to-write.html&quot;&gt;The github plugin my coworkers asked me not to write.&lt;/a&gt;
by Shae Erisson on Shae Erisson’s Blog.
    &lt;ul&gt;
      &lt;li&gt;The &lt;em&gt;bus factor&lt;/em&gt; is a measurement of the risk resulting from information and capabilities
not being shared among team members, derived from the phrase “in case they get hit by a bus”.
It is also known as the bus problem, truck factor, bus/truck number or circus factor.
The “bus factor” is the minimum number of team members that have to suddenly disappear
from a project before the project stalls due to lack of knowledgeable or competent personnel.
(From &lt;a href=&quot;https://en.wikipedia.org/wiki/Bus_factor&quot;&gt;Wikipedia&lt;/a&gt;).&lt;/li&gt;
      &lt;li&gt;Based on the &lt;a href=&quot;https://arxiv.org/abs/1604.06766&quot;&gt;“A Novel Approach for Estimating Truck Factors”&lt;/a&gt;
paper from 2016 by Guilherme Avelino, Leonardo Passos, Andre Hora, and Marco Tulio Valente,
with many citations since.
Original implementation available at &lt;a href=&quot;https://github.com/aserg-ufmg/Truck-Factor&quot;&gt;https://github.com/aserg-ufmg/Truck-Factor&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.jonathancreamer.com/how-we-shrunk-our-git-repo-size-by-94-percent/&quot;&gt;How we shrunk our Javascript monorepo git size by 94%&lt;/a&gt;
Mentions using the &lt;a href=&quot;https://github.com/github/git-sizer&quot;&gt;git-sizer&lt;/a&gt; tool
which was mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2018/03/21/edition-37/&quot;&gt;Git Rev News Edition #37&lt;/a&gt;.
The work described in the article also led to adding the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--path-walk&lt;/code&gt; option to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repack&lt;/code&gt;
and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pack.usePathWalk&lt;/code&gt; config option to Git,
and to the new experimental &lt;a href=&quot;https://github.com/microsoft/git/pull/667&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git survey&lt;/code&gt;&lt;/a&gt; command
(that for now is present in Microsoft’s fork of Git),&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ygreky.com/2024/07/deleted-your-fork-is-it-gone-not-really/&quot;&gt;Deleted your fork. Is it gone? Not really…&lt;/a&gt;
by Marta Rybczynska on Ygreky Blog.  Provides some recommendations for best practices
when using public forges.
    &lt;ul&gt;
      &lt;li&gt;References &lt;a href=&quot;https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github&quot;&gt;Anyone can Access Deleted and Private Repository Data on GitHub&lt;/a&gt;
blog post by Truffle Security, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/07/31/edition-113/&quot;&gt;Git Rev News Edition #113&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://blog.gitguardian.com/demystifying-github-cached-views-the-hidden-danger/&quot;&gt;Demystifying GitHub Private Forks - The Hidden Danger of Cached View&lt;/a&gt;
by Guillaume Valadon on GitGuardian Blog.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.benji.dog/articles/git-config/&quot;&gt;How I configure my Git identities&lt;/a&gt;
with the help of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config&lt;/code&gt; features: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;includeIf&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gitdir:&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hasconfig:&lt;/code&gt;,
complex &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.ssh/config&lt;/code&gt; setups (and the use of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;insteadOf&lt;/code&gt;, where needed).
Written by Benji Encalada Mora on their blog
(with a comment of “This may be overkill, but it works on my machine”).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://drewdeponte.com/blog/when-to-rewrite-git-history/&quot;&gt;When to rewrite Git history?&lt;/a&gt;
(beside “Don’t rewrite history once it is shared.”).  Written by Drew De Ponte on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://drewdeponte.com/blog/git-commit-creation/&quot;&gt;[The Ultimate Guide to] Git Commit Creation&lt;/a&gt;
by Drew De Ponte on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-use-git-stash-to-manage-code&quot;&gt;How to Use Git Stash to Efficiently Manage Your Code&lt;/a&gt;
by Okoro Emmanuel Nzube on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jvns.ca/til/finding-when-a-bug-was-fixed-with-git-bisect/&quot;&gt;Finding when a bug was fixed with git bisect&lt;/a&gt;
in Julia Evans &lt;a href=&quot;https://jvns.ca/til/&quot;&gt;TILs&lt;/a&gt; (&lt;b&gt;T&lt;/b&gt;oday &lt;b&gt;I&lt;/b&gt; &lt;b&gt;L&lt;/b&gt;earned).
    &lt;ul&gt;
      &lt;li&gt;Julia Evans has written a series of articles on Git, which were referenced in
Git Rev News from &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Edition #103&lt;/a&gt;
to &lt;a href=&quot;https://git.github.io/rev_news/2024/05/31/edition-111/&quot;&gt;#111&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;She has also published two &lt;a href=&quot;https://wizardzines.com/&quot;&gt;zines&lt;/a&gt; about Git:
&lt;em&gt;&lt;a href=&quot;https://wizardzines.com/zines/oh-shit-git/&quot;&gt;Oh shit, git!&lt;/a&gt;&lt;/em&gt; and
&lt;em&gt;&lt;a href=&quot;https://wizardzines.com/zines/git/&quot;&gt;How Git Works&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://marijkeluttekes.dev/blog/articles/2024/11/17/quick-tip-ignore-commits-in-git-blame-using-a-file/&quot;&gt;Quick tip: Ignore commits in Git blame using a file&lt;/a&gt;
(recommended name is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git-blame-ignore-revs&lt;/code&gt;)
by Marijke Luttekes on her blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.xda-developers.com/reasons-should-use-git-productivity/&quot;&gt;4 reasons you should use Git for productivity, even if you aren’t a developer&lt;/a&gt;
by Adam Conway on XDA Developers blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- tangentially related to Git --&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitguardian.com/scary-secrets-2024/&quot;&gt;Doomed Keys and Hidden Threats: The Scariest Secrets in Your Repositories&lt;/a&gt;
by Gaetan Ferry and
&lt;a href=&quot;https://blog.gitguardian.com/the-extent-of-hardcoded-secrets-from-development-to-production/&quot;&gt;The Extent of Hardcoded Secrets: From Development to Production&lt;/a&gt;
by Guillaume Valadon on GitGuardian Blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitfourchette.org/&quot;&gt;GitFourchette&lt;/a&gt; - The comfortable Git UI for Linux.
Under development; you can currently install it &lt;a href=&quot;https://github.com/jorio/gitfourchette/releases&quot;&gt;with AppImage or from source&lt;/a&gt;.
Written in Python, using the Qt UI (via PyQt6/PySide6) and pygit2.  Under GPLv3 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/changesets/changesets&quot;&gt;Changesets&lt;/a&gt; is a tool
to manage versioning and changelogs with a focus on multi-package repositories (monorepos).
Written in TypeScript, under MIT license.
    &lt;ul&gt;
      &lt;li&gt;For an explanation of the “monorepo” concept see
&lt;a href=&quot;https://monorepo.tools/#what-is-a-monorepo&quot;&gt;What is a Monorepo?&lt;/a&gt;
on monorepo.tools (this site was mentioned first in
&lt;a href=&quot;https://git.github.io/rev_news/2022/02/28/edition-84/&quot;&gt;Git Rev News Edition #84&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://microsoft.github.io/beachball/&quot;&gt;Beachball&lt;/a&gt;: The Sunniest Semantic Version Bumper.
Tool for automating npm publishing.
Written in TypeScript, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/github/git-sizer&quot;&gt;git-sizer&lt;/a&gt; is a tool that computes various size metrics
for a Git repository, flagging those that might cause problems.
Written in Go, under MIT license.
    &lt;ul&gt;
      &lt;li&gt;This tool was mentioned in passing in
&lt;a href=&quot;https://git.github.io/rev_news/2018/03/21/edition-37/&quot;&gt;Git Rev News Edition #37&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/awslabs/git-remote-s3&quot;&gt;git-remote-s3&lt;/a&gt; is a library
that enables you to use Amazon S3 as a git remote and as an LFS server.&lt;br /&gt;
It provides an implementation of a &lt;a href=&quot;https://github.com/awslabs/git-remote-s3&quot;&gt;git remote-helper&lt;/a&gt;
to use S3 (Amazon Simple Storage Service) as a serverless Git server, and
of the &lt;a href=&quot;https://github.com/git-lfs/git-lfs/blob/main/docs/custom-transfers.md&quot;&gt;git-lfs custom transfer&lt;/a&gt;
to enable pushing LFS managed files to the same S3 bucket used as remote.
Written in Python, under Apache 2.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ncusi/PatchScope&quot;&gt;PatchScope&lt;/a&gt; is a tool that
annotates files and lines of diffs (patches) with their purpose and type,
and performs statistical analysis on diffs and on the generated annotation data.
It also includes a web app, displaying various data visualizations.
Written in Python, under MIT license.
    &lt;ul&gt;
      &lt;li&gt;Its README includes a &lt;a href=&quot;https://github.com/ncusi/PatchScope/blob/main/README.md#related-projects&quot;&gt;list of similar tools and sites&lt;/a&gt;,
many of which were mentioned here on Git Rev News.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mergiraf.org/&quot;&gt;Mergiraf&lt;/a&gt; is a syntax-aware &lt;a href=&quot;https://git-scm.com/docs/gitattributes#_performing_a_three_way_merge&quot;&gt;git merge driver&lt;/a&gt;
(and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mergiraf&lt;/code&gt; command line tool that helps solving merge conflicts)
for a growing collection of programming languages and file formats.
Adding a new language to Mergiraf is done in a declarative way.
Written in Rust, under GPLv3 license.
    &lt;ul&gt;
      &lt;li&gt;The author recommends using Mergiraf together with &lt;a href=&quot;https://difftastic.wilfred.me.uk/&quot;&gt;Difftastic&lt;/a&gt;,
a structural diff tool that understands syntax, mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://diffdiff.net/&quot;&gt;Diffdiff.net&lt;/a&gt; (formerly diff.so) is a web application
that provides a fast, &lt;a href=&quot;https://diffdiff.net/privacy&quot;&gt;private&lt;/a&gt; way to compare two pieces of text
in a “split diff”/”side diff” view, side by side with highlighting the text that is different
from the text on the other side.&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- proprietary tools --&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.difflens.com/&quot;&gt;DiffLens&lt;/a&gt; - The Developer’s Diff Tool.
Provides language-aware semantic diffs for GitHub Pull Requests,
adding them as a comment to the pull request.
Available as a &lt;a href=&quot;https://github.com/marketplace/difflens&quot;&gt;GitHub app&lt;/a&gt;
or a &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=DiffLens.difflens&quot;&gt;VS Code Extension&lt;/a&gt;.
Proprietary tool, with 14 days free trial and &lt;a href=&quot;https://www.difflensapp.com/difflensDemo2_849ca26f9ee09faa084cbdcdc90b6f90f8ce8495&quot;&gt;demo&lt;/a&gt;.
See above for possible alternatives.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq5xob6coo.fsf@gitster.g/&quot;&gt;2.47.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.47.1.windows.1&quot;&gt;2.47.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.8.4&quot;&gt;1.8.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3103&quot;&gt;3.10.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.8.html#3810&quot;&gt;3.8.10&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#398&quot;&gt;3.9.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.15/admin/release-notes#3.15.0&quot;&gt;3.15.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/11/26/patch-release-gitlab-17-6-1-released/&quot;&gt;17.6.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/11/21/gitlab-17-6-released/&quot;&gt;17.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/11/13/patch-release-gitlab-17-5-2-released/&quot;&gt;17.5.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.5.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.10.html&quot;&gt;4.2.10&lt;/a&gt;,
&lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.9.html&quot;&gt;4.2.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v1.9.1&quot;&gt;1.9.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.9.0&quot;&gt;4.9.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.13.4&quot;&gt;0.13.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.14.0&quot;&gt;0.14.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.13.17&quot;&gt;0.13.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;8.0&lt;/a&gt;, &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;8.1&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/tower-windows-8/&quot;&gt;Release blog post&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;12.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Ghanshyam Thakkar, Johannes Schindelin,
Štěpán Němec, Bruno Brito and Toon Claes.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 116 (October 31st, 2024)</title>
      <link>https://git.github.io/rev_news/2024/10/31/edition-116/</link>
      <pubDate>Thu, 31 Oct 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/10/31/edition-116/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-116-october-31st-2024&quot;&gt;Git Rev News: Edition 116 (October 31st, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 116th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of September and October 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CAKDm0rNaHbzoiPg=DeuCoxzooNAsxw2BJfc0wg7fC_-=o9uJ7w@mail.gmail.com/&quot;&gt;fatal from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;submodule status --recursive&lt;/code&gt; when used with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep -q&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Matt Liberty reported that when he tried using
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodule status --recursive | grep -q &quot;^+&quot;&lt;/code&gt; on a repo with
a submodule, he got an error message like “fatal: failed to recurse
into submodule XXX”, where XXX is the name of the submodule.&lt;/p&gt;

    &lt;p&gt;He expected no error message, no output and a 0 exit code from the
whole command line as it should have succeeded. He guessed that Git
didn’t like that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt; when used with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-q&lt;/code&gt; exits immediately
(without printing anything) when there is a match.&lt;/p&gt;

    &lt;p&gt;Phillip Wood replied to Matt saying he assumed that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;’s exit
broke the pipe between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, so &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; received a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SIGPIPE&lt;/code&gt; signal which killed it. Phillip suggested consuming the
whole output from Git if the exit code from it was wanted.&lt;/p&gt;

    &lt;p&gt;Matt replied to Phillip that he was interested in the exit code from
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;, not from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, and that Git shouldn’t output any error when
its output is connected to a pipe that gets broken, in the same way
as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yes&lt;/code&gt; command, for example, doesn’t output any error when
piped to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep -q y&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, also replied to Phillip’s first
message that the error Git emitted in such a case wasn’t useful to
the user.&lt;/p&gt;

    &lt;p&gt;Matt replied to Junio that he thought no error at all should be
emitted as most Unix tools don’t output any error.&lt;/p&gt;

    &lt;p&gt;Then Phillip replied to Matt’s first reply to him. He asked if all
Matt wanted was that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodule status&lt;/code&gt; did not print any error
message when it receives a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SIGPIPE&lt;/code&gt; signal. Matt replied that he
wanted both no error message and a 0 exit code from it.&lt;/p&gt;

    &lt;p&gt;Junio replied to Matt that it was reasonable to ask for no error
message, but it should be OK if the exit code was related to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SIGPIPE&lt;/code&gt; message that the Git command received and that killed
it. Junio used the example that even &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yes&lt;/code&gt; exited with code 130 when
killed using the Control-C keys on a terminal.&lt;/p&gt;

    &lt;p&gt;The exit code associated with a signal is ‘128 + the signal number’,
for example as the Control-C keys send a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SIGINT&lt;/code&gt; signal, whose signal
number is 2, processes killed this way should exit with code ‘128 + 2’,
so 130.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine replied to Junio that it wasn’t clear how the exit
code from Git was important in the discussion as in the original
command line, Git appears before the pipe, so its exit code might be
lost.&lt;/p&gt;

    &lt;p&gt;Matt replied to Eric that the exit code mattered if the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pipefail&lt;/code&gt;
shell option was used.&lt;/p&gt;

    &lt;p&gt;Phillip replied to Matt suggesting he remap the exit code
associated with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SIGPIPE&lt;/code&gt;, which is 141 (128 + 13), to 0, if he was
using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pipefail&lt;/code&gt; but still wanted a 0 exit code. Phillip also gave
an example shell function to help with that remapping, and sent
&lt;a href=&quot;https://lore.kernel.org/git/pull.1799.git.1726837642511.gitgitgadget@gmail.com/&quot;&gt;a first version of a patch&lt;/a&gt;
to fix the error message.&lt;/p&gt;

    &lt;p&gt;Junio reviewed that patch and found that it was unnecessarily
including the “signal.h” system header.&lt;/p&gt;

    &lt;p&gt;Phillip fixed that issue in
&lt;a href=&quot;https://lore.kernel.org/git/pull.1799.v2.git.1726925150113.gitgitgadget@gmail.com/&quot;&gt;version 2 of the patch&lt;/a&gt;
which was merged and part of Git v2.47.0.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-chandra-pratap&quot;&gt;Developer Spotlight: Chandra Pratap&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Editor’s note: Just like in our previous edition, we return with another
 GSoC retrospective interview in this issue. We hope the reflections shared
 by GSoC students will provide an insightful perspective that benefits
 the community. As always, we welcome your thoughts and feedback!&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;Hey! I am Chandra Pratap (prefer going by Chand) and I am an
undergraduate student of Mathematics at SVNIT, Surat, India. I have
a passion for everything computing and like to solve leetcode-styled
problems in my free time or contribute to open-source software.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How did you initially become interested in contributing to Git, and
what motivated you to choose it as your GSoC project?&lt;/p&gt;

    &lt;p&gt;C was the first programming language that I learnt, and I wanted to
try working on a non-trivial software project. I watched a YouTube
video on open source and that’s where I got the idea of looking for
open-source projects to contribute to. Git and VLC were the only
open-source C-written software that I was familiar with and used in
day-to-day life, so I decided to start contributing to Git out of the two.
By the time GSoC came around, Git was the only open-source
community that I was familiar with, so I decided to choose it as my
GSoC organization.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How do you feel your contribution has impacted the Git community
or the broader open-source ecosystem?&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2024/projects/tlh611d7&quot;&gt;My project&lt;/a&gt;
was about moving and improving reftable tests, so I think
my contributions made life somewhat easier for other Git hackers,
especially those who frequent the reftable sub-project. My project
didn’t really affect any user-facing aspect of Git, so I don’t think it had
a huge impact on the broader open-source ecosystem, besides the
fact that it gained another lifelong contributor.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Is there any aspect of Git that you now see differently after having
contributed to it?&lt;/p&gt;

    &lt;p&gt;Everything, to be honest. Working on and with Git for the duration of
my project completely changed my mental model for the tool. Before
GSoC, Git was a clunky tool reserved for software development work
but post-Git, I know the most frequent commands like the back of my
hand, and I’ve already used Git to version control many of my non-software
files. I feel like I’ve learnt enough Git to last my entire career.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How do you balance your contributions with other responsibilities like
work or school?&lt;/p&gt;

    &lt;p&gt;I had summer vacation for the entire duration of GSoC and no other work
commitments, so I had no problems finding time for my GSoC project.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Can you share how GSoC helped enhance your technical and non-technical
skills (like communication, project management, etc.)?&lt;/p&gt;

    &lt;p&gt;In terms of technical skills, I think my C and Git skills saw the biggest jump.
I am a lot more comfortable working with those two tools than when I
was pre-GSoC. Besides that, I’m a lot less scared of the command line
now. In terms of non-technical skills, I believe I’ve gotten a lot better at
composing mails and communicating with other professionals. I’ve learnt
to write with the right amount of professionalism, so I don’t appear too
uptight or too lax, the right way to respond to constructive feedback, how
to time my schedule to fit with others’, especially those living in other
parts of the globe, and how to ask good questions.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What was your biggest takeaway or learning from GSoC that you now
apply regularly in your work?&lt;/p&gt;

    &lt;p&gt;I’d say the biggest takeaway from GSoC for me was that it is normal for
everyone to face difficulties when trying to learn a new codebase, tool, etc,
or even a different part of the same codebase. It is important to persevere
and not be afraid of asking questions to achieve the desired results. Other
than that, I’ve learnt a lot about good practices in software development,
like appropriately splitting commits and writing good commit messages,
that I subconsciously incorporate in my work now.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What was the biggest challenge you faced during your contributions
to Git, and how did you overcome it?&lt;/p&gt;

    &lt;p&gt;The biggest challenge in contributing to Git was the initial phase of
getting involved. I remember starting out working on a small patch for
about 2 months with a lot of help from other contributors before it got
accepted into Git’s upstream. After a few initial contributions, I grew more
confident and could steadily find things to work on and produce
acceptable results. The key to overcoming this challenge was to be
persistent and patient, and not being afraid of asking silly questions.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Have you thought about mentoring new GSoC students?&lt;/p&gt;

    &lt;p&gt;I’m not sure about being a full-on mentor, but I’d love to co-mentor
any future GSoC student(s) interested in working on the reftable
project.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://git-scm.com/docs/git-gui&quot;&gt;Git GUI&lt;/a&gt; tool. I believe that
would make Git far more accessible than it currently is and get it
incorporated in a lot more people’s day-to-day works.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;The packed-refs format for refs seems redundant to me now that
reftable is a core part of Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favourite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://gitgitgadget.github.io/&quot;&gt;GitGitGadget&lt;/a&gt; was a lifesaver when
I had just started contributing to Git, so that is probably my favourite
Git related tool.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;I used Git’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;send-email&lt;/code&gt; to send patches to the mailing list (especially
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--compose&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--annotate&lt;/code&gt; flags) and Gmail’s online client to
convey non-patch mails. For developing Git, I used Vim as the editor
on an Ubuntu machine and Git as the version control software (duh).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How do you envision your own involvement with Git or other
open-source projects in the future?&lt;/p&gt;

    &lt;p&gt;I plan on making small contributions to Git from time to time, since I
cannot find enough time for larger patches. Other than that, I’ll try to
volunteer as a Git mentor for future GSoC or Outreachy cohorts.
Regarding other open-source projects, I’ll try contributing to them when
I learn a new technology and want a real-world experience.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;Go through Git’s &lt;a href=&quot;https://git-scm.com/docs/MyFirstContribution&quot;&gt;‘My First Contribution tutorial’&lt;/a&gt;
for the initial setup and to get an idea of what’s it like
to work on Git. Then work on a few ‘microprojects’ (&lt;a href=&quot;https://git.github.io/General-Microproject-Information/&quot;&gt;more information on
the Git Developer’s website&lt;/a&gt;)
to dip your toes in the Git Development community. From there, you
can figure out interesting stuff to work on by yourself.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Would you recommend other students or contributors to participate in
the GSoC, or other mentoring programs, working on Git? Why? Do you
have advice for them?&lt;/p&gt;

    &lt;p&gt;Yes. I believe that Git is a tool that every working professional can find
useful regardless of whether they work in the software industry or not,
and working on Git through an open-source program is an excellent way
to get good at it in a short period of time. There’s also the added benefit
of joining a large and active community of amazingly experienced
developers who can teach you a lot about writing software, and the
software development workflow in general.&lt;/p&gt;

    &lt;p&gt;I think the key to getting selected as a participant in GSoC or other
mentoring programs is getting involved as early as possible. The more
time you allow yourself to get familiar with Git’s codebase and
development workflow, the easier it becomes to find an apt project and
write a reasonable proposal for it. Also, the initial phase of contributions is
the most difficult part of getting involved with an open-source project, so it
is better to allow yourself ample time to tackle that initial hurdle.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/highlights-from-git-2-47/&quot;&gt;Highlights from Git 2.47&lt;/a&gt;
by Taylor Blau on GitHub Blog.  Includes features like incremental multi-pack indexes,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%(is-base:)&lt;/code&gt; atom for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git for-each-ref&lt;/code&gt; (see also the &lt;a href=&quot;https://alchemists.io/articles/git_for_each_ref&quot;&gt;Brooke Kuhlmann article&lt;/a&gt;, mentioned below),
the new “&lt;a href=&quot;https://github.com/git/git/blob/v2.47.0/Documentation/technical/platform-support.txt&quot;&gt;Platform Support Policy&lt;/a&gt;” document,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git mergetool&lt;/code&gt; directly supporting Visual Studio Code merge tool, and others.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2024/10/07/whats-new-in-git-2-47-0/&quot;&gt;What’s new in Git 2.47.0?&lt;/a&gt;
by Justin Tobler on GitLab Blog.  Highlights include
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init.defaultRefFormat&lt;/code&gt; configuration option that can be set to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reftable&lt;/code&gt; backend
(see &lt;a href=&quot;https://about.gitlab.com/blog/2024/05/30/a-beginners-guide-to-the-git-reftable-format/&quot;&gt;Beginner’s guide to the Git reftable format&lt;/a&gt;),
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init.defaultObjectFormat&lt;/code&gt; configuration option that can be set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sha256&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git refs verify&lt;/code&gt;, and others.&lt;/li&gt;
  &lt;li&gt;Tower is running a &lt;a href=&quot;https://gittower.typeform.com/git-survey&quot;&gt;Git GUIs User’s Survey&lt;/a&gt;
for people who do not 100% of the time use Git in the terminal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/how-typefully-uses-tower&quot;&gt;How Typefully Uses Tower [Git GUI Client] to Conquer Social Media Publishing&lt;/a&gt;
by Bruno Brito on Tower Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://attendi.nl/moving-all-our-python-code-to-a-monorepo-pytendi/&quot;&gt;Moving all our Python code to a monorepo: pytendi&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/bruno-api-client-using-git/&quot;&gt;Bruno — An API Client Using Git to Fight for Developer Experience&lt;/a&gt;
by Ryan Reynolds on Tower Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/munemprionto/using-git-as-your-personal-to-do-list-3kkd&quot;&gt;Using Git as Your Personal To-Do List&lt;/a&gt;
by Munem Prionto on DEV.to - more as a way of learning Git by the way of managing
a TODO list, rather than for practical reasons.
    &lt;ul&gt;
      &lt;li&gt;Contrast with &lt;a href=&quot;https://jezenthomas.com/2015/10/using-git-to-manage-todos/&quot;&gt;Using Git to Manage Todos&lt;/a&gt;
by Jezen Thomas (2015), mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/11/11/edition-9/&quot;&gt;Git Rev News Edition #9&lt;/a&gt;,
which is about using Git to help manage TODO or FIXME comments in the codebase
(assuming that for example your IDE does not have a plugin for managing TODOs).&lt;/li&gt;
      &lt;li&gt;One can also consider using a CLI tool that stores data in plain text files
for managing TODOs, like &lt;a href=&quot;https://taskwarrior.org/&quot;&gt;Taskwarrior&lt;/a&gt;.  Plain text
files work well with Git.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://alchemists.io/articles/git_for_each_ref&quot;&gt;Git For Each Ref&lt;/a&gt;
by Brooke Kuhlmann in Alchemists Collective articles.
Learn how to use this command to make use of references
for information dumping, statistics, and much more.
Included in this article is use of the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;is-base&lt;/code&gt; field name recently added in
&lt;a href=&quot;https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.47.0.adoc&quot;&gt;Git 2.47.0&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://alexharri.com/blog/searching-and-navigating-git-commits&quot;&gt;Searching for and navigating Git commits&lt;/a&gt;
by Alex Harri on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/thoughtpolice/9c45287550a56b2047c6311fbadebed2&quot;&gt;Why some of us like “interdiff” code review&lt;/a&gt;
by Austin Seipp (a Gist).  Describes problems with the UI of multi-commit GitHub Pull Requests
for responding to reviewer comments by providing a new version of the patch series,
and how &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git range-diff&lt;/code&gt; and interactive rebase can help with this task.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.bitquabit.com/post/how-i-do-github-prs/&quot;&gt;How I Review GitHub PRs&lt;/a&gt;
by Benjamin Pollack on bitquabit.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/993787/&quot;&gt;Python PGP proposal poses packaging puzzles&lt;/a&gt;
by Joe Brockmeier on LWN.net - &lt;a href=&quot;https://docs.sigstore.dev/&quot;&gt;Sigstore&lt;/a&gt; vs &lt;a href=&quot;https://www.openpgp.org/&quot;&gt;OpenPGP&lt;/a&gt;.
Sigstore was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/09/30/edition-91/&quot;&gt;Git Rev News Edition #91&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2024/05/31/edition-111/&quot;&gt;#111&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/993498/&quot;&gt;A look at the aerc mail client&lt;/a&gt;
by Joe Brockmeier on LWN.net.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Scientific papers&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Tsukasa Yagi, Shinpei Hayashi: &lt;em&gt;“Toward Interactive Optimization of Source Code Differences:
An Empirical Study of Its Performance”&lt;/em&gt;,
&lt;a href=&quot;https://arxiv.org/abs/2409.13590&quot;&gt;arXiv:2409.13590&lt;/a&gt;,
with dataset at &lt;a href=&quot;https://doi.org/10.5281/zenodo.13618978&quot;&gt;https://doi.org/10.5281/zenodo.13618978&lt;/a&gt; (but no source code).
    &lt;ul&gt;
      &lt;li&gt;It is based on a prior study:
Nugroho, et al.: &lt;em&gt;“How different are different diff algorithms in Git?:
Use –histogram for code changes”&lt;/em&gt; (2019),
&lt;a href=&quot;https://doi.org/10.1007/s10664-019-09772-z&quot;&gt;https://doi.org/10.1007/s10664-019-09772-z&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-am.io/&quot;&gt;Reviewing git contributions via email&lt;/a&gt; (&lt;a href=&quot;https://git-am.io/&quot;&gt;https://git-am.io/&lt;/a&gt;)
is a companion piece to &lt;a href=&quot;https://git-send-email.io/&quot;&gt;interactive guide on sending patches with git send-email&lt;/a&gt;
(&lt;a href=&quot;https://git-send-email.io/&quot;&gt;https://git-send-email.io/&lt;/a&gt;); the latter was mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2019/04/26/edition-50/&quot;&gt;Git Rev News Edition #50&lt;/a&gt;
&lt;a href=&quot;https://git.github.io/rev_news/2020/10/30/edition-68/&quot;&gt;#68&lt;/a&gt;, and
&lt;a href=&quot;https://git.github.io/rev_news/2022/10/26/edition-92/&quot;&gt;#92&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kelvins/awesome-mlops#data-management&quot;&gt;“Data Management” section of Awesome MLOps&lt;/a&gt;
also includes tools related to versioning data like
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/dolthub/dolt&quot;&gt;Dolt&lt;/a&gt; (&lt;a href=&quot;https://git.github.io/rev_news/2020/04/23/edition-62/&quot;&gt;Git Rev News #62&lt;/a&gt;),&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://dvc.org/&quot;&gt;DVC&lt;/a&gt; (first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News #42&lt;/a&gt;,
then in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;#63&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2020/06/25/edition-64/&quot;&gt;#64&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2023/06/30/edition-100/&quot;&gt;#100&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2024/01/31/edition-107/&quot;&gt;#107&lt;/a&gt;, and
&lt;a href=&quot;https://git.github.io/rev_news/2024/07/31/edition-113/&quot;&gt;#113&lt;/a&gt;,
among others),&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://kevin-hanselman.github.io/dud/&quot;&gt;Dud&lt;/a&gt;, improving on DVC, but with narrowed scope,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://intake.readthedocs.io/&quot;&gt;Intake&lt;/a&gt; (&lt;a href=&quot;https://git.github.io/rev_news/2023/02/28/edition-96/&quot;&gt;Git Rev News #96&lt;/a&gt;),
        &lt;ul&gt;
          &lt;li&gt;See also the discussion in issue #337 in the Intake repository:
&lt;a href=&quot;https://github.com/intake/intake/issues/337&quot;&gt;Data versioning/validation: Comparing Intake with DVC, Quilt and Great Expectations&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://lakefs.io/&quot;&gt;lakeFS&lt;/a&gt; (&lt;a href=&quot;https://git.github.io/rev_news/2021/08/31/edition-78/&quot;&gt;Git Rev News #78&lt;/a&gt;),&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.quiltdata.com/&quot;&gt;Quilt&lt;/a&gt; / &lt;a href=&quot;https://www.quiltdata.com/&quot;&gt;Quilt Data&lt;/a&gt;
(&lt;a href=&quot;https://git.github.io/rev_news/2023/05/31/edition-99/&quot;&gt;Git Rev News #99&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jhspetersson/git-task&quot;&gt;git-task&lt;/a&gt; is
a local-first task manager/bug tracker that stores everything within your git repository,
and which can sync issues to/from GitHub or GitLab.
Written in Rust, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.usebruno.com/&quot;&gt;Bruno&lt;/a&gt; is a fast and Git-friendly open-source API client,
similar to Postman, Insomnia and similar tools.  It stores collections directly
in a folder on your filesystem in a plain text markup language, Bru.
    &lt;ul&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://github.com/melezhik/swat&quot;&gt;Simple Web Application Test (SWAT)&lt;/a&gt;,
web application oriented testing framework, with test plan stored as plain text files
in specially named directories.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqa5fg9bsz.fsf@gitster.g/&quot;&gt;2.47.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqploiphj3.fsf@gitster.g/&quot;&gt;2.47.0-rc1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.47.0.windows.2&quot;&gt;2.47.0(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.47.0.windows.1&quot;&gt;2.47.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.47.0-rc1.windows.1&quot;&gt;2.47.0-rc1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.8.4&quot;&gt;1.8.4&lt;/a&gt;,
&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.8.3&quot;&gt;1.8.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/10/23/patch-release-gitlab-17-5-1-released/&quot;&gt;17.5.1, 17.4.3, 17.3.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/10/17/gitlab-17-5-released/&quot;&gt;17.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/10/09/patch-release-gitlab-17-4-2-released/&quot;&gt;17.4.2, 17.3.5, 17.2.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3102&quot;&gt;3.10.2&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.8.html#389&quot;&gt;3.8.9&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#397&quot;&gt;3.9.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.14/admin/release-notes#3.14.2&quot;&gt;3.14.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.5&quot;&gt;3.13.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.10&quot;&gt;3.12.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.16&quot;&gt;3.11.16&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.4.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.4.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.8&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.7&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v1.9.0&quot;&gt;1.9.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v1.8.0&quot;&gt;1.8.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.13.3&quot;&gt;0.13.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.13.8&quot;&gt;0.13.8&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.13.7&quot;&gt;0.13.7&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.13.6&quot;&gt;0.13.6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Chandra Pratap, Brooke Kuhlmann,
Štěpán Němec and Brandon Pugh.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 115 (September 30th, 2024)</title>
      <link>https://git.github.io/rev_news/2024/09/30/edition-115/</link>
      <pubDate>Mon, 30 Sep 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/09/30/edition-115/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-115-september-30th-2024&quot;&gt;Git Rev News: Edition 115 (September 30th, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 115th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of August and September 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge 2024 conference&lt;/a&gt; and &lt;a href=&quot;https://lore.kernel.org/git/Zu2DmS30E0kKug2a@nand.local/&quot;&gt;Contributor’s Summit 2024&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The Git Merge conference happened on
&lt;a href=&quot;https://github.com/git/git-merge&quot;&gt;September 19th and 20th&lt;/a&gt; in
Berlin, hosted by &lt;a href=&quot;https://gitbutler.com/&quot;&gt;GitButler&lt;/a&gt; and
&lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;The first day consisted of
&lt;a href=&quot;https://github.com/git/git-merge#day-one-talks&quot;&gt;talks&lt;/a&gt; and an
afterparty in the evening sponsored by
&lt;a href=&quot;https://www.gerritforge.com/&quot;&gt;GerritForge&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;On the &lt;a href=&quot;https://github.com/git/git-merge?tab=readme-ov-file#day-two-unconference&quot;&gt;second day&lt;/a&gt;,
there was &lt;a href=&quot;https://lore.kernel.org/git/Zu2DmS30E0kKug2a@nand.local/&quot;&gt;the Contributor’s Summit&lt;/a&gt; in parallel
with &lt;a href=&quot;https://github.com/git/git-merge/tree/main/breakouts&quot;&gt;breakout unconference sessions&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2024/organizations/git&quot;&gt;Git participated in GSoC (Google Summer of Code) 2024&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;All the contributors have successfully passed their final evaluation
and published a final report:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Jialuo She &lt;a href=&quot;https://luolibrary.com/&quot;&gt;worked&lt;/a&gt; on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2024/projects/ukm4PTEF&quot;&gt;Implement consistency check for refs&lt;/a&gt;
project. He was mentored by Karthik Nayak and Patrick Steinhardt. The final
report can be found on
&lt;a href=&quot;https://luolibrary.com/2024/08/25/GSoC-Final-Report/&quot;&gt;his website&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chandra Pratap &lt;a href=&quot;https://chand-ra.github.io/&quot;&gt;worked&lt;/a&gt; on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2024/projects/tlh611d7&quot;&gt;Move and improve reftable tests in the unit testing framework&lt;/a&gt;
project. He was mentored by Patrick Steinhardt and Christian Couder. The final
report can be found on
&lt;a href=&quot;https://chand-ra.github.io/2024/08/24/GSoC-Final-Report.html&quot;&gt;his website&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Ghanshyam Thakkar &lt;a href=&quot;https://spectre10.github.io/posts/&quot;&gt;worked&lt;/a&gt; on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2024/projects/e9C4rhrv&quot;&gt;Move existing tests to a unit testing framework&lt;/a&gt;
project. He was mentored by Christian Couder and Kaartic Sivaraam. The final
report can be found on &lt;a href=&quot;https://spectre10.github.io/posts/gsoc_final_report/&quot;&gt;his website&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Congratulations to the contributors and their mentors!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Git will &lt;a href=&quot;https://www.outreachy.org/communities/cfp/git/&quot;&gt;participate in the next Outreachy round&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Git applied to participate in the next
&lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt; round from December 2024 to
March 2025 and was accepted.
&lt;a href=&quot;https://www.outreachy.org/apply/project-selection/#git&quot;&gt;Two projects&lt;/a&gt;
are proposed:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;“Convert unit tests to use the clar testing framework” which will
be mentored by Patrick Steinhardt and Phillip Wood.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Finish adding a ‘os-version’ capability to Git protocol v2”
which will be mentored by Christian Couder.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;See this &lt;a href=&quot;https://www.outreachy.org/docs/applicant/&quot;&gt;Outreachy webpage&lt;/a&gt;
for more information about the application process for contributors.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/xmqq4j7uhfvm.fsf@gitster.g/&quot;&gt;[PATCH] tests: drop use of ‘tee’ that hides exit status&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, sent a patch removing uses of the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tee&lt;/code&gt; command from test scripts.
&lt;a href=&quot;https://en.wikipedia.org/wiki/Tee_(command)&quot;&gt;tee(1)&lt;/a&gt; is a shell
command that duplicates its input to both its output and to one or
more files. The issue was that in some test scripts it was used
after a &lt;a href=&quot;https://en.wikipedia.org/wiki/Pipeline_(Unix)&quot;&gt;pipe&lt;/a&gt; to
directly duplicate the output of a Git command, so using a format
like:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git COMMAND OPTIONS... | tee FILE...&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;However, it’s not a good idea to use a pipe after a Git command because
pipes discard the exit code of the command before them, so the
standard (Unix) shell behaviour is that the exit code of the whole
sequence is simply the exit code of the last command of a pipe sequence,
here &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tee&lt;/code&gt;. In Git tests though, we wouldn’t want a test
to pass if the Git command fails when it should succeed.&lt;/p&gt;

    &lt;p&gt;[For shell intimates: there are ways to override this default behaviour,
such as &lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_09_02&quot;&gt;the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pipefail&lt;/code&gt; option&lt;/a&gt;,
or &lt;a href=&quot;https://en.wikipedia.org/wiki/Named_pipe&quot;&gt;named pipes&lt;/a&gt;, but
there are a number of reasons, like shell portability and making
it easy to understand small parts of the code, why Git developers
try to avoid using those features in the Git codebase.]&lt;/p&gt;

    &lt;p&gt;As there was no reason to hide the exit code of the Git commands in
the tests that used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tee&lt;/code&gt;, Junio’s patch basically just replaced
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;| tee&lt;/code&gt; with a simple &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;gt;&lt;/code&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Redirection_(computing)&quot;&gt;redirection&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Rubén Justo replied to Junio suggesting a wording improvement in the
commit message, but otherwise agreeing with the patch.&lt;/p&gt;

    &lt;p&gt;Johannes Schindelin, alias Dscho, also replied to Junio saying that
having something that duplicates the output of the Git command to
standard output could still be useful for debugging, especially when
dealing with CI failures. He showed an implementation of a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;redirect_and_show()&lt;/code&gt; helper function that could perhaps be used
instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tee&lt;/code&gt;, but agreed that it might be overkill and hoped that
having more unit tests written in C could help.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, replied to Dscho saying that a better help
for debugging CI failures might be to have a way to automatically
save the state of the test directory, called
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trash directory.tXXXX-YYYY&lt;/code&gt; where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tXXXX-YYYY&lt;/code&gt; is related to the
name of the test script.&lt;/p&gt;

    &lt;p&gt;Junio also replied to Dscho saying that a simple &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat FILE&lt;/code&gt;
instruction could be added after the lines where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;| tee&lt;/code&gt; was
replaced with a redirection to make sure the Git command output
appeared on standard output. Junio also agreed with Peff that saving
the state of test directories would be best to debug CI failures.&lt;/p&gt;

    &lt;p&gt;A version of Junio’s patch taking into account the wording
improvement suggested by Rubén was eventually merged.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-jialuo-she&quot;&gt;Developer Spotlight: Jialuo She&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Editor’s note: We’re starting a new initiative in Git Rev News where
 we interview recent GSoC/Outreachy students to get their reflections
 on completing their projects. Feel free to share any thoughts or
 feedback you might have!&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My name is Jialuo She. I find it quite challenging to select an English
name for myself, so I decide to leave it as is. However, you can simply
call me “Luo(/lwɔː/)”. I am currently employed at NVIDIA as a Tegra
System Architect. In this role, I am responsible for developing the
verification infrastructure for complex full-chip features, such as
CPU-GPU cache coherency. So my daily job is unrelated to Git. In my
spare time, I continue my GSoC work to
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2024/projects/ukm4PTEF&quot;&gt;implement consistency checks for refs&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How did you initially become interested in contributing to Git,
and what motivated you to choose it as your GSoC project?&lt;/p&gt;

    &lt;p&gt;When I was a student, I read &lt;a href=&quot;https://git-scm.com/book/en/v2&quot;&gt;the book “Pro Git”&lt;/a&gt;
to learn how to use Git in my daily development process. One day, I
found &lt;a href=&quot;https://www.leshenko.net/p/ugit/&quot;&gt;a tutorial&lt;/a&gt; that teaches
how to write a mini Git step by step, and I really appreciated the
design of Git.&lt;/p&gt;

    &lt;p&gt;As I was approaching my graduate school graduation, I hoped to use the
opportunity provided by GSoC to do something meaningful for the long
term. Since I felt that I had an understanding of Git’s internal
principles, believing that my chances of being selected would be much
higher. When I saw the “Implement consistency check for refs” project,
I became very interested and resolutely chose Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How do you balance your contributions with other responsibilities
like work or school?&lt;/p&gt;

    &lt;p&gt;As a newcomer, contributing to Git can be particularly time-consuming
due to unfamiliarity with the overall codebase. I would dedicate an
evening to responding to review feedback, which forces me to think
about how to make improvements, and then I would code over the weekend.
Of course, if there were urgent situations at work or life, I would have
to postpone my contributions to Git. I feel there’s no need to think
about balancing because it happens naturally.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What was your biggest takeaway or learning from GSoC that you now
apply regularly in your work?&lt;/p&gt;

    &lt;p&gt;After participating in GSoC, I begin to consider whether my commit
sequence is clear and understandable when writing code at work. I also
become more stringent with myself regarding commit messages, ensuring
they clearly explain the background, motivation, and implementation
details.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What was the biggest challenge you faced during your contributions
to Git, and how did you overcome it?&lt;/p&gt;

    &lt;p&gt;When building the ref consistency check infrastructure, I encountered
an exceptionally long review process that lasted about three months.
It was quite frustrating because there was no positive feedback compared
with other participants. Then I reflected on myself, wondering why I
was always comparing myself to others instead of focusing on what I was
doing. So, I adjusted my mindset.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Have you thought about mentoring new GSoC students?&lt;/p&gt;

    &lt;p&gt;If I have the opportunity and time, I would definitely mentor GSoC
students. I am very grateful to my mentors, Patrick and Karthik, for
introducing me to the Git community and enabling me to continue
contributing after completing GSoC. I hope that one day I can also
ignite the passion in others.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;The write and read support for symlink symrefs.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

    &lt;p&gt;I very much like the &lt;a href=&quot;https://gitlens.amod.io/&quot;&gt;GitLens tool&lt;/a&gt; when using
VSCode. By using this tool, I hardly use the bare &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt; command.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;When reviewing patches, I will firstly use &lt;a href=&quot;https://b4.docs.kernel.org/en/latest/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b4&lt;/code&gt;&lt;/a&gt;
or simply fetch the branch stored in Junio’s tree, and then I will
see the diffs just in the VSCode. To reply to a patch, I download the
raw email and use &lt;a href=&quot;http://www.mutt.org/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mutt&lt;/code&gt;&lt;/a&gt; to write contents.
When sending patches, I still use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mutt&lt;/code&gt; to make the environment as
simple as possible to improve efficiency.&lt;/p&gt;

    &lt;p&gt;I develop Git using VSCode and the &lt;a href=&quot;https://clangd.llvm.org/&quot;&gt;clangd&lt;/a&gt;
language server. I generate the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;compile_commands.json&lt;/code&gt; file using
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;compiledb make&lt;/code&gt;. I believe this is one of the best development
approaches available today, offering excellent code suggestions,
completions, and static analysis.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How do you envision your own involvement with Git or other open
source projects in the future?&lt;/p&gt;

    &lt;p&gt;I hope to complete the implementation of all ref consistency checks.
Additionally, I aim to further familiarize myself with the Git codebase
related to refs, follow the development of the reftable backend, and
participate in more reviews.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;In my opinion, the barrier to starting contributions to Git is relatively
high because Git doesn’t have something like “good first issue” labels.
Therefore, I believe the best approach is to participate in mentoring
programs or continue work from certain mentoring programs as a student.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Would you recommend other students or contributors to participate in
the GSoC, or other mentoring programs, working on Git? Why? Do you
have advice for them?&lt;/p&gt;

    &lt;p&gt;I highly recommend that students integrate into the Git community
through mentoring programs. These programs provide basic ideas to help you
get started and contribute to Git. Working on Git is an amazing experience,
allowing you to be guided by many experienced contributors, improve your
code quality standards, and enhance your communication skills.&lt;/p&gt;

    &lt;p&gt;As for advice to participants, I believe the most important thing is not to
think of the project merely as a resume booster. Instead, let your passion
shine through and stay at the community after mentoring programs.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://radicle.xyz/2024/09/10/radicle-1.0.html&quot;&gt;Radicle 1.0&lt;/a&gt;.&lt;br /&gt;
Radicle is a peer-to-peer, local-first code collaboration stack built on Git.
&lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt; was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;,
then in &lt;a href=&quot;https://git.github.io/rev_news/2020/12/26/edition-70/&quot;&gt;Edition #70&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;#86&lt;/a&gt;,
and &lt;a href=&quot;https://git.github.io/rev_news/2024/04/30/edition-110/&quot;&gt;#110&lt;/a&gt; - where one
can find similar and related tools.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/all/ZvrNmsycmamx2dcR@nand.local/t/#m72b3c0f77102fe9964e77d6c10d9166485e13c0e&quot;&gt;git-scm.com is now a static website&lt;/a&gt;
by Johannes Schindelin on the Git mailing list.&lt;br /&gt;
Moving git.github.io, Git Developer Pages and Git Rev News’ website
into git-scm.com is discussed in &lt;a href=&quot;https://github.com/git/git.github.io/issues/729&quot;&gt;GitHub issue #729&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/why-github-actually-won/&quot;&gt;Why GitHub Actually Won&lt;/a&gt;:
How GitHub &lt;em&gt;actually&lt;/em&gt; became the dominant force it is today, from one of its cofounders.
Written by Scott Chacon on GitButler Blog.&lt;br /&gt;
Nice companion to various articles on Git history, like the latest
&lt;a href=&quot;https://git.github.io/rev_news/2024/07/31/edition-113/&quot;&gt;A Git story: Not so fun this time&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2024/07/31/edition-113/&quot;&gt;Git Rev News #113&lt;/a&gt; - in #113 you
can also find links to other editions with links to other retellings of the Git history.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.aviator.co/blog/rethinking-code-reviews-with-stacked-prs/#&quot;&gt;Rethinking code reviews with stacked PRs&lt;/a&gt;
on Aviator blog by Ankit Jain (also available &lt;a href=&quot;https://dev.to/dphenomenal/rethinking-code-reviews-with-stacked-prs-3dih&quot;&gt;on DEV.to&lt;/a&gt;,
published by Ibrahim Salami.  Aviator provides &lt;a href=&quot;https://github.com/aviator-co/av&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;av&lt;/code&gt;&lt;/a&gt;, a CLI tool
to help with managing stacked PRs on GitHub.
    &lt;ul&gt;
      &lt;li&gt;Stacked Pull Requests, also under the name Stacked Diffs,
were most recently mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2024/05/31/edition-111/&quot;&gt;Git Rev News Edition #111&lt;/a&gt;,
where you can find links to other editions with other articles, and to related tools.&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1riYPbdprf6E3QP1wX1BeASn2g8FKBgbJlrnKmwfU3YE/edit?gid=0#gid=0&quot;&gt;Stacked PRs CLI Product Comparison (Public)&lt;/a&gt;
Google Sheet spreadsheet.&lt;/li&gt;
      &lt;li&gt;Contrast &lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;,
which strongly recommends patterns that are best suited to Continuous Integration,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;,
and &lt;a href=&quot;https://martinfowler.com/articles/ship-show-ask.html&quot;&gt;Ship / Show / Ask: A modern branching strategy&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/09/30/edition-79/&quot;&gt;Edition #79&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://grimoire.carcano.ch/blog/git-with-python-howto-gitpython-tutorial-and-pygit2-tutorial/&quot;&gt;Git With Python HowTo: GitPython Tutorial And PyGit2 Tutorial&lt;/a&gt;
by Marco Antonio Carcano on his blog ‘The grimoire of a modern Linux professional’.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/5-advanced-git-features&quot;&gt;Beyond “Commit” and “Push”: 5 Advanced Git Features You Should Know&lt;/a&gt;
by Bruno Brito on GitTower Blog.
Covers git-bisect, git-rerere, gitattributes, git-notes, and git-worktree.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/mastering-tower-windows&quot;&gt;Mastering Tower (Windows Edition)&lt;/a&gt;
and &lt;a href=&quot;https://www.git-tower.com/blog/mastering-tower/&quot;&gt;Mastering Tower (Mac Edition)&lt;/a&gt;
by Bruno Brito on GitTower Blog.  Tower is a proprietary Git client for Mac and Windows,
with 30-day free trial.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://paperless.blog/git-bisect-run-techniques&quot;&gt;Git bisect run techniques&lt;/a&gt;
by Victor Engmark on paperless.blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.raulnq.com/semantic-versioning-with-gitversion-gitflow&quot;&gt;Semantic Versioning with GitVersion (GitFlow)&lt;/a&gt;
by Raul Naupari on his blog; Featured on daily.dev, also available
&lt;a href=&quot;https://dev.to/raulnq/semantic-versioning-with-gitversion-gitflow-1gb4&quot;&gt;on DEV.to&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://edzz.de/posts/host-your-own-radicle-seed-node/&quot;&gt;Host your own Radicle seed node&lt;/a&gt;
by Eduard on Ed’s Site.  Also available &lt;a href=&quot;https://dev.to/viiik/how-to-host-your-own-radicle-node-contribute-to-decentralized-source-control-5cgm&quot;&gt;on DEV.to&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://avestura.dev/blog/creating-a-git-commit-the-hard-way&quot;&gt;Creating a Git commit: The Hard Way&lt;/a&gt;
(with low-level plumbing commands) by Aryan Ebrahimpour
on Avestura’s Personal Website.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://write.as/pylapp/my-git-cheatsheet&quot;&gt;My Git cheatsheet&lt;/a&gt; - a list
of some useful commands, as a cheatsheet or a simple reminder to keep and share.
Written by Pierre-Yves Lapersonne on his French and English pylapp blog in the fediverse (write.as).&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mricon/b4&quot;&gt;b4&lt;/a&gt; is a tool created to make it easier
for project developers and maintainers to use a distributed development
workflow that relies on patches, e-mail and distribution lists for code
contributions and review (like those used in Linux kernel development).
This tool was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/03/25/edition-61/&quot;&gt;Git Rev News Edition #61&lt;/a&gt;;
you can find links to various articles and posts about this tool
in &lt;a href=&quot;https://git.github.io/rev_news/2020/03/25/edition-61/&quot;&gt;Edition #61&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2022/09/30/edition-91/&quot;&gt;#91&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;#95&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2024/01/31/edition-107/&quot;&gt;#107&lt;/a&gt; and
&lt;a href=&quot;https://git.github.io/rev_news/2024/03/31/edition-109/&quot;&gt;#109&lt;/a&gt;.
Written in Python, under GPL-2.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://phabricator.kde.org/&quot;&gt;Phabricator.KDE.org&lt;/a&gt; is KDE’s desktop environment task management system.
It was used for patch review and other functions in the past, but KDE has since transitioned to GitLab,
at &lt;a href=&quot;https://invent.kde.org&quot;&gt;https://invent.kde.org&lt;/a&gt;. Bug tracking is done using &lt;a href=&quot;https://bugs.kde.org&quot;&gt;https://bugs.kde.org&lt;/a&gt;.
Phabricator is still used for task tracking by KDE until this functionality is migrated to GitLab.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.phacility.com/phabricator/&quot;&gt;Phabricator&lt;/a&gt; is/was a suite
of web-based development collaboration tools, which includes a code review tool called Differential,
a repository browser called Diffusion, a change monitoring tool called Herald,
a bug tracker called Maniphest, and a wiki called Phriction.&lt;br /&gt;
Phabricator is &lt;a href=&quot;https://admin.phacility.com/phame/post/view/11/phacility_is_winding_down_operations/&quot;&gt;no longer actively maintained&lt;/a&gt;
by Phacility since June 1, 2021.  This tool was mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2016/03/16/edition-13/&quot;&gt;Git Rev News Edition #13&lt;/a&gt;.
Written in PHP, under Apache 2.0 license.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://we.phorge.it/&quot;&gt;Phorge&lt;/a&gt; is a community-maintained fork of Phabricator,
public &lt;a href=&quot;https://we.phorge.it/phame/post/view/1/going_public/&quot;&gt;since Sep 7, 2022&lt;/a&gt;.
It seems to be actively developed.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/srstevenson/nb-clean&quot;&gt;nb-clean&lt;/a&gt; cleans Jupyter notebooks
of cell execution counts, metadata, outputs, and (optionally) empty cells,
preparing them for committing to version control.
Written in Python, under short ISC license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aviator-co/av&quot;&gt;av&lt;/a&gt; (Aviator) is a command-line tool
that helps you manage your stacked PRs on GitHub.
Written in Go, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.google.com/spreadsheets/d/1riYPbdprf6E3QP1wX1BeASn2g8FKBgbJlrnKmwfU3YE/edit?gid=0#gid=0&quot;&gt;Stacked PRs CLI Product Comparison (Public)&lt;/a&gt;
is a Google Sheet spreadsheet by Aviator, listing various stacked PR/stacked diff tools:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/ezyang/ghstack&quot;&gt;ghstack&lt;/a&gt; in Python,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/timothyandrew/gh-stack&quot;&gt;gh-stack&lt;/a&gt; in Rust - no longer developed,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/arxanas/git-branchless&quot;&gt;git-branchless&lt;/a&gt; in Rust
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/06/27/edition-76/&quot;&gt;Git Rev News Edition #76&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2022/08/31/edition-90/&quot;&gt;#90&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2022/11/30/edition-93/&quot;&gt;#93&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2023/04/30/edition-98/&quot;&gt;#98&lt;/a&gt;,
and &lt;a href=&quot;https://git.github.io/rev_news/2023/12/31/edition-106/&quot;&gt;#106&lt;/a&gt;),&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/krobelus/git-branchstack&quot;&gt;git-branchstack&lt;/a&gt; in Python,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/dashed/git-chain&quot;&gt;git-chain&lt;/a&gt; in Rust,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/VirtusLab/git-machete&quot;&gt;git-machete&lt;/a&gt; in Python
        &lt;ul&gt;
          &lt;li&gt;also available as a &lt;a href=&quot;https://github.com/VirtusLab/git-machete-intellij-plugin&quot;&gt;plugin&lt;/a&gt;
for the IntelliJ Platform products,&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/drewdeponte/git-ps-rs&quot;&gt;git-ps-rs - Git Patch Stack&lt;/a&gt; in Rust,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/git-series/git-series&quot;&gt;git-series&lt;/a&gt; in Rust
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/08/17/edition-18/&quot;&gt;Git Rev News Edition #18&lt;/a&gt;,
with a link to the presentation in &lt;a href=&quot;https://git.github.io/rev_news/2016/09/14/edition-19/&quot;&gt;#19&lt;/a&gt;),&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/gitext-rs/git-stack&quot;&gt;git-stack&lt;/a&gt; in Rust,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/withgraphite/graphite-desktop&quot;&gt;graphite-desktop&lt;/a&gt;
(formerly &lt;a href=&quot;https://github.com/withgraphite/graphite-cli&quot;&gt;graphite-cli&lt;/a&gt;)
in JavaScript/TypeScript - no longer actively developed,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/facebook/sapling&quot;&gt;Sapling SCM&lt;/a&gt; Git-compatible source control system
by Facebook (mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/11/30/edition-93/&quot;&gt;Git Rev News Edition #93&lt;/a&gt;),&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/ejoffe/spr&quot;&gt;spr&lt;/a&gt; - Stacked Pull Requests on GitHub, in Go,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://stacked-git.github.io/&quot;&gt;Stacked Git (StGit)&lt;/a&gt; in Rust
(mentioned in Git Rev News Edition &lt;a href=&quot;https://git.github.io/rev_news/2016/07/20/edition-17/&quot;&gt;#17&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2016/11/16/edition-21/&quot;&gt;#21&lt;/a&gt;,
and &lt;a href=&quot;https://git.github.io/rev_news/2021/04/30/edition-74/&quot;&gt;#74&lt;/a&gt;,
and finally presented as a tool in &lt;a href=&quot;https://git.github.io/rev_news/2022/11/30/edition-93/&quot;&gt;#93&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Rich-Harris/degit&quot;&gt;degit&lt;/a&gt; is a CLI tool
that makes copies of Git repositories faster than ordinary &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt;.
Supports GitHub, GitLab, Bitbucket, and Sourcehut (sr.ht).
Written in JavaScript for Node.js, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitversion.net/&quot;&gt;GitVersion&lt;/a&gt; is a tool that generates
a &lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Version&lt;/a&gt; number based on your Git history.
Available as Continuous Server pipeline, CLI tool, MSBuild task, and software library.
Written in C#, under MIT license.  Works on Windows, Linux, and Mac.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.leshenko.net/p/ugit/&quot;&gt;ugit: DIY Git in Python&lt;/a&gt; is a tutorial on Git internals,
where you learn about how Git works on the inside by trying to implement
(micro) Git in Python.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqv7yijq33.fsf@gitster.g/&quot;&gt;2.47.0-rc0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqa5fyytg0.fsf@gitster.g/&quot;&gt;2.46.2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqikuytbxd.fsf@gitster.g/&quot;&gt;2.46.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.47.0-rc0.windows.1&quot;&gt;2.47.0-rc0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.46.2.windows.1&quot;&gt;2.46.2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.46.1.windows.1&quot;&gt;2.46.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.14/admin/release-notes#3.14.1&quot;&gt;3.14.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.4&quot;&gt;3.13.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.9&quot;&gt;3.12.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.15&quot;&gt;3.11.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.17&quot;&gt;3.10.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/09/25/patch-release-gitlab-16-10-10-released/&quot;&gt;16.10.10, 16.9.11, 16.8.10, 16.7.10, 16.6.10, 16.5.10, 16.4.7, 16.3.9, 16.2.11, 16.1.8, 16.0.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/09/25/patch-release-gitlab-17-4-1-released/&quot;&gt;17.4.1, 17.3.4, 17.2.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/09/19/gitlab-17-4-released/&quot;&gt;17.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/09/17/patch-release-gitlab-17-3-3-released/&quot;&gt;17.3.3, 17.2.7, 17.1.8, 17.0.8, 16.11.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/09/11/gitlab-16-11-9-released/&quot;&gt;16.11.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/09/11/gitlab-17-0-7-released/&quot;&gt;17.0.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/09/11/patch-release-gitlab-17-3-2-released/&quot;&gt;17.3.2, 17.2.5, 17.1.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.5&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v1.8.0&quot;&gt;1.8.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.8.2&quot;&gt;4.8.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitButler &lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.12.26&quot;&gt;0.12.26&lt;/a&gt;,
&lt;a href=&quot;https://github.com/gitbutlerapp/gitbutler/releases/tag/release/0.12.25&quot;&gt;0.12.25&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Jialuo She, Josh Steadmon and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 114 (August 31st, 2024)</title>
      <link>https://git.github.io/rev_news/2024/08/31/edition-114/</link>
      <pubDate>Sat, 31 Aug 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/08/31/edition-114/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-114-august-31st-2024&quot;&gt;Git Rev News: Edition 114 (August 31st, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 114th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of July and August 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/xmqqsevysdaa.fsf@gitster.g/&quot;&gt;[PATCH] ReviewingGuidelines: encourage positive reviews more&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, sent a patch to the mailing list
which updated the ‘ReviewingGuidelines.txt’ documentation with the
goal of encouraging positive reviews even more.&lt;/p&gt;

    &lt;p&gt;The ‘ReviewingGuidelines.txt’ documentation was
&lt;a href=&quot;https://lore.kernel.org/git/pull.1348.v2.git.1663614767058.gitgitgadget@gmail.com/&quot;&gt;created a few years ago&lt;/a&gt;
by Victoria Dye to provide “consistent definitions for common
review terminology” and to give advice to reviewers, in a similar
way as the MyFirstContribution documentation gives advice to
contributors.&lt;/p&gt;

    &lt;p&gt;The few paragraphs that Junio’s patch added said that positive
reviews are highly encouraged, even when the author is a work
colleague. They show that people other than the author(s) of the
reviewed patches care about the issue that is addressed.&lt;/p&gt;

    &lt;p&gt;When writing positive reviews, reviewers should tell why they
support the patches, and should show that they understand the issue
and how the patches address it. They are also encouraged to describe
how they understand complex parts of the patches.&lt;/p&gt;

    &lt;p&gt;Junio’s patch also adds a small paragraph saying that “uplifting
feedback goes a long way towards encouraging contributors to
participate more actively in the Git community.”&lt;/p&gt;

    &lt;p&gt;Eric Sunshine then replied to Junio pointing out a minor typo in his
patch. Patrick Steinhardt replied to Junio too. He said that he had
already guided some of his GitLab colleagues who review patches
and suggested them to do what Junio describes.&lt;/p&gt;

    &lt;p&gt;Derrick Stolee, who prefers to be called Stolee, replied to Patrick
agreeing with him and saying that it also helps to not have internal
reviews for experienced contributors. He said that they used to have
internal reviews at Microsoft but it was overly cautious and “loses
the benefits of doing reviews in the open”.&lt;/p&gt;

    &lt;p&gt;Patrick replied to Stolee saying that GitLab also used to have an
internal review, but it recently became optional and recommended
only for people who are not yet familiar with the mailing list
workflow.&lt;/p&gt;

    &lt;p&gt;Junio then sent
&lt;a href=&quot;https://lore.kernel.org/git/xmqqle1pjwtt.fsf@gitster.g/&quot;&gt;a version 2&lt;/a&gt;
of the patch fixing small typos. Patrick reviewed this version
and found it good, so it was later merged into the ‘master’ branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2024/08/19/gitlab-now-supports-sha256-repositories/&quot;&gt;GitLab now supports SHA256 repositories&lt;/a&gt;
by John Cai on GitLab Blog (in Bulletin Board category).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://forgejo.org/2024-07-release-v8-0/&quot;&gt;Forgejo v8.0 is available&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://forgejo.org/&quot;&gt;Forgejo&lt;/a&gt; is a self-hosted lightweight software forge,
written in Go; nowadays a hard fork of Gitea (which in turn was based on Gogs).
It was mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News Edition #103&lt;/a&gt;,
as one of the forges working on implementing the &lt;a href=&quot;https://forgefed.org/&quot;&gt;ForgeFed&lt;/a&gt;
federation protocol for forge services.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Packt recently published the second edition of the “Mastering Git” book
by Jakub Narębski, one of the Git Rev News editors.
The book is available &lt;a href=&quot;https://www.packtpub.com/en-us/product/mastering-git-9781835086070&quot;&gt;on PacktPub&lt;/a&gt;
and &lt;a href=&quot;https://www.amazon.com/Mastering-Git-expert-level-proficiency-distributed-ebook/dp/B0D98BR1T7&quot;&gt;on Amazon&lt;/a&gt;.
The first edition of the book was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/06/15/edition-16/&quot;&gt;Git Rev News Edition #16&lt;/a&gt;;
you can find the interview with Jakub Narębski in &lt;a href=&quot;https://git.github.io/rev_news/2016/07/20/edition-17/&quot;&gt;Edition #17&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://tekin.co.uk/2024/08/the-many-uses-for-git-patch&quot;&gt;Different ways to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--patch&lt;/code&gt; in Git&lt;/a&gt;
by Tekin Süleyman on his blog.  It describes selectively stashing changes,
selectively discarding changes, and selectively restoring changes.
This article expands on the
“&lt;a href=&quot;https://tekin.co.uk/2017/03/git-tips-you-possibly-did-not-know-you-needed#3-interactively-stage-changes-with---patch&quot;&gt;interactively stage changes with --patch&lt;/a&gt;” advice
in &lt;a href=&quot;https://tekin.co.uk/2017/03/git-tips-you-possibly-did-not-know-you-needed&quot;&gt;Git Tips you (Possibly) Didn’t Know You Needed&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nerderati.com/tracing-the-evolution-of-a-python-function-with-git-log/&quot;&gt;Tracing the evolution of a Python function with git log&lt;/a&gt;
by Joël Perras on his Nerderati blog.  It shows a detailed example on using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -L&lt;/code&gt;
(and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff=python&lt;/code&gt; gitattribute) to diagnose a real-life bug that was ostensibly
caused by an upgrade to Authlib.
    &lt;ul&gt;
      &lt;li&gt;This technique is also described in the
&lt;a href=&quot;https://calebhearth.com/git-method-history&quot;&gt;See the History of a Method with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -L&lt;/code&gt;&lt;/a&gt; article,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/11/30/edition-105/&quot;&gt;Git Rev News Edition #105&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/blog/optimize-your-workflow-git-stash/&quot;&gt;Optimize your workflow with Git stash&lt;/a&gt;
by Toon Claes (from GitLab) at MDN Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.derlin.ch/seriously-you-need-to-learn-git&quot;&gt;Seriously, You Need to Learn Git&lt;/a&gt;
by Lucy Linder on her blog (also available &lt;a href=&quot;https://dev.to/derlin/seriously-you-need-to-learn-git-1n8j&quot;&gt;on DEV.to&lt;/a&gt;).  The article defines various levels of Git knowledge,
and explains how knowing Git might improve one’s development process.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.brandonpugh.com/blog/tips-for-creating-merge-commits/&quot;&gt;Tips for creating merge commits&lt;/a&gt;
by Brandon Pugh on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://til.simonwillison.net/git/backdate-git-commits&quot;&gt;Back-dating Git commits based on file modification dates&lt;/a&gt;
by Simon Willison in his &lt;a href=&quot;https://til.simonwillison.net/git&quot;&gt;TILs on Git&lt;/a&gt;
(Today I’ve Learned).
    &lt;ul&gt;
      &lt;li&gt;It was used by the author to create the &lt;a href=&quot;https://github.com/simonw/1991-WWW-NeXT-Implementation&quot;&gt;1991-WWW-NeXT-Implementation&lt;/a&gt;
repository out of &lt;a href=&quot;https://www.w3.org/History/1991-WWW-NeXT/Implementation/&quot;&gt;the archive&lt;/a&gt;
of Tim Berner-Lee’s original code for the WorldWideWeb application for NeXT.
This endeavor was described in a short blog post, &lt;a href=&quot;https://simonwillison.net/2024/Aug/1/www-next-implementation-on-github/&quot;&gt;1991-WWW-NeXT-Implementation on GitHub&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wouterj.nl/2024/08/git-notes&quot;&gt;Store Code Discussions in Git using Git Notes&lt;/a&gt;
by Wouter de Jong on his blog.  The article includes some code (in PHP)
that uses the GitHub API to fetch the pull request comments and store them
in notes (under the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;github-comments&lt;/code&gt; notes reference).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/pinotattari/attaching-notes-to-git-branches-503k&quot;&gt;Attaching notes to git branches&lt;/a&gt;
by Riccardo Bernardini on DEV.to.  The article describes why this feature is useful
and how &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch --edit-description&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git notes&lt;/code&gt; fall short; this led to
the creation of the &lt;a href=&quot;https://gitlab.com/mockturtle/git-branchnotes&quot;&gt;git-branchnotes&lt;/a&gt; tool.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2024/08/05/this-developer-tool-is-40-years-old-can-it-be-improved&quot;&gt;This developer tool is 40 years old: can it be improved?&lt;/a&gt;
by Bill Harding (CEO at GitClear) on StackOverflow Blog.
The article describes how GitClear’s “Commit Cruncher” diff algorithm works,
which was created with the goal of making code reviews easier.
Note that the Myers diff algorithm (created by Eugene Myers in his
&lt;a href=&quot;http://www.xmailserver.org/diff2.pdf&quot;&gt;seminal work&lt;/a&gt; in 1986)
is not the only one available in &lt;a href=&quot;https://git-scm.com/docs/git-diff&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt;&lt;/a&gt;:
there are also &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;minimal&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;patience&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;histogram&lt;/code&gt; diff algorithms available
(via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-algorithm&lt;/code&gt; option);
this is not stated in the article.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cs.paperswithcode.com/paper/how-different-are-different-diff-algorithms&quot;&gt;How Different Are Different diff Algorithms in Git?&lt;/a&gt;:
a paper with code by Yusuf Sulistyo Nugroho, Hideaki Hata, Kenichi Matsumoto
from 2019.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://matklad.github.io/2023/12/31/git-things.html&quot;&gt;Git Things: A grab bag of less frequently talked about git adjacent points&lt;/a&gt;
by Alex Kladov (matklad) on his GitHub Pages-based blog, from 2023.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://matklad.github.io/2023/10/23/unified-vs-split-diff.html&quot;&gt;Unified Versus Split Diff&lt;/a&gt;:
a discussion what is better for code reviews (and what the author uses)
by Alex Kladov (matklad) on his GitHub Pages-based blog, from 2023.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.git-init.com/how-does-git-store-files/&quot;&gt;How Does Git Store Files?&lt;/a&gt;
— from a conceptual point of view.  An article by by Alexis Määttä Vinkler
on &lt;a href=&quot;https://blog.git-init.com/&quot;&gt;The Pragmatic Git&lt;/a&gt; blog, from 2023.&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- --&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.chiark.greenend.org.uk/~sgtatham/quasiblog/code-review-antipatterns/&quot;&gt;Code review antipatterns&lt;/a&gt;
for the dark side developers, a joke article by Simon Tatham
(don’t do any of the things described in this article).&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.git-init.com/&quot;&gt;The Pragmatic Git&lt;/a&gt; blog;
note that some articles are paid members only.  Powered by Ghost.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/carapace-sh/carapace-bin&quot;&gt;Carapace-bin&lt;/a&gt; provides argument completion
for multiple CLI commands (&lt;a href=&quot;https://carapace-sh.github.io/carapace-bin/completers.html&quot;&gt;full list&lt;/a&gt;
including Git, &lt;a href=&quot;https://github.com/tj/git-extras&quot;&gt;git-extras&lt;/a&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh&lt;/code&gt; GitHub CLI, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glab&lt;/code&gt; GitLab CLI,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tea&lt;/code&gt; Gitea CLI, etc.), and works across multiple POSIX and non-POSIX shells.
Details about the Git completion support can be found in issue &lt;a href=&quot;https://github.com/carapace-sh/carapace-bin/issues/99&quot;&gt;#99&lt;/a&gt;.
Written in Go under the MIT license.&lt;br /&gt;
Carapace-bin is a part of the &lt;a href=&quot;https://carapace.sh/&quot;&gt;Carapace&lt;/a&gt; multi-shell completion library and binary.
A high-level overview of Carapace itself is available at &lt;a href=&quot;https://pixi.carapace.sh&quot;&gt;https://pixi.carapace.sh&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-random.olets.dev/&quot;&gt;git-random&lt;/a&gt;: quickly build random-content Git
graphs with a specified shape.
This is a tool that can work as an aid for learning and experimenting with Git.
Source code available &lt;a href=&quot;https://github.com/olets/git-random/&quot;&gt;on GitHub&lt;/a&gt;.
Written as a single-file Bash script under a custom
CC BY-NC-SA 4.0 license with Hippocratic License v3 ethical requirements.
    &lt;ul&gt;
      &lt;li&gt;The author mentions that this tool was inspired by seeing Lorna Jane Mitchell
use Matthew J. McCullough’s &lt;a href=&quot;https://github.com/matthewmccullough/scripts/blob/master/generaterandomchanges&quot;&gt;generaterandomchanges&lt;/a&gt;
in her talk &lt;em&gt;“&lt;a href=&quot;https://www.youtube.com/watch?v=duqBHik7nRo&quot;&gt;Advanced Git for Developers&lt;/a&gt;“&lt;/em&gt;
at Laracon EU 2015.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://gitlab.com/mockturtle/git-branchnotes&quot;&gt;git-branchnotes&lt;/a&gt; is a command-line tool
(that can be run as a git external command) that allows you to add notes to a branch and manage them.
Written in Ruby.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/arunsupe/semantic-grep&quot;&gt;w2vgrep - Semantic Grep&lt;/a&gt;
is a command-line tool, with the interface similar to that of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;,
that performs semantic searches on text input using word embeddings (word2vec).
It’s designed to find semantically similar matches to the query,
going beyond simple string matching.  Supports multiple languages.
Written in Go under the MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rfc.zeromq.org/spec/42/&quot;&gt;Collective Code Construction Contract&lt;/a&gt; (C4)
is an evolution of the github.com &lt;a href=&quot;https://help.github.com/articles/about-pull-requests/&quot;&gt;Fork + Pull Model&lt;/a&gt;,
aimed at providing an optimal collaboration model for free software projects.
    &lt;ul&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://martinfowler.com/articles/ship-show-ask.html&quot;&gt;Ship / Show / Ask: A modern branching strategy&lt;/a&gt; model,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/09/30/edition-79/&quot;&gt;Git Rev News #79&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3101&quot;&gt;3.10.1&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.8.html#388&quot;&gt;3.8.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#396&quot;&gt;3.9.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.14/admin/release-notes#3.14.0&quot;&gt;3.14.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.3&quot;&gt;3.13.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.8&quot;&gt;3.12.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.14&quot;&gt;3.11.14&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.16&quot;&gt;3.10.16&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/08/21/patch-release-gitlab-17-3-1-released/&quot;&gt;17.3.1, 17.2.4, 17.1.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/08/15/gitlab-17-3-released/&quot;&gt;17.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/08/07/patch-release-gitlab-17-2-2-released/&quot;&gt;17.2.2, 17.1.4, 17.0.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.13.2&quot;&gt;0.13.2&lt;/a&gt;,
&lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.13.1&quot;&gt;0.13.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Štěpán Němec, Brandon Pugh, Ralf Steube
and Toon Claes.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 113 (July 31st, 2024)</title>
      <link>https://git.github.io/rev_news/2024/07/31/edition-113/</link>
      <pubDate>Wed, 31 Jul 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/07/31/edition-113/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-113-july-31st-2024&quot;&gt;Git Rev News: Edition 113 (July 31st, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 113th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of June and July 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/ZpU0WwsrXCF8BC1f@nand.local/&quot;&gt;[ANNOUNCE] Tickets available for Git Merge 2024&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Taylor Blau announced that &lt;a href=&quot;https://git-merge.com&quot;&gt;tickets for Git Merge 2024, Berlin, September 19th and 20th&lt;/a&gt;
are now on sale. People who would like to come but need financial
assistance with travel costs can contact the Git PLC or Scott
Chacon directly.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/ZqkHxvDx7dlh0RX6@nand.local/&quot;&gt;[ANNOUNCE] Git Merge 2024 CFP deadline extended&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Taylor Blau announced that the Git Merge 2024 CFP (Call For
Proposals) limit has been extended by a week from August 1st to August 8th.
So there are a few more days left to propose talks.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/ZqoQcuKz_ynYaBNM@tanuki/&quot;&gt;[ANNOUNCE] Berlin Git Meetup on August 14th, 6pm CEST&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Patrick Steinhardt announced that some Git developers are trying to
revive the Git user group in Berlin and will host their first
session together with GitButler soon.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/ae862adb-1475-48e9-bd50-0c07dc42a520@rawbw.com/&quot;&gt;[BUG] “git clean -df .” silently doesn’t delete folders with stale .nfs* files&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Yuri reported that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clean -df .&lt;/code&gt;, which was supposed to delete a
directory and all its contents, didn’t work when there were files
named ‘.nfsXXXXXXXXXXX’ managed by NFS in that directory. He
expected that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clean -df .&lt;/code&gt; would warn or error out when it
cannot remove such a file, instead of ignoring the fact that it
could not remove the file and the containing directory and
terminating with a success exit code.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Yuri saying that it was
expected that directories that were not empty were not removed.&lt;/p&gt;

    &lt;p&gt;Yuri replied that he expected the ‘.nfsXXXXXXXXXXX’ files to be
removed as they were untracked, that is, neither added nor part of the repo,
and the command was expected to remove such untracked files.&lt;/p&gt;

    &lt;p&gt;Junio replied that the ‘.nfsXXXXXXXXXXX’ files were “a limitation”
of NFS that applications, including Git, couldn’t and weren’t
supposed to remove. He pointed to some documentation which explains
what these special NFS files are, and that they originate from an NFS
protocol based implementation strategy commonly known as “silly rename”.&lt;/p&gt;

    &lt;p&gt;Yuri replied that Git should still complain when it cannot remove
such files, or that there should be a verbosity option that should
make it complain in such cases.&lt;/p&gt;

    &lt;p&gt;Randall S. Becker replied to Yuri that he tried to reproduce the
issue without using NFS and couldn’t. So he asked Yuri if he could
share “a reproducible set of commands” and said that it was probably
caused by NFS.&lt;/p&gt;

    &lt;p&gt;Junio replied to Randall and Yuri that removing a ‘.nfsXXXXXXXXXXX’
files under a real NFSv3 client would likely result in the file
being automatically resurrected, and that failure to remove a file
should indeed be reported as Git does when it cannot remove a
regular file.&lt;/p&gt;

    &lt;p&gt;Yuri replied to Randall listing a series of instructions to
reproduce the issue. He agreed that Git reported failures when it
couldn’t remove a file because of “permissions and special flags
reasons”, but he repeated that it should also do it in the case of
such NFS files.&lt;/p&gt;

    &lt;p&gt;Randall replied to Yuri saying he thought that Git didn’t even see
the NFS files. He asked if a second &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clean -df .&lt;/code&gt; removed the
NFS files and put new ones, with different names, in place.&lt;/p&gt;

    &lt;p&gt;Yuri replied that it wasn’t the case and there seemed to be a single
NFS file.&lt;/p&gt;

    &lt;p&gt;Chris Torek then chimed into the discussion replying to Yuri. He
explained in details how “NFS silly renames” work, and listed some
cases which could result in NFS lying to Git by reporting that an
unlink(2) operation succeeded when in fact the file was renamed but
not deleted. In such a case Git could not report that it couldn’t
remove a file. It could report that it couldn’t remove the
containing directory though.&lt;/p&gt;

    &lt;p&gt;Chris finished his explanations saying “Anyway, that’s the OS view
of this mess. I leave the work on Git itself to others. :-)”&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, replied to Yuri’s email that contained a
series of instructions to reproduce the issue. He said he got the
following warning when trying to reproduce:&lt;/p&gt;
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;warning: failed to remove xx/.nfs0000000002c8197f00000002: Device or resource busy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;So Peff thought Git worked properly on his system and then
communicated details of the OS and NFS mount he used.&lt;/p&gt;

    &lt;p&gt;Yuri replied by giving information about his system. He also said
that when using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rm -rf&lt;/code&gt; to remove the NFS file, he got a “Device or
resource busy” error message, but not when using Git.&lt;/p&gt;

    &lt;p&gt;Randall replied to Peff that doing a self-mount to reproduce as Peff
did was perhaps not the best, as the NFS client might be aware of
the self-mount and things might not behave the same as in a regular
mount.&lt;/p&gt;

    &lt;p&gt;Yuri suggested using a virtual machine to avoid a self-mount.&lt;/p&gt;

    &lt;p&gt;Gabor Gombas replied to Yuri reporting the results of his tests. He
got a “Directory not empty” or a “Device or resource busy” error
message when he used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clean -dfx&lt;/code&gt;, but he also got no error
message when using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clean -df&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;This led Yuri to reply that with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-dfx&lt;/code&gt; Git indeed warns about NFS
files on his machine, but with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-df&lt;/code&gt; it doesn’t, because the NFS
files are in the ignore list.&lt;/p&gt;

    &lt;p&gt;It is indeed expected that ignored files are not deleted and are
just ignored without the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-x&lt;/code&gt; option.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-rubén-justo&quot;&gt;Developer Spotlight: Rubén Justo&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My name is Rubén, and that’s how it’s spelled correctly.  However,
some old friends call me Ruben because when we were kids changing
names was a sign of friendship.  Changing the accent from “ben” to
“ru”, makes the letter ‘e’ lose its tilde when writing my name.&lt;/p&gt;

    &lt;p&gt;My $dayjob is not related to Git, but I use it quite often during the
workday.  Using it sometimes gives me an itch that I often can’t
resist trying to scratch.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I can’t think of any worth mentioning.  But I’ll say something in the
other direction;  contributing to Git has not only meant solving some
itches, but it has clearly made me improve my overall work style.
I’m grateful for that.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;This can be read at any time: polishing up some itches that has come
up for me or a colleague.&lt;/p&gt;

    &lt;p&gt;Lately, though, I find myself exploring more and more side issues
that arise during iterations of the changes I was originally
interested in.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I’ll say a feasible one: something &lt;em&gt;in Git&lt;/em&gt; that allows me to avoid
writing shortcuts like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@{-1}&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@{1}&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@{...&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;At least on my keyboard, it’s a pain to type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{...}&lt;/code&gt;.  And I
tend to type those shortcuts a lot.&lt;/p&gt;

    &lt;p&gt;Perhaps too easy for the experts and they’ll have a lot of spare time
during the year?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I think that backwards compatibility is overrated most of the time.
It’s usually a matter of getting on with it and time;  sometimes a lot
of time, I admit.&lt;/p&gt;

    &lt;p&gt;The steps being taken towards Git 3.0 seem very interesting to me
[&lt;a href=&quot;https://public-inbox.org/git/xmqqa5l2y6aa.fsf_-_@gitster.g/&quot;&gt;ref 1&lt;/a&gt;]
[&lt;a href=&quot;https://public-inbox.org/git/cover.1718345026.git.ps@pks.im/&quot;&gt;ref 2&lt;/a&gt;].
Perhaps there is an opportunity to do some breaking changes.  I don’t
have any in mind, though.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of
Git itself?&lt;/p&gt;

    &lt;p&gt;Definitely: &lt;a href=&quot;https://jonas.github.io/tig/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t. contributing
to the Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;Nope.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;To interact with the list, I mainly use &lt;a href=&quot;https://people.kernel.org/monsieuricon/lore-lei-part-1-getting-started&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lei&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;http://www.mutt.org/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mutt&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://www.thunderbird.net/en-US/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;thunderbird&lt;/code&gt;&lt;/a&gt;
in a rather makeshift way.  Maybe someday I’ll finally configure
&lt;a href=&quot;https://git-send-email.io/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;In fact, more often than not, when I send a patch, I have the feeling
that someone is going to come along and say: “Come on, Rubén.  That
user agent?  Set up a decent environment to send this properly”.&lt;/p&gt;

    &lt;p&gt;To develop, I mainly use vanilla Vim.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;Perhaps I would say that writing and reading code are not the most
important skills in a project like Git.  Empathy and the development
of effective arguments to convey ideas or intentions are much more
crucial.&lt;/p&gt;

    &lt;p&gt;Realizing and internalizing that, is a solid starting point, I think.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;Keep in mind that reviewing code is much harder than writing it, but
writing a good message for the commit is even harder.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/git/highlights-from-git-2-46/&quot;&gt;Highlights from Git 2.46&lt;/a&gt;
by Taylor Blau on GitHub Blog.  Those include pseudo-merge reachability bitmaps,
subcommands in &lt;a href=&quot;https://git-scm.com/docs/git-config/2.46.0&quot;&gt;git-config&lt;/a&gt; (like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config list&lt;/code&gt;),
an enhanced credential helper protocol, and improving the still experimental reftable support.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2024/07/29/whats-new-in-git-2-46-0/&quot;&gt;What’s new in Git 2.46.0?&lt;/a&gt;
by Justin Tobler on GitLab Blog.  Highlights include tooling to migrate reference backends
(from files backend to reftables), symref update instructions for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git update-ref --stdin&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config&lt;/code&gt; interface improvements (mentioned in the previous article linked), and bundle URI fixes.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github&quot;&gt;Anyone can Access Deleted and Private Repository Data on GitHub&lt;/a&gt;
via Cross Fork Object Reference (CFOR) from another [public] fork.
Any code committed to a public repository may be accessible forever
as long as there is at least one public fork of that repository.
This is an intentional design decision by GitHub; see &lt;a href=&quot;https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/what-happens-to-forks-when-a-repository-is-deleted-or-changes-visibility&quot;&gt;the documentation&lt;/a&gt;.
There is though a separate fork network for public and for private versions
of the same repository.&lt;br /&gt;
Posted on Truffle Security blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/978324/&quot;&gt;Debian debate over tag2upload reaches compromise&lt;/a&gt;
by Joe Brockmeier on LWN.net.  The &lt;a href=&quot;https://salsa.debian.org/dgit-team/dgit/-/blob/master/TAG2UPLOAD-DESIGN.txt&quot;&gt;tag2upload service&lt;/a&gt;
promises a streamlined way for Debian developers using Git to upload packages to
the &lt;a href=&quot;https://wiki.debian.org/Services/Debian%20Archive&quot;&gt;Debian Archive&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.brachiosoft.com/en/posts/git/&quot;&gt;A Git story: Not so fun this time&lt;/a&gt;
on Brachiosoft Blog.  The title refers to the &lt;a href=&quot;https://www.amazon.com/Just-Fun-Story-Accidental-Revolutionary/dp/0066620732/&quot;&gt;“Just for Fun”&lt;/a&gt;
book, the 2001 autobiography of Linux kernel creator Linus Torvalds,
and how the Git origin story wasn’t so much fun, at least for Linus.
The article provides a list of references.  Includes new material
not seen in earlier retellings of the Git history, like the ones linked in 
&lt;a href=&quot;https://git.github.io/rev_news/2015/04/05/edition-2/&quot;&gt;Git Rev News Edition #2&lt;/a&gt; (on 10 years of Git),
&lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Edition #52&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2020/04/23/edition-62/&quot;&gt;Edition #62&lt;/a&gt; (on 15 years of Git),
&lt;a href=&quot;https://git.github.io/rev_news/2023/11/30/edition-105/&quot;&gt;Edition #105&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2024/06/30/edition-112/&quot;&gt;Edition #112&lt;/a&gt;
(among others).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://graphite.dev/blog/why-facebook-doesnt-use-git&quot;&gt;Why Facebook doesn’t use Git&lt;/a&gt;
by Greg Foster on Graphite Blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://code.facebook.com/posts/218678814984400/scaling-mercurial-at-facebook/&quot;&gt;Scaling Mercurial at Facebook&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/&quot;&gt;Git Rev News Edition #24&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.sesse.net/blog/tech/2024-07-15-13-04_pull_requests_via_git_push.html&quot;&gt;Pull requests via git push&lt;/a&gt;
and a specially crafted &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pre-receive&lt;/code&gt; hook (and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-http-backend&lt;/code&gt; configured
to allow anonymous push) that turns &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; into series of patch emails.
(Though this approach has some limitations.)  Written by Steinar H. Gunderson on his blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://pr.pico.sh/&quot;&gt;git-pr&lt;/a&gt; in the “Git tools and sites” section.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://matklad.github.io/2024/07/25/git-worktrees.html&quot;&gt;How I Use Git Worktrees&lt;/a&gt;
by Alex Kladov (matklad) on his GitHub Pages-based blog.
TL;DR: consider using worktrees not as a replacement for branches,
but as a means to manage concurrency in your tasks (for example: view, work, review, fuzz, scratch).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/cloudx/git-autocorrect-needs-more-marketing-20gg&quot;&gt;Git autocorrect needs more marketing&lt;/a&gt;
by Axel Navarro for Cloud(x); on DEV.to.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.com/nvbn/thefuck&quot;&gt;thefuck&lt;/a&gt;, a command line application
which corrects your previous console command (for example Git command)
if you made an error (like typos in command name), and it &lt;em&gt;didn’t&lt;/em&gt; do what you wanted;
the tool was first mentioned in 
&lt;a href=&quot;https://git.github.io/rev_news/2023/07/31/edition-101/&quot;&gt;Git Rev News Edition #101&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://schpet.com/note/git-commit-messages-are-optional&quot;&gt;commit messages are optional&lt;/a&gt;
by Peter Schilling in schpet’s notebook (though for some of the mentioned uses,
commits with empty commit messages are better replaced with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --fixup&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ionixjunior.dev/en/gitifying-svn-how-i-brought-modern-version-control-to-an-ageold-system/&quot;&gt;Git-ifying SVN: How I Brought Modern Version Control to an Age-Old System&lt;/a&gt;
by Ione Souza Junior on his blog; also available &lt;a href=&quot;https://dev.to/ionixjunior/git-ifying-svn-how-i-brought-modern-version-control-to-an-age-old-system-4o3e&quot;&gt;on DEV.to&lt;/a&gt;
as a last part of the &lt;a href=&quot;https://dev.to/ionixjunior/series/26070&quot;&gt;mastering-git series&lt;/a&gt;.
Another article from this series was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/06/30/edition-112/&quot;&gt;Git Rev News Edition #112&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.xethub.com/blog/benchmarking-the-modern-development-experience&quot;&gt;Benchmarking the Modern Development Experience across Versioning Tools: S3, DVC, Git LFS, and XetHub&lt;/a&gt;
by Ann Huang on XetHub blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://about.xethub.com/&quot;&gt;XetHub&lt;/a&gt; is a development platform for datasets and models,
which automatically versions and tracks assets across the Machine Learning stack
to guarantee reproducibility.  Mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;Git Rev News Edition #95&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;The comparison does not include &lt;a href=&quot;https://dagshub.com/docs/feature_guide/dagshub_storage/data_streaming/&quot;&gt;DagsHub’s Direct Data Access / Data Streaming&lt;/a&gt;,
which was &lt;a href=&quot;https://dagshub.com/blog/launching-data-streaming-and-upload/&quot;&gt;announced&lt;/a&gt; in 2022.
&lt;a href=&quot;https://dagshub.com/&quot;&gt;DagsHub&lt;/a&gt;, a web platform for storing, versioning and managing data (data hub),
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/responsivecrocodile/the-visualization-and-analysis-of-git-commit-statistics-for-it-team-leaders-2pof&quot;&gt;The visualization and analysis of git commit statistics for IT team leaders.&lt;/a&gt;
by Aleksei Bakhirev (Responsive Crocodile) on DEV.to.  Uses the &lt;a href=&quot;https://github.com/bakhirev/assayo&quot;&gt;Assayo&lt;/a&gt;
tool written by the author for plots (see also the &lt;a href=&quot;https://assayo.online/&quot;&gt;assayo.online&lt;/a&gt; webpage).&lt;br /&gt;
Some personal thought: beware of &lt;a href=&quot;https://en.wikipedia.org/wiki/Goodhart%27s_law&quot;&gt;Goodhart’s law&lt;/a&gt;:
&lt;em&gt;“When a measure becomes a target, it ceases to be a good measure”&lt;/em&gt;.
For examples from IT, see Joel on Software “&lt;a href=&quot;https://www.joelonsoftware.com/2002/07/15/20020715/&quot;&gt;Measurement&lt;/a&gt;” (2002).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mitchellh.com/writing/github-changesets&quot;&gt;Reorient GitHub Pull Requests Around Changesets&lt;/a&gt;
from one giant mutable changeset, by Mitchell Hashimoto on his blog (2023).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html&quot;&gt;A Note About Git Commit Messages&lt;/a&gt;
(2008) by Tim Pope on tbaggery blog; it also explains some of the reasoning behind recommendations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;git good (My Hero Academia fanfiction, humor/horror) - Izuku’s quirk is Git, 
the version control software (some artistic license taken in order to make a good story).
By Unknownlight. Available &lt;a href=&quot;https://archiveofourown.org/works/55773742/chapters/141591955&quot;&gt;on Archive of Our Own&lt;/a&gt;,
&lt;a href=&quot;https://www.fanfiction.net/s/14369888/1/git-good&quot;&gt;on FanFiction.net&lt;/a&gt; (not recommended by the author),
and &lt;a href=&quot;https://forums.spacebattles.com/threads/git-good-my-hero-academia-izukus-quirk-is-git-the-version-control-software.1163142/&quot;&gt;on SpaceBattles&lt;/a&gt;.&lt;br /&gt;
Summary:
    &lt;blockquote&gt;
      &lt;p&gt;Reality shattered like broken glass. The firmament that separated the real world from the eldritch beyond had broken. Two timelines had collided in the center of the street - an incongruous synthesis of two different chains of events. A building collapsed, and it did not. An explosion devastated the surroundings, and it did not. Screaming faces and laughs of joy overlapped each other as if viewed through a kaleidoscopic prism.&lt;/p&gt;

      &lt;p&gt;The crowd looked on in horror and awe. Who was responsible for tearing apart the fabric of reality?&lt;/p&gt;

      &lt;p&gt;Izuku groaned. &lt;em&gt;‘Great, another merge conflict’&lt;/em&gt;, he thought. &lt;em&gt;‘What a pain’&lt;/em&gt;.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ntM7utSjeVU&quot;&gt;I was wrong about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt;…&lt;/a&gt;
(or rather, how one can use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt;), by Philomatics on YouTube [5:18].&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://pr.pico.sh/&quot;&gt;pico/git-pr&lt;/a&gt; (Patch Requests) is a new Git collaboration service,
where you send and retrieve patches not via email but via SSH to a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-pr&lt;/code&gt; server:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Contributor submits his/her changes:&lt;/span&gt;
git format-patch origin/main &lt;span class=&quot;nt&quot;&gt;--stdout&lt;/span&gt; | ssh pr.pico.sh &lt;span class=&quot;nb&quot;&gt;pr &lt;/span&gt;create &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# &amp;gt; Patch Request has been created (ID: 1)&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# Owner can apply those changes via patch request:&lt;/span&gt;
ssh pr.pico.sh &lt;span class=&quot;nb&quot;&gt;pr &lt;/span&gt;print 1 | git am &lt;span class=&quot;nt&quot;&gt;-3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;Can be self-hosted.  Written in Go, MIT licensed.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/eza-community/eza&quot;&gt;eza&lt;/a&gt; is a modern replacement
for the venerable file-listing command-line program &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt;.  It knows about symlinks,
extended attributes, and Git (like file status in Git repo, Git repo status,
or ignoring files mentioned in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt;).  Written in Rust, MIT licensed.
See the &lt;a href=&quot;https://eza.rocks/&quot;&gt;documentation&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blenderbim.org/&quot;&gt;BlenderBIM&lt;/a&gt; is an add-on for detailed and
data-rich &lt;a href=&quot;https://www.buildingsmart.org/about/openbim/&quot;&gt;OpenBIM&lt;/a&gt;
(Building Information Modeling) with Blender.
BlenderBIM supports &lt;a href=&quot;https://docs.blenderbim.org/users/git_support.html&quot;&gt;tracking the development of your IFC files with Git&lt;/a&gt;
(Industry Foundation Classes, or IFC, is an international standard for BIM).
Note that merging requires the &lt;a href=&quot;https://github.com/brunopostle/ifcmerge&quot;&gt;ifcmerge&lt;/a&gt;
tool to be installed (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ifcmerge&lt;/code&gt; is written in Perl and published under the GPLv3 license).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://vslavik.github.io/diff-pdf/&quot;&gt;&lt;em&gt;diff-pdf&lt;/em&gt;&lt;/a&gt; is a tool for visually comparing two PDFs
which produces a PDF file with visually highlighted differences.
Note that &lt;a href=&quot;https://github.com/vslavik/diff-pdf&quot;&gt;the repository&lt;/a&gt; states that
the code is not being actively developed.  Written in C++, GPLv2 licensed.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.com/JoshData/pdf-diff&quot;&gt;pdf-diff&lt;/a&gt; in Python, CC0-1.0 licensed;
another &lt;a href=&quot;https://github.com/serhack/pdf-diff&quot;&gt;pdf-diff&lt;/a&gt; in Go, MIT licensed;
and &lt;a href=&quot;https://github.com/bgeron/diff-pdf-visually&quot;&gt;diff-pdf-visually&lt;/a&gt; in Python,
dual licensed under both MIT License and Apache License, Version 2.0 - with
a slightly different goal.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/opensourcecorp/vdm&quot;&gt;vdm: A General-Purpose Versioned-Dependency Manager&lt;/a&gt;
is an alternative to e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodules&lt;/code&gt; for managing arbitrary external dependencies.
Written in Go, MIT licensed.
    &lt;ul&gt;
      &lt;li&gt;Contrast &lt;a href=&quot;https://github.com/chronoxor/gil&quot;&gt;Gil (git links) tool&lt;/a&gt;
to manage complex recursive repository dependencies with cross references and cycles,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/04/30/edition-110/&quot;&gt;Git Rev News Edition #110&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bit-booster.com/graph.html&quot;&gt;Bit-Booster is an Offline Commit Graph Drawing Tool&lt;/a&gt;,
using HTML and SVG, generating graphs by pasting the result of running 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --all --date-order --pretty=&quot;%h|%p|%d&quot;&lt;/code&gt; into a textarea.
    &lt;ul&gt;
      &lt;li&gt;It is also an &lt;a href=&quot;https://bit-booster.com/graph.html&quot;&gt;add-on for Atlassian Bitbucket Server&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;The webpage includes &lt;a href=&quot;https://bit-booster.com/best.html&quot;&gt;comparison with other various commit graph add-ons&lt;/a&gt; (2016).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://howtorotate.com/&quot;&gt;How To Rotate&lt;/a&gt; is an open-source collection
of API Key Rotation tutorials for different SaaS providers.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nektos/act&quot;&gt;Act&lt;/a&gt; is a command line tool
to run your GitHub Actions locally, using the Docker Engine API.  Written in Go.
Please look at the &lt;a href=&quot;https://nektosact.com/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;act&lt;/code&gt; user guide&lt;/a&gt; for more documentation.
    &lt;ul&gt;
      &lt;li&gt;There is also &lt;a href=&quot;https://gitea.com/gitea/act_runner&quot;&gt;Act runner&lt;/a&gt;,
a runner for Gitea based on the Gitea fork of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;act&lt;/code&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqzfq0i0qa.fsf@gitster.g/&quot;&gt;2.46.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq7cdavgqa.fsf@gitster.g/&quot;&gt;2.46.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqwmlivcdp.fsf@gitster.g/&quot;&gt;2.46.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqjzhqmt22.fsf@gitster.g/&quot;&gt;2.46.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.46.0.windows.1&quot;&gt;2.46.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.46.0-rc2.windows.1&quot;&gt;2.46.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.46.0-rc1.windows.1&quot;&gt;2.46.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.46.0-rc0.windows.1&quot;&gt;2.46.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/07/24/patch-release-gitlab-17-2-1-released/&quot;&gt;17.2.1, 17.1.3, 17.0.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/07/18/gitlab-17-2-released/&quot;&gt;17.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/07/10/patch-release-gitlab-17-1-2-released/&quot;&gt;17.1.2, 17.0.4, 16.11.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.2&quot;&gt;3.13.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.7&quot;&gt;3.12.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.13&quot;&gt;3.11.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.15&quot;&gt;3.10.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.18&quot;&gt;3.9.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.1.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v1.7.0&quot;&gt;1.7.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.8.1&quot;&gt;4.8.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.13.0&quot;&gt;0.13.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Štěpán Němec and Rubén Justo.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 112 (June 30th, 2024)</title>
      <link>https://git.github.io/rev_news/2024/06/30/edition-112/</link>
      <pubDate>Sun, 30 Jun 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/06/30/edition-112/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-112-june-30th-2024&quot;&gt;Git Rev News: Edition 112 (June 30th, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 112th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of May and June 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/fc1a9fa03de7330f79dc56b0f2712834cb236b5a.1715070296.git.ps@pks.im/&quot;&gt;[RFC PATCH] docs: document upcoming breaking changes&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Patrick Steinhardt sent an RFC patch to the mailing list that
created a new “UpcomingBreakingChanges.md” document. The goal of the
document was to inform users and developers of deprecations and
breaking changes, and to encourage discussion of the direction of
the project regarding these topics in advance.&lt;/p&gt;

    &lt;p&gt;Patrick noted that the changes listed in the document, along with
links to mailing list threads where they had been discussed, were a
work in progress with controversial and missing items, and that he
didn’t want to push for a Git 3.0 release with the listed changes
soon.&lt;/p&gt;

    &lt;p&gt;The idea for that new document had been discussed previously
&lt;a href=&quot;https://lore.kernel.org/git/ZjiL7vu5kCVwpsLd@tanuki/&quot;&gt;in a thread about a patch series from Patrick&lt;/a&gt;
that introduced subcommands like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set&lt;/code&gt;, etc, in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config&lt;/code&gt;.
In that thread, after Patrick asked if we wanted to introduce a
document to keep track of upcoming removals for a potential Git 3.0
release, Junio Hamano, the Git maintainer, replied to Patrick that
in a few of his &lt;a href=&quot;https://lore.kernel.org/git/?q=s%3A%22What%27s+cooking+in+git.git%22&quot;&gt;“What’s cooking” emails&lt;/a&gt;
before the Git 2.44.0 release, he had written:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;It may not be a bad idea to reflect on what technical debt and UI
warts we have accumulated so far to see if we have enough of them to
start planning for a breaking Git 3.0 release (or, of course, keep
incrementally improve the system, which is much more preferable –
continuity and stability is good).&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;So Junio was happy that “somebody has bit it ;-)” and suggested a
number of topics that could be added to the document Patrick wanted
to create. This started a discussion about the possibility of
deprecating some features, such as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;restore&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;switch&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;submodules&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;worktrees&lt;/code&gt; subcommands.&lt;/p&gt;

    &lt;p&gt;In the RFC patch to add the document, Patrick mentioned some of the
topics suggested by Junio, but not others that seemed controversial
in the previous discussion.&lt;/p&gt;

    &lt;p&gt;Johannes Schindelin, alias Dscho, replied to Patrick’s RFC patch
saying he loved it. Dscho also gave his opinion about the topics,
and suggested to deprecate or remove additional rarely used
features.&lt;/p&gt;

    &lt;p&gt;Junio replied to Patrick’s patch suggesting to add features that we
don’t want to drop and why, and to mention that we deprecate but,
for backward compatibility, rarely remove old ways to do things.
Patrick agreed to Junio’s suggestion and proposed a “superseded”
section for the features we don’t want to drop.&lt;/p&gt;

    &lt;p&gt;Dragan Simic, who had participated in the discussions of the preceding
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config&lt;/code&gt; thread, repeated that he didn’t want to see any of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt; deprecated, which
Patrick agreed shouldn’t be done.&lt;/p&gt;

    &lt;p&gt;Phillip Wood, replying to Patrick’s patch, asked if the document
should track the progress of some unfinished work, like the config
based hooks implementation. Patrick said he was planning on
creating a separate document for long running projects, projects
already discussed, and also small or micro projects, with the
additional intent to help newcomers looking for something to work on.&lt;/p&gt;

    &lt;p&gt;Justin Tobler also replied to Patrick’s patch suggesting adding the
removal of double dot and triple dot syntax (“..” and “…”) from
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; to the document. This was discussed by Junio and Patrick
but, as it would need a lot more work, Patrick decided to not add it
to the document for now.&lt;/p&gt;

    &lt;p&gt;Patrick then sent a
&lt;a href=&quot;https://lore.kernel.org/git/2ef53ff98b12fe9373a15ec3a795235f040d9049.1715667067.git.ps@pks.im/&quot;&gt;version 2 of his patch&lt;/a&gt;
adding a section about features “that are &lt;em&gt;not&lt;/em&gt; to be
deprecated” and proposing some further deprecations, while withdrawing
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$GITDIR/hooks&lt;/code&gt; directory deprecation proposal.&lt;/p&gt;

    &lt;p&gt;Karthik Nayak replied to the patch version 2, listing a number of
commands not mentioned in the document that do similar things, which
might indicate that some of them could be deprecated too. Patrick,
Junio and Dragan discussed these commands, but decided that only
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pickaxe&lt;/code&gt;, which is an alias for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt;, could be removed
for now.&lt;/p&gt;

    &lt;p&gt;So Patrick sent a
&lt;a href=&quot;https://lore.kernel.org/git/84c01f1b0a2d24d7de912606f548623601c0d715.1716555034.git.ps@pks.im/&quot;&gt;version 3 of his patch&lt;/a&gt;,
which only added the removal of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pickaxe&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Junio replied to this version 3 with a lot of comments to discuss
how each item was justified and how we could improve on justifying
items in general. Patrick then agreed on ways to improve the
document.&lt;/p&gt;

    &lt;p&gt;Patrick sent a
&lt;a href=&quot;https://lore.kernel.org/git/cover.1717141598.git.ps@pks.im/&quot;&gt;version 4&lt;/a&gt;
where the single patch had been broken down into 4 patches. In the
process a lot of the proposed deprecations from the previous version
were removed and the document name was changed from
“UpcomingBreakingChanges.md” to “BreakingChanges.md” as some changes
listed in the “Superseded features that will not be deprecated”
section should not be considered upcoming.&lt;/p&gt;

    &lt;p&gt;The goal was to introduce the document in a skeletal form in the
first patch and then add only one item to each of the three sections
in the following patches. This way each of the last 3 patches should
be an example of how other items should later be added to the
document.&lt;/p&gt;

    &lt;p&gt;Junio, Patrick and Todd Zullinger then discussed relatively small
improvements to the form and content of the document.&lt;/p&gt;

    &lt;p&gt;Patrick sent a
&lt;a href=&quot;https://lore.kernel.org/git/cover.1717402497.git.ps@pks.im/&quot;&gt;version 5 of the patch series&lt;/a&gt;
where the main change was that the document was converted to
AsciiDoc instead of Markdown and renamed from “BreakingChanges.md”
to “BreakingChanges.txt” for format compatibility with most other
documents in the codebase.&lt;/p&gt;

    &lt;p&gt;Junio, Phillip Wood and Patrick discussed other small improvements,
which Patrick integrated into
&lt;a href=&quot;https://lore.kernel.org/git/cover.1717504292.git.ps@pks.im/&quot;&gt;version 6 of the patch series&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Junio then suggested a few more small improvements, which Patrick
finally integrated into
&lt;a href=&quot;https://lore.kernel.org/git/cover.1718345026.git.ps@pks.im/&quot;&gt;version 7 of the patch series&lt;/a&gt;,
which was later merged into the ‘master’ branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;!--
__Various__
--&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://graphite.dev/blog/bitkeeper-linux-story-of-git-creation&quot;&gt;BitKeeper, Linux, and licensing disputes: How Linus wrote Git in 14 days&lt;/a&gt;
by Nicholas Yan on Graphite Blog.
See also, among others, &lt;a href=&quot;https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitHistory.html&quot;&gt;GitHistory page in the archives of Git SCM Wiki&lt;/a&gt;,
which was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/11/30/edition-105/&quot;&gt;Git Rev News Edition #105&lt;/a&gt;,
and other links that were mentioned in that edition.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bump.sh/blog/git-workflows-for-api-technical-writers&quot;&gt;Git Workflows for API Technical Writers&lt;/a&gt;
by James Higginbotham on Bump.sh.
Mentions &lt;a href=&quot;https://bump.sh/&quot;&gt;Bump.sh&lt;/a&gt;, an API doc platform for tech writers and engineers,
at the end of the article.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2024-05-27-what-is-git-our-beginners-guide-to-version-control/&quot;&gt;What is Git? Our beginner’s guide to version control&lt;/a&gt; and
&lt;a href=&quot;https://github.blog/2024-06-10-top-12-git-commands-every-developer-must-know/&quot;&gt;Top 12 Git commands every developer must know&lt;/a&gt;
by Kedasha Kerr on GitHub Blog.  This blog post accompanies the
&lt;a href=&quot;https://youtube.com/playlist?list=PL0lo9MOBetEFcp4SCWinBdpml9B2U25-f&amp;amp;feature=shared&quot;&gt;GitHub for Beginners&lt;/a&gt;
series (YouTube playlist).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ionixjunior.dev/en/stop-wasting-hours-git-bisect-your-ultimate-bug-hunting-tool/&quot;&gt;Stop Wasting Hours! Git Bisect: Your Ultimate Bug Hunting Tool&lt;/a&gt;
by Ione Souza Junior on his blog; also available &lt;a href=&quot;https://dev.to/ionixjunior/stop-wasting-hours-git-bisect-your-ultimate-bug-hunting-tool-4ebc&quot;&gt;on DEV.to&lt;/a&gt;
as a part of &lt;a href=&quot;https://dev.to/ionixjunior/series/26070&quot;&gt;mastering-git series&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/waqaryounis7564/the-magic-of-git-stash-how-it-saved-my-day-119k&quot;&gt;The Magic of Git Stash: How It Saved My Day&lt;/a&gt;
by waqaryounis7564 on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/shinigami92/prevent-hidden-merge-conflicts-2lem&quot;&gt;Prevent Hidden Merge Conflicts&lt;/a&gt;
by Shinnigami on DEV.to; but note that the described solutions might warrant some more thought
(linearizing history by requiring rebase instead of merge to integrate changes
versus requiring branch to be up to date before merging), and are not the only possible
solutions (for example: post-merge checks).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/safdarali/good-commit-vs-your-commit-how-to-write-a-perfect-git-commit-message-59ol&quot;&gt;“Good Commit” vs “Your Commit”: How to Write a Perfect Git Commit Message&lt;/a&gt;
by Safdar Ali on DEV.to.
    &lt;ul&gt;
      &lt;li&gt;Compare the &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; specification,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;,
and &lt;a href=&quot;https://gitmoji.dev/&quot;&gt;Gitmoji&lt;/a&gt;, first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/01/23/edition-47/&quot;&gt;Git Rev News Edition #47&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://owenou.com/ten-things-you-didnt-know-git-and-github-could-do/&quot;&gt;Ten Things You Didn’t Know Git And GitHub Could Do&lt;/a&gt;
by Owen Ou on Owen Ou’s blog (2012).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.lambda.cx/posts/freecad-and-git/&quot;&gt;Versioning FreeCAD files with git&lt;/a&gt;
(FreeCAD files are zip archives containing text documents) by Dante Catalfamo on lambda.cx blog (2021).&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- intentionally split into separate list --&gt;
&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/978955/&quot;&gt;Programming in Unison&lt;/a&gt;
by Daroc Alden on LWN.net (&lt;a href=&quot;https://lwn.net/SubscriberLink/978955/cd8dffc792b86313/&quot;&gt;free subscriber link&lt;/a&gt;).
&lt;a href=&quot;https://www.unison-lang.org/&quot;&gt;Unison&lt;/a&gt; is an MIT-licensed programming language,
where programs are stored in an append-only, content-addressed database
(though still displayed to the user for editing as text, using the editor of their choice)…
just like information about project versions is stored in Git.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pypa/setuptools_scm&quot;&gt;setuptools-scm&lt;/a&gt;
is a tool that extracts Python package versions from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hg&lt;/code&gt; metadata
instead of declaring them as the version argument or in an SCM managed file.
Additionally, it provides setuptools with a list of files that are managed by the SCM
(i.e. it automatically adds all of the SCM-managed files to the sdist).
Unwanted files must be excluded via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MANIFEST.in&lt;/code&gt;.
The preferred way to configure setuptools-scm is via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pyproject.toml&lt;/code&gt;.&lt;br /&gt;
The &lt;a href=&quot;https://setuptools-scm.readthedocs.io/en/latest/&quot;&gt;latest version&lt;/a&gt;
and the &lt;a href=&quot;https://setuptools-scm.readthedocs.io/en/stable/&quot;&gt;stable version documentation&lt;/a&gt;
are available on Read the Docs.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://piku.github.io/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;piku&lt;/code&gt;&lt;/a&gt;, which was inspired by &lt;a href=&quot;https://dokku.com/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dokku&lt;/code&gt;&lt;/a&gt;,
allows you to do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; deployments to your own servers, no matter how small they are.
An open source PaaS (Platform as a Service) alternative to services such as Heroku.
Written in Python.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vaab/gitchangelog&quot;&gt;gitchangelog&lt;/a&gt; is a tool that
creates a changelog from git log history.  Written in Python;
no longer actively developed (version 3.0.4 is from 2018).
    &lt;ul&gt;
      &lt;li&gt;Compare with for example &lt;a href=&quot;https://git-cliff.org/&quot;&gt;git-cliff&lt;/a&gt; changelog generator,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/02/29/edition-108/&quot;&gt;Git Rev News Edition #108&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/masukomi/masuconfigs/blob/master/bin/git-scripts/git-open-remote&quot;&gt;git-open-remote&lt;/a&gt;
is a shell script by &lt;a href=&quot;https://masukomi.org&quot;&gt;masukomi&lt;/a&gt; to open the web page(s) for the repo’s remote(s).
With this script you can simply cd into a git repo and type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git open-remote&lt;/code&gt;.
Requires &lt;a href=&quot;https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/open.1.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;open&lt;/code&gt;&lt;/a&gt;
or &lt;a href=&quot;https://linux.die.net/man/1/xdg-open&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdg-open&lt;/code&gt;&lt;/a&gt;
(aliased or linked to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;open&lt;/code&gt;) to open the web browser,
and &lt;a href=&quot;https://github.com/charmbracelet/gum&quot;&gt;charm gum&lt;/a&gt;
to implement the selection UI when the Git repo has more than one remote.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/DecimalTurn/3f99a3903366bf9fb2c1f513bd3c5a83&quot;&gt;Git EOL Conversion Diagram&lt;/a&gt; for checkout
as Gist providing an &lt;a href=&quot;https://raw.githubusercontent.com/gist/DecimalTurn/3f99a3903366bf9fb2c1f513bd3c5a83/raw/d54d0e842c1f22e0b04d7a044dde1489993d87bf/Git-EOL-Conversion-Diagram.svg&quot;&gt;SVG version&lt;/a&gt;
and an &lt;a href=&quot;https://app.mindmup.com/map/_free/2024/06/982eaeb032cf11ef93d0a9d7af4d6195&quot;&gt;editable version on Mindmup&lt;/a&gt;,
by Martin Leduc (@DecimalTurn).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqr0dheuw5.fsf@gitster.g/&quot;&gt;2.45.2 and friends to unbreak “git lfs” and others&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.45.2.windows.1&quot;&gt;2.45.2(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.0&quot;&gt;3.13.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.5&quot;&gt;3.12.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.11&quot;&gt;3.11.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.13&quot;&gt;3.10.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.16&quot;&gt;3.9.16&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/06/26/patch-release-gitlab-17-1-1-released/&quot;&gt;17.1.1, 17.0.3, 16.11.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/06/20/gitlab-17-1-released/&quot;&gt;17.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/06/12/patch-release-gitlab-17-0-2-released/&quot;&gt;17.0.2, 16.11.4, 16.10.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.0.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac 12.0 (BETA) — &lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-12/&quot;&gt;Release blog post&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v1.7.0&quot;&gt;1.7.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v1.6.0&quot;&gt;1.6.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git-Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.8.0&quot;&gt;4.8.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.12.1&quot;&gt;0.12.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.12.0&quot;&gt;0.12.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Štěpán Němec, Bruno Brito, David Aguilar,
Brandon Pugh and Dragan Simic.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 111 (May 31st, 2024)</title>
      <link>https://git.github.io/rev_news/2024/05/31/edition-111/</link>
      <pubDate>Fri, 31 May 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/05/31/edition-111/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-111-may-31st-2024&quot;&gt;Git Rev News: Edition 111 (May 31st, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 111th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of April and May 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/406aa31f-4ea0-496c-aeb6-443be86385c0@gmail.com/&quot;&gt;[GSoC] Welcoming our 2024 contributors and thanking our applicants&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The Git project was accepted in the
&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code (GSoC)&lt;/a&gt;
this year again, and 3 applicants were selected:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Jialuo She will work on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2024/projects/ukm4PTEF&quot;&gt;“Implement consistency check for refs” project&lt;/a&gt;
mentored by Karthik Nayak and Patrick Steinhardt. He already
started posting on &lt;a href=&quot;https://luolibrary.com/categories/GSoC-2024/&quot;&gt;his blog&lt;/a&gt;,
and will push his work to his &lt;a href=&quot;https://github.com/shejialuo/git&quot;&gt;Git repo&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Ghanshyam Thakkar will work on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2024/projects/e9C4rhrv&quot;&gt;“Move existing tests to a unit testing framework” project&lt;/a&gt;
mentored by Kaartic Sivaraam and Christian Couder. He already
started posting on &lt;a href=&quot;https://spectre10.github.io/posts/&quot;&gt;his blog&lt;/a&gt;,
and will push his work to his &lt;a href=&quot;https://github.com/spectre10/git&quot;&gt;Git repo&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chandra Pratap will work on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2024/projects/tlh611d7&quot;&gt;“Move and improve reftable tests in the unit testing framework” project&lt;/a&gt;
mentored by Patrick Steinhardt and Christian Couder. He already
started posting on &lt;a href=&quot;https://chand-ra.github.io/&quot;&gt;his blog&lt;/a&gt;,
and will push his work to his &lt;a href=&quot;https://github.com/Chand-ra/git&quot;&gt;Git repo&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Congratulations to them, and thanks a lot to all the applicants who
worked on Git and submitted proposals! It was tough to choose from
multiple potential contributors, all of them good in their own
respect.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/Zj0JyL1b+g1G3zWx@nand.local/&quot;&gt;Git Merge conference&lt;/a&gt; and Contributor’s Summit&lt;/p&gt;

    &lt;p&gt;Taylor Blau from GitHub announced that Git Merge 2024 is happening
in-person on September 19th and 20th in Berlin. It is being co-hosted
by GitHub and &lt;a href=&quot;https://gitbutler.com/&quot;&gt;GitButler&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;The talks are scheduled on September 19th and the birds of a feather
are scheduled on September 20th. Registration is yet to open.&lt;/p&gt;

    &lt;p&gt;The announcement welcomes calls for proposals, ideas on the format,
topics for discussions, venue setup, and applications for financial
assistance.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20240429164849.78509-1-dev+git@drbeat.li/&quot;&gt;[PATCH 0/3] color: add support for 12-bit RGB colors&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Beat Bolli sent a patch series consisting of 3 patches to add 12 bit RGB
color support to the color parsing code. That code is used
especially when parsing configuration files, as
&lt;a href=&quot;https://git-scm.com/docs/git-config#Documentation/git-config.txt-coloradvice&quot;&gt;a lot of configuration options&lt;/a&gt;
allow users to customize how Git colorizes its output.&lt;/p&gt;

    &lt;p&gt;Before Beat’s patch series, the code supported the following:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;fixed strings, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;normal&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;blue&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;red&lt;/code&gt;, etc,&lt;/li&gt;
      &lt;li&gt;256-color-modes from the terminal, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[1;38;5;254;48;5;255m&lt;/code&gt; , and&lt;/li&gt;
      &lt;li&gt;24-bit color values in the form &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#RRGGBB&lt;/code&gt;.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;With Beat’s patch, it also supports 12-bit colors in the form
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#RGB&lt;/code&gt;, where in both the 24-bit and 12-bit forms, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;R&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;G&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;B&lt;/code&gt;
are hexadecimal digits for the red, green and blue components of the
color respectively.&lt;/p&gt;

    &lt;p&gt;The first patch in the series fixed a typo. The second patch added
tests for invalid non-hexadecimal characters in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#RRGGBB&lt;/code&gt;
values.&lt;/p&gt;

    &lt;p&gt;The last patch added support for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#RGB&lt;/code&gt; form and mentioned in
its commit message that such a shortened 12 bit form is already
supported in Cascading Style Sheets (CSS). When used in CSS, each of
the hexadecimal digits in this form is duplicated to convert the
color to 24 bits, and the same duplication is performed in Beat’s
patch. For example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#f1b&lt;/code&gt; specifies the same color as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#ff11bb&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Beat’s third patch
saying that it looked good. Junio noticed that a wrong &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#0xFF0000&lt;/code&gt;
value in a code comment was converted to the right &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#FF0000&lt;/code&gt; value
by removing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ox&lt;/code&gt;. He wondered if there were instances of the same
mistake in our documentation. Beat replied that it was the only
place he found such a mistake.&lt;/p&gt;

    &lt;p&gt;Taylor Blau then reviewed the patch series and said it looked “very
nice”. Jeff King, alias Peff, also reviewed Beat’s series and
commented on the third patch. Looking at the tests that checked the
rejection of invalid values, Peff wondered what would happen if
values like “#1”, “#12”, “#1234” were passed. Junio replied to Peff
that such values would be worth covering in the tests but doing that
in a separate cleanup patch outside this series would be fine.&lt;/p&gt;

    &lt;p&gt;Then Junio replied to himself and suggested adding such tests in the
second patch of the series which already added tests for invalid
values. Junio even sent a ‘fixup!’ patch to add these tests to the
second patch. Peff replied that this ‘fixup!’ patch looked good.&lt;/p&gt;

    &lt;p&gt;Beat then sent a
&lt;a href=&quot;https://lore.kernel.org/git/20240502110331.6347-1-dev+git@drbeat.li/&quot;&gt;version 2 of his series&lt;/a&gt;
that incorporated Junio’s patch. Both Junio and Peff approved of it,
so it was later merged into the ‘master’ branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-beat-bolli&quot;&gt;Developer Spotlight: Beat Bolli&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a software engineer currently working in an Integration Engineer role
for the Swiss government. When I’m not coding, I read, ride any of my three
bikes or play the guitar or electric bass.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I’m more a drive-by contributor. There are no big issues that I work on.
For example, my very first commit was “just” a spelling correction.&lt;/p&gt;

    &lt;p&gt;The biggest contribution in terms of the number of commits was a cleanup of
the test scripts that eliminated redundant processes in long pipelines.&lt;/p&gt;

    &lt;p&gt;Other topics that come to mind are the strict ISO date format, the
“copy commit reference” menu item in &lt;a href=&quot;https://git-scm.com/docs/gitk&quot;&gt;gitk&lt;/a&gt;,
and some cleanups to get a warning-free compile with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-pedantic&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;As explained in the previous answer, I mostly see small things that I try
to improve, like &lt;a href=&quot;#reviews&quot;&gt;recently adding the 12-bit RGB color format&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Honestly, I’m pretty content with the state of Git. I’ve been using Git since
2009 and I guess I got used to its idiosyncrasies (but see the next question!).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;There are too many different options and/or subcommands to remove things.
Compare &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git remote remove&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch (-d/-D)&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rm&lt;/code&gt; (for files).
I understand that these are different situations but from time to time I
have to really think about which is the right syntax in a given case.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of
Git itself?&lt;/p&gt;

    &lt;p&gt;First, I’m a fan of the command line, so Git itself does over 80% of what
I need. Next up are &lt;a href=&quot;https://jonas.github.io/tig/&quot;&gt;tig&lt;/a&gt; and &lt;a href=&quot;https://github.com/tpope/vim-fugitive&quot;&gt;vim-fugitive&lt;/a&gt;.
I also use a comprehensive set of Git-related shell aliases that improve
my efficiency.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t. contributing to
the Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;Nothing out of the ordinary, but then I’m old-school and have no problems
with an email-based workflow. My first commits were accepted without much
fanfare, and this encouraged me to continue to submit things.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;I follow the mailing list on &lt;a href=&quot;https://lore.kernel.org/git/&quot;&gt;lore.kernel.org&lt;/a&gt;, and
have also subscribed to the NNTP feed in Thunderbird. For submitting patches I
have configured a few send-email options, probably like everyone else who
contributes. I do most of my development on a Mac mini in &lt;a href=&quot;https://iterm2.com/&quot;&gt;iTerm2&lt;/a&gt;
and Vim.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;First, don’t think you’re not good enough. By following &lt;a href=&quot;https://git-scm.com/docs/SubmittingPatches&quot;&gt;SubmittingPatches&lt;/a&gt;
and the rest of the &lt;a href=&quot;https://git-scm.com/docs/MyFirstContribution&quot;&gt;beginner’s documentation&lt;/a&gt;,
everyone can contribute. I experience the “mood” on the mailing list as very
supportive and helpful.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;Just a tiny pet peeve of mine: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sizeof&lt;/code&gt; is not a function 😉&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2024-05-14-securing-git-addressing-5-new-vulnerabilities/&quot;&gt;Securing Git: Addressing 5 new vulnerabilities&lt;/a&gt;
fixed in v2.45.1, by Johannes Schindelin on GitHub Blog.
The main theme of fixes in v2.45.1 is to improve the security of cloning Git repositories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2024/05/30/a-beginners-guide-to-the-git-reftable-format/&quot;&gt;A beginner’s guide to the Git reftable format&lt;/a&gt;
(available since the &lt;a href=&quot;https://about.gitlab.com/blog/2024/04/30/whats-new-in-git-2-45-0/&quot;&gt;release of Git 2.45.0&lt;/a&gt;).
Article by Patrick Steinhardt on GitLab Blog.&lt;/li&gt;
  &lt;li&gt;Julia Evans has just &lt;a href=&quot;https://jvns.ca/blog/2024/04/25/new-zine--how-git-works-/&quot;&gt;published her new Git zine&lt;/a&gt;,
“&lt;a href=&quot;https://wizardzines.com/zines/git/&quot;&gt;How Git Works&lt;/a&gt;”.
She &lt;a href=&quot;https://fosstodon.org/@b0rk@jvns.ca/112519150131306917&quot;&gt;counted&lt;/a&gt;
that she apparently wrote 28,000 words of blog posts while writing the zine.
These posts were covered here, starting from &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News Edition #103&lt;/a&gt;,
and continuing, edition after edition, until &lt;a href=&quot;https://git.github.io/rev_news/2024/04/30/edition-110/&quot;&gt;the previous edition #110&lt;/a&gt;.&lt;br /&gt;
As a companion to this zine, there is a little &lt;a href=&quot;https://wizardzines.com/git-cheat-sheet.pdf&quot;&gt;git cheat sheet&lt;/a&gt; (PDF) freely available.
    &lt;ul&gt;
      &lt;li&gt;Julia Evans had also published the “&lt;a href=&quot;https://wizardzines.com/zines/oh-shit-git/&quot;&gt;Oh Shit, Git&lt;/a&gt;” zine in 2018;
as she &lt;a href=&quot;https://fosstodon.org/@b0rk@jvns.ca/112338598244430472&quot;&gt;describes&lt;/a&gt;:
“Oh Shit, Git” is about how to get out of Git messes, while
“How Git Works” explains why those messes happen in the first place.&lt;/li&gt;
      &lt;li&gt;The &lt;a href=&quot;http://ohshitgit.com/&quot;&gt;Oh Shit, Git!?!&lt;/a&gt; website by Katie Sylor-Miller
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/09/14/edition-19/&quot;&gt;Git Rev News Edition #19&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/972467/&quot;&gt;Securing Git repositories with gittuf&lt;/a&gt;
by Joe Brockmeier on LWN.net is a report of a talk by Aditya Sirish A Yelgundhalli and Billy Lynch
at Open Source Summit North America (OSSNA).
The video of the talk &lt;a href=&quot;https://www.youtube.com/watch?v=eCSeIEdMbCw&quot;&gt;is available on YouTube&lt;/a&gt;.
&lt;a href=&quot;https://gittuf.dev/&quot;&gt;Gittuf&lt;/a&gt; was mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2023/10/31/edition-104/&quot;&gt;Git Rev News Edition #104&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.hartwork.org/posts/clone-arbitrary-single-git-commit/&quot;&gt;Clone arbitrary single Git commit&lt;/a&gt;
by Sebastian Pipping on Hartwork Blog.  Inspired by GitHub Action &lt;a href=&quot;https://github.com/actions/checkout&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;actions/checkout&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/mochafreddo/reverting-file-changes-in-git-a-comprehensive-guide-80i&quot;&gt;Reverting File Changes in Git: A Comprehensive Guide&lt;/a&gt;
by Geoffrey Kim on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2024-05-27-what-is-git-our-beginners-guide-to-version-control/&quot;&gt;What is Git? GitHub beginner’s guide to version control&lt;/a&gt;
by Kedasha Kerr on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://buildkite.com/blog/securing-your-software-supply-chain-signed-git-commits-with-oidc-and-sigstore&quot;&gt;Signed Git commits with Sigstore, Gitsign and OpenID Connect (OIDC)&lt;/a&gt;
by James Healy on Buildkite Blog.
&lt;a href=&quot;https://www.sigstore.dev/&quot;&gt;Sigstore&lt;/a&gt; and &lt;a href=&quot;https://github.com/sigstore/gitsign&quot;&gt;Gitsign&lt;/a&gt;
tools for keyless Git signing were both mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2022/09/30/edition-91/&quot;&gt;Git Rev News Edition #91&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/stacked-prs/&quot;&gt;Understanding the Stacked Pull Requests Workflow&lt;/a&gt; by Bruno Brito on Tower’s blog.
  There have been various approaches to adding stacks to Git workflows:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://stacked-git.github.io/&quot;&gt;Stacked Git&lt;/a&gt; (aka StGit) was mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2016/07/20/edition-17/&quot;&gt;Git Rev News Edition #17&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2016/11/16/edition-21/&quot;&gt;#21&lt;/a&gt;,
and &lt;a href=&quot;https://git.github.io/rev_news/2021/04/30/edition-74/&quot;&gt;#74&lt;/a&gt;,
and finally presented as a tool in &lt;a href=&quot;https://git.github.io/rev_news/2022/11/30/edition-93/&quot;&gt;#93&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Stacked diffs were discussed in &lt;a href=&quot;https://jg.gg/2018/09/29/stacked-diffs-versus-pull-requests/&quot;&gt;Stacked Diffs Versus Pull Requests&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/10/24/edition-44/&quot;&gt;Git Rev News Edition #44&lt;/a&gt;)
and &lt;a href=&quot;https://newsletter.pragmaticengineer.com/p/stacked-diffs&quot;&gt;Stacked Diffs (and why you should know about them)&lt;/a&gt; (mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2023/11/30/edition-105/&quot;&gt;#105&lt;/a&gt;).&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://andrewlock.net/working-with-stacked-branches-in-git-is-easier-with-update-refs/&quot;&gt;Working with stacked branches&lt;/a&gt;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/11/30/edition-93/&quot;&gt;Git Rev News Edition #93&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.cuviper.com/2013/11/10/how-short-can-git-abbreviate/&quot;&gt;How short can Git abbreviate?&lt;/a&gt;
by Josh Stone on his WordPress-based blog (2013).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eCSeIEdMbCw&quot;&gt;Securing Git Repositories with Gittuf&lt;/a&gt; -
Aditya Sirish A Yelgundhalli, New York University &amp;amp; Billy Lynch, Chainguard.
A 30 minute long video on The Linux Foundation channel on YouTube.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/ksdb/&quot;&gt;KSDB&lt;/a&gt; is the LWN.net kernel source database, a site
which can answer a wide range of questions about the Linux kernel’s development history.&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://tlog.linderud.dev/&quot;&gt;Kernel.org Transparency Log Monitor&lt;/a&gt;
webpage is a monitor of the kernel.org transparency log for git-receive operations.
Among others, it tracks signed pushes (compare with &lt;a href=&quot;https://gittuf.dev/&quot;&gt;gittuf&lt;/a&gt;).
Runs &lt;a href=&quot;https://github.com/Foxboron/kernel.org-git-verifier&quot;&gt;kernel.org-git-verifier&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;There is also the &lt;a href=&quot;https://korg.docs.kernel.org/gitolite/transparency-log.html&quot;&gt;Gitolite transparency log&lt;/a&gt;,
with git-receive operations published at the &lt;a href=&quot;https://git.kernel.org/pub/scm/infra/transparency-logs/gitolite/git/&quot;&gt;transparency-logs/gitolite/git&lt;/a&gt;
repositories in &lt;a href=&quot;https://public-inbox.org/public-inbox-v2-format.html&quot;&gt;the public-inbox v2 format&lt;/a&gt;.
&lt;a href=&quot;http://gitolite.com/gitolite/&quot;&gt;Gitolite&lt;/a&gt; was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2016/07/20/edition-17/&quot;&gt;Git Rev News Edition #17&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2016/12/14/edition-22/&quot;&gt;#22&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sigstore/rekor&quot;&gt;Sigstore Rekor&lt;/a&gt; is meant to
provide an immutable tamper resistant ledger of metadata
generated within a software project’s supply chain.
It enables software maintainers and build systems to record and query
signed metadata.
Can be run as part of &lt;a href=&quot;https://sigstore.dev/&quot;&gt;Sigstore&lt;/a&gt; or on its own.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dirk/quickhook/&quot;&gt;Quickhook&lt;/a&gt; is a Git hook runner designed for speed.
Written in Go.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://etckeeper.branchable.com/&quot;&gt;etckeeper&lt;/a&gt; is a collection of tools
to let &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc&lt;/code&gt; be stored in a Git repository, and use Git
to review or revert changes that were made to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc&lt;/code&gt;.
Written as shell scripts (with some plugins in Python).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dangitgit.com/en&quot;&gt;Dangit, Git!?!&lt;/a&gt; has the same contents, only without swears,
as the &lt;a href=&quot;https://ohshitgit.com/&quot;&gt;Oh Shit, Git!?!&lt;/a&gt; website
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/09/14/edition-19/&quot;&gt;Git Rev News Edition #19&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqv83g4937.fsf@gitster.g/&quot;&gt;2.45.1 and friends&lt;/a&gt;
(2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2, and 2.39.4)&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.45.1.windows.1&quot;&gt;2.45.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.8.1&quot;&gt;1.8.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/05/22/patch-release-gitlab-17-0-1-released/&quot;&gt;17.0.1, 16.11.3, 16.10.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/05/16/gitlab-17-0-released/&quot;&gt;17.0&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/05/09/gitlab-16-9-8-released/&quot;&gt;16.9.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/05/08/patch-release-gitlab-16-11-2-released/&quot;&gt;16.11.2, 16.10.5, 16.9.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.10.html#3100&quot;&gt;3.10.0&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.7.html#379&quot;&gt;3.7.9&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.8.html#386&quot;&gt;3.8.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#395&quot;&gt;3.9.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.4&quot;&gt;3.12.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.10&quot;&gt;3.11.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.12&quot;&gt;3.10.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.15&quot;&gt;3.9.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.13/admin/release-notes#3.13.0&quot;&gt;3.13.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.3&quot;&gt;3.12.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.9&quot;&gt;3.11.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.11&quot;&gt;3.10.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.14&quot;&gt;3.9.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.0.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;10.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.4.0&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.18&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.17&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.16&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;TortoiseGit &lt;a href=&quot;https://tortoisegit.org/download/&quot;&gt;2.16.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;https://github.com/git-cola/git-cola/releases/tag/v4.7.1&quot;&gt;4.7.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Garden &lt;a href=&quot;https://github.com/garden-rs/garden/releases/tag/v1.5.0&quot;&gt;1.5.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;11.0&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-11/&quot;&gt;blog post&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;7.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;tig &lt;a href=&quot;https://github.com/jonas/tig/releases/tag/tig-2.5.10&quot;&gt;2.5.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.11.3&quot;&gt;0.11.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Beat Bolli, Sven Strickroth, David Aguilar,
Bruno Brito and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 110 (April 30th, 2024)</title>
      <link>https://git.github.io/rev_news/2024/04/30/edition-110/</link>
      <pubDate>Tue, 30 Apr 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/04/30/edition-110/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-110-april-30th-2024&quot;&gt;Git Rev News: Edition 110 (April 30th, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 110th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of March and April 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/xmqqil1iqi37.fsf@gitster.g/&quot;&gt;What’s cooking in git.git (Mar 2024, #05; Tue, 19)&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;In March, Junio Hamano, the Git maintainer, sent one of the usual
“What’s cooking in git.git” emails that describe the current state
of the patch series that might be merged into the development
branches (mostly “master”, “next”, and “seen”).&lt;/p&gt;

    &lt;p&gt;The patch series are listed in these emails along with some related
information in a custom format, including the following elements:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;a title line, for example:&lt;/li&gt;
    &lt;/ul&gt;

    &lt;blockquote&gt;
      &lt;ul&gt;
        &lt;li&gt;bl/cherry-pick-empty (2024-03-11) 7 commits&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bl&lt;/code&gt; are the initials of the author, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cherry-pick-empty&lt;/code&gt;
  the series title,&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;a patch list, for example:&lt;/li&gt;
    &lt;/ul&gt;

    &lt;blockquote&gt;
      &lt;ul&gt;
        &lt;li&gt;cherry-pick: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--empty&lt;/code&gt; for more robust redundant commit handling&lt;/li&gt;
        &lt;li&gt;cherry-pick: enforce &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--keep-redundant-commits&lt;/code&gt; incompatibility&lt;/li&gt;
        &lt;li&gt;sequencer: do not require &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allow_empty&lt;/code&gt; for redundant commit options&lt;/li&gt;
        &lt;li&gt;sequencer: treat error reading &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HEAD&lt;/code&gt; as unborn branch&lt;/li&gt;
        &lt;li&gt;rebase: update &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--empty=ask&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--empty=stop&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;docs: clean up &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--empty&lt;/code&gt; formatting in git-rebase (1) and git-am (1)&lt;/li&gt;
        &lt;li&gt;docs: address inaccurate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--empty&lt;/code&gt; default with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--exec&lt;/code&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/blockquote&gt;

    &lt;ul&gt;
      &lt;li&gt;a description, for example:&lt;/li&gt;
    &lt;/ul&gt;

    &lt;blockquote&gt;
      &lt;p&gt;“cherry-pick” told to keep redundant commits needs to be allowed to
 create empty commits to do its job, but it required the user to
 give the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--allow-empty&lt;/code&gt; option, which was unnecessary.  Its UI has
 also been tweaked a bit.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;ul&gt;
      &lt;li&gt;a status, for example:&lt;/li&gt;
    &lt;/ul&gt;

    &lt;blockquote&gt;
      &lt;p&gt;Comments?&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;ul&gt;
      &lt;li&gt;a source, for example:&lt;/li&gt;
    &lt;/ul&gt;

    &lt;blockquote&gt;
      &lt;p&gt;source: &lt;a href=&quot;mailto:20240119060721.3734775-2-brianmlyles@gmail.com&quot;&gt;20240119060721.3734775-2-brianmlyles@gmail.com&lt;/a&gt;&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Some of the above elements, like the description, are also
automatically used to create the release notes that Junio prepares
and sends when he creates a new release.&lt;/p&gt;

    &lt;p&gt;Brian Lyles replied to Junio that the description of the patch
series used as an example above, which Brian had sent, was “a little
out-of-date”. He suggested a different wording for it, and said that
he was going to send a version 4 of his patch series.&lt;/p&gt;

    &lt;p&gt;Junio said that the wording suggestion for the description was
very much appreciated, and wondered if the project could adopt a
better workflow where contributors could write a short description
at the top of the cover letter of their patch series and if that
description could then be picked up automatically by some tools to appear
in Junio’s “What’s cooking in git.git” emails.&lt;/p&gt;

    &lt;p&gt;Brian Lyles agreed that improving the process could be a
good idea. He mentioned a strategy used by other projects, namely
adding an entry in a “CHANGELOG.NEXT.md” file for each
important commit. At release time, all the entries in that
file would be moved into a standard “CHANGELOG.md” file. He then
showed how the entry in the “CHANGELOG.NEXT.md” file would look like
for his series as an example.&lt;/p&gt;

    &lt;p&gt;Junio replied by summarizing the current process related to these
descriptions and pointing to the
&lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/howto/maintain-git.adoc&quot;&gt;“Documentation/howto/maintain-git.adoc” file&lt;/a&gt;,
which describes his workflow and says that maintaining these topic
descriptions is his responsibility as the project maintainer. He
then mentioned some downsides of giving that responsibility to the
patch series authors.&lt;/p&gt;

    &lt;p&gt;One downside is that the description might be harder to read because
the authors “inevitably are biased by the importance of their own
work ;-)”. Another one is that the description might not be as
consistent as when they are all written by the same person. Coming
up with some description is also “a good opportunity” for the
maintainer to find what is still unclear after reading the patches
and the cover letter. Junio agreed that “the distribution of burden is
certainly attractive” though.&lt;/p&gt;

    &lt;p&gt;Brian replied that he thought the author should still write
something and that at least he was willing to do it. He also
suggested having guidelines, like for commit messages, to help
authors and reviewers standardize the style of these descriptions.&lt;/p&gt;

    &lt;p&gt;In the meantime, in a separate email, Junio also pointed out that a
“CHANGELOG.NEXT.md” file would make merges more difficult compared
to having the description in the cover letter.&lt;/p&gt;

    &lt;p&gt;To that Brian agreed, and proposed writing a patch to the
“Documentation/SubmittingPatches” file to document that the
description can be written in the cover letter.&lt;/p&gt;

    &lt;p&gt;Junio replied by proposing a patch to that file himself. Brian
commented that the description might need “some specific heading,
phrase, or other structured text” to mark it appropriately, making
it easy to notice and extract.&lt;/p&gt;

    &lt;p&gt;Dragan Simic joined the discussion saying that writing the
description should not be a strict requirement and then agreed with
Junio’s patch. Max Gautier also chimed in, agreeing with Brian and
Dragan about using a format to mark the description. Dragan replied
that adding an example of such a formatted description in the patch
Junio suggested would be good.&lt;/p&gt;

    &lt;p&gt;Junio replied to Brian that he preferred starting “with a
lightweight process that does not burden participants with too much
red tape”, so something like “When the first paragraph of the
message looks like an entry in the Release Notes, it is used as
such”, as he thought that the Release Notes style was “distinct
enough” as to “not require any further marking”.&lt;/p&gt;

    &lt;p&gt;As Junio’s patch was then merged, it’s now
&lt;a href=&quot;https://github.com/git/git/blob/v2.45.0-rc1/Documentation/SubmittingPatches#L462-L472&quot;&gt;officially possible to write a short description&lt;/a&gt;
in patches or cover letters. This description might then be used
as-is in the “What’s cooking in git.git” emails and in the release
notes.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2024-04-29-highlights-from-git-2-45/&quot;&gt;Highlights from Git 2.45&lt;/a&gt;
by Taylor Blau on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2024/04/30/whats-new-in-git-2-45-0/&quot;&gt;What’s new in Git 2.45.0?&lt;/a&gt;
by Patrick Steinhardt on GitLab Blog.&lt;/li&gt;
  &lt;li&gt;Adam Johnson’s book “Boost Your Git DX”
&lt;a href=&quot;https://adamj.eu/tech/2024/04/04/bygdx-update/&quot;&gt;has been updated&lt;/a&gt; with ten
new pages of content. This book was mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2023/10/31/edition-104/&quot;&gt;Git Rev News Edition #104&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Julia Evans continues her series of blog posts about Git, preparing for a new Git zine,
with &lt;a href=&quot;https://jvns.ca/blog/2024/04/10/notes-on-git-error-messages/&quot;&gt;Notes on git’s error messages&lt;/a&gt;.
There are also &lt;a href=&quot;https://jvns.ca/blog/2024/03/28/git-poll-results/&quot;&gt;Some Git poll results&lt;/a&gt;
(which are, as admitted by the author, highly unscientific, and might not be representative).
The first entry in this series of blog posts can be found in &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News Edition #103&lt;/a&gt;,
and it continues since, edition after edition so far.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://martinheinz.dev/blog/109&quot;&gt;Modern Git Commands and Features You Should Be Using&lt;/a&gt;
by Martin Heinz on his blog.  The list includes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git sparse-checkout&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt;, and (not new) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/learn-git-basics/&quot;&gt;Learn Git Fundamentals – A Handbook on Day-to-Day Development Tasks&lt;/a&gt;
by Samyak Jain on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/kadea-academy/navigating-the-stormy-waters-of-git-merge-conflicts-a-complete-guide-38n9&quot;&gt;Navigating the Stormy Waters of Git Merge Conflicts: A Guide for basic git conflicts&lt;/a&gt;
by Jomagene for KADEA ACADEMY on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://glasskube.dev/guides/git/&quot;&gt;The guide to Git I never had.&lt;/a&gt;
under Philip Miglinci’s byline, as Glasskube’s guide to Git
(also &lt;a href=&quot;https://dev.to/glasskube/the-guide-to-git-i-never-had-1450&quot;&gt;on DEV.to&lt;/a&gt;,
by Jake Page for Glasskube).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/mauroaccorinti/how-to-get-somebody-fired-using-git-31if&quot;&gt;How to get somebody fired using Git&lt;/a&gt;
(or: how to NOT use Git), by Mauro Accorinti on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nanmu.me/en/posts/2022/what-happens-on-gitlab-when-you-do-git-push/&quot;&gt;What Happens on GitLab When You do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt;?&lt;/a&gt;
by Li Zhennan, on the personal blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/966869/&quot;&gt;Radicle: peer-to-peer collaboration with Git&lt;/a&gt;, an
article by Lars Wirzenius on LWN.net.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt; was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;, then in &lt;a href=&quot;https://git.github.io/rev_news/2020/12/26/edition-70/&quot;&gt;Edition #70&lt;/a&gt;.
There was also an &lt;a href=&quot;https://thenewstack.io/radicle-a-decentralized-alternative-to-github-for-web3/&quot;&gt;article about Radicle from The New Stack&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://notabug.org/peers/forgefed&quot;&gt;ForgeFed&lt;/a&gt; (formerly GitPub),
a federation protocol for software forges, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/11/27/edition-69/&quot;&gt;Git Rev News Edition #69&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;There is also &lt;a href=&quot;https://github.com/fiatjaf/gitstr&quot;&gt;gitstr (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git str&lt;/code&gt;)&lt;/a&gt;, a tool to send and receive Git patches
over &lt;a href=&quot;https://nostr.com/&quot;&gt;Nostr&lt;/a&gt;, using &lt;a href=&quot;https://github.com/nostr-protocol/nips/pull/997&quot;&gt;NIP-34&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2024/03/31/edition-109/&quot;&gt;Git Rev News Edition #109&lt;/a&gt;),
and &lt;a href=&quot;https://scuttlebot.io/apis/community/git-ssb.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-ssb&lt;/code&gt;&lt;/a&gt;
(see the &lt;a href=&quot;https://github.com/hackergrrl/git-ssb-intro&quot;&gt;git-ssb-intro&lt;/a&gt; guide), a
decentralized Git repo hosting and issue tracking on &lt;a href=&quot;https://www.scuttlebutt.nz/&quot;&gt;Secure-ScuttleButt (SSB)&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/04/19/edition-26/&quot;&gt;Git Rev News Edition #26&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;#40&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lucasoshiro.github.io/posts-en/2023-02-13-git-debug/&quot;&gt;Git as debugging tool&lt;/a&gt;
by Lucas Seiki Oshiro on his GitHub Pages-powered personal blog (2023).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=S9Do2p4PwtE&quot;&gt;re:bass&lt;/a&gt; by Dylan Beattie [4:34].
If Git was music, what would it sound like? 
An original composition inspired by the Git version control system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitlab.com/kevincox/git-bisect-find&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect-find&lt;/code&gt;&lt;/a&gt; is
a simple command to find where to start your bisection.  Written in Rust.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://kevincox.ca/2024/04/19/git-bisect-find/&quot;&gt;Announcing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect-find&lt;/code&gt;&lt;/a&gt;
by Kevin Cox on his blog.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/streamich/git-cz&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-cz&lt;/code&gt;&lt;/a&gt; is a command-line tool
to help you make semantic Git commits.  Written in JavaScript for Node.js.
Can be installed standalone, or with &lt;a href=&quot;https://commitizen-tools.github.io/commitizen/&quot;&gt;Commitizen&lt;/a&gt;
(which was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;).
Has non-interactive mode; is configurable (for example turning off emoji).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ymattw/ydiff&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ydiff&lt;/code&gt;&lt;/a&gt; is a term based tool
to view &lt;em&gt;colored, incremental diff&lt;/em&gt; in a version controlled workspace
(supports Git, Mercurial, Perforce and Subversion so far)
or from stdin, with &lt;em&gt;side by side&lt;/em&gt; (similar to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff -y&lt;/code&gt;) and &lt;em&gt;auto pager&lt;/em&gt; support.
Written in Python.  (Its &lt;a href=&quot;https://github.com/amigrave/cdiff&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cdiff&lt;/code&gt;&lt;/a&gt; fork appears to be unmaintained.)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/StreakyCobra/gws&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gws&lt;/code&gt;&lt;/a&gt; is a text user interface colorful helper
to manage workspaces composed of Git repositories.  Written in Bash.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://giftless.datopian.com/&quot;&gt;Giftless&lt;/a&gt; (&lt;a href=&quot;https://github.com/datopian/giftless&quot;&gt;GitHub repo&lt;/a&gt;)
is a Python implementation of a &lt;a href=&quot;https://git-lfs.com/&quot;&gt;Git LFS&lt;/a&gt; Server.
It is designed with flexibility in mind, to allow pluggable storage backends,
transfer methods and authentication methods.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/chronoxor/gil&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gil&lt;/code&gt;&lt;/a&gt; (git links tool) is a tool to manage
complex recursive repository dependencies with cross references and cycles.
This tool provides a solution to the &lt;em&gt;git recursive submodules dependency&lt;/em&gt; problem.
Written in Python.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ingydotnet/git-subrepo&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git subrepo&lt;/code&gt;&lt;/a&gt; “clones” an external Git repo
into a subdirectory of your repo.  It is an alternative to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodule&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git subtree&lt;/code&gt;.
The subrepo history is &lt;em&gt;squashed&lt;/em&gt; into a single commit that contains the reference information.
Recommended as replacement for the (no longer maintained) &lt;a href=&quot;https://deliciousinsights.github.io/git-stree/&quot;&gt;Git STree&lt;/a&gt;
project.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hraban/tomono&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tomono&lt;/code&gt;&lt;/a&gt;: Multi- to Monorepo Migration,
is a script that merges multiple independent tiny repositories into a single “&lt;a href=&quot;https://monorepo.tools/&quot;&gt;monorepo&lt;/a&gt;”.
Every original repo is moved into its own subdirectory, branches with the same name are all merged.
    &lt;ul&gt;
      &lt;li&gt;Can be considered the reverse of &lt;a href=&quot;https://github.com/splitsh/lite&quot;&gt;splitsh/lite&lt;/a&gt; tool, whose goal is
to make splitting a monolithic repository to read-only standalone repositories easy and fast
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/06/15/edition-16/&quot;&gt;Git Rev News: Edition #16&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/npalix/gitdm&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gitdm&lt;/code&gt;&lt;/a&gt; (the “git data miner”)
is the tool that Greg KH and Jonathan Corbet have used
to create statistics on where kernel patches come from.
Written in Python.  Original at git://git.lwn.net/gitdm.git&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lolcommits/lolcommits&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lolcommits&lt;/code&gt;&lt;/a&gt;: Git-based selfies for software developers.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lolcommits&lt;/code&gt; takes a snapshot with your webcam every time you execute &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt;,
and archives a lolcat style image with it (image with embedded caption).
Written in Ruby, requires a webcam and ImageMagick installed.
See also &lt;a href=&quot;https://github.com/lolcommits/lolcommits/wiki/Lolcommits-from-around-the-world%21&quot;&gt;Lolcommits from around the world!&lt;/a&gt;
page on the project Wiki.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://steveklabnik.github.io/jujutsu-tutorial/introduction/introduction.html&quot;&gt;Steve’s Jujutsu Tutorial&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/martinvonz/jj&quot;&gt;Jujutsu (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;)&lt;/a&gt; is a version control system
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;;
additionally, links to the &lt;a href=&quot;https://lwn.net/Articles/958468/&quot;&gt;LWN.net article&lt;/a&gt;
and the &lt;a href=&quot;https://www.youtube.com/watch?v=bx_LGilOuE4&quot;&gt;Jujutsu: A Git-Compatible VCS&lt;/a&gt;
talk about this version control system at Git Merge 2022 can be found in
&lt;a href=&quot;https://git.github.io/rev_news/2024/01/31/edition-107/&quot;&gt;Git Rev News Edition #107&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dictcp/awesome-git&quot;&gt;Awesome Git&lt;/a&gt;
is a curated list of amazingly awesome Git tools, resources and shiny things.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/compscilauren/awesome-git-hooks&quot;&gt;Awesome Git Hooks&lt;/a&gt;
is a curated list of easy-to-use Git hooks for automating tasks during Git workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq8r0ww0sj.fsf@gitster.g/&quot;&gt;2.45.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq4jbqzo3j.fsf@gitster.g/&quot;&gt;2.45.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqcyqljmuu.fsf@gitster.g/&quot;&gt;2.45.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.45.0.windows.1&quot;&gt;2.45.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.45.0-rc1.windows.1&quot;&gt;2.45.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.45.0-rc0.windows.1&quot;&gt;2.45.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.2&quot;&gt;3.12.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.8&quot;&gt;3.11.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.10&quot;&gt;3.10.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.13&quot;&gt;3.9.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/04/24/patch-release-gitlab-16-11-1-released/&quot;&gt;16.11.1, 16.10.4, 16.9.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/04/18/gitlab-16-11-released/&quot;&gt;16.11&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/04/15/gitlab-16-10-3-released/&quot;&gt;16.10.3, 16.9.5, 16.8.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/04/10/patch-release-gitlab-16-10-2-released/&quot;&gt;16.10.2, 16.9.4, 16.8.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.8.html#385&quot;&gt;3.8.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#393&quot;&gt;3.9.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#394&quot;&gt;3.9.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.14&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;tig &lt;a href=&quot;https://github.com/jonas/tig/releases/tag/tig-2.5.9&quot;&gt;2.5.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.11.2&quot;&gt;0.11.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Junio Hamano, Štěpán Němec, Kristoffer Haugsbakk,
Dragan Simic and Adam Johnson.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 109 (March 31st, 2024)</title>
      <link>https://git.github.io/rev_news/2024/03/31/edition-109/</link>
      <pubDate>Sun, 31 Mar 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/03/31/edition-109/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-109-march-31st-2024&quot;&gt;Git Rev News: Edition 109 (March 31st, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 109th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of February and March 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.1669.git.1708442603395.gitgitgadget@gmail.com/&quot;&gt;[PATCH] rebase: make warning less passive aggressive&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Harmen Stoppels sent a patch to the mailing list that changed an
error message from “No rebase in progress?” to “No rebase in
progress”. The rationale is that this error appears when one runs
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --continue&lt;/code&gt; while there is no rebase going on, so there
is no reason for the question mark.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Harmen suggesting using
the imperative mood in the commit message, and saying that the
change in itself is good but that the patch shouldn’t have touched
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;po/*.po&lt;/code&gt; files in the project that are used for localization.
Junio also said that we could later add tests for this as it
appeared there was none.&lt;/p&gt;

    &lt;p&gt;Michal Suchánek replied to Junio saying that it might have been OK
to touch the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;po/*.po&lt;/code&gt; files if the patch had updated the
translations in those files but it hadn’t.&lt;/p&gt;

    &lt;p&gt;Junio replied to Michal saying that knowing the target language was
needed before removing question marks in those files as it might not
be enough to change a question into a statement. Even if the
author of the patch knew enough, reviewers of the patch might
not, but the biggest problem was bypassing the languages teams.&lt;/p&gt;

    &lt;p&gt;Michal replied to Junio asking what was the problem “with not
involving several language teams to remove a question mark”.&lt;/p&gt;

    &lt;p&gt;Jean-Noël Avila, who is a translator, replied that it didn’t bother
him much to edit a sentence to remove a question mark and possibly
adjust it, compared to “translating again and again similar
sentences”.&lt;/p&gt;

    &lt;p&gt;This led to some confusion as Junio thought that Jean-Noël said that
the “everything in one patch” approach would help translators by not
having them translate “again and again”. But Jean-Noël clarified
that he didn’t consider changing a question to an assertion is
translating “again and again”. He agreed that it was perfectly fine
for translators to have to do those kinds of changes. With “again
and again” he was referring to strings like “could not stat ‘%s’”
and then “could not stat file ‘%s’”.&lt;/p&gt;

    &lt;p&gt;In the meantime Patrick Steinhardt replied to Harmen’s initial
message. He suggested converting the error message to start with a
lowercase letter as our guidelines for error messages recommend.&lt;/p&gt;

    &lt;p&gt;Harmen then sent
&lt;a href=&quot;https://lore.kernel.org/git/pull.1669.v2.git.1708537097448.gitgitgadget@gmail.com/&quot;&gt;a version 2 of his patch&lt;/a&gt;
which didn’t change any &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;po/*.po&lt;/code&gt; file and had the error message
start with a lowercase letter. Patrick reviewed that patch and found
it good.&lt;/p&gt;

    &lt;p&gt;Kristoffer Haugsbakk chimed into the discussion saying he had
interpreted the original error message as saying “I’m not quite sure
but it looks like you are not in the middle of a rebase?”&lt;/p&gt;

    &lt;p&gt;Junio replied to Kristoffer saying that there are indeed examples of
“less assertive” messages in the same rebase command, like “It looks
like ‘git am’ is in progress. Cannot rebase.” But we should be more
assertive as it could help us get valuable bug reports saying for
example “The command said I was not rebasing, but I was! Here is
what I did…” Such bug reports could help us improve how we
determine the state we are in.&lt;/p&gt;

    &lt;p&gt;The version 2 of Harmen’s patch was later merged to the ‘master’
branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-linus-arver&quot;&gt;Developer Spotlight: Linus Arver&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m one of those so-called “self-taught” developers. My educational
background is in English and tax law (I know, boring right?). Over a
decade ago I thought I would be a corporate attorney, but in law
school I discovered programming and fell completely in love with the
craft, and never looked back! In hindsight it was the second-best
decision I’ve made in life (the first being getting married to my
lovely wife four years ago).&lt;/p&gt;

    &lt;p&gt;I said that I fell into programming during law school. But actually my
original journey started in 7th grade when I tried to pick up C++. I
remember learning control flow, structs and pointers in the first few
chapters of the book I was using, but when it came to the chapter on
OOP and classes, I could not understand why OOP was necessary.
The book I was using just explained why OOP was great, and not
why it would ever be bad.&lt;/p&gt;

    &lt;p&gt;Of course, years later I realized that OOP is one of several
paradigms, so perhaps my instinct to question OOP as a panacea was
onto something.  In high school and university I remember tinkering
with HTML and websites before smartphones became popular. What a
simpler time it was, back then!&lt;/p&gt;

    &lt;p&gt;Fast forward to law school, where I had the idea of writing class
notes using plaintext. Soon after I had the idea of converting these
plaintext notes to prettified outlines, so I needed a way to convert
them to HTML. For better or worse, all this happened before I
discovered Emacs and Org mode (or even Markdown).&lt;/p&gt;

    &lt;p&gt;Anyway, I first wrote a plaintext-to-HTML converter in Ruby. Then I
rewrote it in C just for fun. Then again in Haskell (using a minimal
subset of Org mode syntax). As you can see, I sort of got carried away,
haha.&lt;/p&gt;

    &lt;p&gt;I would go on to write dozens of pet projects (rudimentary chess
engine, game modding tools, etc) where I got to write tons of code.
I’ve had the “ugh, did I really write this?” moment too many times to
count. I like to believe that I did the tech industry a favor by not
entering it until I was well versed in fundamental programming and
architectural concepts. 😉&lt;/p&gt;

    &lt;p&gt;Since those law school days I’ve taken an interest in learning more
languages/ecosystems (e.g., Elixir and Rust). Recently, I’ve taken a
renewed interest in Literate Programming. I’m toying with the idea of
using it in a somewhat large scale in a future project. It takes a ton
of work to do LP right, but in many ways it’s the best possible way to
document code (case in point, the absolutely stellar documentation
standards of the TeX community, such as the glorious TikZ user
manual).&lt;/p&gt;

    &lt;p&gt;And I believe that readability is the most important attribute when it
comes to code — even before correctness! Because at least if the
intent of the author is clear, we can have a (fairly) easy way to fix
things to make it correct. The other way around (correct, but
unreadable code) suffers from stagnation because people become afraid
of touching it, because it’s hard to understand. It becomes harder to
extend and grow, which is required of any software worth maintaining
(we call it &lt;em&gt;soft&lt;/em&gt;ware for a reason).&lt;/p&gt;

    &lt;p&gt;Going back to the question (sorry for rambling a bit there), in my
$DAYJOB I work on microservices, APIs, and backend systems.
Professionally I’ve always been a backend/infra engineer. In my spare
time I contribute to this wonderful community!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I would say my contributions to the documentation come out on top.
At the end of the day, Git is meant for human consumption.
So getting a bit more polish here and there for user-facing docs is
well worth the trouble, and I am most proud of my work in this area so
far.&lt;/p&gt;

    &lt;p&gt;If I had more time, I would overhaul the documentation to make things
easier to understand. Truly, Git has a very simple conceptual model
(thanks to the brilliance of its original author). You just have to
understand that commits come from one or more other commits (sort of
like family trees). That’s it! But sadly we have a reputation of
having absolutely terrible user-facing docs, so much so that it pushed
people away to Mercurial and other more friendly VCSs. We need to fix
that.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Last year I started trying to add unit tests to the (perhaps obscure)
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git interpret-trailers&lt;/code&gt; command, but this effort has morphed into
“let’s also overhaul the entire subsystem around how trailers are
handled, with the aim of creating a reusable C library around it”
[ &lt;a href=&quot;https://lore.kernel.org/git/pull.1563.git.1691211879.gitgitgadget@gmail.com/&quot;&gt;ref 1&lt;/a&gt; ]
[ &lt;a href=&quot;https://lore.kernel.org/git/pull.1632.git.1704869487.gitgitgadget@gmail.com/&quot;&gt;ref 2&lt;/a&gt; ].&lt;/p&gt;

    &lt;p&gt;I’m afraid I’ve bitten off more than I can chew, but I do have a
backlog of about 60 patches that I need to get sent up for review. Not
all at once, of course haha. Hopefully I can get these sent up and
merged over the coming months. The review process can be lengthy you
see, but for good reason — we take time to try to make sure things
are right the first time.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;At the risk of being unoriginal, it would be libification (see
&lt;a href=&quot;https://git.github.io/rev_news/2023/08/31/edition-102/#developer-spotlight-calvin-wan&quot;&gt;Calvin Wan’s interview&lt;/a&gt;
from edition 102). But to be more precise, it would be the complete
banning of “shelling out” which we do in many places (where Git
spawns another Git process to do something). Instead we could
(and should) be using libraries internally inside Git’s own codebase.
I believe that once we can get Git to start treating itself
as a library, that external library consumption will soon follow.&lt;/p&gt;

    &lt;p&gt;There are many others interested in this area as Git has a massive
footprint in our industry. I hope that the many large companies that
benefit from Git can grow their roster of Git contributors.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;. I believe &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt; replaced the
need to have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;. I believe in the “there should be only
one way to do the right thing” camp when it comes to the CLI, so I don’t
like how we have multiple commands with a lot of overlap.&lt;/p&gt;

    &lt;p&gt;I say this even though personally I’ve been using Git for over 15
years and have always used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt; (even after the introduction
of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git {switch,restore}&lt;/code&gt;). Simplicity matters!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of
Git itself?&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://jonas.github.io/tig/&quot;&gt;Tig&lt;/a&gt;. I use it all the time, every
day. It’s so good that I basically never use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;, unless I’m
searching through it interactively with the pager.&lt;/p&gt;

    &lt;p&gt;Every time I see someone proudly showing off their latest “git-log”
incantation (with all its bells and whistles), I think to myself “I
guess they’ve never heard of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt;”.&lt;/p&gt;

    &lt;p&gt;Being an Emacs user, I tried to get into &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt;
but could not get used to the keybindings that conflicted with my
Vim-styled bindings. (Yes, I use &lt;a href=&quot;https://github.com/emacs-evil/evil&quot;&gt;Evil&lt;/a&gt;
mode via &lt;a href=&quot;https://github.com/doomemacs/doomemacs&quot;&gt;Doom&lt;/a&gt; Emacs if you’re
into that sort of thing.) OTOH I get so much done with the basic
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-*&lt;/code&gt; commands and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt; that I’m rather happy with my workflow.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t. contributing to
the Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;Nine years ago, I contributed my first patch series. I was so proud of
this work that I wrote &lt;a href=&quot;https://funloop.org/post/2014-09-09-my-first-contribution-to-git.html&quot;&gt;a blog post&lt;/a&gt;
about it.&lt;/p&gt;

    &lt;p&gt;The TL;DR of that post is that anyone can contribute to Git, and
really we are a welcoming community. Junio goes out of his way to
accommodate new contributors (I admire his patience), so please, feel
free to join us!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;So my first contribution 9 years ago was via (the traditional)
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt; command. These days there is this very neat service
called &lt;a href=&quot;https://gitgitgadget.github.io/&quot;&gt;GitGitGadget&lt;/a&gt; that allows
you to create pull requests on GitHub and does all the housekeeping
work of keeping mailing list discussions in sync (you’ll get comments
on your PR which come from mailing list responses). Plus you can get
previews of your patch series (exactly how they’ll look like on the
list) before you submit it, which is always nice.&lt;/p&gt;

    &lt;p&gt;For local Git development, honestly I don’t do anything special or
unusual. One window for Emacs, one window for (re)compiling Git and
running tests, and maybe one more for Tig. From Emacs I use &lt;a href=&quot;https://wiki.archlinux.org/title/Notmuch&quot;&gt;notmuch&lt;/a&gt;
to browse the mailing list emails (which I sync to Gmail with
&lt;a href=&quot;https://github.com/gauteh/lieer&quot;&gt;lieer&lt;/a&gt;).&lt;/p&gt;

    &lt;p&gt;I use Org mode in Emacs heavily for organizing code snippets and ideas.&lt;/p&gt;

    &lt;p&gt;Last but not least, I use &lt;a href=&quot;https://github.com/tmux/tmux/wiki&quot;&gt;tmux&lt;/a&gt; to organize terminal windows and
navigate quickly across them, even if I’m not using SSH.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;The hard part is figuring out which area you want to work on. Git has
a large codebase, so I recommend starting out with documentation
changes to familiarize yourself with the current state of things.
There’s always a typo or grammofix hiding in there!&lt;/p&gt;

    &lt;p&gt;Many of our manpages read like dictionaries, when they should read
more like user guides. Some manpages have helpful “EXAMPLES” sections
to show you how to actually use various options and commands, so if
you can think of additional examples, that would be most welcome.
Getting familiar with how things work with user-facing docs should
help you understand the intent behind the large C codebase we have.&lt;/p&gt;

    &lt;p&gt;Try to make your contributions as small as possible, but make an
effort to write good commit messages. Copy the style of veterans like
Junio, Peff (Jeff King), Christian Couder, and others I am forgetting
(sorry!) who’ve been doing this for a long time.&lt;/p&gt;

    &lt;p&gt;Once your change is submitted, nag people weekly to get things moving
(yes, we need prodding occasionally). But also don’t get offended if
there are a lot of review comments for seemingly small things —
we’re just trying to maintain a certain level of quality. Git is used
by almost everyone in the software industry, so it’s important for us
to keep a high bar for quality, that’s all.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;Junio has been our maintainer for nearly two decades. It’s a tough job and
somehow he’s kept going at it all this time. Still, let’s do our best
to help make his job easier, because honestly we are truly lucky to
have someone of his caliber lead our project.&lt;/p&gt;

    &lt;p&gt;More concretely, this means helping out with code reviews. If you’re
not sure which ones to review, see the “What’s Cooking” emails that
Junio sends out regularly to look for patches that need help from
reviewers. They are commented as “Needs review” or “Comments?”, so
they’re easy enough to spot.&lt;/p&gt;

    &lt;p&gt;Cheers!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;!--
__Various__

--&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Julia Evans continues her series of blog posts about Git with
&lt;a href=&quot;https://jvns.ca/blog/2024/03/08/how-head-works-in-git/&quot;&gt;How HEAD works in git&lt;/a&gt; and
&lt;a href=&quot;https://jvns.ca/blog/2024/03/22/the-current-branch-in-git/&quot;&gt;The “current branch” in git&lt;/a&gt;.
The first entry in this series of blog posts can be found
in &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News Edition #103&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2024-03-04-keeping-repository-maintainer-information-accurate/&quot;&gt;Keeping repository maintainer information accurate&lt;/a&gt;:
ensuring that the &lt;a href=&quot;https://docs.github.com/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners&quot;&gt;CODEOWNERS file&lt;/a&gt;
is up to date with the help of tools like &lt;a href=&quot;https://github.com/github/cleanowners&quot;&gt;cleanowners&lt;/a&gt;.
By Zack Koppert on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://deprogrammaticaipsum.com/twenty-years-is-nothing/&quot;&gt;De Programmatica Ipsum, Issue #66: Version Control - Twenty Years Is Nothing&lt;/a&gt;
by Adrian Kosmaczewski.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/git-worktrees/&quot;&gt;Git Worktrees and GitButler&lt;/a&gt;:
How do Git worktrees help you work on more than one branch at the same time,
and how does that differ from virtual branches in GitButler?
Written by Scott Chacon on GitButler Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/git-autosquash/&quot;&gt;Fixing up [a series of] Git [commits] with Autosquash&lt;/a&gt;
by Scott Chacon on GitButler Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://optimizedbyotto.com/post/advanced-git-commands/&quot;&gt;Advanced git commands every senior software developer needs to know&lt;/a&gt;
by Otto Kekäläinen on Optimized by Otto blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://laravel-news.com/five-ways-to-be-more-productive-with-git&quot;&gt;Five Ways to Be More Productive with Git&lt;/a&gt;
by Paul Redmond on Laravel News blog.  The blog post lists
a few useful Git aliases, setting up a commit template, using password manager for SSH keys
(that can be used for signing commits), making use of the GitHub CLI tool (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh&lt;/code&gt;),
and configuring &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mergetool&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;difftool&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://choly.ca/post/git-programmatic-staging/&quot;&gt;Git: programmatic staging&lt;/a&gt;
(with the help of the &lt;a href=&quot;https://linux.die.net/man/1/expect&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;expect&lt;/code&gt;&lt;/a&gt; tool,
or with &lt;a href=&quot;https://linux.die.net/man/1/grepdiff&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grepdiff&lt;/code&gt;&lt;/a&gt;)
by Ilia Choly on Choly’s Blog.  The author uses described technique
as a cleanup step after rewriting/refactoring code using automatic tools,
such as &lt;a href=&quot;https://semgrep.dev/&quot;&gt;Semgrep&lt;/a&gt;, &lt;a href=&quot;https://ast-grep.github.io/&quot;&gt;ast-grep&lt;/a&gt;,
LLMs (Large Language Models) such as ChatGPT, and one-off scripts.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://semgrep.dev/&quot;&gt;Semgrep&lt;/a&gt; was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/05/27/edition-75/&quot;&gt;Git Rev News Edition #75&lt;/a&gt;;
you can test it with &lt;a href=&quot;https://semgrep.dev/playground/new&quot;&gt;Semgrep Playground&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://choly.ca/post/semgrep-autofix-llm/&quot;&gt;Another article&lt;/a&gt;
by the same author mentions other similar tools, namely
&lt;a href=&quot;https://codeql.github.com/&quot;&gt;CodeQL&lt;/a&gt; (mentioned in passing
in &lt;a href=&quot;https://git.github.io/rev_news/2021/09/30/edition-79/&quot;&gt;Git Rev News Edition #79&lt;/a&gt;),
and &lt;a href=&quot;https://comby.dev/&quot;&gt;Comby&lt;/a&gt;.  It also talks about the newly created
&lt;a href=&quot;https://github.com/icholy/semgrepx&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;semgrepx&lt;/code&gt;&lt;/a&gt; tool for rewriting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;semgrep&lt;/code&gt; matches
using externals tools (such as Datasette’s &lt;a href=&quot;https://llm.datasette.io/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;llm&lt;/code&gt;&lt;/a&gt; CLI tool
and Python library).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dzone.com/articles/unleashing-the-power-of-git-bisect&quot;&gt;Unleashing the Power of Git Bisect&lt;/a&gt;
by Shai Almog on DZone (DevOps Zone).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://joelcolaco.hashnode.dev/moving-code-from-one-repository-to-another-using-git-patch&quot;&gt;Moving Code from One Repository to Another Using Git Patch&lt;/a&gt;
by Joel Colaco on his blog - though a better solution would be to use
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; (or alternates and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://westling.dev/b/extremely-linear-git&quot;&gt;Extremely Linear Git History&lt;/a&gt;,
with first commit in a repo having a hash that starts with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0000000&lt;/code&gt;,
the second commit is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0000001&lt;/code&gt;, and so on; written by Gustav Westling
on his blog (2022).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/Chubek/1fa1c037d280dfc7952676cb4ee89e11&quot;&gt;Witty.rb - A very simple Ruby Script demonstrating how to parse a Git index file (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/index&lt;/code&gt;)&lt;/a&gt;.
Published as Gist by Chubak Bidpaa.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://escodebar.github.io/trainings/git/meetup/#/&quot;&gt;Dr. Git-Love or: How I Learned to Stop Worrying and Love the Rebase&lt;/a&gt;
are HTML slides for Git training course by Pablo Vergés (escodebar).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/all/20240227-flawless-capybara-of-drama-e09653@lemur/t/#u&quot;&gt;Toy/demo: using ChatGPT to summarize lengthy LKML threads (b4 integration)&lt;/a&gt;
thread on Linux kernel mailing list, started by Konstantin Ryabitsev.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Md44rcw13k4&quot;&gt;So You Think You Know Git Part 2 - DevWorld 2024&lt;/a&gt;
by Scott Chacon on GitButler YouTube channel, continues the
&lt;a href=&quot;https://www.youtube.com/watch?v=aolI_Rz0ZqY&quot;&gt;FOSDEM version&lt;/a&gt; of the talk,
which was mentioned in the &lt;a href=&quot;https://git.github.io/rev_news/2024/02/29/edition-108/&quot;&gt;previous Git Rev News&lt;/a&gt;.
&lt;a href=&quot;https://blog.gitbutler.com/devworld-git-slides/&quot;&gt;DevWorld Git Slides&lt;/a&gt;
are available on GitButler Blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zegl/extremely-linear&quot;&gt;extremely-linear&lt;/a&gt;, also known as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-linearize&lt;/code&gt;,
is a tool to create commits with SHA-1 identifier beginning with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0000000&lt;/code&gt; for the first commit,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0000001&lt;/code&gt; for the second, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0000002&lt;/code&gt; for the third, and so on.  This tool uses 
&lt;a href=&quot;https://github.com/not-an-aardvark/lucky-commit&quot;&gt;lucky_commit&lt;/a&gt;,
which inserts invisible whitespace characters at the end of the commit message
until it gets a SHA-1 (or SHA-256) hash with the desired prefix.
    &lt;ul&gt;
      &lt;li&gt;Compare and contrast with &lt;a href=&quot;https://git.anna.lgbt/anna/git-vain&quot;&gt;git-vain&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News Edition #103&lt;/a&gt;)
and &lt;a href=&quot;https://github.com/mattbaker/git-vanity-sha&quot;&gt;git-vanity-sha&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/05/16/edition-39/&quot;&gt;Git Rev News Edition #39&lt;/a&gt;),
tools to generate vanity hashes (for example to make the SHA-1 hash of HEAD begin with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c0ffee&lt;/code&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/praetorian-inc/noseyparker/&quot;&gt;Nosey Parker&lt;/a&gt; is a command-line program
that finds secrets and sensitive information in textual data and Git history.
Written in Rust, under Apache 2.0 license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/altsem/gitu&quot;&gt;gitu&lt;/a&gt; - a TUI Git client inspired by Magit.
Written in Rust, under MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rbong/vim-flog&quot;&gt;Vim-Flog&lt;/a&gt; is a powerful Git branch viewer for Vim.
Requires Neovim or Vim with Lua support.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/davvid/gcd&quot;&gt;gcd&lt;/a&gt; - Git worktree navigator,
lets you quickly navigate to Git worktrees on your filesystem,
and to directories within your current worktree.
Written as a set of shell functions to be sourced into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.zshrc&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.bashrc&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pkg.go.dev/rsc.io/grepdiff&quot;&gt;grepdiff&lt;/a&gt; is a command-line tool that reads unified diffs
from the files passed as arguments (or standard input), and prints a reduced diff
containing only the hunks matching a regular expression.  Written in Go.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fiatjaf/gitstr&quot;&gt;Gitstr&lt;/a&gt; is a tool to send and receive Git patches
over &lt;a href=&quot;https://nostr.com/&quot; title=&quot;A decentralized social network with a chance of working&quot;&gt;Nostr&lt;/a&gt;, using &lt;a href=&quot;https://github.com/nostr-protocol/nips/pull/997&quot;&gt;NIP-34&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;Compare and contrast with &lt;a href=&quot;https://scuttlebot.io/apis/community/git-ssb.html&quot;&gt;git-ssb&lt;/a&gt;
(see &lt;a href=&quot;https://github.com/hackergrrl/git-ssb-intro&quot;&gt;git-ssb-intro&lt;/a&gt; guide):
decentralized Git repo hosting and issue tracking on Secure-ScuttleButt (SSB),
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/04/19/edition-26/&quot;&gt;Git Rev News Edition #26&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;#40&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.8.0&quot;&gt;1.8.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.7.html#378&quot;&gt;3.7.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#392&quot;&gt;3.9.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.1&quot;&gt;3.12.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.7&quot;&gt;3.11.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.9&quot;&gt;3.10.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.12&quot;&gt;3.9.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.17&quot;&gt;3.8.17&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.0&quot;&gt;3.12.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.6&quot;&gt;3.11.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.8&quot;&gt;3.10.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.11&quot;&gt;3.9.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.16&quot;&gt;3.8.16&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/03/27/security-release-gitlab-16-10-1-released/&quot;&gt;16.10.1, 16.9.3, 16.8.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/03/21/gitlab-16-10-released/&quot;&gt;16.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/03/06/security-release-gitlab-16-9-2-released/&quot;&gt;16.9.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.13.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.12&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.11&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;6.0&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/tower-windows-6/&quot;&gt;Release blog post&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;10.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-azure &lt;a href=&quot;https://github.com/hickford/git-credential-azure/releases/tag/v0.3.0&quot;&gt;0.3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Linus Arver, Eric Sunshine,
Ghanshyam Thakkar, Kristoffer Haugsbakk,
Štěpán Němec, Junio Hamano and Bruno Brito.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 108 (February 29th, 2024)</title>
      <link>https://git.github.io/rev_news/2024/02/29/edition-108/</link>
      <pubDate>Thu, 29 Feb 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/02/29/edition-108/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-108-february-29th-2024&quot;&gt;Git Rev News: Edition 108 (February 29th, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 108th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of January and February 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/xmqq34uvtpob.fsf@gitster.g/&quot;&gt;[Bug?] “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff --no-rename A B&lt;/code&gt;”&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, sent an email to the mailing list
saying that when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; was used with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-rename&lt;/code&gt; instead of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-renames&lt;/code&gt;, rename detection was still performed. He
wondered if that was a bug, because either &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-rename&lt;/code&gt; should be
interpreted as being a shortened form of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-renames&lt;/code&gt;, which is
&lt;a href=&quot;https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---no-renames&quot;&gt;a valid option&lt;/a&gt;
and should disable rename detection, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-rename&lt;/code&gt; should be
rejected with an error message and termination of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Dragan Simic replied to Junio that indeed, in case the option is not
recognized, an error message should be emitted.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, also replied to Junio saying he tried
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-foo&lt;/code&gt;, which properly errored out. He then wondered if it could
be a bug in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parse-options&lt;/code&gt; code that could be confused because
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; has both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--[no-]rename-empty&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-renames&lt;/code&gt;. As
there is an abbreviation ambiguity between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-rename-empty&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-renames&lt;/code&gt; when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-rename&lt;/code&gt; is used, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parse-options&lt;/code&gt; code
should not allow such an abbreviation and should error out.&lt;/p&gt;

    &lt;p&gt;He suggested, as an alternative to fixing the bug, that a new
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--renames&lt;/code&gt; option could be introduced. It would be synonymous to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--find-renames&lt;/code&gt;, which is currently the only opposite to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-renames&lt;/code&gt;. He proposed a patch to do that and showed that after
his patch, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-rename&lt;/code&gt; would properly error out.&lt;/p&gt;

    &lt;p&gt;René Scharfe replied to Peff that the issue came from a patch
written in 2019 that disabled abbreviated options when there could
be an ambiguity. The code handling abbreviations would trigger not
only if the condition guarding it was satisfied, but also if it was
reached through a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;goto&lt;/code&gt; statement. The patch disabling abbreviated
options only took care of the condition guarding that code, but not of
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;goto&lt;/code&gt; statement. Along with these explanations, René provided a
patch fixing the bug.&lt;/p&gt;

    &lt;p&gt;Junio thanked René for spotting the “nasty” bug and said he agreed
that the code was confusing.&lt;/p&gt;

    &lt;p&gt;René replied to Junio with a follow-up patch removing the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;goto&lt;/code&gt; statement.&lt;/p&gt;

    &lt;p&gt;Peff also replied to René’s first patch wondering if it fixed all
the possible issues, but then in a reply to himself agreed that
René’s patch was indeed fixing all the issues discussed.&lt;/p&gt;

    &lt;p&gt;Junio later merged both of René’s patches, and they were part of the
recently released Git versions 2.43.2, 2.43.3 and 2.44.0.&lt;/p&gt;

    &lt;p&gt;&lt;em&gt;Bonus reading&lt;/em&gt;: &lt;a href=&quot;https://www.cs.utexas.edu/users/EWD/transcriptions/EWD02xx/EWD215.html&quot;&gt;“A Case against the GO TO Statement”&lt;/a&gt;
by Edsger W. Dijkstra&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The Git project has been accepted as a &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2024/organizations/git&quot;&gt;Mentor Organization&lt;/a&gt; for Google Summer of Code (GSoC) 2024. We can still add project ideas to our &lt;a href=&quot;https://git.github.io/SoC-2024-Ideas/&quot;&gt;idea page&lt;/a&gt;, and volunteers to (co-)mentor are still welcome. Feel free to join the discussion in &lt;a href=&quot;https://public-inbox.org/git/1de82b27-116a-450e-98c0-52eb65a8f608@gmail.com/&quot;&gt;the corresponding thread&lt;/a&gt;. Also, feel free to spread the word about Git’s participation.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2024-02-23-highlights-from-git-2-44/&quot;&gt;Highlights from Git 2.44&lt;/a&gt;
by Taylor Blau on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2024/02/26/gitlabs-contributions-to-git-2-44-0/&quot;&gt;GitLab’s contributions to Git 2.44.0&lt;/a&gt;
by Patrick Steinhardt on GitLab Blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/git-tips-and-tricks/&quot;&gt;Git Tips and Tricks: a 3 part series&lt;/a&gt;
by Scott Chacon on &lt;a href=&quot;https://gitbutler.com/&quot;&gt;GitButler&lt;/a&gt; blog,
accompanying the video from the talk
&lt;a href=&quot;https://www.youtube.com/watch?v=aolI_Rz0ZqY&quot;&gt;So You Think You Know Git - FOSDEM 2024&lt;/a&gt;
(available on YouTube); find the talk slides (and later the “official” video) in the &lt;a href=&quot;https://fosdem.org/2024/schedule/event/fosdem-2024-3611-so-you-think-you-know-git/&quot;&gt;FOSDEM archive&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/git-tips-1-theres-a-git-config-for-that/&quot;&gt;Git Tips 1: Oldies but Goodies&lt;/a&gt;:
conditional configs, git blame and log with line ranges (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-L&lt;/code&gt;),
git blame with following, word diff, resolution reuse (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rerere&lt;/code&gt;).&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/git-tips-2-new-stuff-in-git/&quot;&gt;Git Tips 2: Some Subtle New Things&lt;/a&gt;:
git branch stuff (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--sort&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--column&lt;/code&gt;), safe force-pushing (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--force-with-lease&lt;/code&gt;),
SSH commit signing, push signing, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git maintenance&lt;/code&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/git-tips-3-really-large-repositories/&quot;&gt;Git Tips 3: Really Large Repositories and Monorepos&lt;/a&gt;:
prefetching, commit graph, filesystem monitor, partial cloning, sparse checkouts,
the &lt;a href=&quot;https://git-scm.com/docs/scalar&quot;&gt;scalar&lt;/a&gt; tool.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://alchemists.io/articles/git_trailers&quot;&gt;Git Trailers&lt;/a&gt; by Brooke Kuhlmann. Learn how to
leverage commit metadata for powerful automations and more human-readable commit messages.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/gitmoji/&quot;&gt;More Expressive Commits with Gitmoji ☺️&lt;/a&gt;
by Bruno Brito on Tower’s blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://gitmoji.dev/&quot;&gt;Gitmoji&lt;/a&gt; was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/01/23/edition-47/&quot;&gt;Git Rev News Edition #47&lt;/a&gt;,
though then under a &lt;a href=&quot;https://gitmoji.carloscuesta.me/&quot;&gt;different URL&lt;/a&gt;
(which now redirects to the current one).&lt;/li&gt;
      &lt;li&gt;The similar &lt;a href=&quot;https://github.com/ahmadawais/Emoji-Log&quot;&gt;Emoji-Log&lt;/a&gt; commit log messages standard
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/07/31/edition-101/&quot;&gt;Git Rev News Edition #101&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.plover.com/prog/git/hook-disaster.html&quot;&gt;My Git pre-commit hook contained a footgun&lt;/a&gt;
by Mark Dominus (陶敏修) on his blog (The Universe of Discourse).&lt;/li&gt;
  &lt;li&gt;Julia Evans continues her series of blog posts about Git with
&lt;a href=&quot;https://jvns.ca/blog/2024/02/01/dealing-with-diverged-git-branches/&quot;&gt;Dealing with diverged git branches&lt;/a&gt;
and &lt;a href=&quot;https://jvns.ca/blog/2024/02/16/popular-git-config-options/&quot;&gt;Popular git config options&lt;/a&gt;.
First entry in this series can be found in &lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News Edition #103&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hankadev.com/git-battle-yolo-mode-vs-clean-history/&quot;&gt;Git Battle: YOLO Mode vs. Clean History&lt;/a&gt;
by Hana Klingová on her blog (and also &lt;a href=&quot;https://dev.to/hankadev/git-battle-yolo-mode-vs-clean-history-594d&quot;&gt;on DEV.to&lt;/a&gt;):
about usefulness of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --fixup&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase.autosquash&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/this-is-learning/restore-deletedlost-files-with-git-3lf7&quot;&gt;Restore deleted/lost files with git&lt;/a&gt;
by Leonardo Montini for This is Learning, part 6 of
&lt;a href=&quot;https://dev.to/balastrong/series/21372&quot;&gt;git better - Improve your git skills (6 Part Series)&lt;/a&gt;.
Originally published &lt;a href=&quot;https://leonardomontini.dev/git-restore-deleted-file/&quot;&gt;at leonardomontini.dev&lt;/a&gt;
(includes &lt;a href=&quot;https://youtu.be/TL_t3aOXumo&quot;&gt;video version&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dhwthompson.com/2019/my-favourite-git-commit&quot;&gt;My favourite Git commit&lt;/a&gt; (2019)
by David Thompson on his blog,
about the benefits of good commit messages (the example is a one-character change).&lt;br /&gt;
Includes links to the following recommended articles on the same topic:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.mocoso.co.uk/posts/talks/telling-stories-through-your-commits/&quot;&gt;Telling stories through your commits&lt;/a&gt; by Joel Chippindale (2016).&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tekin.co.uk/2019/02/a-talk-about-revision-histories&quot;&gt;A branch in time&lt;/a&gt; by Tekin Süleyman (2019).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://antonin.delpeuch.eu/posts/contribution-experience-report-git/&quot;&gt;Contribution experience report: Git&lt;/a&gt;
by Antonin Delpeuch on his blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aolI_Rz0ZqY&quot;&gt;So You Think You Know Git - FOSDEM 2024&lt;/a&gt;
by Scott Chacon on YouTube, 47 minutes long (mentioned above).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://alchemists.io/projects/milestoner&quot;&gt;Milestoner&lt;/a&gt; by Brooke Kuhlmann. Significant updates
have been made where you can build release notes from your commit messages based on Git notes and
trailers in multiple formats: console, AsciiDoc, Markdown, and HTML. Includes automatic calculation
of your next version and automatic tagging.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-cliff.org/&quot;&gt;git-cliff&lt;/a&gt; is a highly customizable changelog generator
using regex-powered custom parsers that can generate changelog files for any Git repository
which follows the &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;conventional commits&lt;/a&gt; specification.
Written in Rust as a command-line application.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://learngit.io&quot;&gt;LearnGit.io&lt;/a&gt; is an upcoming resource for learning Git using videos with
motion graphics. The project is by Jack Lot who posts Git videos on
&lt;a href=&quot;https://www.youtube.com/@themoderncoder&quot;&gt;The Modern Coder&lt;/a&gt; YouTube channel. Jack is looking for
intermediate/advanced Git users for feedback. If interested email  &amp;lt;&lt;a href=&quot;mailto:jack@learngit.io&quot;&gt;jack@learngit.io&lt;/a&gt;&amp;gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://michaelsogos.github.io/pg-diff/&quot;&gt;pg-diff&lt;/a&gt; is a PostgreSQL schema and data comparing tool.
Written in JavaScript by Michael Sogos.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.plover.com/prog/git-q.html&quot;&gt;Another trivial utility: git-q&lt;/a&gt; by Mark Dominus
available from &lt;a href=&quot;https://github.com/mjdominus/git-util&quot;&gt;mjdominus personal git-util repository&lt;/a&gt;
as &lt;a href=&quot;https://github.com/mjdominus/git-util/blob/master/bin/git-q&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-q&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/djanderson/aho&quot;&gt;Aho&lt;/a&gt; is a Git implementation in AWK.
It is a &lt;em&gt;toy project&lt;/em&gt; to explore some of the internals of Git and newer features of GNU AWK (aka Gawk).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqbk87w164.fsf@gitster.g/&quot;&gt;2.44.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqil2fw16c.fsf@gitster.g/&quot;&gt;2.43.3&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqbk8brrj3.fsf@gitster.g/&quot;&gt;2.44.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqo7cjvuht.fsf@gitster.g/&quot;&gt;2.43.2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqttmbvuyh.fsf@gitster.g/&quot;&gt;2.44.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqo7cph7ov.fsf@gitster.g/&quot;&gt;2.44.0-rc0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqttmhh7ow.fsf@gitster.g/&quot;&gt;2.43.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.44.0.windows.1&quot;&gt;2.44.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.44.0-rc2.windows.1&quot;&gt;2.44.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.44.0-rc1.windows.1&quot;&gt;2.44.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.44.0-rc0.windows.1&quot;&gt;2.44.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/02/21/security-release-gitlab-16-9-1-released/&quot;&gt;16.9.1, 16.8.3, 16.7.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/02/15/gitlab-16-9-released/&quot;&gt;16.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/02/07/security-release-gitlab-16-8-2-released/&quot;&gt;16.8.2, 16.7.5, 16.6.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.7.html#377&quot;&gt;3.7.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.8.html#384&quot;&gt;3.8.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.12/admin/release-notes#3.12.0&quot;&gt;3.12.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.5&quot;&gt;3.11.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.7&quot;&gt;3.10.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.10&quot;&gt;3.9.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.15&quot;&gt;3.8.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.4&quot;&gt;3.11.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.6&quot;&gt;3.10.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.9&quot;&gt;3.9.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.14&quot;&gt;3.8.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.12.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.7.html&quot;&gt;4.2.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;10.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.11.1&quot;&gt;0.11.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Brooke Kuhlmann, Jack Lot, Štěpán Němec
and Bruno Brito.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 107 (January 31st, 2024)</title>
      <link>https://git.github.io/rev_news/2024/01/31/edition-107/</link>
      <pubDate>Wed, 31 Jan 2024 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2024/01/31/edition-107/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-107-january-31st-2024&quot;&gt;Git Rev News: Edition 107 (January 31st, 2024)&lt;/h2&gt;

&lt;p&gt;Welcome to the 107th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of December 2023 and January 2024.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/LO6P265MB6736043BE8FB607DB671D21EFAAAA@LO6P265MB6736.GBRP265.PROD.OUTLOOK.COM/&quot;&gt;Git Rename Detection Bug&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Jeremy Pridmore reported an issue to the Git mailing list. He used
&lt;a href=&quot;https://git-scm.com/docs/git-bugreport&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bugreport&lt;/code&gt;&lt;/a&gt;, so his
message looks like a filled out form with questions and answers.&lt;/p&gt;

    &lt;p&gt;He was trying to cherry-pick changes from one repo (A) to another (B),
while both A and B came from the same original TFS server but with
different set of changes. He was disappointed though because some
files that had been moved in repo A were matched up by the rename
detection mechanism to files other than what he expected in repo B,
and he wondered if the reason for this was the new ‘ort’ merge
strategy described in a
&lt;a href=&quot;https://blog.palantir.com/optimizing-gits-merge-machinery-1-127ceb0ef2a1&quot;&gt;blog post by Elijah Newren&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;While not obvious at first, Jeremy’s primary problem specifically
centered around cases where there were multiple files with 100%
identical content.  For example, originally there could have
been an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;orig/foo.txt&lt;/code&gt; file, while one of the descendant repos
does not have that file anymore but instead has two files,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dir2/foo.txt&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dir3/foo.txt&lt;/code&gt;, both with contents identical
to the original &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;orig/foo.txt&lt;/code&gt;.  So, Git has to figure out which
one of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dir2/foo.txt&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dir3/foo.txt&lt;/code&gt; is the result of renaming
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;orig/foo.txt&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Elijah replied to Jeremy explaining extensively how rename detection
works in Git.  Elijah pointed out that Jeremy’s problem, as
described, did not involve directory rename detection (despite
looking kind of like a directory rename detection problem).  Also,
since Jeremy pointed out that the contents of the “misdetected”
renames had identical contents to what they were paired with, that
meant that only exact renames were involved.  Because of these two
factors, Elijah said that the new ‘ort’ merge strategy, which he
implemented, and which replaced the old ‘recursive’ strategy, should
use the same rename detection rules as that old strategy for
Jeremy’s problem. Elijah suggested adding the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-s recursive&lt;/code&gt; option
to the cherry-pick command to verify this and check if it worked
differently using the old ‘recursive’ strategy.&lt;/p&gt;

    &lt;p&gt;Elijah also pointed out that for exact renames in a setup like this,
other than Git giving a preference to files with the same basename,
if there are multiple choices with identical content then it will
just pick one essentially at random.&lt;/p&gt;

    &lt;p&gt;Jeremy replied to Elijah saying that this sounded like what he was
observing. He gave some more examples, showing that when there are
multiple 100% matches, Git didn’t always match up the files that he
wanted but matched files differently.  Jeremy suggested that
filename similarity (beyond just basename matching) be added as a
secondary criteria to content similarity for rename detection, since
it would help in his case.&lt;/p&gt;

    &lt;p&gt;Elijah replied that he had tried a few filename similarity ideas,
and added a “same basename” criteria for inexact renames in the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ort&lt;/code&gt; merge strategy along these lines.  However, he said other
filename similarity measurements he tried didn’t work out so well.
He mentioned that they risk being repository-specific (in a way
where they help with merges in some repositories but actually hurt
in others).  He also mentioned a rather counter-intuitive result
that filename comparisons could rival the cost of content
comparisons, which means such measurements could adversely affect
performance and possibly even throw a monkey wrench in multiple of
the existing performance optimizations in the current merge
algorithm.&lt;/p&gt;

    &lt;p&gt;The thread also involved additional explanations about various facts
involving rename detection.  This included details about how renames
are just a hint for developers as they are not recorded, but are
instead computed from scratch in response to user commands. It also
included details about what things like “added by both” means
(namely that both sides added the same filename but with different
contents), why you never see “deleted by both” as a conflict status
(there is no conflict; the file can just be deleted), and other
minor points.&lt;/p&gt;

    &lt;p&gt;Elijah also brought up a slightly more common case that mirrors the
problems Jeremy saw, where users could be surprised by the per-file
content similarity matching that Git does.  This more general case
arises from having multiple copies of a versioned library.  For
example, you may have a “base” version with a directory named
“library-x-1.7/”, and a “stable” version has many changes in that
directory, while a “development” branch has removed that directory
but has added both a “library-x-1.8/” and a “library-x-1.9/”
directory which both have changes compared to “library-x-1.7/”.  In
such a case, if you are trying to cherry-pick a commit involving
several files modified under “library-x-1.7/”, where do the changes
get applied?  Some users might expect the changes in that commit to
get applied to “library-x-1.8/”, while others might expect them to
get applied to “library-x-1.9/”.  In practice, though, it would not
be uncommon for Git to apply the changes from some of the files in
the commit to “library-x-1.8/” and changes from other files in the
commit to “library-x-1.9/”.  Elijah explained why this happens and
suggested a hack for users dealing with this particular kind of case
to work around rename detection.&lt;/p&gt;

    &lt;p&gt;Philip Oakley then chimed into the discussion to suggest using
“BLOBSAME” for exact renames in the same way as “TREESAME” is used
in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; for history simplification.  Elijah replied to Philip
that he thinks that ‘exact rename’ already works.  Junio C Hamano,
the Git maintainer, then pointed out that “TREESAME” is a property
of commits, not trees, and suggested using words other than
“BLOBSAME” and “TREESAME” in the context of rename detection.&lt;/p&gt;

    &lt;p&gt;Philip and Elijah discussed terminology at more length, agreeing
that good terminology can sometimes help people coming from an “old
centralised VCS” make the mind shift to understand Git’s model, but
didn’t find anything that would help in this case.&lt;/p&gt;

    &lt;p&gt;Finally, Philip requested more information about how Git computes
file content similarity (for inexact rename detection), referencing
Elijah’s mention of “spanhash representation”.  Elijah explained the
internal data structure in detail, and supported his earlier claim
that “comparison of filenames can rival the cost of file content
similarity computations”.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2024/01/11/the-contributions-we-made-to-the-git-2-43-release/&quot;&gt;The contributions GitLab’s Git team made to the Git 2.43 release&lt;/a&gt;
by John Cai on GitLab Blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.blog/2023-11-20-highlights-from-git-2-43/&quot;&gt;Highlights from Git 2.43&lt;/a&gt;
by Taylor Blau on GitHub Blog, covering different changes,
included in &lt;a href=&quot;https://git.github.io/rev_news/2023/11/30/edition-105/&quot;&gt;Git Rev News Edition #105&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;GitHub has &lt;a href=&quot;https://github.com/features/copilot&quot;&gt;Copilot&lt;/a&gt;,
GitLab has &lt;a href=&quot;https://about.gitlab.com/solutions/code-suggestions/&quot;&gt;Duo Code Suggestions&lt;/a&gt;;
now Bitbucket has &lt;a href=&quot;https://marketplace.atlassian.com/apps/1227931/tabnine-teams-for-bitbucket-cloud&quot;&gt;integration with Tabnine&lt;/a&gt;:
&lt;a href=&quot;https://community.atlassian.com/t5/Bitbucket-articles/Accelerate-your-development-process-with-Tabnine-AI-and/ba-p/2576062&quot;&gt;Accelerate your development process with Tabnine AI and Bitbucket&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.coluzziandrea.com/git-00-linux-day&quot;&gt;I Taught GIT to High School Students: My Experience as Linux Day Mentor&lt;/a&gt;
by Coluzzi Andrea on his blog (and also &lt;a href=&quot;https://dev.to/coluzziandrea/i-taught-git-to-high-school-students-3a16&quot;&gt;on DEV.to&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/how-framer-uses-tower/&quot;&gt;How Framer Manages Their Codebase with Tower&lt;/a&gt;
by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;Julia Evans continues her series of articles about Git with
&lt;a href=&quot;https://jvns.ca/blog/2024/01/05/do-we-think-of-git-commits-as-diffs--snapshots--or-histories/&quot;&gt;Do we think of git commits as diffs, snapshots, and/or histories?&lt;/a&gt;
and &lt;a href=&quot;https://jvns.ca/blog/2024/01/26/inside-git/&quot;&gt;Inside .git&lt;/a&gt;
(the latter in both a comic and a text version).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://manuel-strehl.de/minimal_git_folder&quot;&gt;Minimal contents of a .git folder&lt;/a&gt;
by Manuel Strehl on A Peculiar Zoo of Thoughts blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/bpugh/git-config-settings-i-always-recommend-11fa&quot;&gt;Git Config Settings I Always Recommend&lt;/a&gt;
by Brandon Pugh on DEV.to (and also &lt;a href=&quot;https://www.brandonpugh.com/blog/git-config-settings-i-always-recommend/&quot;&gt;on his blog&lt;/a&gt;);
though setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pull.rebase&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; depends on whether project prefers merges or rebases,
and is very project-dependent.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/ritaly/git-lesson-how-to-use-gitignore-and-gitkeep-5edm&quot;&gt;Git Lesson: How to Use .gitignore and .gitkeep?&lt;/a&gt;
by Rita {FlyNerd} Lyczywek on DEV.to (translated &lt;a href=&quot;https://www.flynerd.pl/2024/01/gitignore-i-gitkeep.html&quot;&gt;from original article in Polish&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/technosophos/git-prom-my-favorite-git-alias-2mbd&quot;&gt;Git Prom! My Favorite Git Alias&lt;/a&gt;
(to fetch the latest upstream HEAD and rebase your current branch on top of it)
by Matt Butcher on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dvc.ai/blog/dvc-git-lfs&quot;&gt;Integrating DVC and Git LFS via libgit2 filters&lt;/a&gt;
by Peter Rowlands on DVC AI Blog. &lt;a href=&quot;https://dvc.org/&quot;&gt;DVC&lt;/a&gt; (Data Version Control)
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;,
with links to different articles about it in 
&lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;#42&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;#63&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2020/06/25/edition-64/&quot;&gt;#64&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;#72&lt;/a&gt;,
and &lt;a href=&quot;https://git.github.io/rev_news/2023/06/30/edition-100/&quot;&gt;#100&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dagshub.com/blog/version-control/&quot;&gt;Version Control for Machine Learning&lt;/a&gt;
by Nikitha Narendra on DagsHub Blog. The &lt;a href=&quot;https://dagshub.com/&quot;&gt;DAGsHub&lt;/a&gt; service was
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;;
further articles about this web platform for data version control
linked in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Edition #85&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2023/02/28/edition-96/&quot;&gt;#96&lt;/a&gt;,
and &lt;a href=&quot;https://git.github.io/rev_news/2023/03/31/edition-97/&quot;&gt;#97&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/tools/20231213-fluffy-roaring-capuchin-8024ac@meerkat/T/&quot;&gt;RFC: Bridging GitHub workflows with b4&lt;/a&gt;
by Konstantin Ryabitsev on Linux kernel tools mailing list via lore.kernel.org.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/958468/&quot;&gt;Jujutsu: a new, Git-compatible version control system&lt;/a&gt;
by Daroc Alden on LWN.net (&lt;a href=&quot;https://lwn.net/SubscriberLink/958468/09ff53915f2ae020/&quot;&gt;free link&lt;/a&gt;).
Jujutsu was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;;
there was also a &lt;a href=&quot;https://www.youtube.com/watch?v=bx_LGilOuE4&quot;&gt;Jujutsu: A Git-Compatible VCS&lt;/a&gt;
talk by Martin von Zweigbergk at Git Merge 2022, mentioned in passing
in &lt;a href=&quot;https://git.github.io/rev_news/2022/09/30/edition-91/&quot;&gt;Git Rev News Edition #91&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rhaas.blogspot.com/2023/12/praise-criticism-and-dialogue.html&quot;&gt;Praise, Criticism, and Dialogue&lt;/a&gt;
(in open source code review process)
by Robert Haas (PostgreSQL contributor) on his Blogspot blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-04-25-the-friend-zone-friendly-forks-101/&quot;&gt;Being friendly: friendly forks 101&lt;/a&gt;
and &lt;a href=&quot;https://github.blog/2022-05-02-friend-zone-strategies-friendly-fork-management/&quot;&gt;Being friendly: Strategies for friendly fork management&lt;/a&gt;
by Lessley Dennington on GitHub Blog (2022).&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ctjacobs/git-rdm&quot;&gt;Git-RDM&lt;/a&gt; had intended to be
a Research Data Management (RDM) plugin for the Git version control system.
It interfaces Git with data hosting services to manage the curation of version controlled files
using persistent, citable repositories.  Access to hosting services is managed with
&lt;a href=&quot;https://pyrdm.readthedocs.io/&quot;&gt;PyRDM library&lt;/a&gt;, which supports Figshare, Zenodo,
and (in a limited fashion) DSpace-based services using SWORD protocol version 2.
Written in Python, last released in 2016.
    &lt;ul&gt;
      &lt;li&gt;See also the “&lt;a href=&quot;https://joss.theoj.org/papers/10.21105/joss.00029&quot;&gt;Git-RDM: A research data management plugin for the Git version control system&lt;/a&gt;”
article in The Journal of Open Source Software (2016).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gaspardIV/gitvision&quot;&gt;GitVision&lt;/a&gt; is a web tool
designed to visualize Git repositories in virtual, augmented, and 3D reality.
Developed with Vue 3 in Vite by Kacper Konecki (GaspardIV).
There is a live demo of GitVision at &lt;a href=&quot;https://gitvis.web.app/&quot;&gt;gitvis.web.app&lt;/a&gt;,
including quite a few tiny, small, medium and large example repositories;
you can also visualize your own repository by uploading data prepared using
&lt;a href=&quot;https://github.com/GaspardIV/gitvision/tree/main/tool&quot;&gt;GitVision script&lt;/a&gt;
(or you can use the tool locally).
    &lt;ul&gt;
      &lt;li&gt;It provides a type of 3D visualization different from the much better known
&lt;a href=&quot;https://gource.io/&quot;&gt;Gource&lt;/a&gt; visualization tool for source control repositories.
There the repository is displayed as a tree where the root of the repository is the center,
directories are branches and files are leaves. Contributors to the source code
appear and disappear as they contribute to specific files and directories.&lt;/li&gt;
      &lt;li&gt;Has different purpose than &lt;a href=&quot;https://githistory.xyz/&quot;&gt;Git History.xyz&lt;/a&gt;
web app that allows to quickly browse the history of files in any git repo,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Git Rev News Edition #48&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2023/11/30/edition-105/&quot;&gt;#105&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;See also the &lt;a href=&quot;https://opus-htw-aalen.bsz-bw.de/frontdoor/deliver/index/docId/2472/file/ICSEA22-VRGit_OberhauserCR2.pdf&quot;&gt;VR-Git: Git Repository Visualization and Immersion in Virtual Reality&lt;/a&gt; (PDF)
paper by Roy Oberhauser (2022).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;http://git-school.github.io/visualizing-git/&quot;&gt;Visualize Git&lt;/a&gt; web app illustrates what’s going on
under the hood when you use common Git operations. You’ll see what exactly is happening
to your commit graph. Powered by D3. Sources on GitHub as &lt;a href=&quot;https://github.com/git-school/visualizing-git&quot;&gt;git-school/visualizing-git&lt;/a&gt;.
This app is quite similar to the free playground mode of
&lt;a href=&quot;https://onlywei.github.io/explain-git-with-d3/&quot;&gt;Visualizing Git Concepts with D3&lt;/a&gt;,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/11/27/edition-69/&quot;&gt;Git Rev News #69&lt;/a&gt;.
Compare with:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://learngitbranching.js.org/&quot;&gt;Learn Git Branching&lt;/a&gt;,
mentioned first in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;Git Rev News Edition #30&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nic-hartley.github.io/git-gud/&quot;&gt;Git Gud&lt;/a&gt;, a visual web-based Git simulator,
meant to help understand Git better, announced by its author Nic Hartley in
&lt;a href=&quot;https://dev.to/nichartley/git-gud-at-git-5d9k&quot;&gt;Git Gud at git&lt;/a&gt;.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Git Rev News Edition #48&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/benthayer/git-gud&quot;&gt;Git Gud&lt;/a&gt;, a command line game
designed to help you learn how to use the Git version control system.
Written in Python by Ben Thayer. First mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://ohmygit.org/&quot;&gt;Oh My Git!&lt;/a&gt;, an open source game about learning Git,
written using the Godot game engine (&lt;a href=&quot;https://github.com/git-learning-game/oh-my-git&quot;&gt;source&lt;/a&gt;).
There was a lightning talk about this game at FOSDEM 2021:
&lt;a href=&quot;https://fosdem.org/2021/schedule/event/git_learning_game/&quot;&gt;Building a Git learning game: A playful approach to version control&lt;/a&gt;.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/initialcommit-com/git-sim&quot;&gt;Git-Sim&lt;/a&gt; tool (written in Python)
to visually simulate Git operations in your own repos with a single terminal command.
Described in &lt;a href=&quot;https://initialcommit.com/blog/git-sim&quot;&gt;Git-Sim: Visually Simulate Git Operations In Your Own Repos&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;Git Rev News Edition #95&lt;/a&gt;)
and &lt;a href=&quot;https://initialcommit.com/blog/git-sim-3-month-dev-update&quot;&gt;Git-Sim 3 Month Dev Update: Community Response, New Features, &amp;amp; The Future&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/04/30/edition-98/&quot;&gt;Edition #98&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/jvns/f7d2db163298423751a9d1a823d7c7c1&quot;&gt;List of git mistakes&lt;/a&gt;
people have listed on Mastodon, gathered by Julia Evans (@b0rk@jvns.ca).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.3&quot;&gt;3.11.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.5&quot;&gt;3.10.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.8&quot;&gt;3.9.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.13&quot;&gt;3.8.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2024/01/25/critical-security-release-gitlab-16-8-1-released/&quot;&gt;16.8.1, 16.7.4, 16.6.6, 16.5.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/01/18/gitlab-16-8-released/&quot;&gt;16.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/01/12/gitlab-16-7-3-released/&quot;&gt;16.7.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2024/01/11/critical-security-release-gitlab-16-7-2-released/&quot;&gt;16.7.2, 16.6.4, 16.5.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.11.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.8&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes?show_tab=release-notes&quot;&gt;10.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;5.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Elijah Newren, Bruno Brito, Brandon Pugh and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 106 (December 31th, 2023)</title>
      <link>https://git.github.io/rev_news/2023/12/31/edition-106/</link>
      <pubDate>Sun, 31 Dec 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/12/31/edition-106/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-106-december-31th-2023&quot;&gt;Git Rev News: Edition 106 (December 31th, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 106th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of November and December 2023.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.1589.git.1695392027.gitgitgadget@gmail.com/&quot;&gt;[PATCH 0/4] Switch links to https&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;In September, Josh Soref posted a 4-patch series on the
mailing list to improve the URLs used throughout the documentation
and the code base of the project.&lt;/p&gt;

    &lt;p&gt;The main goal was to use HTTPS instead of HTTP in the URLs to
improve user security, but along the way some patches replaced URLs
that didn’t work anymore with some new ones pointing to the same
content.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine replied to Josh’s patches asking why one URL was
changed from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://json.org/&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://www.json.org/&lt;/code&gt; instead
of just replacing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https&lt;/code&gt;. Josh replied that it was
because that website was self-identifying with the latter URL using a
&lt;a href=&quot;https://en.wikipedia.org/wiki/Meta_refresh&quot;&gt;meta refresh&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;In the meantime, Junio Hamano, the Git maintainer, replied to some
patches saying that it might not be worth updating some URLs, either
because it was clear from the context that they were old, or because
they were part of some code we borrowed from other projects. In some
cases, they were an argument of a Git command and still just worked,
while the meaning of the command changed a bit when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http&lt;/code&gt; was
replaced with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https&lt;/code&gt;. Junio liked the fact that some broken links
were fixed by the series though.&lt;/p&gt;

    &lt;p&gt;Josh then sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.1589.v2.git.1695553041.gitgitgadget@gmail.com/&quot;&gt;version 2 of his patch series&lt;/a&gt;.
This took into account Eric’s comments as a commit message was
improved to say that some changes were made to respect a site’s
self-identification. Junio’s comments were also taken into account
as a number of URLs that were previously changed were now left
as-is.&lt;/p&gt;

    &lt;p&gt;Elijah Newren and Junio commented on this new version. They both
suggested improving commit messages or the cover letter of the
series to better explain the reasons for the changes that were made.
In one case, Elijah and Josh discussed replacing the URL of a
website that seemed to be often down with a link to its content on
the &lt;a href=&quot;https://archive.org/&quot;&gt;Internet Archive&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;In November, Josh then sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.1589.v3.git.1700796916.gitgitgadget@gmail.com/&quot;&gt;version 3 of his patch series&lt;/a&gt;
where the first and second patches had been swapped to avoid some
confusion for reviewers who would ask why some URLs weren’t changed
in the first patch overlooking that the second one would change them.&lt;/p&gt;

    &lt;p&gt;The other significant change compared to version 2 was that Josh
decided not to replace the URL of the website that was often down
saying “we’ll risk users getting hacked content from an arbitrary
&lt;a href=&quot;https://en.wikipedia.org/wiki/Man-in-the-middle_attack&quot;&gt;MITM&lt;/a&gt;
instead of taking archived authenticated content based on the last
time their web site was properly maintained”.&lt;/p&gt;

    &lt;p&gt;Elijah replied that he would be fine with using the archived link if
it was better justified in the commit message, but said that he also
agreed with merging the whole series as-is, as he had checked all
the links and they all looked good to him.&lt;/p&gt;

    &lt;p&gt;Josh replied he could come back later to change the URL and preferred
the series to be merged as-is. He thanked Elijah for taking the time
to re-check every link, saying he knew exactly how tedious that is.&lt;/p&gt;

    &lt;p&gt;Junio agreed with merging the series, which is now part of the
‘master’ branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;community-spotlight-vonc&quot;&gt;Community Spotlight: VonC&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://stackoverflow.com/users/6309/vonc&quot;&gt;VonC&lt;/a&gt; is a
prolific contributor to the Git topic on Stack Overflow. This edition features an
interview with him. Thanks to our &lt;a href=&quot;https://git.github.io/rev_news/2023/06/30/edition-100#some-statistics-about-the-ongoing-first-git-rev-news-readers-survey&quot;&gt;survey respondents&lt;/a&gt;
for suggesting to interview VonC!&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Who are you and what do you do?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;By day, I am an information technology consultant working for a computer services
company in France. By night, I am &lt;a href=&quot;https://stackoverflow.com/users/6309&quot;&gt;VonC on Stack Overflow&lt;/a&gt;,
and I have contributed to various topics since its early days (Sept. 2008).
I do that &lt;a href=&quot;https://meta.stackexchange.com/q/122976/6309&quot;&gt;every single day&lt;/a&gt;.
It includes answering questions about Git: &lt;a href=&quot;https://stackoverflow.com/search?q=user:6309+[git]&quot;&gt;almost 16K answers&lt;/a&gt;
in 15 years.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What would you name your most important contribution to Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I do not contribute to Git directly, but I report on Stack Overflow
any interesting &lt;a href=&quot;https://github.com/git/git/commits/master&quot;&gt;git/git commits&lt;/a&gt;
which provides a new answer to old questions.&lt;/p&gt;

    &lt;p&gt;I started in 2012 with questions like “&lt;a href=&quot;https://stackoverflow.com/a/598788/6309&quot;&gt;Squash the first two commits in Git?&lt;/a&gt;”
and “&lt;a href=&quot;https://stackoverflow.com/a/16162000/6309&quot;&gt;How do I remove a submodule?&lt;/a&gt;”.
Then &lt;a href=&quot;https://stackoverflow.com/search?page=33&amp;amp;tab=Newest&amp;amp;pagesize=50&amp;amp;q=user%3a6309%20%22see%20commit%22&amp;amp;searchOn=3&quot;&gt;1630&lt;/a&gt;
commits followed over the next decade.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Why answering questions about Git on Stack Overflow?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;As I mentioned in “&lt;a href=&quot;https://stackoverflow.blog/2022/10/09/how-to-earn-a-million-reputation-on-stack-overflow-be-of-service-to-others/&quot;&gt;&lt;strong&gt;How to earn a million reputation on Stack Overflow: be of service to others&lt;/strong&gt;&lt;/a&gt;”,
by &lt;strong&gt;&lt;a href=&quot;https://twitter.com/RThorDonovan&quot;&gt;Ryan Donovan&lt;/a&gt;&lt;/strong&gt;, this is a way to
give back to the community, and to learn in the process.&lt;/p&gt;

    &lt;p&gt;I learnt Git itself even before installing it, by answering a few
questions on Stack Overflow, as I detailed in “&lt;a href=&quot;https://meta.stackexchange.com/a/367773/6309&quot;&gt;How’d you get started?&lt;/a&gt;”.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could get a team of expert developers to work full-time on something in Git for a full year, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I mentioned in 2013/2016 the issue of &lt;a href=&quot;https://stackoverflow.com/a/17897705/6309&quot;&gt;storing large files in Git repositories&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;But nowadays, I would work on the workflow side of Git, and how to make
it easier to use for beginners. I follow &lt;a href=&quot;https://docs.gitbutler.com/&quot;&gt;GitButler&lt;/a&gt;
and &lt;a href=&quot;https://twitter.com/chacon&quot;&gt;Scott Chacon&lt;/a&gt;’s work.&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;GitButler is rethinking everything between when you write code in your editor of choice and when you push that code to GitHub for review.
Why are you making ‘wip’ commits when your SCM should be recording everything for you?
Why are everyone’s commit messages close to useless?
Why is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt; the best way to get context on the code your team has written?
Why can’t you seamlessly transition work between computers?&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If you could remove something from Git without worrying about backward compatibility, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;! It is time. As I &lt;a href=&quot;https://stackoverflow.com/questions/58003030/what-is-the-git-restore-command-and-what-is-the-difference-between-git-restor#comment115524702_58003889&quot;&gt;explained in 2020&lt;/a&gt;,
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt; commands are “&lt;a href=&quot;https://github.com/git/git/commit/4e43b7ff1ea4b6f16b93a432b6718e9ab38749bd&quot;&gt;experimental&lt;/a&gt;”
in name only, and are here to stay.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is one of your most favorite features of Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Coming from CVS/SVN, one of my favorite features of Git is its powerful
branching and merging capabilities. Branches in Git are lightweight and
switching between them is fast, making it convenient to manage multiple
streams of work simultaneously (and you have &lt;a href=&quot;https://stackoverflow.com/a/30185564/6309&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt;&lt;/a&gt;
if you want to preserve your current working tree).&lt;/p&gt;

    &lt;p&gt;I use those branches and merges with &lt;a href=&quot;https://stackoverflow.com/a/57175304/6309&quot;&gt;“gitworkflow” (one word)&lt;/a&gt;,
using long-lived integration branches (like “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;main&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;release&lt;/code&gt;”),
and “ephemeral” integration branches (like “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;public&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;devel&lt;/code&gt;”,
created for a specific release cycle, then deleted and recreated for the
next release cycle). See more at “&lt;a href=&quot;https://stackoverflow.com/a/53405887/6309&quot;&gt;gitworkflow workflow&lt;/a&gt;”
and “&lt;a href=&quot;https://stackoverflow.com/a/44470240/6309&quot;&gt;Handle Git branching for test and production&lt;/a&gt;”.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;I often used &lt;a href=&quot;https://github.com/github/gitignore&quot;&gt;github.com/github/gitignore&lt;/a&gt;
(“&lt;strong&gt;A collection of .gitignore templates&lt;/strong&gt;”). I have also used and promoted
&lt;a href=&quot;https://github.com/newren/git-filter-repo&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-repo&lt;/code&gt;&lt;/a&gt;, to
&lt;a href=&quot;https://stackoverflow.com/a/76300821/6309&quot;&gt;remove large files from a Git repository&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Could you brief a bit about one of your most memorable experiences with Git?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;My first &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;As mentioned in “&lt;a href=&quot;https://stackoverflow.blog/2022/10/09/how-to-earn-a-million-reputation-on-stack-overflow-be-of-service-to-others/&quot;&gt;How to earn a million reputation on Stack Overflow: be of service to others&lt;/a&gt;”,
at the time I stumbled upon Git (2008/2009), I was managing big Rational
ClearCase repositories of terabytes of data. The idea of cloning a &lt;em&gt;full&lt;/em&gt; (Git)
repository on my laptop was… incongruous, to say the least!&lt;/p&gt;

    &lt;p&gt;I am aware of the debate around monorepo vs. multirepo (which sometimes
goes in hand with the debate around monolith vs. microservices), but I found
in the subsequent years that working with multiple small Git repositories was
much more manageable than working with a single large one, as I used to do
before, using huge &lt;a href=&quot;https://www.ibm.com/docs/en/rational-clearcase/9.0.0?topic=clearcase-about-vobs-versioned-objects&quot;&gt;ClearCase VOBs&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;What is your advice for people who want to start using Git? Where and how should they start?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Start with understanding Git &lt;strong&gt;branching&lt;/strong&gt;, and operations around branches
(switch, merge, rebase, cherry-pick).&lt;/p&gt;

    &lt;p&gt;For that, I always redirect people to “&lt;a href=&quot;https://learngitbranching.js.org&quot;&gt;Learn Git Branching&lt;/a&gt;”
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;learngitbranching.js.org&lt;/code&gt;): nothing to install, all exercises are done
directly in the browser, and it is very visual.&lt;/p&gt;

    &lt;p&gt;I also discourage people from blindly following the “&lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;Git Branching Model&lt;/a&gt;”,
where an integration branch like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;develop&lt;/code&gt; is merged to another integration
one like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;. See the links above for “gitworkflow” where I explain
why one should merge to an integration branch, not from it: merging &lt;em&gt;from&lt;/em&gt;
it means you are merging &lt;em&gt;everything&lt;/em&gt; currently integrated into that branch.
If you want to “exclude” some of those integrated commits, that becomes a
nightmare to manage.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;There’s a common conception that “Git is confusing”. What are your thoughts about the same?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Right… you mean &lt;a href=&quot;https://explainxkcd.com/wiki/index.php/1597:_Git&quot;&gt;XKCD 1597, Oct. 2015, “Git”&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;The level of integration of Git in IDEs (like Eclipse, IntelliJ, VSCode, …)
has made Git more accessible to beginners. I often redirect them to a combo
VSCode + &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&quot;&gt;GitLens&lt;/a&gt;,
and that is enough to get them started.&lt;/p&gt;

    &lt;p&gt;As long as the workflow is clearly defined, and the rebase is understood,
for &lt;a href=&quot;https://stackoverflow.com/a/44672221/6309&quot;&gt;managing pull request&lt;/a&gt;
(you rebase your local feature branch on top of the target branch,
before force pushing it to the remote repository, &lt;a href=&quot;https://stackoverflow.com/a/52937476/6309&quot;&gt;with lease&lt;/a&gt;
or &lt;a href=&quot;https://stackoverflow.com/a/64627761/6309&quot;&gt;if-includes&lt;/a&gt;), the users
manage to get by. The bulk of my training is about the PR (Pull Request)
workflow, which involves &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--onto&lt;/code&gt;), and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push --force-with-lease &lt;/code&gt;or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--force-if-includes&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;But clarifying &lt;em&gt;why&lt;/em&gt; Git exists, and where it comes from (I have younglings
who have no idea who &lt;a href=&quot;https://en.wikipedia.org/wiki/Linus_Torvalds&quot;&gt;Linux Torvalds&lt;/a&gt;
is, and his role in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Git#History&quot;&gt;creation of Git&lt;/a&gt;)
can help. Git comes with a certain vision of how a VCS should work, and
it has a lot to do with the way the Linux kernel is developed.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;If there’s one tip you would like to share with other users of Git, what would it be?&lt;/strong&gt;&lt;/p&gt;

    &lt;p&gt;Stop using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;, start using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt; instead!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Editor’s note: We hope you enjoyed this interview. We’ll explore if we could
interview other such contributors who don’t directly participate in the mailing
list. If you have any suggestions, you’re most welcome to share them with us through
&lt;a href=&quot;https://github.com/git/git.github.io/issues&quot;&gt;our issue tracker&lt;/a&gt; or by writing an
email to &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2023/12/20/google-summer-of-code-2024-contribute-to-gitlab-and-git-to-prepare/&quot;&gt;Google Summer of Code 2024: Contribute to GitLab and Git to prepare&lt;/a&gt;
by Christian Couder and Nick Veenhof on GitLab Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2023-11-29-upcoming-changes-to-repository-insights/&quot;&gt;Upcoming changes to repository insights [on GitHub]&lt;/a&gt;
on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://techcrunch.com/2023/12/05/git-allspice-enterprise-6m/&quot;&gt;Git platform AllSpice now curries favor with enterprises&lt;/a&gt;
by Christine Hall on TechCrunch.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2023/12/22/gitlab-duo-code-suggestions-is-generally-available/&quot;&gt;GitLab Duo Code Suggestions is generally available&lt;/a&gt;
by David DeSanto on GitLab Blog.
&lt;a href=&quot;https://about.gitlab.com/solutions/code-suggestions/&quot;&gt;GitLab Code Suggestions&lt;/a&gt;
is an alternative to &lt;a href=&quot;https://github.com/features/copilot&quot;&gt;GitHub Copilot&lt;/a&gt;
and (to a lesser extent) &lt;a href=&quot;https://chat.openai.com/&quot;&gt;OpenAI ChatGPT&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Julia Evans continues her streak of Git-related blog posts with
&lt;a href=&quot;https://jvns.ca/blog/2023/12/04/mounting-git-commits-as-folders-with-nfs/&quot;&gt;Mounting git commits as folders with NFS&lt;/a&gt;
(and FUSE), about the experimental &lt;a href=&quot;https://github.com/jvns/git-commit-folders&quot;&gt;git-commit-folders&lt;/a&gt;
tool.  This tool was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/11/30/edition-105/&quot;&gt;previous Git Rev News&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Julia Evans also published a few comics about Git at &lt;a href=&quot;https://wizardzines.com/comics/&quot;&gt;Wizard Zines comics&lt;/a&gt;,
for a zine on Git that she is currently writing
(these are only the most recent ones; some earlier comics made it into
&lt;a href=&quot;https://wizardzines.com/zines/oh-shit-git/&quot;&gt;Oh Shit, Git! Recipes for getting out of git mess&lt;/a&gt; zine):
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://wizardzines.com/comics/every-git-jargon/&quot;&gt;every git jargon&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://wizardzines.com/comics/git-discussion-bingo/&quot;&gt;git discussion bingo&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://wizardzines.com/comics/every-git-command/&quot;&gt;every git command I use&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://wizardzines.com/comics/meet-the-branch/&quot;&gt;meet the branch&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://wizardzines.com/comics/branches-have-no-rules/&quot;&gt;branches have no rules&lt;/a&gt;
(at least no built-in ones, though you can try to enforce some with &lt;a href=&quot;https://githooks.com/&quot;&gt;git hooks&lt;/a&gt;)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://wizardzines.com/comics/head-and-heads/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HEAD&lt;/code&gt; and heads&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://wizardzines.com/comics/rules-for-rebasing/&quot;&gt;my rules for rebasing&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://graphite.dev/blog/every-engineer-should-understand-git-reflog&quot;&gt;Every engineer should understand git reflog&lt;/a&gt;
by Harsh Siriah on Graphite Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.johndcook.com/blog/2023/12/13/fine-grained-file-differences/&quot;&gt;Fine-grained file differences&lt;/a&gt;
by John D. Cook on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://martinfowler.com/bliki/DiffDebugging.html&quot;&gt;DiffDebugging&lt;/a&gt;
by Martin Fowler on his blog/wiki.  Page created in 2004, rewritten in 2013.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.bitsrc.io/monorepo-poly-repo-or-no-repo-at-all-830328c7a546&quot;&gt;Monorepo, Poly-repo, or No Repo at all?
 Using Bit to make “irreversible decisions” easy to make and change.&lt;/a&gt;
by Eden Ella on Bits and Pieces blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bit.dev/&quot;&gt;Bit&lt;/a&gt;, a build system for composable software,
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/11/21/edition-45/&quot;&gt;Git Rev News Edition #45&lt;/a&gt;
(then at the old bitsrc.io URL).&lt;/li&gt;
      &lt;li&gt;It was mentioned again in &lt;a href=&quot;https://git.github.io/rev_news/2021/07/31/edition-77/&quot;&gt;Git Rev News Edition #77&lt;/a&gt;
in &lt;a href=&quot;https://dev.to/giteden/how-to-collaborate-on-components-across-projects-with-bit-29c3&quot;&gt;How to Collaborate on Components across Projects with Bit&lt;/a&gt; by Eden Ella on DEV.to.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2023/12/recovering-deleted-files-git-working-tree/&quot;&gt;Recovering Deleted Files From Your Git Working Tree&lt;/a&gt;
by Oluwasanmi Akande on Smashing Magazine.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.kosli.com/blog/git-grep-like-a-pro-the-complete-guide/&quot;&gt;Git Grep Like a Pro: The Complete Guide&lt;/a&gt;
by Bruce Johnston on Kosli Blog (2022).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://belkadan.com/blog/2020/02/Flexible-Identities-in-git/&quot;&gt;Flexible Identities in git&lt;/a&gt;
proposal (to avoid “deadnaming” and bury an old name while preserving a link to things done under the old name)
by Jordan Rose on -dealloc blog (2020).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mdvlu_R8EWE&quot;&gt;Git From the Bits Up&lt;/a&gt;
by Tim Berglund, DataStax.  Recorded at &lt;a href=&quot;http://www.jfokus.com&quot;&gt;Jfokus&lt;/a&gt; 2016.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/homeport/dyff&quot;&gt;dyff&lt;/a&gt; /ˈdʏf/ is a diff tool for YAML files,
and sometimes JSON.  Can be used as Git diff driver (see documentation).
Written in Go, uses MIT license.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitlab.com/git-latexdiff/git-latexdiff&quot;&gt;Git-LaTeXdiff&lt;/a&gt; is a tool
to graphically visualize differences between different versions of a LaTeX file.
It is a wrapper around Git and &lt;a href=&quot;https://www.ctan.org/pkg/latexdiff&quot;&gt;latexdiff&lt;/a&gt;
(which is present &lt;a href=&quot;https://www.ctan.org/pkg/latexdiff&quot;&gt;on CTAN&lt;/a&gt;, Comprehensive TeX Archive Network).
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-latexdiff&lt;/code&gt; is written as a BSD-licensed Bash script,
while &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;latexdiff&lt;/code&gt; is written in Perl (and is GPLv3-licensed).
The git-latexdiff tool was mentioned in passing in 
&lt;a href=&quot;https://git.github.io/rev_news/2015/10/14/edition-8/&quot;&gt;Git Rev News Edition #8&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jvns/git-oops&quot;&gt;git-oops&lt;/a&gt; is a &lt;strong&gt;very experimental&lt;/strong&gt; tool
allowing to undo a Git operation without having to remember the specific
invocation, in the style of the undo features in &lt;a href=&quot;https://gitup.co/&quot;&gt;GitUp&lt;/a&gt;, &lt;a href=&quot;https://github.com/martinvonz/jj&quot;&gt;jj&lt;/a&gt;, and &lt;a href=&quot;https://github.com/arxanas/git-branchless&quot;&gt;git-branchless&lt;/a&gt;.
According to its author, it is meant as just a prototype serving
“as inspiration for a better tool that actually works reliably”
(see the repository README for details).  Written in Python, MIT license.
Prior art includes:
    &lt;ul&gt;
      &lt;li&gt;One of git-oops inspirations, the &lt;a href=&quot;https://github.com/arxanas/git-branchless/wiki/Command:-git-undo&quot;&gt;undo command in git-branchless&lt;/a&gt;,
described in &lt;a href=&quot;https://blog.waleedkhan.name/git-undo/&quot;&gt;git undo: We can do better&lt;/a&gt;,
which was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/06/27/edition-76/&quot;&gt;Git Rev News Edition #76&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;A very basic and limited &lt;a href=&quot;https://megakemp.com/2016/08/25/git-undo/&quot;&gt;Git Undo [alias]&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/09/14/edition-19/&quot;&gt;Git Rev News Edition #19&lt;/a&gt;
(resets state using reflog).&lt;/li&gt;
      &lt;li&gt;Many IDE and programming editors, their Git-related extensions/plugins,
and Git GUIs have some kind of universal “git undo”.  One example is
Tower Git GUI, whose undo abilities are described in
&lt;a href=&quot;https://css-tricks.com/cmdz-for-git-is-here/&quot;&gt;CMD+Z for Git is Here&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/07/29/edition-65/&quot;&gt;Git Rev News Edition #65&lt;/a&gt;).
Contrast with tools of similar scope and/or name, but which do something different:&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/nvbn/thefuck&quot;&gt;thefuck&lt;/a&gt;, a command line application
which corrects your previous console command (for example Git command)
if you made an error and it &lt;em&gt;didn’t&lt;/em&gt; do what you wanted;
the tool was mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2023/07/31/edition-101/&quot;&gt;Git Rev News Edition #101&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/jwiegley/git-undo-el&quot;&gt;git-undo-el&lt;/a&gt;,
a command for Emacs editor to “undo” changes to selected region of a file
through its Git history, mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2017/12/20/edition-34/&quot;&gt;Git Rev News Edition #34&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mjdominus/git-util/blob/master/bin/git-vee&quot;&gt;git-vee&lt;/a&gt;
is a shell script that prepares a brief summary of how your current branch
has diverged from a corresponding remote branch.  Mentioned on 
&lt;a href=&quot;https://www.plover.com/misc/stop-merging/slide019.html&quot;&gt;git-vee&lt;/a&gt; slide
in &lt;a href=&quot;https://www.plover.com/misc/stop-merging/slide001.html&quot;&gt;Cleaner &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; history&lt;/a&gt;
(also known as “Stop merging master”) by Mark Jason Dominus (the author of the tool),
from 2013.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.breezy-vcs.org/&quot;&gt;Breezy&lt;/a&gt; is a version control system implemented in Python
with multi-format support and an emphasis on hackability.
Currently, Breezy has built-in support for the Git and Bazaar file formats and network protocols.
GPLv2 licensed.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://flatgithub.com/&quot;&gt;FlatGitHub&lt;/a&gt; or Flat View is a simple tool for exploring
flat data files in GitHub repositories.
Part of the &lt;a href=&quot;https://githubnext.com/projects/flat-data&quot;&gt;Flat Data&lt;/a&gt; project (formerly GitHub OCTO),
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/05/27/edition-75/&quot;&gt;Git Rev News Edition #75&lt;/a&gt;
(under old URL) and &lt;a href=&quot;https://git.github.io/rev_news/2023/02/28/edition-96/&quot;&gt;Edition #96&lt;/a&gt;,
which in turn was based on the &lt;a href=&quot;https://simonwillison.net/2020/Oct/9/git-scraping/&quot;&gt;“git scraping” approach pioneered by Simon Willison&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;Git Rev News Edition #82&lt;/a&gt;.
See the example of &lt;a href=&quot;https://flatgithub.com/githubocto/flat-demo-bitcoin-price?filename=btc-price-postprocessed.json&amp;amp;sha=78b38f641f8f1ffccae733749545ea42cf5eddf9&quot;&gt;flat-demo-bitcoin-price&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://allspice.io/&quot;&gt;AllSpice.io&lt;/a&gt; is a Git platform for hardware developers
(named after SPICE (“Simulation Program with Integrated Circuit Emphasis”),
a general-purpose, open-source analog electronic circuit simulator).
No free tier.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/crate-ci/typos&quot;&gt;typos&lt;/a&gt; is a source code spell checker,
which finds and corrects spelling mistakes in source code;
intended to be fast enough to run on monorepos and have few false positives,
so it can safely run unassisted, for example on PRs.  Written in Rust.
    &lt;ul&gt;
      &lt;li&gt;Mentioned in &lt;a href=&quot;https://perladvent.org/2023/2023-12-21.html&quot;&gt;Perl Advent Calendar 2023 - Elves Versus Typos&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dat-ecosystem/dat&quot;&gt;dat&lt;/a&gt; is a tool for peer-to-peer sharing
&amp;amp; live synchronization of files via command line.  Part of the &lt;a href=&quot;https://dat-ecosystem.org&quot;&gt;dat-ecosystem&lt;/a&gt;.
You can use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dat&lt;/code&gt; command line tool to share files with version control,
back up data to servers, browse remote files on demand, and automate long-term data preservation.
Written in JavaScript for running with Node.js.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#391&quot;&gt;3.9.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.2&quot;&gt;3.11.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.1&quot;&gt;3.11.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.4&quot;&gt;3.10.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.7&quot;&gt;3.9.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.12&quot;&gt;3.8.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.19&quot;&gt;3.7.19&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.0&quot;&gt;3.11.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/12/21/gitlab-16-7-released/&quot;&gt;16.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/12/13/security-release-gitlab-16-6-2-released/&quot;&gt;16.6.2, 16.5.4, 16.4.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/11/30/security-release-gitlab-16-6-1-released/&quot;&gt;16.6.1, 16.5.3, 16.4.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.11.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.6.html&quot;&gt;4.2.6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from VonC, Josh Soref and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 105 (November 30th, 2023)</title>
      <link>https://git.github.io/rev_news/2023/11/30/edition-105/</link>
      <pubDate>Thu, 30 Nov 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/11/30/edition-105/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-105-november-30th-2023&quot;&gt;Git Rev News: Edition 105 (November 30th, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 105th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of October 2023 and November 2023.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Git participates in &lt;a href=&quot;https://www.outreachy.org/alums/2023-12/&quot;&gt;Outreachy’s December 2023 to March 2024 round&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Achu Luma will work on the “Move existing tests to a unit testing
framework” project. They will be mentored by Christian Couder.&lt;/p&gt;

    &lt;p&gt;Congratulations to Luma for being selected!&lt;/p&gt;

    &lt;p&gt;Thanks to GitLab for sponsoring this Outreachy internship! Thanks
also to the other contributors who applied and worked on
micro-projects, but couldn’t be selected! We hope to continue to see
you in the community!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20231012160930.330618-1-sandals@crustytoothpaste.net/&quot;&gt;[PATCH v2 0/2] Prevent re-reading 4 GiB files on every status&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;In May 2022 Jason Hatton sent
&lt;a href=&quot;https://lore.kernel.org/git/CY4PR16MB1655A1F7DD8B2FABCC30C9DAAFC39@CY4PR16MB1655.namprd16.prod.outlook.com/&quot;&gt;an email to the mailing list&lt;/a&gt;
about the fact that any file of a size that is an exact multiple
of 8GiB makes Git extremely slow on the repository.&lt;/p&gt;

    &lt;p&gt;He said that he had already opened
&lt;a href=&quot;https://github.com/git-for-windows/git/issues/3833#issuecomment-1116544918&quot;&gt;an issue about this on the Git for Windows issue tracker&lt;/a&gt;
where Jason, Philip Oakley, brian m. carlson and Johannes
Schindelin, alias Dscho, had already discussed the issue.&lt;/p&gt;

    &lt;p&gt;Git uses an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uint32_t&lt;/code&gt; type, a 32 bit long unsigned integer, for
storing the file size in the index. This rolls over if the value is
greater than 2 to the power 32, so with file sizes over 4GiB. When
the size is exactly 4GiB or a multiple of it, like 8GiB,
the rollover makes it zero.&lt;/p&gt;

    &lt;p&gt;A zero file size in the index has a special meaning for Git,
though. It tells Git that the file needs to be hashed again. Hashing
a file is supposed to reset its file size in the index to a non-zero
value, but with a 4GiB file size the rollover happens and the file
size is still zero. So the hashing will be performed again and again
by many different Git commands, making Git very slow.&lt;/p&gt;

    &lt;p&gt;Jason proposed, as a solution to this problem, to detect when the
rollover would happen, and in that case set the size to 1 instead
of zero.&lt;/p&gt;

    &lt;p&gt;Junio C Hamano, the Git maintainer, replied to Jason confirming the
issue and explaining it a bit more in detail. Jason and Junio then
discussed the issue a bit more, while Jason tested locally his
suggested fix and proposed to send a real patch to fix the issue.&lt;/p&gt;

    &lt;p&gt;René Scharfe then chimed into the discussion asking if a value other
than one would be better and would avoid other possible issues.
Philip Oakley replied to René suggesting using 0x80000000 instead of
1 when the rollover is detected. This would make it easier to
detect “almost all incremental and decremental changes in file
sizes”, as the file size in the index helps detecting file changes.&lt;/p&gt;

    &lt;p&gt;Jason and Philip discussed the issue a bit more and agreed that
using 0x80000000 only for exact multiples of 4GiB would likely be
the best solution.&lt;/p&gt;

    &lt;p&gt;Philip and Carlo Marcelo Arenas Belón also tried to help Jason
properly submit a patch to the mailing list.&lt;/p&gt;

    &lt;p&gt;Jason then sent
&lt;a href=&quot;https://lore.kernel.org/git/CY4PR16MB16552D74E064638BEC11ECB1AFC59@CY4PR16MB1655.namprd16.prod.outlook.com/&quot;&gt;a patch to the mailing list&lt;/a&gt;
with the changes and explanation that had been discussed. Torsten
Bögershausen, Philip and Junio reviewed it, and suggested some
improvements. Junio especially requested some tests to be added.&lt;/p&gt;

    &lt;p&gt;After some discussions with Jason to clarify what should be
improved, Jason sent
&lt;a href=&quot;https://lore.kernel.org/git/20220507185813.1403802-1-jhatton@globalfinishing.com/&quot;&gt;another version of his patch&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;It looked like Jason found an issue with the patch due to using
0x80000000 instead of 1. René and Philip discussed it with Jason,
but there was no clear conclusion. It wasn’t even clear if there was
an issue at all. But anyway the work on this stopped for more than
one year.&lt;/p&gt;

    &lt;p&gt;Fortunately a few weeks ago, brian m. carlson sent
&lt;a href=&quot;https://lore.kernel.org/git/20231012160930.330618-1-sandals@crustytoothpaste.net/&quot;&gt;a new version of Jason’s patch&lt;/a&gt;
along with another patch adding tests.&lt;/p&gt;

    &lt;p&gt;These patches were reviewed by Eric Sunshine, Jeff King, alias Peff,
Junio and Jason. After some discussions it appeared that the patches
were good enough for Junio, so he decided to apply a small change
and then merge them. This issue is therefore fixed in
Git 2.43.0 released on November 20th.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-alexander-shopov&quot;&gt;Developer Spotlight: Alexander Shopov&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I am Alexander Shopov - a backend engineer in the Amsterdam office of
Uber working on money related systems. I am a long time translator of
FOSS software to Bulgarian - I am coordinating translations of GNOME,
Translation Project and many GNU modules. Bulgarian is an Eastern
South Slavic language written in the Cyrillic alphabet.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I made and now maintain the Bulgarian translation of the text
interface of Git, Gitk, and Git Gui.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is the typical workflow of a contributor engaged in Git
translation?&lt;/p&gt;

    &lt;p&gt;There are 19 translations of the text interface of Git, and only 13 of
them are above 80%, so I am not sure about “typical”. It is a fairly
standard workflow for a FOSS project.&lt;/p&gt;

    &lt;p&gt;Generally one needs to do the following:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;Read the translator-targeted README.md in the po directory&lt;/li&gt;
      &lt;li&gt;Sync pace with the &lt;a href=&quot;https://tinyurl.com/gitcal&quot;&gt;calendar of Git releases&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Use the &lt;a href=&quot;https://github.com/git-l10n/git-po&quot;&gt;l10n coordinator repository&lt;/a&gt;
maintained by Jiang Xin who makes sure translations get integrated upstream.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;Currently the translation is a bit above 5500 messages, which is about
40k words, 250k of characters, or about 150 pages of text. It can be
intimidating for a new translator. But you can definitely make it: be
patient and translate some messages every release, merge, publish and
repeat. Even better though harder is getting more than one person
translating.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you contribute to Git in ways other than providing translation?
If so, could you elaborate about them?&lt;/p&gt;

    &lt;p&gt;Sadly not that much. On rare occasions I improve messages and mark
strings for translations. Perhaps that will be the way I contribute
unless I find a mentor and something that I find particularly
interesting and important for me. So if anyone is willing to mentor
me, especially in making large repos faster - &lt;a href=&quot;mailto:ash@kambanaria.org&quot;&gt;ping me&lt;/a&gt;.
I can be a competent tester at least.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Due to its enormous success, Git is being used on humongous code bases
with a crazy number of files, directories, commits and branches.
Working with repos larger than 10GB can be a bit slow. Improving the
experience would be a great thing.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Backwards compatibility is massively important and I am thankful
developers and users are all invested in this.&lt;/p&gt;

    &lt;p&gt;If we treat this as a hypothetical question, there are 3 things to Git:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;the command-line interface&lt;/li&gt;
      &lt;li&gt;the wire protocol&lt;/li&gt;
      &lt;li&gt;the storage format&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;The command-line interface is gradually being improved. The wire
protocol is also a place where there are workarounds for versioning.
The storage format however is another (quite conservative and public)
API. I would remove the old versions and try to design it targeting
projects that are 10-100 times larger than the Linux kernel first. In
for a penny, in for a pound. If we break things, let us break them so
hard that bards will sing songs about us!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I mainly use command line &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; plus &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gitk&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-gui&lt;/code&gt;. I do like using
the meld diff tool when I work on translations.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t. contributing
to the Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;The initial getting to 100% translated messages was a challenge. I
decided that I should translate Git around December 2013. That was
around 2200 messages at that time and it took me about 3 releases of
Git to reach 100%. Getting to 100% was immensely hard, rewarding and
memorable. Afterwards keeping the translation at 100% was much easier.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Is there something you feel could be done to ease the life of
translators?&lt;/p&gt;

    &lt;p&gt;The terminology glossary of Git is much larger than 7 years ago, and we
(the translators) should actually update &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git://repo.or.cz/git-gui.git::po/glossary&lt;/code&gt;
and merge it in Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;I don’t know to be honest. If I knew I may have started already.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;That would be the tip of master two years in the future. On a more
serious note - perhaps more tools for migration out of the still
existing proprietary version control systems would be helpful.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-11-20-highlights-from-git-2-43/&quot;&gt;Highlights from Git 2.43&lt;/a&gt;
by Taylor Blau on GitHub Blog.  Those include new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repack&lt;/code&gt; tricks
(including adjusting sparse clone filters), nicer looking reverts of reverts
with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git revert&lt;/code&gt;, fixed interaction between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--subject-prefix&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--rfc&lt;/code&gt;
in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt;, custom log format options that simulate the decorations, etc.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitea.com/gitea-cloud/&quot;&gt;Gitea Cloud: A brand new platform for managed Gitea Instances&lt;/a&gt;,
designed for enterprise organizations to set up and run
their own Gitea instances more easily and efficiently.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.dolthub.com/blog/2023-11-01-announcing-doltgresql/&quot;&gt;Announcing DoltgreSQL&lt;/a&gt;
by Daylon Wilkins on DoltHub Blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2023/11/DoltgreSQL-git-for-data-postgres/&quot;&gt;Git-for-Data, Version-Controlled Database Dolt Gets PostgreSQL-Flavor&lt;/a&gt;
by Sergio De Simone on InfoQ.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/dolthub/dolt&quot;&gt;Dolt&lt;/a&gt;, a version-controlled database,
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/04/23/edition-62/&quot;&gt;Git Rev News Edition #62&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.itsfoss.com/tinacms-open-source/&quot;&gt;An Interesting CMS With Version Control is Now Open-Source!&lt;/a&gt;
by Sourav Rudra on It’s FOSS News (it’s &lt;a href=&quot;https://tina.io/&quot;&gt;TinaCMS&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/space/2023/11/21/space-git-subtree/&quot;&gt;Introducing the Space Git Subtree&lt;/a&gt;
by Ilia Afanasiev on The Space Blog (where Space is JetBrains’ code collaboration platform).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/security/2023/11/developers-cant-seem-to-stop-exposing-credentials-in-publicly-accessible-code/&quot;&gt;Developers can’t seem to stop exposing credentials in publicly accessible code&lt;/a&gt;
by Dan Goodin on Ars Technica, and&lt;br /&gt;
&lt;a href=&quot;https://blog.gitguardian.com/uncovering-thousands-of-unique-secrets-in-pypi-packages/&quot;&gt;Uncovering thousands of unique secrets in PyPI packages&lt;/a&gt;
by Tom Forbes on GitGuardian Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitenterprise.me/2023/11/21/14-years-of-jgit-egit-code-reviews-migrated-to-gerrithub/&quot;&gt;14 years of JGit/EGit Code Reviews migrated to GerritHub&lt;/a&gt; by Luca Milanesio on GerritForge Blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://glandium.org/blog/?p=4346&quot;&gt;How I (kind of) killed Mercurial at Mozilla&lt;/a&gt;
by Mike Hommey (author of &lt;a href=&quot;https://github.com/glandium/git-cinnabar&quot;&gt;git-cinnabar&lt;/a&gt;,
Git remote helper to interact with Mercurial repositories).&lt;/li&gt;
  &lt;li&gt;Julia Evans continues the series of articles about Git (started in
&lt;a href=&quot;https://git.github.io/rev_news/2023/09/30/edition-103/&quot;&gt;Git Rev News #103&lt;/a&gt;
with &lt;a href=&quot;https://jvns.ca/blog/2023/09/14/in-a-git-repository--where-do-your-files-live-/&quot;&gt;In a git repository, where do your files live?&lt;/a&gt;
and
&lt;a href=&quot;https://git.github.io/rev_news/2023/10/31/edition-104/&quot;&gt;Git Rev News #104&lt;/a&gt;
with &lt;a href=&quot;https://jvns.ca/blog/2023/10/20/some-miscellaneous-git-facts/&quot;&gt;Some miscellaneous git facts&lt;/a&gt;);
currently there are the following additional posts:
&lt;a href=&quot;https://jvns.ca/blog/2023/11/01/confusing-git-terminology/&quot;&gt;Confusing git terminology&lt;/a&gt;,
&lt;a href=&quot;https://jvns.ca/blog/2023/11/06/rebasing-what-can-go-wrong-/&quot;&gt;git rebase: what can go wrong?&lt;/a&gt;,
&lt;a href=&quot;https://jvns.ca/blog/2023/11/10/how-cherry-pick-and-revert-work/&quot;&gt;How git cherry-pick and revert use 3-way merge&lt;/a&gt;,
and &lt;a href=&quot;https://jvns.ca/blog/2023/11/23/branches-intuition-reality/&quot;&gt;git branches: intuition &amp;amp; reality&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;Julia Evans (@b0rk@jvns.ca) asked about a read-only FUSE filesystem for a Git repository
where every commit is a folder and the folder contains all the files in that commit
&lt;a href=&quot;https://fosstodon.org/@b0rk@jvns.ca/111462737333140668&quot;&gt;on Mastodon&lt;/a&gt;, so this series may continue
(so far it led to very experimental &lt;a href=&quot;https://github.com/jvns/git-commit-folders&quot;&gt;git-commit-folders&lt;/a&gt;
tool from her, and &lt;a href=&quot;https://belkadan.com/blog/2023/11/GitMounter/&quot;&gt;GitMounter&lt;/a&gt; from
Jordan Rose being made public).&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://matthew-brett.github.io/pydagogue/pain_in_dots.html&quot;&gt;Pain in the dots&lt;/a&gt;
by Matthew Brett (part of &lt;a href=&quot;https://matthew-brett.github.io/pydagogue/git.html&quot;&gt;Notes and tutorials on git&lt;/a&gt;),
about the confusing difference in how two-dot and three-dot notations
behave in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt;, as an addition to the Julia Evans’ article
about confusing Git terminology, the &lt;a href=&quot;https://jvns.ca/blog/2023/11/01/confusing-git-terminology/#and&quot;&gt;.. and … section&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.ltgt.net/teaching-git/&quot;&gt;How I teach Git&lt;/a&gt; by Thomas Broyer
on his blog (also &lt;a href=&quot;https://dev.to/tbroyer/how-i-teach-git-3nj3&quot;&gt;on DEV.to&lt;/a&gt;).
Inspired by Julia Evans’ (renewed) interest in Git and her questions on social networks.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://newsletter.pragmaticengineer.com/p/stacked-diffs&quot;&gt;Stacked Diffs (and why you should know about them)&lt;/a&gt;
by Gergely Orosz in The Pragmatic Engineer blog.  Another article about Stacked Diffs
can be found in &lt;a href=&quot;https://git.github.io/rev_news/2018/10/24/edition-44/&quot;&gt;Git Rev News Edition #44&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;Compare and contrast  &lt;a href=&quot;https://martinfowler.com/articles/ship-show-ask.html&quot;&gt;Ship / Show / Ask: A modern branching strategy&lt;/a&gt;
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/09/30/edition-79/&quot;&gt;Edition #79&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://koenvangilst.nl/blog/trunkbased-development&quot;&gt;Why I Prefer Trunk-Based Development&lt;/a&gt;
by Koen van Gilst on his blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2021/03/27/edition-73/&quot;&gt;Git Rev News Edition #73&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;A bit controversial &lt;a href=&quot;https://www.forrestthewoods.com/blog/dependencies-belong-in-version-control/&quot;&gt;Dependencies Belong in Version Control&lt;/a&gt;
(even if it’s not practical today due to Git’s limitations)
by Forrest Smith on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/dunkbing/managing-my-resume-with-git-a-version-control-approach-7hk&quot;&gt;Managing My Resume with Git: A Version Control Approach&lt;/a&gt;
by Bui Dang Binh (dunkbing) on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://calebhearth.com/git-method-history&quot;&gt;See the History of a Method with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -L&lt;/code&gt;&lt;/a&gt;
by Caleb Hearth on his blog; the post lists also a few his other articles about Git:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://calebhearth.com/stash-what-git-wouldnt-commit&quot;&gt;Stash only what &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt; wouldn’t commit&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://calebhearth.com/rubocop-git-blame&quot;&gt;Ignore refactoring commits in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://calebhearth.com/sign-git-with-ssh&quot;&gt;Use your SSH key to sign commits&lt;/a&gt;.
        &lt;ul&gt;
          &lt;li&gt;See also, for example,
&lt;a href=&quot;https://blog.dbrgn.ch/2021/11/16/git-ssh-signatures/&quot;&gt;Signing Git Commits with SSH Keys&lt;/a&gt;
from &lt;a href=&quot;https://git.github.io/rev_news/2022/01/31/edition-83/&quot;&gt;Git Rev News Edition #83&lt;/a&gt;.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tekin.co.uk/2020/11/patterns-for-searching-git-revision-histories&quot;&gt;Why Git blame sucks for understanding WTF code (and what to use instead)&lt;/a&gt;
by Tekin Süleyman (2020); the author recommend “pickaxe” search with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -S&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -G&lt;/code&gt;, or searching commit messages with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --grep&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://adiati.com/how-to-resolve-merge-conflicts-using-the-merge-editor-feature-on-vs-code&quot;&gt;How to Resolve Merge Conflicts Using the Merge Editor Feature on VS Code&lt;/a&gt;
by Ayu Adiati on Ayu’s Notes On Blog (also &lt;a href=&quot;https://dev.to/adiatiayu/how-to-resolve-merge-conflicts-using-the-merge-editor-feature-on-vs-code-pic&quot;&gt;on DEV.to&lt;/a&gt;,
as part of larger &lt;a href=&quot;https://dev.to/adiatiayu/series/15234&quot;&gt;Open-Source Series’ Articles&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://laravel-news.com/the-ultimate-git-nah-alias&quot;&gt;The Ultimate “git nah” Alias&lt;/a&gt;
to throw away current changes, untracked files and rebase state,
by Paul Redmond on Laravel News.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://graphite.dev/blog/understanding-git&quot;&gt;Understanding Git: The history and internals&lt;/a&gt;
by Kenneth DuMez on the Graphite Blog (more about history and internals than about
understanding Git).  See also:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitHistory.html&quot;&gt;GitHistory page in the archives of Git SCM Wiki&lt;/a&gt;,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://tom.preston-werner.com/2009/05/19/the-git-parable.html&quot;&gt;The Git Parable&lt;/a&gt;,
by Tom Preston-Werner (2009) - the ideas behind the architecture of Git;
covered in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;Git Rev News #30&lt;/a&gt;,&lt;/li&gt;
      &lt;li&gt;Will Hay Jr.’s &lt;a href=&quot;https://medium.com/@willhayjr/the-architecture-and-history-of-git-a-distributed-version-control-system-62b17dd37742&quot;&gt;The Architecture and History of Git: A Distributed Version Control System&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/12/19/edition-46/&quot;&gt;Git Rev News #46&lt;/a&gt;,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;The History of Git: The Road to Domination in Software Version Control&lt;/a&gt;
referenced in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News #60&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://garrit.xyz/posts/2023-11-01-tracking-sqlite-database-changes-in-git&quot;&gt;Tracking SQLite Database Changes in Git&lt;/a&gt;
with an appropriate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;textconv&lt;/code&gt; gitattribute, by Garrit Franke on Garrit’s Notes.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoworld.com/article/3710428/githubs-all-in-bet-on-ai-may-overlook-git.html&quot;&gt;GitHub’s all-in bet on AI may overlook Git&lt;/a&gt;
by Matt Asay on InfoWorld.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/deadlybyte/please-add-gitattributes-to-your-git-repository-1jld&quot;&gt;🙏 Please Add .gitattributes To Your Git Repository&lt;/a&gt;
by Carl Saunders on DEV.to (2020).
    &lt;ul&gt;
      &lt;li&gt;A &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitattributes&lt;/code&gt; file &lt;a href=&quot;https://github.com/github-linguist/linguist/blob/master/docs/overrides.md#using-gitattributes&quot;&gt;can be used to improve&lt;/a&gt;
   language detection on GitHub, which is using the
   &lt;a href=&quot;https://github.com/github-linguist/linguist&quot;&gt;Linguist&lt;/a&gt; library.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching and listening&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PL1gv5yv3DoZNIPVAlZRGPEB0fBvflO-xN&quot;&gt;Git Training&lt;/a&gt;
playlist of 45 short YouTube videos by Joost De Cock
provides Git training materials for people who would like to understand
how Git works rather than try to memorize all of its commands
without knowing what they do.&lt;/li&gt;
  &lt;li&gt;The Real Python Podcast:
&lt;a href=&quot;https://realpython.com/podcasts/rpp/179/&quot;&gt;Episode 179: Improving Your Git Developer Experience in Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitattributes.io/&quot;&gt;gitattributes.io&lt;/a&gt; is a service to generate 
&lt;a href=&quot;https://git-scm.com/docs/gitattributes&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitattributes&lt;/code&gt;&lt;/a&gt; files,
similar to &lt;a href=&quot;https://www.toptal.com/developers/gitignore/&quot;&gt;gitignore.io&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://githistory.xyz/&quot;&gt;githistory.xyz&lt;/a&gt; is a service that allows to
quickly browse the history of files in any Git repo (from GitHub, GitLab, Bitbucket).
Also available as Chrome, Firefox, and Visual Studio extensions,
and as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-file-history&lt;/code&gt; command line tool (in Node.js).
Mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Git Rev News Edition #48&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Josh Branchaud (jbranchaud) collected a list of
&lt;a href=&quot;https://github.com/jbranchaud/til#git&quot;&gt;Today I Learned (TIL) tips about Git&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/lei.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lei&lt;/code&gt;&lt;/a&gt; is a command-line tool
for importing and searching email, regardless of whether it is from a personal mailbox
or a public-inbox instance, like &lt;a href=&quot;https://public-inbox.org/README.html&quot;&gt;public-inbox.org&lt;/a&gt;
or &lt;a href=&quot;https://lore.kernel.org/&quot;&gt;lore.kernel.org&lt;/a&gt;.&lt;br /&gt;
Warning: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lei&lt;/code&gt; is still in its early stages and may destroy mail.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://people.kernel.org/monsieuricon/lore-lei-part-1-getting-started&quot;&gt;lore+lei: part 1, getting started&lt;/a&gt;
article by Konstantin Ryabitsev (2021).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/casperdcl/git-fame&quot;&gt;git-fame&lt;/a&gt;: Pretty-print
Git repository collaborators sorted by contributions (includes computing
code survival).  Written in Python.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/oleander/git-fame-rb&quot;&gt;git-fame-rb&lt;/a&gt; is a command-line tool
that helps you summarize and pretty-print collaborators, based on the number of contributions.
The statistics are mostly based on the output of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt; (counting surviving lines).
Written in Ruby.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amrdeveloper.github.io/GQL/&quot;&gt;GQL (Git Query Language)&lt;/a&gt;
[&lt;a href=&quot;https://github.com/AmrDeveloper/GQL&quot;&gt;repo&lt;/a&gt;]
is a SQL-like language to perform queries on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; files,
with support for many SQL features
such as grouping, ordering and aggregation functions.&lt;br /&gt;
You can find more in &lt;a href=&quot;https://www.freecodecamp.org/news/gql-design-and-implementation/&quot;&gt;How I Created a SQL-like Language to Run Queries on Local Git Repositories&lt;/a&gt;
article by Amr Hesham on freeCodeCamp.&lt;br /&gt;
See also the following tools:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/SOM-Research/Gitana&quot;&gt;Gitana&lt;/a&gt;: SQL-based Project Activity Inspector
(repo archived in 2022),
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/09/09/edition-7/&quot;&gt;Git Rev News Edition #7&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/src-d/gitbase&quot;&gt;gitbase&lt;/a&gt;: SQL interface to Git repositories, written in Go;
(last release from 2019, &lt;a href=&quot;https://docs.sourced.tech/gitbase&quot;&gt;homepage&lt;/a&gt; is not working),
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Git Rev News Edition #48&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://datasette.io/tools/git-history&quot;&gt;git-history&lt;/a&gt; is a tool
for analyzing Git history using SQLite (last release in 2021),
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;Git Rev News Edition #82&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/mergestat/mergestat&quot;&gt;MergeStat&lt;/a&gt; enables SQL queries
for data in Git repositories (and related sources, such as the GitHub API).
There is also the &lt;a href=&quot;https://github.com/mergestat/mergestat-lite&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mergestat-lite&lt;/code&gt;&lt;/a&gt;
command line tool, which runs SQL queries against local Git repositories.
First mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;Git Rev News Edition #82&lt;/a&gt;.
Actively developed, mergestat-lite is written in Go.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fanzeyi/giblefs&quot;&gt;GibleFS&lt;/a&gt; is a toy project
that maps a Git repository to a virtual filesystem, which then can be used
to access the repository at any given commit.  Written in Rust, does not seem
to be actively developed.&lt;/li&gt;
  &lt;li&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Git/fs&lt;/code&gt; binary in &lt;a href=&quot;https://orib.dev/git9.html&quot;&gt;Git9&lt;/a&gt;
(Git client for Plan 9 non-POSIX filesystem)
serves repository history as a file system.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/presslabs/gitfs&quot;&gt;gitfs&lt;/a&gt; is a FUSE file system
that fully integrates with Git. You can mount a remote repository’s branch locally,
and any subsequent changes made to the files will be automatically committed to the remote.
Written in Python, last release in 2019.
    &lt;ul&gt;
      &lt;li&gt;Note: that is not the only project named gitfs or git-fs.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/slothfs&quot;&gt;SlothFS&lt;/a&gt; is a FUSE filesystem
that provides light-weight, lazily downloaded, read-only checkouts
of manifest-based Git projects. It is intended for use with Android.
Written in Go, repository archived in 2022.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://belkadan.com/source/GitMounter/&quot;&gt;GitMounter&lt;/a&gt; is
a toy FUSE browser for Git repos based on &lt;a href=&quot;https://belkadan.com/source/Suffusion/&quot;&gt;Suffusion&lt;/a&gt;.
Requires FUSE, libgit2, pkg-config, and Swift installed.
Written in Swift.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqzfz8l5or.fsf@gitster.g/&quot;&gt;2.43.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqo7fwxn4s.fsf@gitster.g/&quot;&gt;2.43.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq8r785ev1.fsf@gitster.g/&quot;&gt;2.43.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqy1fgkqg1.fsf@gitster.g/&quot;&gt;2.43.0-rc0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq4ji4m50l.fsf@gitster.g/&quot;&gt;2.42.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.43.0.windows.1&quot;&gt;2.43.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.43.0-rc2.windows.1&quot;&gt;2.43.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.43.0-rc1.windows.1&quot;&gt;2.43.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.43.0-rc0.windows.1&quot;&gt;2.43.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/11/16/gitlab-16-6-released/&quot;&gt;16.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/11/14/gitlab-16-5-2-released/&quot;&gt;16.5.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/10/31/security-release-gitlab-16-5-1-16-4-2-16-3-6-released/&quot;&gt;16.5.1, 16.4.2, 16.3.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.6.html#368&quot;&gt;3.6.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.7.html#376&quot;&gt;3.7.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.8.html#383&quot;&gt;3.8.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.9.html#390&quot;&gt;3.9.0-rc6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.11/admin/release-notes#3.11.0&quot;&gt;3.11.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.10.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/blog/tower-windows-52/&quot;&gt;5.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-102/&quot;&gt;10.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Alexander Shopov, Luca Milanesio,
Bruno Brito, and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 104 (October 31st, 2023)</title>
      <link>https://git.github.io/rev_news/2023/10/31/edition-104/</link>
      <pubDate>Tue, 31 Oct 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/10/31/edition-104/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-104-october-31st-2023&quot;&gt;Git Rev News: Edition 104 (October 31st, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 104th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of September 2023 and October 2023.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://docs.google.com/document/d/1GKoYtVhpdr_N2BAonYsxVTpPToP1CgCS9um0K7Gx9gQ&quot;&gt;Git Virtual Contributor’s Summit 2023&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;A virtual summit happened on September 26th and 27th, where the
contributors discussed
&lt;a href=&quot;https://docs.google.com/spreadsheets/d/1EnhmTeEqRBlEI2pMAO3oZ4rO1xEwBzYp2vS4CMtvge8&quot;&gt;topics that they had previously voted on&lt;/a&gt;.
Taylor Blau, who organized the summit, polished and then sent
&lt;a href=&quot;https://lore.kernel.org/git/ZRregi3JJXFs4Msb@nand.local/#r&quot;&gt;the notes that were taken during the summit&lt;/a&gt;
to the mailing list.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/87badb12f040d1c66cd9b89074d3de5015a45983.1694446743.git.dsimic@manjaro.org/&quot;&gt;[PATCH] diff –stat: add config option to limit filename width&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Dragan Simic sent a patch to the mailing list that added a new
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff.statNameWidth=&amp;lt;width&amp;gt;&lt;/code&gt; configuration option. The goal with
this option was to make it possible to limit the width of the
filepath part of the “stat” output of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; commands.&lt;/p&gt;

    &lt;p&gt;For example, the “stat” output of a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; command contains lines like this:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;path/to/file.txt                         | 11 +++++++--
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;where the “filepath” part, also called “name” or “filename” part, of
that output is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;path/to/file.txt&lt;/code&gt; and the “graph” part is
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;11 +++++++--&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;There were already a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff.statGraphWidth=&amp;lt;width&amp;gt;&lt;/code&gt; configuration
option to limit the width of the graph part, and also
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stat-name-width=&amp;lt;width&amp;gt;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stat-graph-width=&amp;lt;width&amp;gt;&lt;/code&gt; command
line options to limit the width of the name and graph part,
respectively. So it was logical to add the missing configuration
option.&lt;/p&gt;

    &lt;p&gt;These options are especially useful for people using very large
terminals, to prevent “stat” output from using a lot of columns.&lt;/p&gt;

    &lt;p&gt;The new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff.statNameWidth=&amp;lt;width&amp;gt;&lt;/code&gt; was designed to be ignored by
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; in the same way as
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff.statGraphWidth=&amp;lt;width&amp;gt;&lt;/code&gt;, because that command already respects
the traditional 80-column standard.&lt;/p&gt;

    &lt;p&gt;Before sending this patch, Dragan had sent
&lt;a href=&quot;https://lore.kernel.org/git/eb8f524eca3975f086715ec32a8a1fbb@manjaro.org/&quot;&gt;an RFC email&lt;/a&gt;
asking if such a patch would be accepted, which led to an interesting
discussion between him and Junio Hamano, the Git maintainer, about
the fact that we often cannot promise anything about a hypothetical
patch before actually seeing it on the mailing list.&lt;/p&gt;

    &lt;p&gt;Junio reviewed the actual patch and wondered if it would be possible
to specify contradictory values for the whole width on one side and
the “name” and “graph” width on the other side. He also suggested
creating a helper function to initialize all the variables that
contain the values of the configuration options for the different
parts, as the code initializing those variables was duplicated in
the code of many Git commands.&lt;/p&gt;

    &lt;p&gt;Dragan replied that the diff code already performed “a reasonable
amount of sanity checks and value adjustments”. He wondered if
warnings should be emitted in case of contradictory settings though.&lt;/p&gt;

    &lt;p&gt;Dragan then agreed that refactoring the code that initialized the
variables would be nice, but he proposed to do it after the current
patch would have been merged.&lt;/p&gt;

    &lt;p&gt;Junio and Dragan agreed with doing the refactoring later and
discussed a bit deeper if more changes were needed in this patch, but
it appeared that it could be merged as is, and so it was.&lt;/p&gt;

    &lt;p&gt;A few days later Dragan sent
&lt;a href=&quot;https://lore.kernel.org/git/166396f0a98e248fc3d1236757632c5d648ddc0b.1695364961.git.dsimic@manjaro.org/&quot;&gt;a patch to refactor the code that initialized the variables&lt;/a&gt;.
Junio reviewed it and suggested some improvements, which Dragan
implemented in &lt;a href=&quot;https://lore.kernel.org/git/d45d1dac1a20699e370905b88b6fd0ec296751e7.1695441501.git.dsimic@manjaro.org/&quot;&gt;a second version of the patch&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;This second version was also reviewed by Junio and then merged.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://adamchainz.gumroad.com/l/bygdx&quot;&gt;New book “Boost Your Git DX”&lt;/a&gt; by Git contributor Adam Johnson, covering tools and configurations to improve your command line workflow.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2023/10/12/contributions-to-git-2-42-release/&quot;&gt;Git 2.42 release: Here are four of our contributions in detail&lt;/a&gt;
by Christian Couder on GitLab Blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-08-21-highlights-from-git-2-42/&quot;&gt;Highlights from Git 2.42&lt;/a&gt;
link can be found in &lt;a href=&quot;https://git.github.io/rev_news/2023/08/31/edition-102/&quot;&gt;Git Rev News Edition #102&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://jvns.ca/blog/2023/10/20/some-miscellaneous-git-facts/&quot;&gt;Some miscellaneous git facts&lt;/a&gt;
by Julia Evans on her blog.  The facts are:
    &lt;ul&gt;
      &lt;li&gt;the “index”, “staging area” and “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cached&lt;/code&gt;” are all the same thing&lt;/li&gt;
      &lt;li&gt;the stash is a bunch of commits&lt;/li&gt;
      &lt;li&gt;not all references are branches or tags&lt;/li&gt;
      &lt;li&gt;merge commits aren’t empty&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://roadrunnertwice.dreamwidth.org/596185.html&quot;&gt;Why Git is hard&lt;/a&gt;
by Nick Eff on his Roadrunner Twice Dreamwidth’s journal,
in response to Julia Evans ending her StrangeLoop 2023 keynote talk with
“I still don’t know why Git is hard.”
    &lt;ul&gt;
      &lt;li&gt;There is some discussion on the &lt;a href=&quot;https://programming.dev/post/4051745&quot;&gt;programming.dev Lemmy instance&lt;/a&gt;
about this post.&lt;/li&gt;
      &lt;li&gt;Various attempts to make Git or version control easier include
&lt;a href=&quot;http://gitless.com/&quot;&gt;Gitless&lt;/a&gt; - first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News Edition #20&lt;/a&gt;,
&lt;a href=&quot;https://github.com/martinvonz/jj&quot;&gt;Jujutsu&lt;/a&gt; - mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;#85&lt;/a&gt;,
and &lt;a href=&quot;https://github.com/dfabulich/easygit&quot;&gt;EasyGit (eg)&lt;/a&gt; - seems not to be actively developed.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/investigating-git-history/&quot;&gt;Investigating Git History&lt;/a&gt;
by Kristian Lumme on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-10-16-measuring-git-performance-with-opentelemetry/&quot;&gt;Measuring Git performance with OpenTelemetry&lt;/a&gt;
by Jeff Hostetler on GitHub Blog.  It describes how to use open source
&lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/technical/api-trace2.adoc&quot;&gt;Trace2&lt;/a&gt;
&lt;a href=&quot;https://github.com/git-ecosystem/trace2receiver&quot;&gt;receiver component (trace2receiver)&lt;/a&gt;
and &lt;a href=&quot;https://opentelemetry.io/docs/what-is-opentelemetry/&quot;&gt;OpenTelemetry&lt;/a&gt;
to capture and visualize telemetry from your Git commands.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.meain.io/2023/what-is-in-dot-git/&quot;&gt;What is in that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; directory?&lt;/a&gt;
by Abin Simon on meain/blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.specfy.io/blog/7-git-like-versioning-in-postgres&quot;&gt;Versioning data in Postgres? Testing a git like approach&lt;/a&gt;
by Samuel Bodin on his Specfy Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://garrit.xyz/posts/2023-10-13-organizing-multiple-git-identities&quot;&gt;Organizing multiple Git identities&lt;/a&gt;
using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitconfig&lt;/code&gt; includes,
by Garrit Franke on Garrit’s Notes blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackaday.com/2023/10/17/linux-fu-deep-git-rebasing/&quot;&gt;Linux Fu: Deep Git Rebasing&lt;/a&gt;
by Al Williams on Hackaday.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://matheustavares.gitlab.io/posts/rewriting-history-101&quot;&gt;Git: Rewriting History 101&lt;/a&gt;
by Matheus Tavares (2022).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20230728-00/?p=108498&quot;&gt;How to split off an older copy of a file while preserving git line history&lt;/a&gt;
by Raymond Chen on Microsoft’s The Old New Thing DevBlog.
    &lt;ul&gt;
      &lt;li&gt;His older article on &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20190919-00/?p=102904&quot;&gt;how to duplicate a file while preserving git line history&lt;/a&gt;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/05/22/edition-51/&quot;&gt;Git Rev News Edition #51&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thenewstack.io/embracing-database-deployments-in-ci-cd-practices-with-git/&quot;&gt;Embracing Database Deployments in CI/CD Practices with Git&lt;/a&gt;
by Vanessa Fox from PlanetScale on TheNewStack.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://planetscale.com/blog/database-branching-three-way-merge-schema-changes&quot;&gt;An article&lt;/a&gt;
about &lt;a href=&quot;https://planetscale.com/docs/concepts/branching&quot;&gt;PlanetScale branching support for MySQL&lt;/a&gt;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/05/31/edition-99/&quot;&gt;Git Rev News Edition #99&lt;/a&gt;,
while PlanetScale as solution was mentioned in set of article about databases and versioning
in &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;Git Rev News Edition #82&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.yieldcode.blog/post/npm-workspaces/&quot;&gt;TypeScript Monorepo with NPM workspaces&lt;/a&gt;
by Dmitry Kudryavtsev on yield code(); blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://matheustavares.gitlab.io/posts/empty-tree&quot;&gt;The “Schrödinger’s tree object”: is it there or not?&lt;/a&gt;:
Matheus Tavares finds about the hard-coded empty tree object (2022).&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gittuf.dev/&quot;&gt;gittuf&lt;/a&gt; provides a security layer for Git
using some concepts introduced by &lt;a href=&quot;https://theupdateframework.io/&quot;&gt;The Update Framework (TUF)&lt;/a&gt;.
Among other features it handles key management for all developers on the repository,
allows you to set permissions for repository branches, tags, files, etc.&lt;br /&gt;
gittuf is a sandbox project at the &lt;a href=&quot;https://openssf.org/&quot;&gt;Open Source Security Foundation (OpenSSF)&lt;/a&gt;
as part of the &lt;a href=&quot;https://github.com/ossf/wg-supply-chain-integrity&quot;&gt;Supply Chain Integrity Working Group&lt;/a&gt;.
It is currently in &lt;em&gt;alpha&lt;/em&gt;.  Written in Go.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-ecosystem/trace2receiver&quot;&gt;trace2receiver&lt;/a&gt; project
is a &lt;a href=&quot;https://opentelemetry.io/docs/collector/trace-receiver/&quot;&gt;trace receiver&lt;/a&gt; component library
for an &lt;a href=&quot;https://opentelemetry.io/docs/collector/&quot;&gt;OpenTelemetry Custom Collector&lt;/a&gt; daemon.
It receives &lt;a href=&quot;https://git-scm.com/docs/api-trace2#_the_event_format_target&quot;&gt;Git Trace2&lt;/a&gt; telemetry
from local Git commands, translates it into an OpenTelemetry format, and forwards it
to other OpenTelemetry components.  Written in Go as a static library component
that must be linked into an OpenTelemetry Custom Collector.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-ecosystem/git-bundle-server&quot;&gt;git-bundle-server&lt;/a&gt;
is a web server &amp;amp; management CLI to host Git bundles for use with Git’s
&lt;a href=&quot;https://git-scm.com/docs/bundle-uri&quot;&gt;“bundle URIs” feature&lt;/a&gt;.
By running this software, you can self-host a bundle server.
Written in Go, under active development.  Installation on Windows is currently unsupported.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ianchanning/awesome-github-alternatives&quot;&gt;Awesome GitHub Alternatives&lt;/a&gt;
is a list of alternatives to GitHub that by default offer Git management in some way.
All self-hosted options are free and open source, with GPL-compatibile licenses.
Not exhaustive.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.catb.org/esr/src/&quot;&gt;src (Simple Revision Control)&lt;/a&gt;
is RCS/SCCS reloaded with a modern UI, designed to manage single-file solo projects
kept more than one to a directory. Use it for FAQs, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/bin&lt;/code&gt; directories, config files,
and the like.  Written in Python.
    &lt;ul&gt;
      &lt;li&gt;Mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2018/12/19/edition-46/&quot;&gt;Git Rev News Edition #46&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.3&quot;&gt;3.10.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.6&quot;&gt;3.9.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.11&quot;&gt;3.8.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.18&quot;&gt;3.7.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/10/22/gitlab-16-5-released/&quot;&gt;16.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.9.2&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.9.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.9.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;TortoiseGit &lt;a href=&quot;https://tortoisegit.org/download/&quot;&gt;2.15.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.11.0&quot;&gt;0.11.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Bruno Brito, Adam Johnson and Sven Strickroth.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 103 (September 30th, 2023)</title>
      <link>https://git.github.io/rev_news/2023/09/30/edition-103/</link>
      <pubDate>Sat, 30 Sep 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/09/30/edition-103/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-103-september-30th-2023&quot;&gt;Git Rev News: Edition 103 (September 30th, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 103rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of August 2023 and September 2023.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2023/organizations/git&quot;&gt;Git participated in GSoC (Google Summer of Code) 2023&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The following contributors have successfully passed their final
evaluation and published a final report:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Shuqi Liang worked on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2023/projects/Rkbc1Abe&quot;&gt;More Sparse Index Integrations&lt;/a&gt;
project. She was mentored by Victoria Dye. The final
report can be found on &lt;a href=&quot;https://cheskaqiqi.github.io/2023/08/22/Final/&quot;&gt;her website&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Kousik Sanagavarapu worked on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2023/projects/rck3kmq2&quot;&gt;Unify ref-filter formats with other –pretty formats&lt;/a&gt;
project. He was co-mentored by Christian Couder and Hariom Verma.
The final report can be found on &lt;a href=&quot;https://five-sh.github.io/2023/08/26/the-final-report&quot;&gt;his website&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Congratulations to these contributors and their mentors!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/274ec1a2152b0fd53b35c1591f5177e0b0713430@rjp.ie/&quot;&gt;Fetching too many tags?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Ronan Pigott noticed that when he fetched from some repos, for
example from the
&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux&quot;&gt;“Linux Stable” repo&lt;/a&gt;
on &lt;a href=&quot;https://git.kernel.org/&quot;&gt;kernel.org&lt;/a&gt;, most of the time seemed to
be spent transferring tags from the remote to the client.&lt;/p&gt;

    &lt;p&gt;When his local repo was up-to-date and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt; was used with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-tags&lt;/code&gt; (or its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-n&lt;/code&gt; shortcut), it took less than 0.4 seconds
versus more than 1.7 seconds without it.&lt;/p&gt;

    &lt;p&gt;He asked if there was a reason for this seemingly useless transfer of
tags even when the remote didn’t have to send any commit.&lt;/p&gt;

    &lt;p&gt;Peff, alias Jeff King, replied that “this is how the Git protocol
works”. He explained that the server only lists all the refs it
knows about, and expects the client to select the refs it wants
among them. “Only the client knows what it already has.” For
example, there could be new tags on the server pointing to commits
that the client already has.&lt;/p&gt;

    &lt;p&gt;Peff also mentioned that in recent Git versions an extension of the
Git protocol allows clients to list only the refs they are
interested in, so that the server can send “a much smaller ref
advertisement”.&lt;/p&gt;

    &lt;p&gt;Ronan asked if Peff was talking about the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--negotiation-tip&lt;/code&gt;
option, as some tests using this option didn’t result in better
performance.&lt;/p&gt;

    &lt;p&gt;Peff replied that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--negotiation-tip&lt;/code&gt; was only useful when there are
commits that should be transferred. When histories on the client and
the server have diverged, this option helps them find a common
commit that can be the base for the commits that will be
transferred.&lt;/p&gt;

    &lt;p&gt;Peff said the extension of the Git protocol he was talking about are
“ref-prefix” lines in Git’s “v2” protocol, which is the default
protocol since Git v2.29. This protocol allows the client to speak
first and specify which ref prefixes it’s interested in with these
“ref-prefix” lines.&lt;/p&gt;

    &lt;p&gt;Setting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_TRACE_PACKET&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt; allows one to see the packets
exchanged between the client and the server, especially the
“ref-prefix” lines when for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch --no-tags origin
master&lt;/code&gt; is launched using a recent Git, or the “have” and “want”
lines when client and server have to negotiate a common commit.&lt;/p&gt;

    &lt;p&gt;Ronan tested Peff’s suggestions and thanked him as he then
understood why the tag advertisement was useful.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://thehackernews.com/2023/09/critical-github-vulnerability-exposes.html&quot;&gt;Critical GitHub Vulnerability Exposes 4,000+ Repositories to Repojacking Attack&lt;/a&gt;
on The Hacker News.  The vulnerability was caused by a race condition
within GitHub’s repository creation and username renaming operations.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://techcrunch.com/2023/09/25/nx-lands-16m-to-build-monorepo-tools-for-software-devs/&quot;&gt;Nx lands $16M to build ‘monorepo’ tools for software devs&lt;/a&gt;
by Kyle Wiggers on TechCrunch.  The funding will be used to expand
&lt;a href=&quot;https://nx.dev/&quot;&gt;Nx&lt;/a&gt;’s fully managed product,
&lt;a href=&quot;https://nx.dev/nx-cloud/intro/what-is-nx-cloud&quot;&gt;Nx Cloud&lt;/a&gt;,
a replacement for existing continuous integration tools, such as Jenkins,
with first class &lt;a href=&quot;https://monorepo.tools/&quot;&gt;monorepo&lt;/a&gt; support.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://techcrunch.com/2023/09/21/oh-gitness-harness-launches-gitness-an-open-source-github-competitor/&quot;&gt;Harness launches Gitness, an open-source GitHub competitor&lt;/a&gt;
by Frederic Lardinois on TechCrunch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://jvns.ca/blog/2023/09/14/in-a-git-repository--where-do-your-files-live-/&quot;&gt;In a git repository, where do your files live?&lt;/a&gt;
by Julia Evans on her blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://adamj.eu/tech/2023/09/18/git-dont-create-gitkeep/&quot;&gt;Don’t create &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitkeep&lt;/code&gt; files, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; instead&lt;/a&gt; by Adam Johnson.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitbutler.com/signing-commits-in-git-explained/&quot;&gt;Signing Commits in Git, Explained&lt;/a&gt;
by Scott Chacon on &lt;a href=&quot;https://gitbutler.com/&quot;&gt;GitButler&lt;/a&gt; Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://akashrajpurohit.com/blog/selecting-the-right-git-merging-strategy-merge-commit-squash-and-merge-or-rebase-and-merge/&quot;&gt;Selecting the Right Git Merging Strategy: Merge Commit, Squash and Merge, or Rebase and Merge&lt;/a&gt;
by Akash Rajpurohit on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developers.redhat.com/articles/2023/09/07/drop-git-pull-fetch-and-rebase&quot;&gt;Drop git pull for fetch and rebase&lt;/a&gt;
by Yftach Herzog on RedHat Developer Blog, arguing that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt; followed
by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; is a safer alternative (with a feature branch workflow).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/documatic/advanced-git-commands-and-workflows-a-comprehensive-guide-for-developers-5865&quot;&gt;Advanced Git Commands and Workflows: A Comprehensive Guide for Developers&lt;/a&gt;
by Matías Hernández Arellano for Documatic on DEV.to;
covers interactive rebase, cherry-picking, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt;, reflog, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt;,
and various Git collaboration workflows.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://laravel-news.com/git-delta&quot;&gt;Git Delta is a Syntax Highlighting Pager for git, diff, and grep output&lt;/a&gt;
by Paul Redmond on Laravel News blog.  &lt;a href=&quot;https://dandavison.github.io/delta/&quot;&gt;Delta&lt;/a&gt;
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;;
there is a link to &lt;a href=&quot;https://dev.to/cloudx/delta-a-new-git-diff-tool-to-rock-your-productivity-2773&quot;&gt;another article about Delta&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2023/08/31/edition-102/&quot;&gt;Edition #102&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;There is also a &lt;a href=&quot;https://github.com/octavore/delta&quot;&gt;Delta&lt;/a&gt; command-line diff tool
implemented in Go, with a &lt;a href=&quot;http://delta.octavore.com/&quot;&gt;dead homepage&lt;/a&gt;
(&lt;a href=&quot;https://web.archive.org/web/20201108092055/http://delta.octavore.com/&quot;&gt;archive&lt;/a&gt;),
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/11/11/edition-9/&quot;&gt;Git Rev News Edition #9&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nordstroem.ch/posts/2023-09-10-git-sdlc.html&quot;&gt;Git-Based Software Development Life-Cycle&lt;/a&gt;
by Kris considers whether tools like 
&lt;a href=&quot;https://github.com/google/git-appraise&quot;&gt;git-appraise&lt;/a&gt;,
&lt;a href=&quot;https://github.com/dspinellis/git-issue&quot;&gt;git-issue&lt;/a&gt;, and
&lt;a href=&quot;https://github.com/MichaelMure/git-bug&quot;&gt;git-bug&lt;/a&gt;
that store their information, history, and artifacts directly in the repository
can replace development tools such as 
Jira (planning, issue tracking),
Confluence (wiki, documentation platform),
Bamboo (CI/CD server),
Artifactory (storing Docker images and CI/CD artifacts), and
Gerrit (code review).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://git.github.io/rev_news/2018/09/19/edition-43/&quot;&gt;Git Rev News Edition #43&lt;/a&gt;
includes a list of similar tools and links related to them.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/google/git-appraise&quot;&gt;git-appraise&lt;/a&gt; was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2016/01/13/edition-11/&quot;&gt;Git Rev News Edition #11&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://laravel-news.com/gitamic&quot;&gt;Delving Deeper into Gitamic: Power and Flexibility Beyond Statamic’s Built-In Git Features&lt;/a&gt;
by Eric L. Barnes on Laravel News blog.
&lt;a href=&quot;https://marketplace.anystack.sh/item/gitamic&quot;&gt;Gitamic&lt;/a&gt; is a premium
&lt;a href=&quot;https://statamic.com/&quot;&gt;Statamic CMS&lt;/a&gt; add-on that allows you
to take full control of your Git workflow from within your CMS.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/zenika/gitlab-ci-10-best-practices-to-avoid-widespread-anti-patterns-2mb5&quot;&gt;GitLab CI: 10+ Best Practices to Avoid Widespread Anti-patterns&lt;/a&gt;
by Benoit COUETIL for Zenika on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.fossil-scm.org/home/doc/trunk/www/fossil-v-git.wiki&quot;&gt;Fossil Versus Git&lt;/a&gt;
on Fossil Wiki.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ANNboouhNHE&quot;&gt;The Git Parable: a different approach to understanding Git&lt;/a&gt;,
a talk by Johan Herland for Tweag, based on Tom Preston-Werner’s
&lt;a href=&quot;https://tom.preston-werner.com/2009/05/19/the-git-parable.html&quot;&gt;essay of the same name&lt;/a&gt; (2009)
covered in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;Git Rev News #30&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hickford/git-credential-azure&quot;&gt;git-credential-azure&lt;/a&gt; is a credential helper
that authenticates to &lt;a href=&quot;https://azure.microsoft.com/en-us/products/devops/repos&quot;&gt;Azure Repos&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.anna.lgbt/anna/git-vain&quot;&gt;git-vain&lt;/a&gt; is a tool to generate
vanity hashes quickly; it can be used for example to make SHA-1 hash
of the HEAD begin with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c0ffee&lt;/code&gt;.  Written in Rust.  Other similar tools:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/mattbaker/git-vanity-sha&quot;&gt;git-vanity-sha&lt;/a&gt;, written in Ruby,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/05/16/edition-39/&quot;&gt;Git Rev News Edition #39&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;del&gt;&lt;a href=&quot;https://bitbucket.org/tpettersen/git-sham&quot;&gt;git-sham&lt;/a&gt;&lt;/del&gt;
(no longer available); first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2015/06/03/edition-4/&quot;&gt;Git Rev News Edition #4&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dspinellis/git-issue&quot;&gt;git-issue&lt;/a&gt; is a minimalist
decentralized issue management system based on Git,
offering (optional) bidirectional integration with GitHub and GitLab issue management.
Written as set of shell scripts.
    &lt;ul&gt;
      &lt;li&gt;Similarly named &lt;a href=&quot;https://github.com/duplys/git-issues&quot;&gt;git-issues&lt;/a&gt;, written in Python,
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/09/19/edition-43/&quot;&gt;Git Rev News Edition #43&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cup.flipt.io/&quot;&gt;Cup&lt;/a&gt; is an extensible server for building automation
around introspection and contributions to Git and SCMs like GitHub.
It is an active experiment into the benefits of managing an API over Git.
Written in Go by &lt;a href=&quot;https://www.flipt.io/&quot;&gt;Flipt&lt;/a&gt; - the open source, self-hosted
feature flag solution.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.flipt.io/&quot;&gt;Flipt&lt;/a&gt; itself was mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2023/02/28/edition-96/&quot;&gt;Git Rev News Edition #96&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitness.com/&quot;&gt;Gitness&lt;/a&gt; by &lt;a href=&quot;https://www.harness.io/&quot;&gt;Harness&lt;/a&gt;
is an open-source code hosting and pipeline engine,
with source control management, Continuous Integration and Continuous Delivery,
that can be easily installed using Docker.  Written in Go.
Can be considered the next generation of &lt;a href=&quot;https://www.drone.io/&quot;&gt;Drone&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.gitopia.com&quot;&gt;Gitopia&lt;/a&gt; is the next-generation
Decentralized Code Collaboration Platform
fueled by a decentralized network and interactive token economy.
It is designed to optimize the software development process through collaboration,
transparency, and open source incentivization.
You need to have a &lt;a href=&quot;https://docs.gitopia.com/wallet-overview&quot;&gt;supported wallet&lt;/a&gt;
with sufficient LORE tokens to use Gitopia’s services.
Pushing changes to Gitopia is done with the help of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-remote-gitopia&lt;/code&gt; helper.
    &lt;ul&gt;
      &lt;li&gt;Compare with &lt;a href=&quot;https://scuttlebot.io/apis/community/git-ssb.html&quot;&gt;git-ssb&lt;/a&gt;
(see &lt;a href=&quot;https://github.com/hackergrrl/git-ssb-intro&quot;&gt;git-ssb-intro&lt;/a&gt; guide):
decentralized git repo hosting and issue tracking on secure-scuttlebutt (SSB),
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/04/19/edition-26/&quot;&gt;Git Rev News Edition #26&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;#40&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Contrast with &lt;a href=&quot;https://forgefed.org/&quot;&gt;ForgeFed&lt;/a&gt; (formerly GitPub),
a federation protocol for forge services (ActivityPub extension), mentioned in 
&lt;a href=&quot;https://git.github.io/rev_news/2020/11/27/edition-69/&quot;&gt;Git Rev News Edition #69&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;#95&lt;/a&gt;,
and various projects in different stages of development that implement it:
&lt;a href=&quot;https://vervis.peers.community/&quot;&gt;Vervis&lt;/a&gt;, &lt;a href=&quot;https://forgejo.org/&quot;&gt;Forgejo&lt;/a&gt;,
&lt;a href=&quot;https://forgeflux.org/&quot;&gt;ForgeFlux&lt;/a&gt;, and &lt;a href=&quot;https://forgefriends.org/&quot;&gt;Forgefriends&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mermaid.js.org/&quot;&gt;Mermaid&lt;/a&gt;, a JavaScript-based diagramming and charting tool
that can be embedded in Markdown documents 
(which &lt;a href=&quot;https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/&quot;&gt;is supported on GitHub&lt;/a&gt;),
now supports &lt;a href=&quot;https://mermaid.js.org/syntax/gitgraph.html&quot;&gt;Gitgraph Diagrams&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.42.0.windows.2&quot;&gt;2.42.0(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.6.html#367&quot;&gt;3.6.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.7.html#375&quot;&gt;3.7.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.8.html#382&quot;&gt;3.8.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.2&quot;&gt;3.10.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.1&quot;&gt;3.10.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.5&quot;&gt;3.9.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.10&quot;&gt;3.8.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.17&quot;&gt;3.7.17&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.19&quot;&gt;3.6.19&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.0&quot;&gt;3.10.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.4&quot;&gt;3.9.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.9&quot;&gt;3.8.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.16&quot;&gt;3.7.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.18&quot;&gt;3.6.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/09/22/gitlab-16-4-released/&quot;&gt;16.4&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2023/09/18/security-release-gitlab-16-3-4-released/&quot;&gt;16.3.4 and 16.2.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/09/12/gitlab-16-2-6-released/&quot;&gt;16.2.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/09/12/gitlab-16-3-3-released/&quot;&gt;16.3.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/09/05/gitlab-16-3-2-released/&quot;&gt;16.3.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/08/31/security-release-gitlab-16-3-1-released/&quot;&gt;16.3.1, 16.2.5, and 16.1.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.8.2&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.8.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.8.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.3&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.1&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;5.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-azure &lt;a href=&quot;https://github.com/hickford/git-credential-azure/releases/tag/v0.2.3&quot;&gt;0.2.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.10.1&quot;&gt;0.10.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Adam Johnson, Bruno Brito, Mirth Hickford
and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 102 (August 31st, 2023)</title>
      <link>https://git.github.io/rev_news/2023/08/31/edition-102/</link>
      <pubDate>Thu, 31 Aug 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/08/31/edition-102/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-102-august-31st-2023&quot;&gt;Git Rev News: Edition 102 (August 31st, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 102nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of July 2023 and August 2023.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CTZ9RD9RQ5UO.3OIJX50PKMIR0@anonymous/&quot;&gt;Git Privacy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Nick, alias Nicholas Johnson, asked on the Git mailing list if it
would be possible to implement an integrated feature in Git, perhaps
a config option, to obfuscate the committer and author timestamps
that are stored in commits when they are created.&lt;/p&gt;

    &lt;p&gt;Nick is the creator of &lt;a href=&quot;https://git.nicholasjohnson.ch/git-privacy/&quot;&gt;Git Privacy&lt;/a&gt;
which is a repository containing
&lt;a href=&quot;https://git.nicholasjohnson.ch/git-privacy/tree/README.md&quot;&gt;instructions in a README.md file&lt;/a&gt;
that already helps developers obfuscate Git timestamps, and also
explains why it can be a good idea to do so.&lt;/p&gt;

    &lt;p&gt;The instructions suggest setting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_AUTHOR_DATE&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_COMMITTER_DATE&lt;/code&gt; environment variables when committing, so that
the timestamps in these variables are recorded instead of the
current date, time and timezone.&lt;/p&gt;

    &lt;p&gt;Nick thought that using such environment variables or other not
fully integrated mechanisms like Git hooks was too cumbersome and
asked for ideas or feedback about how to improve the situation.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Nick, saying that his
opinion was that it might not be worth implementing an integrated
feature, as using such a feature removed “half the value of keeping
your work in [a] source code management system”. Especially it would
make it harder to refute possible claims that the source code
contained stolen proprietary IP (Intellectual Property).&lt;/p&gt;

    &lt;p&gt;Nick replied that he conceded it might not be worth it to implement
his original suggestion. He said that having Git automatically
converting local time to UTC in the timestamps it records could still
be useful to avoid leaking the developer’s time zone. He pointed to
&lt;a href=&quot;https://git.issues.gerritcodereview.com/issues/40000039&quot;&gt;a Gerrit issue&lt;/a&gt;
about this.&lt;/p&gt;

    &lt;p&gt;Junio replied that he still thought it wasn’t worth the effort as
there was not enough reason to go against Git’s initial design to
store the timezone.&lt;/p&gt;

    &lt;p&gt;Nick replied to Junio saying that storing the timezone revealed
private information about developers without much gain, and that a
config option could let users decide about doing this or not.&lt;/p&gt;

    &lt;p&gt;This led to a separate sub-thread where Nick and Jason Pyeron
started to design a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--privacy=option1,option2&lt;/code&gt; with corresponding
config variables to change the timezone, specify a date precision,
etc. brian m. carlson said he would support timezone and timestamp
tweaking options and made some technical suggestions too.&lt;/p&gt;

    &lt;p&gt;René Scharfe chimed in on the main thread saying that
“timezone and timestamps are personal data, which may only be
collected and processed for a lawful purpose according to the GDPR”,
referring to the European Union’s
&lt;a href=&quot;https://gdpr-info.eu/&quot;&gt;General Data Protection Regulation&lt;/a&gt;.
So he thought that the user should be able to control if that data
should be stored or not, and it was a usability issue if he could
not easily do that. He also noticed that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt; already has a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=&amp;lt;date&amp;gt;&lt;/code&gt; option to change the author date and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--signoff&lt;/code&gt;
option for adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signed-off-by: Author Name &amp;lt;author@example.com&amp;gt;&lt;/code&gt;
trailers. He concluded by saying “adding config options for
controlling timestamp granularity is hard to say no to”.&lt;/p&gt;

    &lt;p&gt;Nick replied that he was asking for this feature for moral reasons
not for legal ones. He took the example of the
&lt;a href=&quot;https://geti2p.net/en/&quot;&gt;I2P project&lt;/a&gt; which is a layer on top of
Internet to protect people’s activity and location, saying that most
developers of the project don’t want their timezones leaked as they
are known only under pseudonyms.&lt;/p&gt;

    &lt;p&gt;Junio replied to René saying that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=&amp;lt;date&amp;gt;&lt;/code&gt; option had
good reasons to exist. For example, the committer might be relaying
somebody else’s changes, or a system clock might have an issue. He
also thought that the existing two environment variables are the
right place to draw the line, as Git developers shouldn’t be
pretending to be security engineers and invent their own time
obfuscating mechanisms.&lt;/p&gt;

    &lt;p&gt;In another email, Junio explained in more detail why it’s more
important to be able to tweak the author timestamp than the
committer timestamp. He also repeated that two environment variables
were a good place for other security minded people to build on a
quality “privacy enhancing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date&lt;/code&gt; command” that could also be used
outside the Git context.&lt;/p&gt;

    &lt;p&gt;Junio replied to himself saying that a “–useless-time” option, or a
“core.uselesstime” configuration variable to make timestamps only
use UTC and be otherwise nearly meaningless could be OK though, as
they wouldn’t have “privacy” in their name and wouldn’t pretend to be
a quality privacy feature. He laid out how such a feature could
work, and noticed that features like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --since=...&lt;/code&gt; wouldn’t
then be expected to properly work.&lt;/p&gt;

    &lt;p&gt;Nick agreed that such a feature shouldn’t use “privacy” in its name,
and said that Junio’s proposed feature would satisfy the privacy use
case he was interested in, and that he didn’t want more than that.&lt;/p&gt;

    &lt;p&gt;Theodore Ts’o then chimed in to point out that “someone still might
be able to figure out information from when a branch gets pushed to
a git repo”. He mentioned that for example GitHub, GitHub actions
and integration systems could also leak information about when users
are active.&lt;/p&gt;

    &lt;p&gt;Nick replied to Ted saying that protecting privacy had to start
somewhere, even if not all the tools were already doing it.&lt;/p&gt;

    &lt;p&gt;Future will tell if someone will actually implement something along
the lines that have been discussed, and whether it will be a
“privacy enhancing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date&lt;/code&gt; command” usable outside the Git context,
or an option integrated into Git.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-calvin-wan&quot;&gt;Developer Spotlight: Calvin Wan&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My name is Calvin Wan and I’m a Software Engineer on the Git Core team
at Google.&lt;/p&gt;

    &lt;p&gt;I also enjoy playing poker, volleyball, and ping pong. I play the
World Series of Poker Main Event every year and one of these years I’m
hoping to make the final table 😄&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I’m hoping my in-flight &lt;a href=&quot;https://public-inbox.org/git/20230810163346.274132-1-calvinwan@google.com/&quot;&gt;series for a Git Standard Library&lt;/a&gt;
will become my most important contribution to Git…at least for now 😄&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Currently working on getting Git Standard Library merged – to
summarize it will serve as the foundation for other libraries in Git
to be built off of. When we first embarked on this journey towards
libification, we had many reasons for doing so, most of which Emily
captured in the &lt;a href=&quot;https://lore.kernel.org/git/CAJoAoZ=Cig_kLocxKGax31sU7Xe4==BGzC__Bg2_pr7krNq6MA@mail.gmail.com/&quot;&gt;initial proposal&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Old style submodules. Submodule development is already difficult to
work on, and having extra bits and pieces in the codebase that exist
for the sole purpose of not breaking old style submodules added an
extra layer of complexity I wish I didn’t have to reason about.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t. contributing to
the Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;Attending Git Merge 2022! I enjoyed meeting the people I had been
interacting with on list – putting a face to the name was
particularly exciting. I also enjoyed the discussions at the
Contributor Summit and the talks that followed.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;I develop using VSCode and send my patches with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;. For patches upstream, I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b4 am&lt;/code&gt; + &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; to
test locally. When I reply to patches I use a script I modified from
Jonathan Tan to set up the replies for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;. For simple
replies and emails, I use Gmail’s plaintext mode.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;I think there are plenty of good resources out there that others have
probably mentioned before (&lt;a href=&quot;https://git-scm.com/book/en/v2&quot;&gt;Pro Git book&lt;/a&gt;,
&lt;a href=&quot;https://git-scm.com/docs/MyFirstContribution&quot;&gt;MyFirstContribution&lt;/a&gt;,
&lt;a href=&quot;https://groups.google.com/g/git-mentoring/about&quot;&gt;git-mentoring list&lt;/a&gt;),
but the one suggestion I would have is spend less time worrying about
getting the right setup and spend more time getting your patches to list!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-08-21-highlights-from-git-2-42/&quot;&gt;Highlights from Git 2.42&lt;/a&gt;
by Taylor Blau on GitHub Blog.  Those include
faster object traversals with reachability bitmaps,
excluding references by pattern in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git for-each-ref&lt;/code&gt;,
preserving precious objects from garbage collection via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gc.recentObjectsHook&lt;/code&gt;,
and other changes.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/news/Git-2.42-Released&quot;&gt;Git 2.42 Released With Less Warnings For SHA-256 Usage&lt;/a&gt;
by Michael Larabel on Phoronix.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2023/08/28/sha256-support-in-gitaly/&quot;&gt;GitLab Gitaly project now supports the SHA-256 hashing algorithm&lt;/a&gt;
by John Cai on GitLab Blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://gitlab.com/gitlab-org/gitaly&quot;&gt;Gitaly&lt;/a&gt; is
an RPC interface to Git used by GitLab,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/&quot;&gt;Git Rev News Edition #24&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sourceware.org/sourceware-25-roadmap.html&quot;&gt;Sourceware 25 Roadmap&lt;/a&gt;:
roadmap for the next 25 years on [almost] the 25th anniversary
(Sourceware came online on 6 September 1998).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://sourceware.org/&quot;&gt;Sourceware&lt;/a&gt; service was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2022/06/30/edition-88/&quot;&gt;Git Rev News Edition #88&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jesseduffield.com/Lazygit-5-Years-On/&quot;&gt;Lazygit Turns 5: Musings on Git, TUIs, and Open Source&lt;/a&gt;
by Jesse Duffield on his Pursuit Of Laziness blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;lazygit&lt;/a&gt; is a simple [windowed] terminal UI for Git,
written in Go.  It was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;;
you can find links to other articles about this tool in &lt;a href=&quot;https://git.github.io/rev_news/2020/03/25/edition-61/&quot;&gt;Edition #61&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2021/11/29/edition-81/&quot;&gt;#81&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/7-git-mistakes-a-developer-should-avoid/&quot;&gt;7 Git Mistakes a Developer Should Avoid&lt;/a&gt;
by Bruno Brito on Tower Blog, describing why some habits –
committing unrelated changes together,
writing bad commit messages,
not using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt;,
leaving outdated merged-in branches,
using force push in a shared repository,
storing API keys and other secrets in a repository,
and storing large binary files –
cause problems, and how to prevent them
(often how to do it with the help of the Tower Git client).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/titusnjuguna/simplified-8-guidelines-for-commit-message-536g&quot;&gt;Simplified: 8 Guidelines for Commit Message&lt;/a&gt;
by Tito (titusnjuguna) on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/documatic/security-in-code-reviews-ensuring-secure-and-robust-software-development-17kp&quot;&gt;Security in Code Reviews: Ensuring Secure and Robust Software Development&lt;/a&gt;
by Jatin Sharma for Documatic, lists some common security vulnerabilities,
presents a few examples of real-world incidents, and explains how to
incorporate security into the code review process (and what the challenges are).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://0ro.github.io/posts/one-git-trick-for-perfect-commits/&quot;&gt;One Git Trick for Perfect Commits&lt;/a&gt;
by Raman Nikitsenka (0ro) on his blog (and &lt;a href=&quot;https://dev.to/0ro/one-git-trick-for-perfect-commits-3728&quot;&gt;also on DEV.to&lt;/a&gt;).
The trick to avoid “fix: …” commits littering history
is to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --fixup&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --interactive --autosquash&lt;/code&gt;
(before submitting changes).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/pragmatic-programmers/git-config-articles-beec83c82b91&quot;&gt;Git Config Articles: Pragmatic Suggestions for Customizing Your Git Setup from Karl Stolley&lt;/a&gt;
by Margaret Eldridge in The Pragmatic Programmers on Medium.
It is a list of Git Config articles written by &lt;a href=&quot;https://medium.com/u/b6139288f4b6&quot;&gt;Karl Stolley&lt;/a&gt;
for The Pragmatic Programmers.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/harithzainudin/simplify-your-workflow-a-guide-to-standardizing-commit-messages-with-husky-in-monorepos-542l&quot;&gt;Simplify Your Workflow 📈: A Guide to Standardizing Commit Messages with Husky 🐶 in Monorepos 📦&lt;/a&gt;
by Muhammad Harith Zainudin on DEV.to.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/typicode/husky&quot;&gt;Husky&lt;/a&gt;, a Git hook management tool, was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;;
you can find links to other articles talking about it in
&lt;a href=&quot;https://git.github.io/rev_news/2022/05/26/edition-87/&quot;&gt;#87&lt;/a&gt; and
&lt;a href=&quot;https://git.github.io/rev_news/2022/07/31/edition-89/&quot;&gt;#89&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;The idea of Monorepos (using a single repository for the whole codebase)
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/06/03/edition-4/&quot;&gt;Git Rev News Edition #4&lt;/a&gt;.
You can find links to articles advocating for and against monorepos
in &lt;a href=&quot;https://git.github.io/rev_news/2019/01/23/edition-47/&quot;&gt;Git Rev News Edition #47&lt;/a&gt;,
and a list of pros and cons of monorepos in
&lt;a href=&quot;https://git.github.io/rev_news/2021/11/29/edition-81/&quot;&gt;Edition #81&lt;/a&gt;.
&lt;a href=&quot;https://monorepo.tools/&quot;&gt;Monorepo.tools&lt;/a&gt; is a place where you can find
information about monorepos and tools for handling them
(this site was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/02/28/edition-84/&quot;&gt;Git Rev News Edition #84&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ivanmorgillo.com/2023/07/23/you-wont-believe-how-much-time-you-will-save-with-this-git-pre-push-hook/&quot;&gt;You won’t believe how much time you will save with this Git pre-push hook&lt;/a&gt;
by Ivan Morgillo on his blog,
about integrating &lt;a href=&quot;https://git-scm.com/docs/githooks&quot;&gt;Git hooks&lt;/a&gt; with static code analysis tools,
such as &lt;a href=&quot;https://detekt.dev/&quot;&gt;Detekt&lt;/a&gt; (a static code analyzer for Kotlin),
for Android projects.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@mbrehin/git-advanced-diff-odt-pdf-doc-xls-ppt-25afbf4f1105&quot;&gt;Git advanced (text) diff: .odt, .pdf, .doc, .xls, .ppt&lt;/a&gt;
by Maxime Bréhin on Medium (2016)
describes how to configure &lt;a href=&quot;https://www.git-scm.com/docs/gitattributes#_performing_text_diffs_of_binary_files&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;textconv&lt;/code&gt; gitattribute&lt;/a&gt;
for those files.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.noq.dev/blog/iambic-bridging-the-gap-between-iam-changes-and-version-control&quot;&gt;IAMbic: Bridging the Gap Between IAM (Identity and Access Management) Changes and Version Control&lt;/a&gt;
by Curtis Castrapel on Noq company blog.  IAMbic detects IAM changes,
whether you’re using Terraform, Cloudformation,
or directly making changes via the AWS Management Console,
and creates Git commits to represent the exact state of your IAM
in a Git repository.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/cloudx/delta-a-new-git-diff-tool-to-rock-your-productivity-2773&quot;&gt;Delta: A new git diff tool to rock your productivity&lt;/a&gt;
by Axel Navarro for Cloud(x); on DEV.to
(posted on 16 Jul 2020, updated on 22 May 2022).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://dandavison.github.io/delta/&quot;&gt;Delta&lt;/a&gt;,
a syntax-highlighting pager for git, diff, and grep output,
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/04/30/edition-86/&quot;&gt;Git Rev News Edition #86&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tylercipriani.com/blog/2023/07/31/git-files-hidden-in-plain-sight/&quot;&gt;Git Files Hidden In Plain Sight 🫥&lt;/a&gt;
by Tyler Cipriani on his blog,
about some wonderful bad ideas,
like storing data in a repository in a way that GitHub thinks it is empty.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WtUCZYyv-_w&quot;&gt;Git Hidden Gems - Enrico Campidoglio - NDC Oslo 2023&lt;/a&gt;
(length: 59:11).&lt;br /&gt;  Talks about
&lt;a href=&quot;https://www.youtube.com/watch?v=WtUCZYyv-_w&amp;amp;t=255s&quot;&gt;04:15&lt;/a&gt; pretty logs,
&lt;a href=&quot;https://www.youtube.com/watch?v=WtUCZYyv-_w&amp;amp;t=503s&quot;&gt;08:23&lt;/a&gt; pretty diffs,
&lt;a href=&quot;https://www.youtube.com/watch?v=WtUCZYyv-_w&amp;amp;t=624s&quot;&gt;10:24&lt;/a&gt; staging,
&lt;a href=&quot;https://www.youtube.com/watch?v=WtUCZYyv-_w&amp;amp;t=1137s&quot;&gt;18:57&lt;/a&gt; searching,
&lt;a href=&quot;https://www.youtube.com/watch?v=WtUCZYyv-_w&amp;amp;t=1347s&quot;&gt;22:27&lt;/a&gt; automation,
&lt;a href=&quot;https://www.youtube.com/watch?v=WtUCZYyv-_w&amp;amp;t=1728s&quot;&gt;28:48&lt;/a&gt; dot notation,
&lt;a href=&quot;https://www.youtube.com/watch?v=WtUCZYyv-_w&amp;amp;t=2000s&quot;&gt;33:20&lt;/a&gt; rebase onto,
&lt;a href=&quot;https://www.youtube.com/watch?v=WtUCZYyv-_w&amp;amp;t=2304s&quot;&gt;38:24&lt;/a&gt; reflog, and
&lt;a href=&quot;https://www.youtube.com/watch?v=WtUCZYyv-_w&amp;amp;t=2744s&quot;&gt;45:44&lt;/a&gt; rerere.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=7MpdZkGj5AI&quot;&gt;Pijul: Version-Control Post-Git • Pierre-Étienne Meunier • GOTO 2023&lt;/a&gt;:
the presentation recorded at GOTO Aarhus 2023 (length: 50:10).&lt;br /&gt;
&lt;a href=&quot;https://pijul.org/&quot;&gt;Pijul&lt;/a&gt; was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2015/11/11/edition-9/&quot;&gt;Git Rev News Edition #9&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/iterative/gto&quot;&gt;Git Tag Ops&lt;/a&gt; by Iterative.AI
turns your Git repository into an Artifact Registry.
Together with &lt;a href=&quot;https://dvc.org/&quot;&gt;DVC&lt;/a&gt; (Data Version Control),
GTO serves as a backbone for Git-based &lt;a href=&quot;https://dvc.org/doc/studio/user-guide/model-registry/what-is-a-model-registry&quot;&gt;Iterative Studio Model Registry&lt;/a&gt;.
GTO works by creating annotated Git tags in a standard format.
Written in Python.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://dvc.org/&quot;&gt;DVC&lt;/a&gt; and GitOps were first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitlab.gnome.org/philippun1/turtle&quot;&gt;Turtle&lt;/a&gt;
is a graphical interface for version control intended to run on GNOME and the Nautilus file manager.
Written in Python using GTK4 and libadwaita for the GUI,
and &lt;a href=&quot;https://www.pygit2.org/&quot;&gt;pygit2&lt;/a&gt; for interacting with Git,
with Nautilus plugin support.
    &lt;ul&gt;
      &lt;li&gt;See &lt;a href=&quot;https://tortoisegit.org/&quot;&gt;TortoiseGit&lt;/a&gt;,
Windows Shell interface to Git,
providing overlay icons showing the file status,
and a powerful context menu for Git in a file manager.
Tracked since &lt;a href=&quot;https://git.github.io/rev_news/2019/11/20/edition-57/#releases&quot;&gt;Git Rev News Edition #57&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;Turtles&lt;/em&gt;, &lt;em&gt;tortoises&lt;/em&gt;, and &lt;em&gt;terrapins&lt;/em&gt; are common names
used for animals from a taxonomical order of reptiles named Testudines.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/m1guelpf/commit&quot;&gt;Commit&lt;/a&gt;
is a command palette-style Git client for blazing-fast commits.
You open it with a keyboard shortcut, write your commit,
and Commit will automatically detect which repo you’ve been working on.
Written using the &lt;a href=&quot;https://tauri.app/&quot;&gt;Tauri&lt;/a&gt; toolkit
in TypeScript and Node.js for UI, and Rust for the backend.
Inspired by &lt;a href=&quot;https://tailwindui.com/templates/commit&quot;&gt;TailwindUI’s Commit template&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.gitbutler.com/&quot;&gt;GitButler&lt;/a&gt; (currently in &lt;em&gt;alpha&lt;/em&gt; phase)
is intended to be a Source Code Management system designed to manage your branches,
record and backup your work, be your Git client, help with your code, etc.;
focusing on everything after writing code in your editor and before sharing it on GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amrdeveloper.github.io/GQL/&quot;&gt;GQL&lt;/a&gt; (Git Query Language)
is a query language with a syntax very similar to SQL,
with a tiny engine to perform queries on Git repositories
on the fly without the need to create database files
or convert &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; files into any other format.
Written in Rust.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/SOM-Research/Gitana&quot;&gt;Gitana&lt;/a&gt;,
&lt;a href=&quot;https://livablesoftware.com/gitana-sql-git-repository-inspector/&quot;&gt;first mentioned&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2015/09/09/edition-7/&quot;&gt;Git Rev News Edition #7&lt;/a&gt;,
exports the data contained in one or more Git repositories to a relational database,
relying on an incremental propagation mechanism that refreshes the database content
with the latest modifications in Git repositories.
Gitana has been archived in September 2022 and is not maintained anymore.
Written in Python.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/src-d/gitbase&quot;&gt;gitbase&lt;/a&gt;,
&lt;a href=&quot;https://www.youtube.com/watch?v=f_G1vwynxTg&quot;&gt;first mentioned&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Git Rev News Edition #48&lt;/a&gt;,
is a SQL database interface to Git repositories (on the fly),
implementing the MySQL wire protocol.
It can be used to perform SQL queries about the Git history
and about the Universal AST (Abstract Syntax Tree) of the code itself.
Was a part of now defunct &lt;a href=&quot;https://sourced.tech/products/community-edition/&quot;&gt;source{d} Community Edition&lt;/a&gt;,
still in &lt;em&gt;alpha&lt;/em&gt; phase.
Written in Go.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/mergestat/mergestat&quot;&gt;MergeStat&lt;/a&gt; (&lt;a href=&quot;https://www.mergestat.com/demo&quot;&gt;demo&lt;/a&gt;)
enables SQL queries for data in Git repositories (and related sources, such as the GitHub API).
It allows you to ask questions about the history and contents of your source code.
Written in TypeScript, can use Docker Compose to run locally.&lt;br /&gt;
&lt;a href=&quot;https://github.com/mergestat/mergestat-lite&quot;&gt;mergestat-lite&lt;/a&gt;
is a command-line version of the tool, which runs SQL queries against local git repositories.
Written in Go.&lt;br /&gt;
MergeStat was included in &lt;em&gt;“SQL for querying Git repos”&lt;/em&gt; tools list
in &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;Git Rev News Edition #82&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://worldofcode.org/&quot;&gt;World of Code&lt;/a&gt;
is an infrastructure for study of software supply chains,
utilizing Tokyo Cabinet, custom binary storage, MongoDB, and Clickhouse
to store data, and which provides shell API
and (limited) Python API for querying data
from 173 million Git repositories on their infrastructure.
Described in an &lt;a href=&quot;https://arxiv.org/abs/2010.16196&quot;&gt;article on arXiv from 2020&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/masukomi/masuconfigs/blob/master/bin/git-scripts/git-com&quot;&gt;git-com&lt;/a&gt;
by masukomi is an interactive CLI tool to help you create commit messages
that are not only readable, but follow a standardized format.
Described in &lt;a href=&quot;https://fosstodon.org/@masukomi@connectified.com/110808660504633258&quot;&gt;this Mastodon thread&lt;/a&gt;.
Written in Bash.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cookiengineer/git-identity&quot;&gt;git-identity&lt;/a&gt; (in Go) and
&lt;a href=&quot;https://github.com/InderdeepBajwa/gitid&quot;&gt;GitID&lt;/a&gt; (in TypeScript, uses Node.js)
are both tools that provide a convenient command-line interface
to manage and switch between multiple identities on a single user account.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqr0nwp8mv.fsf@gitster.g/&quot;&gt;2.42.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqwmxwgfvr.fsf@gitster.g/&quot;&gt;2.42.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqpm3ug824.fsf@gitster.g/&quot;&gt;2.42.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq5y5uli4t.fsf@gitster.g/&quot;&gt;2.42.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.42.0.windows.1&quot;&gt;2.42.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.42.0-rc2.windows.1&quot;&gt;2.42.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.42.0-rc1.windows.1&quot;&gt;2.42.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.42.0-rc0.windows.1&quot;&gt;2.42.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.7.1&quot;&gt;1.7.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.4&quot;&gt;3.9.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.9&quot;&gt;3.8.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.16&quot;&gt;3.7.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.18&quot;&gt;3.6.18&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.3&quot;&gt;3.9.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.8&quot;&gt;3.8.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.15&quot;&gt;3.7.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.17&quot;&gt;3.6.17&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.10/admin/release-notes#3.10.0&quot;&gt;3.10.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/08/22/gitlab-16-3-released/&quot;&gt;16.3&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2023/08/11/gitlab-16-2-4-released/&quot;&gt;16.2.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/08/03/gitlab-16-1-4-released/&quot;&gt;16.1.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/08/03/gitlab-16-2-3-released/&quot;&gt;16.2.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/08/01/security-release-gitlab-16-2-2-released/&quot;&gt;16.2.2, 16.1.3, and 16.0.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.7.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.7.0&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.6.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.2.9&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.2.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-azure &lt;a href=&quot;https://github.com/hickford/git-credential-azure/releases/tag/v0.2.2&quot;&gt;0.2.2&lt;/a&gt;,
&lt;a href=&quot;https://github.com/hickford/git-credential-azure/releases/tag/v0.2.1&quot;&gt;0.2.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/hickford/git-credential-azure/releases/tag/v0.2.0&quot;&gt;0.2.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/hickford/git-credential-azure/releases/tag/v0.1.0&quot;&gt;0.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.10.0&quot;&gt;0.10.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Calvin Wan and Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 101 (July 31st, 2023)</title>
      <link>https://git.github.io/rev_news/2023/07/31/edition-101/</link>
      <pubDate>Mon, 31 Jul 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/07/31/edition-101/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-101-july-31st-2023&quot;&gt;Git Rev News: Edition 101 (July 31st, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 101st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of June 2023 and July 2023.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/ZMATKIaU1A1D0wJg@nand.local/&quot;&gt;[ANNOUNCE] Virtual Contributor’s Summit 2023&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Taylor Blau from GitHub announced that GitHub will host a Virtual
Contributor’s Summit this year. Previously he
&lt;a href=&quot;https://lore.kernel.org/git/ZJoDjnr+FkgrDsKA@nand.local/&quot;&gt;announced&lt;/a&gt;
that there would be no Git Merge in-person event this year.&lt;/p&gt;

    &lt;p&gt;The announce of the Virtual Contributor’s Summit 2023 contained
links for participants to register, to suggest topics and to vote on
proposed topics.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20230627195251.1973421-1-calvinwan@google.com/&quot;&gt;[RFC PATCH 0/8] Introduce Git Standard Library&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Calvin Wan sent a 8 patch long RFC series to the mailing list to
introduce a “Git Standard Library”. This new library was intended to
be a base library for other Git libraries to build upon.&lt;/p&gt;

    &lt;p&gt;This followed previous effort from Calvin and Elijah Newren to
cleanup &lt;a href=&quot;https://lore.kernel.org/git/pull.1525.v3.git.1684218848.gitgitgadget@gmail.com/&quot;&gt;headers&lt;/a&gt;
and internal APIs like the
&lt;a href=&quot;https://lore.kernel.org/git/20230606194720.2053551-1-calvinwan@google.com/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strbuf&lt;/code&gt; API&lt;/a&gt;
to manipulate character strings and the
&lt;a href=&quot;https://lore.kernel.org/git/20230606170711.912972-1-calvinwan@google.com/&quot;&gt;git-compat-util API&lt;/a&gt;
to provide wrapper compatibility functions masking OS differences.
It also followed previous
&lt;a href=&quot;https://lore.kernel.org/git/CAJoAoZ=Cig_kLocxKGax31sU7Xe4==BGzC__Bg2_pr7krNq6MA@mail.gmail.com/&quot;&gt;discussions about turning parts of Git into libraries&lt;/a&gt;
and the ongoing
&lt;a href=&quot;https://lore.kernel.org/git/CAJoAoZmBFTi5SFRuG8uh4ZyGs7pKQTYQLzZAC82zh2pMSggX3A@mail.gmail.com/&quot;&gt;video conferences&lt;/a&gt;
that are regularly hosted by Google about libifying Git.&lt;/p&gt;

    &lt;p&gt;Building Git already involves creating an internal library called
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libgit.a&lt;/code&gt; that contains a lot of common code used by many Git
commands. The Git executable is then created by linking all the
object files for the Git subcommands (like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;) and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;
command itself against &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libgit.a&lt;/code&gt; and a few external
dependencies. The goal with the new Git Standard Library, also
called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-std-lib.a&lt;/code&gt;, and the Git libification effort is to have a
number of small independent libraries (like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object-store.a&lt;/code&gt;, and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.a&lt;/code&gt;) all using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-std-lib.a&lt;/code&gt;. These small independent
libraries would also be linked together to form &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libgit.a&lt;/code&gt;, which
would then be used to create the Git executable like today. The
benefit would be that “if someone wanted their own custom build of
Git with their own custom implementation of the object store, they
would only have to swap out &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object-store.a&lt;/code&gt; rather than do a hard
fork of Git”.&lt;/p&gt;

    &lt;p&gt;The new Git Standard Library is considered necessary for the
libification effort, because there are numerous circular and
ubiquitous dependencies that are very difficult to untangle and it
probably wouldn’t be worth untangling them. As the libification
effort doesn’t promise stability of interfaces though, it would
still be possible to extract some small libraries from
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-std-lib.a&lt;/code&gt; later if there is ever a need to be able to swap
them out.&lt;/p&gt;

    &lt;p&gt;Calvin noted that a pitfall of this series was the introduction of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#ifdef GIT_STD_LIB&lt;/code&gt; preprocessor instructions to stub out some code
and hide some function headers. He asked for comments about how it
would be possible to avoid those instructions which make the code
harder to understand. He also mentioned that some of the
compatibility code in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;compat/&lt;/code&gt; still had dependencies outside
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-std-lib.a&lt;/code&gt;, but that it just meant that “some minor
compatibility work” might be needed in the future.&lt;/p&gt;

    &lt;p&gt;As to the testing of the new library, he said that “the temporary test file
added by the series will be replaced with unit tests once a unit
testing framework is decided upon”, pointing to the
&lt;a href=&quot;https://lore.kernel.org/git/8afdb215d7e10ca16a2ce8226b4127b3d8a2d971.1686352386.git.steadmon@google.com/&quot;&gt;related discussion&lt;/a&gt;.
That discussion is actually an RFC patch series that in its latest
version only adds an
&lt;a href=&quot;https://github.com/steadmon/git/blob/unit-tests-asciidoc/Documentation/technical/unit-tests.adoc&quot;&gt;asciidoc document&lt;/a&gt;
explaining the plan to add a unit test framework to Git and
containing a table comparing the possible unit test frameworks that
Git could adopt.&lt;/p&gt;

    &lt;p&gt;Victoria Dye and then Jeff Hostetler replied to the first patch in
Calvin’s series saying that they didn’t agree with the fact that the
Trace2 code wouldn’t be in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-std-lib.a&lt;/code&gt;. They pointed out that it
should be possible to use the Trace2 tracing functions everywhere in
the Git code, even in low-level functions. Calvin replied that he
would look into possible solutions like redrawing the boundaries of
the library or stubbing out tracing in it to accommodate that need.&lt;/p&gt;

    &lt;p&gt;Phillip Wood commented on a few patches saying he liked the idea,
but suggested that the library should also contain the code related
to &lt;a href=&quot;https://www.gnu.org/software/gettext/&quot;&gt;gettext&lt;/a&gt; and to some
basic data structures (“hashmap.c” and “string-list.c”). He also
suggested some improvements and a way to deal with the Trace2 issue.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, was happy that one patch removed
the dependency many files had on “config.c”. He wondered though if
another patch that removed a wrapper function to remove a dependency
did the right thing, as the function had a number of callers. Glen
Choo then chimed in to suggest an alternative way to remove that
dependency and both Calvin and Junio agreed that this would be a
good way forward.&lt;/p&gt;

    &lt;p&gt;Glen separately reported that he had trouble building the series.
Calvin clarified that the series was based on Git v2.41 and sent a
&lt;a href=&quot;https://github.com/calvin-wan-google/git/tree/git-std-lib-rfc&quot;&gt;link to the code&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Linus Arver also replied to Calvin’s series by asking a number of
questions. He wondered if adding the standard library would make it
harder or not to refactor code into separate libraries or to create
separate programs that would use only some Git API, like for example
the API in “trailer.c” that helps parse commit message trailers
(e.g. “Signed-off-by: Author Name &lt;a href=&quot;mailto:author@example.com&quot;&gt;author@example.com&lt;/a&gt;). He asked
for more information about the tradeoffs between accepting the
circular dependencies and untangling them, and made a number of
other suggestions.&lt;/p&gt;

    &lt;p&gt;It’s not clear yet if the libification effort and the idea of a Git
Standard Library will bring a lot of changes to the code base soon,
but that could be an interesting possibility.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-martin-ågren&quot;&gt;Developer Spotlight: Martin Ågren&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m Martin Ågren. I live in Sweden, where I spend some of my spare time
in the garden or tending to the bees to the best of my abilities. I also
enjoy reading books and listening to music (not at the same time).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;The number of breathtaking features I’ve contributed is probably a
one-digit number ending in a zero. That said, I think I’ve contributed a
bit to the documentation by fixing some fairly ugly misrenderings, but
also by aligning the way it’s formatted by the two tools we support,
asciidoc and asciidoctor. I guess we’ll never know this for a fact, but
there’s a chance that I’ve saved someone’s crontab by fixing a bug that
would eat it. I’m very happy that I fixed that bug before it was ever
included in a release.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I’m mostly just tinkering. I very rarely feel like there’s something
actually missing from Git. I’m mostly trying to contribute in order to
show that gratitude and to help others, without occupying too much
bandwidth.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Complete the hash function transition. brian m. carlson has done a
tremendous job making sure there are these two parallel worlds, if you
want. What’s missing now is making them interoperable. This is not
necessarily the biggest &lt;em&gt;problem&lt;/em&gt; in current Git, but it could be
something that won’t be fixed by short-term, this-quarter,
profit-maximizing actors, so if I could decree a team to work on that
without having to worry about “return on investment” and such, I’d
probably go for that.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could provide users of Git with one piece of advise,
what would it be?&lt;/p&gt;

    &lt;p&gt;The one thought I would like to somehow convey to everyone using Git is
to commit early, commit often. Whatever crap you have ever had in your
working tree, there’s an object containing it. Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset --hard&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt;, whatever floats your boat, you will be
able to bring it back and polish it up into a Git history that looks
like you knew what you were doing all along.&lt;/p&gt;

    &lt;p&gt;I think this is really the point about Git: it teaches you how to
pretend to be a good programmer, and once you start thinking of shaping
your work like that, you actually might turn into one. Not because “fake
it till you make it”, that’s just bullshit, but because you actually
spend time approaching problems the right way and start thinking about
how you present your solution.&lt;/p&gt;

    &lt;p&gt;Your “solution” is then not just the state of the working tree (“look!
it compiles and all the tests pass, so it must be good!”), but also how
you got there, as a series of well-motivated incremental changes.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of
Git itself?&lt;/p&gt;

    &lt;p&gt;I’m a big fan of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt;, especially &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig blame&lt;/code&gt;. I simply never use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
blame&lt;/code&gt;.  If I’m allowed to count &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git/contrib&lt;/code&gt; as “outside of Git
itself”, I’ll be more than happy to recommend &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git jump&lt;/code&gt;. It’s not
especially sexy, but I probably use it every single day and I find it
extremely helpful.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t. contributing to
the Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;I still sometimes think back to when I posted my first patch series to
the list. Peff wrote “[…] I’m very impressed with the attention to
detail for a first-time contributor.”, to which Junio replied “Yes.”.
Of course, a part of even remembering that is vanity on my part, but I
do think those two sentences are fairly representative of each of their
communication styles. They also capture perfectly well the kind of
review style that I wish a lot more projects used. You know, it is
allowed to not just point out something that is wrong or could be
better.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;For the list, it’s gmail.com, lore.kernel.org/git, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt;,
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;. I keep thinking I should set up something
more advanced, but for the limited volumes I’m handling, it’s fine. For
development of Git [and other stuff], it’s Vim, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add -p&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --amend&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase -i&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git range-diff&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig blame&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git jump&lt;/code&gt; (grep, merge, diff) and … maybe that’s about it. Well, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; of course. Please note the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-p&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add -p&lt;/code&gt;. I would like
to live in a world where no-one blindly does &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add . &amp;amp;&amp;amp; git commit&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;Do something you enjoy doing. Of all the people born any given year, not
even one of them, on average, will ever become president of the United
States.  Don’t do open source because it could land you a nice job
somewhere, sometime.  Don’t do Git development because it seems like a
good investment. Do open source because you believe in it and see some
random thing that you want to contribute to. If you don’t see that,
plant a flower instead and watch it grow.&lt;/p&gt;

    &lt;p&gt;This obviously comes from someone who is privileged enough to be able to
say “don’t worry, be happy” and talk in metaphors about gardening. That
said, I do think there’s a difference in keeping bees and tending to
them. You shouldn’t want to keep them, you should want to help them do
their thing. And if you want to help Git do its thing, great!&lt;/p&gt;

    &lt;p&gt;Start by lurking on the mailing list to get a feel for how it works.
Then do some small improvement, and avoid growing the scope too much.
Sleep on your patch, review it yourself and iterate that process a few
times before actually sending it off.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;A &lt;a href=&quot;https://programming.dev/c/git&quot;&gt;Git community&lt;/a&gt; has been created in the programming.dev Lemmy instance.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-07-12-introducing-passwordless-authentication-on-github-com/&quot;&gt;Passwordless authentication is now available on GitHub.com&lt;/a&gt;
(with &lt;a href=&quot;https://www.passkeys.io/&quot;&gt;passkeys&lt;/a&gt;), as a public beta.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.unity.com/engine-platform/unity-version-control-smart-locks&quot;&gt;Meet Smart Locks, a new way to reduce merge conflicts with Unity Version Control&lt;/a&gt;
(previously Plastic SCM).
    &lt;ul&gt;
      &lt;li&gt;Locks in DVCS were &lt;a href=&quot;https://ericsink.com/vcbe/html/veracity_locks.html&quot;&gt;also supported&lt;/a&gt;
in SourceGear’s &lt;a href=&quot;http://veracity-scm.com/&quot;&gt;Veracity SCM&lt;/a&gt;
(which is no longer developed, it’s last version was from 2013).&lt;/li&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://www.youtube.com/watch?v=K3zOhU3NdWA&amp;amp;list=PL0lo9MOBetEFqBue4vNcTEnkBjgIQU1Q3&amp;amp;index=7&quot;&gt;Git for games: current problems and solutions&lt;/a&gt;
video from Git Merge 2019.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-07-27-scaling-merge-ort-across-github/&quot;&gt;Scaling merge-ort across GitHub&lt;/a&gt;
by Matt Cooper on GitHub Blog, describing how and why GitHub have switched
from performing merges and rebases &lt;a href=&quot;https://github.blog/2015-12-15-move-fast/&quot;&gt;using libgit2&lt;/a&gt;
to using merge-ort for it (&lt;a href=&quot;https://github.blog/2021-08-16-highlights-from-git-2-33/#merge-ort-a-new-merge-strategy&quot;&gt;available in Git since 2.33&lt;/a&gt;),
and performing worktree-less rebases using the new &lt;a href=&quot;https://public-inbox.org/git/20230407072415.1360068-1-christian.couder@gmail.com/t/#u&quot;&gt;work-in-progress&lt;/a&gt;
&lt;a href=&quot;https://github.com/newren/git/commits/replay&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git replay&lt;/code&gt; command&lt;/a&gt;.
&lt;a href=&quot;https://github.blog/changelog/2022-09-12-merge-commits-now-created-using-the-merge-ort-strategy/&quot;&gt;Merge commits were created using the merge-ort strategy&lt;/a&gt;
on GitHub since September 2022, as mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/09/30/edition-91/&quot;&gt;Git Rev News Edition #91&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.reviewnb.com/git-jupyter-notebook-ultimate-guide&quot;&gt;Git and Jupyter Notebooks: The Ultimate Guide&lt;/a&gt;
by ReviewNB.  The article mentions the following tools:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://nbdime.readthedocs.io/en/latest/&quot;&gt;nbdime&lt;/a&gt;,
mentioned first in &lt;a href=&quot;https://git.github.io/rev_news/2018/03/21/edition-37/&quot;&gt;Git Rev News Edition #37&lt;/a&gt;,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/jupyterlab/jupyterlab-git&quot;&gt;jupyterlab-git&lt;/a&gt; extension,
described in more detail in &lt;a href=&quot;https://blog.reviewnb.com/jupyterlab-git-extension/&quot;&gt;How to use the JupyterLab Git extension&lt;/a&gt;
on ReviewNB Blog,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.reviewnb.com/&quot;&gt;ReviewNB&lt;/a&gt; app for GitHub, for when
&lt;a href=&quot;https://github.blog/changelog/2023-03-01-feature-preview-rich-jupyter-notebook-diffs/&quot;&gt;rich notebook diffs on GitHub&lt;/a&gt; fail,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nbdev.fast.ai/&quot;&gt;nbdev&lt;/a&gt;, which includes support for better Git handling for Jupyter notebooks
(see &lt;a href=&quot;https://nbdev1.fast.ai/merge.html&quot;&gt;Fix merge conflicts in jupyter notebooks&lt;/a&gt; for nbdev1,
and &lt;a href=&quot;https://nbdev.fast.ai/tutorials/git_friendly_jupyter.html&quot;&gt;Git-Friendly Jupyter&lt;/a&gt; for nbdev2),
and was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/11/27/edition-69/&quot;&gt;Git Rev News Edition #69&lt;/a&gt;,
and also mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/06/30/edition-100/&quot;&gt;Edition #100&lt;/a&gt;
as one of alternatives for &lt;a href=&quot;https://databooks.dev/&quot;&gt;databooks&lt;/a&gt; tool,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://nbviewer.org/&quot;&gt;NBviewer&lt;/a&gt; and &lt;a href=&quot;https://mybinder.org/&quot;&gt;Binder&lt;/a&gt; services.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://confidence.sh/blog/automate-your-server-database-backup/&quot;&gt;How To Automate Your Server Database Backup Using Git&lt;/a&gt;
and cron,
by Confidence Okoghenun on his blog (also on &lt;a href=&quot;https://dev.to/megaconfidence/how-to-automate-your-server-database-backup-using-git-2pc2&quot;&gt;DEV.to&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.howtogeek.com/devops/how-to-use-git-shallow-clone-for-faster-repository-cloning/&quot;&gt;How to Use Git Shallow Clone for Faster Repository Cloning&lt;/a&gt;
(and cloning only a single branch, and creating sparse blobless and treeless clones)
by Anthony Heddings on How-To Geek.
This can be useful when you want to examine Git repos with long histories,
and is also useful for Continuous Integration pipelines (CI/CD),
since the CI/CD process likely does not need to know the entire Git history.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.howtogeek.com/devops/how-to-reverse-a-git-merge/&quot;&gt;How To Undo or Reverse a Git Merge&lt;/a&gt;
by Anthony Heddings on How-To Geek.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/git-rebase-handbook/&quot;&gt;The Git Rebase Handbook – A Definitive Guide to Rebasing&lt;/a&gt;
by Omer Rosenbaum on freeCodeCamp,
continuing from &lt;a href=&quot;https://www.freecodecamp.org/news/the-definitive-guide-to-git-merge/&quot;&gt;Git Merge – The Definitive Guide&lt;/a&gt;
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/05/31/edition-99/&quot;&gt;Git Rev News Edition #99&lt;/a&gt;
(and other posts).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/pradumnasaraf/mastering-git-shortcuts-a-guide-to-git-aliases-324j&quot;&gt;Mastering Git Shortcuts: A Guide to Git Aliases&lt;/a&gt;
by Pradumna Saraf on DEV.to - though the guide is limited to simple aliases,
and does not cover forcing an alias to be treated as a shell command,
or tricks that one can use for advanced handling of alias parameters.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rehansaeed.com/gitattributes-best-practices/&quot;&gt;.gitattributes Best Practices&lt;/a&gt;
by Muhammad Rehan Saeed on his blog (2020).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/opensauced/the-power-of-git-a-guide-to-collaborative-version-control-dl6&quot;&gt;The Power of Git: A Guide to Collaborative Version Control&lt;/a&gt;
by BekahHW for OpenSauced on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/karaluton/a-guide-to-perfecting-pull-requests-2b66&quot;&gt;A Guide to Perfecting Pull Requests&lt;/a&gt;
by Kara Luton on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://addyosmani.com/blog/code-reviews/&quot;&gt;Effective Code Reviews&lt;/a&gt;
by Addy Osmani on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/&quot;&gt;The Gentle Art Of Patch Review&lt;/a&gt;
by Sage Sharp on their blog (2014).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy listening&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://podrocket.logrocket.com/git-scalar&quot;&gt;Git with Derrick Stolee&lt;/a&gt;
on PodRocket (a web development podcast from LogRocket).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ahmadawais/Emoji-Log&quot;&gt;Emoji-Log&lt;/a&gt; — A simple Emoji Git commit log messages spec standard.
    &lt;ul&gt;
      &lt;li&gt;Similar &lt;a href=&quot;https://gitmoji.dev/&quot;&gt;GitMoji&lt;/a&gt; standard — an emoji guide for your commit messages,
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/01/23/edition-47/&quot;&gt;Git Rev News Edition #47&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nvbn/thefuck&quot;&gt;thefuck&lt;/a&gt;
is a command line application
which corrects your previous console command.
Among others it includes series of rules for correcting mistakes when using Git
(like typos in command names, trying to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add&lt;/code&gt; an ignored file, etc.).
Written in Python.&lt;/li&gt;
  &lt;li&gt;New Relic &lt;a href=&quot;https://www.codestream.com/&quot;&gt;CodeStream&lt;/a&gt; is a free &lt;a href=&quot;https://github.com/TeamCodeStream/codestream&quot;&gt;open-source&lt;/a&gt;
extension for VS Code, Visual Studio, and JetBrains
(with support for more IDEs on the way)
for putting collaboration tools in the IDE:
supporting pull requests, issue management, observability, and code discussion.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jupyterlab/jupyterlab-git&quot;&gt;jupyterlab-git&lt;/a&gt;
is a JupyterLab extension for version control using Git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.reviewnb.com/&quot;&gt;ReviewNB&lt;/a&gt; is a paid GitHub and Bitbucket app
for rich diffs and commenting (including code review) for Jupyter Notebooks,
free for open source (for public repositories) and academic use:
see &lt;a href=&quot;https://www.reviewnb.com/#pricing&quot;&gt;pricing&lt;/a&gt;.
You can request self hosted installation (distributed as Docker image).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/getpatchwork/pwclient&quot;&gt;pwclient&lt;/a&gt; is the command-line client for 
the &lt;a href=&quot;http://jk.ozlabs.org/projects/patchwork/&quot;&gt;Patchwork&lt;/a&gt; web-based patch tracking tool.
Patchwork was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News Edition #20&lt;/a&gt;,
in passing in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Edition #48&lt;/a&gt;
(as then base for &lt;a href=&quot;https://github.com/ruscur/snowpatch&quot;&gt;snowpatch&lt;/a&gt; CI for patches,
now also supporting GitHub Actions),
in passing in &lt;a href=&quot;https://git.github.io/rev_news/2019/09/25/edition-55/&quot;&gt;Edition #55&lt;/a&gt;
(as being similar to &lt;a href=&quot;https://github.com/patchew-project/patchew&quot;&gt;patchew&lt;/a&gt;
patch tracking and testing system),
and in passing in &lt;a href=&quot;https://git.github.io/rev_news/2022/06/30/edition-88/&quot;&gt;Edition #88&lt;/a&gt;
(as being used by &lt;a href=&quot;https://sourceware.org/&quot;&gt;Sourceware&lt;/a&gt; service).
Patchwork is used for &lt;a href=&quot;https://patchwork.kernel.org/&quot;&gt;some Linux kernel development&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;JetBrains Academy &lt;a href=&quot;https://blog.jetbrains.com/education/2023/07/06/introduction-to-git-track/&quot;&gt;offers a ‘Master Git and GitHub in 5 Hours’&lt;/a&gt;
course &lt;a href=&quot;https://hyperskill.org/tracks/48&quot;&gt;on Hyperskill&lt;/a&gt; for free,
with the project-based part of the course available only for paid users (Premium).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.41.0.windows.3&quot;&gt;2.41.0(3)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.41.0.windows.2&quot;&gt;2.41.0(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.7.0&quot;&gt;1.7.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/07/27/gitlab-15-11-13-released/&quot;&gt;15.11.13&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2023/07/25/gitlab-16-2-1-released/&quot;&gt;16.2.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/07/22/gitlab-16-2-released/&quot;&gt;16.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/07/17/gitlab-15-11-12-released/&quot;&gt;15.11.12&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/07/05/security-release-gitlab-16-1-2-released/&quot;&gt;16.1.2, 16.0.7, and 15.11.11&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/06/29/security-release-gitlab-16-1-1-released/&quot;&gt;16.1.1, 16.0.6, and 15.11.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.12&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.6.html#366&quot;&gt;3.6.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.7.html#374&quot;&gt;3.7.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.8.html#381&quot;&gt;3.8.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.1&quot;&gt;3.9.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.6&quot;&gt;3.8.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.13&quot;&gt;3.7.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.16&quot;&gt;3.6.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.0&quot;&gt;3.9.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.6.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.2.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;10.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.9.1&quot;&gt;0.9.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.9.0&quot;&gt;0.9.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;gitolite &lt;a href=&quot;https://groups.google.com/g/gitolite-announce/c/Ba5yVnkf_lQ/m/xB72ygAIDQAJ&quot;&gt;v3.6.13&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Eren Canpolat, Bruno Brito,
Kristoffer Haugsbakk, Junio Hamano and
Štěpán Němec.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 100 (June 30th, 2023)</title>
      <link>https://git.github.io/rev_news/2023/06/30/edition-100/</link>
      <pubDate>Fri, 30 Jun 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/06/30/edition-100/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-100-june-30th-2023&quot;&gt;Git Rev News: Edition 100 (June 30th, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 100th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of May 2023 and June 2023.&lt;/p&gt;

&lt;h3 id=&quot;some-statistics-about-the-ongoing-first-git-rev-news-readers-survey&quot;&gt;Some statistics about the ongoing first Git Rev News Readers Survey&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&quot;https://survs.com/survey/jo07oxsaom&quot;&gt;Git Rev News Reader Survey&lt;/a&gt; was announced
in the &lt;a href=&quot;https://git.github.io/rev_news/2023/05/31/edition-99/&quot;&gt;previous edition&lt;/a&gt;
with the goal to gather responses from the community to help improve Git Rev News.
Unfortunately, there we got only 11 responses to the survey (among 250 visits).
Compare this number to 3236 to 11498 responses to various Git User’s Surveys…&lt;/p&gt;

&lt;p&gt;The results cannot be considered statistically significant, but here is what we have
gathered so far:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Most enjoyed Git Rev News section was “Developer Spotlight (aka Interview)”,
followed closely by “Discussions (General, Reviews, Support)”.
Least enjoyed was the “Releases” section.&lt;/li&gt;
  &lt;li&gt;The order of Git Rev News section(s) agrees with readers expectations,
with the exception of the “Releases” section thought to better be near the end,
and the “Other News (aka Links)” to better be in the middle, swapping the
order of those two sections.&lt;/li&gt;
  &lt;li&gt;The survey gathered various interesting suggestions, among others:
    &lt;ul&gt;
      &lt;li&gt;more developer (or even &lt;em&gt;user&lt;/em&gt;) interviews,&lt;/li&gt;
      &lt;li&gt;include a brief description of what is in the link,&lt;/li&gt;
      &lt;li&gt;interviews with some authors of Git tools,&lt;/li&gt;
      &lt;li&gt;include short articles about how to do source control and how Git is being used,&lt;/li&gt;
      &lt;li&gt;add an &lt;em&gt;editorial&lt;/em&gt; piece to start off the newsletter,&lt;/li&gt;
      &lt;li&gt;add an index of previous Git Rev News (e.g. ‘whom we interviewed’).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;For the “Discussion” section the suggestions include adding headlines or subheadings,
having some images (e.g. diagrams or screenshots) where appropriate,
and adding a tl;dr summary to longer articles (or shortening them).&lt;/li&gt;
  &lt;li&gt;There was the idea of providing a simple web form to suggest contributors to be interviewed.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/users/6309/vonc&quot;&gt;VonC&lt;/a&gt; was suggested for an interview,
and Jeff King (aka peff) and Junio C. Hamano for re-interviews.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There will be further analysis of the responses in the future.
Thank you very much to everyone who participated in the Reader Survey.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2023/organizations/git&quot;&gt;Git participates in GSoC (Google Summer of Code) 2023&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The following two contributors have been officially accepted to work on Git
as part of the &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;GSoC 2023&lt;/a&gt;:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Kousik Sanagavarapu will work on the “&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2023/projects/rck3kmq2&quot;&gt;Unify ref-filter formats with other pretty formats&lt;/a&gt;”
project. Kousik will be co-mentored by Hariom Verma and Christian Couder.
Some details about his work on the project could be found in &lt;a href=&quot;https://five-sh.github.io/blog&quot;&gt;his blog&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Shuqi Liang will work on the “&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2023/projects/Rkbc1Abe&quot;&gt;More Sparse Index Integrations&lt;/a&gt;”
project. Shuqi will be mentored by Victoria Dye. Further details about
the project and updates on progress can be found on &lt;a href=&quot;https://cheskaqiqi.github.io/tags/GSoC/&quot;&gt;Shuqi’s blog&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Congratulations to the accepted contributors!&lt;/p&gt;

    &lt;p&gt;Thanks also to the other contributors who applied and worked on micro-projects,
but couldn’t be selected! We hope to continue to see you in the community!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20230502211454.1673000-1-calvinwan@google.com/&quot;&gt;[PATCH 0/6] strbuf cleanups&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Calvin Wan sent a 6 patch long series to clean up &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strbuf&lt;/code&gt; related
code. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strbuf&lt;/code&gt; is a basic structure along with related functions,
implemented mostly in the “strbuf.c” and “strbuf.h” files, that is
used to manipulate character strings.&lt;/p&gt;

    &lt;p&gt;The issue was that over time some functions with dependencies to
other code had been added into those files, and Calvin’s series
wanted to get rid of these dependencies “with the goal of eventually
being able to stand up &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strbuf&lt;/code&gt; as a library”.&lt;/p&gt;

    &lt;p&gt;Most of the patches moved some functions to other files that were
using them, and one of them removed the use of environment
variables.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, suggested that some functions that
were moved to other files should be renamed so that they don’t start
with “strbuf_” anymore, as they were not really string manipulating
functions.&lt;/p&gt;

    &lt;p&gt;The series was also reviewed by Jeff King, Elijah Newren and Felipe
Contreras, who overall liked it. They commented on some patches
mostly to add some historical context or to ask for some
clarifications.&lt;/p&gt;

    &lt;p&gt;Calvin sent
&lt;a href=&quot;https://lore.kernel.org/git/20230503184849.1809304-1-calvinwan@google.com/&quot;&gt;a version 2 of the series&lt;/a&gt;
that added a new patch at the beginning of the series to clarify the
purpose of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strbuf&lt;/code&gt; functions at the top of “strbuf.h”. The other
changes in this version were small clarifications in the commit
messages of some patches or in code comments.&lt;/p&gt;

    &lt;p&gt;Junio commented on the last patch of the series though. This patch
was supposed to remove the use of environment variables according to
its subject, but was in fact removing the dependencies of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strbuf&lt;/code&gt;
functions on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;comment_line_char&lt;/code&gt; global variable and adding a
new parameter to those functions instead.&lt;/p&gt;

    &lt;p&gt;Calvin sent
&lt;a href=&quot;https://lore.kernel.org/git/20230503194201.2360016-1-calvinwan@google.com/&quot;&gt;a new version of this patch&lt;/a&gt;
calling it a v3 even though the other patches in the series were not
resent. Elijah reviewed this v2/v3 patch series and suggested some minor
changes in some commit messages.&lt;/p&gt;

    &lt;p&gt;Calvin then sent
&lt;a href=&quot;https://lore.kernel.org/git/20230508165728.525603-1-calvinwan@google.com/&quot;&gt;a version 4 of the series&lt;/a&gt;
with the commit message changes suggested by Elijah and Junio.&lt;/p&gt;

    &lt;p&gt;Both Eric Sunshine and Phillip Wood chimed in to comment on this
version. Eric suggested moving the comment added by the first patch
of the series further up in “strbuf.h” and making it clear that this
comment is for developers instead of mere users of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strbuf&lt;/code&gt;
functions. Phillip suggested simplifying the parameters of a
function where a new parameter was added by the last patch of the
series.&lt;/p&gt;

    &lt;p&gt;Calvin then sent
&lt;a href=&quot;https://lore.kernel.org/git/20230511194446.1492907-1-calvinwan@google.com/&quot;&gt;a version 5 of the series&lt;/a&gt;
which included the suggestions made by Eric and Phillip. Eric replied
with some further small comments about the first and last patches of
the series.&lt;/p&gt;

    &lt;p&gt;Calvin then sent
&lt;a href=&quot;https://lore.kernel.org/git/20230512171429.2202982-1-calvinwan@google.com/&quot;&gt;a version 6 of the series&lt;/a&gt;
with Eric’s suggestions, and a few weeks later
&lt;a href=&quot;https://lore.kernel.org/git/20230606194720.2053551-1-calvinwan@google.com/&quot;&gt;a version 7 of the series&lt;/a&gt;
to fix a few minor issues related to the release of Git v2.41.0 in
the meantime. It looks like this series will be merged to the
‘master’ branch soon though.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-john-cai&quot;&gt;Developer Spotlight: John Cai&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My name is John Cai, and I started to contribute to the project back in 2021. I
also lead the Git team at GitLab, where we aim to improve Git and add features
that will make the lives of GitLab users and Git users better.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;Adding a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--batch-command&lt;/code&gt; mode to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat-file&lt;/code&gt; was the first feature that I
contributed to Git. It allows a single long running process to handle different
cat-file queries. Most developers wouldn’t take advantage of this, but for Git
servers it’s a nice feature.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Things like documentation improvements, as well as working on some small features
that will optimize the server side of things. At GitLab we are currently
developing a system that will contain many ephemeral refs, so we recently added
options to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-pack-refs(1)&lt;/code&gt; that allow the caller to specify refs to exclude
from the packed refs file.&lt;/p&gt;

    &lt;p&gt;I still consider myself a bit of a newbie, but I love contributing however I can
since Git is such an impactful project. Further, since our team interfaces with
Git so much, I often notice opportunities for incremental improvements. Other
times, we have explicit needs to add a feature or enhancement to support
improvements to our Git data access layer in GitLab.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Transition the project to a new refs backend! There have been plenty of great
discussions around this – whether to go with the reftables backend or a new
format of the packed-refs file. Swapping out the refs backend would be a huge
undertaking, but well worth it, in my opinion.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of
Git itself?&lt;/p&gt;

    &lt;p&gt;When reviewing code, I’ve been using &lt;a href=&quot;https://github.com/GNOME/meld&quot;&gt;meld&lt;/a&gt;.
I overall like the UI.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;I use GitGitGadget mostly, but also &lt;a href=&quot;https://people.kernel.org/monsieuricon/introducing-b4-and-patch-attestation&quot;&gt;b4&lt;/a&gt;
is great for trying out patches locally.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;It can definitely be intimidating since the codebase is so storied and
technically deep. My suggestion is to just dive in and get started with
something small – whether that be a documentation improvement or a code cleanup
marked with TODO. Also, keep an eye out for bug reports on the mailing list.
Fixing bugs also gives you experience with different parts of the code base.&lt;/p&gt;

    &lt;p&gt;Part of my intimidation is not knowing how people on the mailing list would
respond to my contributions. Experiencing how helpful people were, and the
overall warmth of the community removed a lot of the emotional barrier of
contributing.&lt;/p&gt;

    &lt;p&gt;Also, it’s easy to read into tone in text-only communication, but the mailing
list is full of people who genuinely want to help. Don’t let the fear prevent
you from contributing! You’ll learn incrementally each time you send something
to the list.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;Spend more time than you think you need to on crafting commit messages. It goes
a long way to clearly state the need, and how the patch addresses the need.&lt;/p&gt;

    &lt;p&gt;Also, look for existing APIs in the codebase 😄.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-06-01-highlights-from-git-2-41/&quot;&gt;Highlights from Git 2.41&lt;/a&gt;
by Taylor Blau on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2023/06/20/contributions-to-latest-git-release/&quot;&gt;Git 2.41 release - Here are five of our contributions in detail&lt;/a&gt;
by John Cai on GitLab Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://iterative.ai/blog/dvc-3.0-ml-experiments-data-versioning&quot;&gt;The DVC 3.0 Stack: Beyond the Command Line&lt;/a&gt;
by Dave Berenbaum on Iterative.ai blog.  &lt;a href=&quot;https://dvc.org&quot;&gt;DVC (Data Version Control)&lt;/a&gt;
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/coming-up-on-the-roadmap-2023/&quot;&gt;Coming Up on Tower’s Roadmap (2023)&lt;/a&gt;
by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2023/06/22/meet-gitlab-duo-the-suite-of-ai-capabilities/&quot;&gt;Meet GitLab Duo, the suite of AI capabilities powering your workflows&lt;/a&gt;
by David DeSanto on GitLab Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-06-21-crafting-a-better-faster-code-view/&quot;&gt;Crafting a better, faster GitHub Code View&lt;/a&gt;
by Joshua Brown on GitHub Blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/setting-up-ssh-for-commit-signing/&quot;&gt;Setting Up SSH for Commit Signing&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-06-02-applying-gitops-principles-to-your-operations/&quot;&gt;Applying GitOps principles to your operations&lt;/a&gt;
by Chris Reddington on GitHub blog.  GitOps set of practices was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;;
&lt;a href=&quot;https://git.github.io/rev_news/2023/05/31/edition-99/&quot;&gt;the previous edition (#99)&lt;/a&gt;
includes many links about GitOps / GitDevOps.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoworld.com/article/3699116/3-great-git-alternatives-fossil-mercurial-and-subversion.html&quot;&gt;3 great Git alternatives: Fossil, Mercurial, and Subversion&lt;/a&gt;
by Serdar Yegulalp on InfoWorld.
    &lt;ul&gt;
      &lt;li&gt;An article about &lt;a href=&quot;https://fossil-scm.org/&quot;&gt;Fossil&lt;/a&gt; did appear 
in &lt;a href=&quot;https://git.github.io/rev_news/2016/01/13/edition-11/&quot;&gt;Git Rev News Edition #11&lt;/a&gt;,
but is nowadays unavailable except through the &lt;a href=&quot;https://web.archive.org/web/20160304055320/https://blog.kotur.org/posts/fossil-keeps-more-than-just-your-code.html&quot;&gt;Internet Archive&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;In &lt;a href=&quot;https://git.github.io/rev_news/2022/05/26/edition-87/&quot;&gt;Git Rev News Edition #87&lt;/a&gt;
you can find referenced an article about
&lt;a href=&quot;https://sqlite.org/whynotgit.html&quot;&gt;Why SQLite Does Not Use Git&lt;/a&gt; but Fossil.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackaday.com/2023/06/18/too-much-git-try-gitless/&quot;&gt;Too Much Git? Try Gitless&lt;/a&gt;
by Bryan Cockfield on Hackaday.  &lt;a href=&quot;http://gitless.com/&quot;&gt;Gitless&lt;/a&gt; was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News Edition #20&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/this-is-learning/how-to-clean-up-your-local-repository-with-git-commands-531o&quot;&gt;How to Clean Up Your Local Repository with Git Commands&lt;/a&gt;
by Emanuele Bartolesi for This is Learning on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-edit-git-commit-messages-with-git-amend/&quot;&gt;Git Change Commit Message – How to Edit Commit Messages with Git Amend&lt;/a&gt;
by Shittu Olumide on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/kristiyan_velkov/git-rebase-vs-merge-simple-2e7e&quot;&gt;Git: rebase VS merge (simple)&lt;/a&gt;
by Kristiyan Velkov on DEV.to is a second part of his
&lt;a href=&quot;https://dev.to/kristiyan_velkov/series/23390&quot;&gt;series of articles about Git&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://skerritt.blog/writing-better-commit-messages/&quot;&gt;The Ultimate Guide to Writing Effective Commit Messages: Best Practices and Conventional Commits&lt;/a&gt;
by Autumn Skerritt on her blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/abbazs/how-to-use-meld-as-a-difftool-for-git-5ai3&quot;&gt;How to use Meld as a difftool for Git?&lt;/a&gt;
by abbazs on DEV.to.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=INvu3C5oZWE&quot;&gt;2023-06-20 GitLab Gitaly Community Office Hours&lt;/a&gt;
on GitLab Unfiltered channel on YouTube,
showing a live coding session developing a small feature in Git
(the video is around 1 hour long, and included subtitles in English).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/arc90/git-sweep&quot;&gt;git-sweep&lt;/a&gt; is a command-line tool
that helps you clean up Git branches that have been merged into master.
Written in Python.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://databooks.dev/&quot;&gt;databooks&lt;/a&gt; is a package and a CLI tool
to ease the collaboration between data scientists using Jupyter notebooks,
by reducing the number of git conflicts between different notebooks
and resolution of git conflicts when encountered.
    &lt;ul&gt;
      &lt;li&gt;Alternatives include &lt;a href=&quot;https://nbdev.fast.ai/&quot;&gt;nbdev&lt;/a&gt; tool that creates
programming environment out of Jupyter notebooks
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/11/27/edition-69/&quot;&gt;Git Rev News Edition #69&lt;/a&gt;),
&lt;a href=&quot;http://nbdime.readthedocs.io/&quot;&gt;nbdime&lt;/a&gt; tool for diffing Jupyter notebooks
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/03/21/edition-37/&quot;&gt;edition #37&lt;/a&gt;),
and &lt;a href=&quot;https://github.com/mwouts/jupytext&quot;&gt;jupytext&lt;/a&gt; tool for bi-directionally converting
Jupyter notebooks to plain text files as either Markdown files or Python scripts
(also mentioned in edition #69).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/stevemao/awesome-git-addons&quot;&gt;Awesome git addons&lt;/a&gt;
is a curated list of add-ons that extend/enhance the git CLI,
though a bit out of date (last change is from October 2021).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqleh3a3wm.fsf@gitster.g/&quot;&gt;2.41.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.41.0.windows.1&quot;&gt;2.41.0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.5&quot;&gt;3.8.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.12&quot;&gt;3.7.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.15&quot;&gt;3.6.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.19&quot;&gt;3.5.19&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.9/admin/release-notes#3.9.0&quot;&gt;3.9.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.4&quot;&gt;3.8.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.11&quot;&gt;3.7.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.14&quot;&gt;3.6.14&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.18&quot;&gt;3.5.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/06/22/gitlab-16-1-released/&quot;&gt;16.1&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2023/06/16/gitlab-16-0-5-released/&quot;&gt;16.0.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/06/15/gitlab-15-11-9-released/&quot;&gt;15.11.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/06/08/gitlab-16-0-4-released/&quot;&gt;16.0.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/06/07/gitlab-16-0-3-released/&quot;&gt;16.0.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/06/07/gitlab-15-11-8-released/&quot;&gt;15.11.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/06/05/security-release-gitlab-16-0-2-released/&quot;&gt;16.0.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.5.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.5.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.2.6&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.2.5&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.2.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;5.0&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/tower-windows-5/&quot;&gt;blog post&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;10.0&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-10/&quot;&gt;blog post&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.8.0&quot;&gt;0.8.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Bruno Brito and Victoria Dye.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 99 (May 31st, 2023)</title>
      <link>https://git.github.io/rev_news/2023/05/31/edition-99/</link>
      <pubDate>Wed, 31 May 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/05/31/edition-99/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-99-may-31st-2023&quot;&gt;Git Rev News: Edition 99 (May 31st, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 99th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of April 2023 and May 2023.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To help us improve Git Rev News, please participate in our first
&lt;a href=&quot;https://survs.com/survey/jo07oxsaom&quot;&gt;Reader Survey&lt;/a&gt;. It’s up only
until our next edition, so for about one month.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/7728e059-d58d-cce7-c011-fbc16eb22fb9@cs.uni-saarland.de/&quot;&gt;Weird behavior of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --before&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --date-order&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Thomas Bock reported an issue in
&lt;a href=&quot;https://github.com/LibreOffice/core&quot;&gt;a LibreOffice repository&lt;/a&gt;
where some commits from around 2010 were treated by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; as if
they had been created before 1980.&lt;/p&gt;

    &lt;p&gt;Commands like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --before=&quot;1980-01-01&quot;&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log
--date-order&lt;/code&gt; both show or list some commits with an author date and
a commit date from around 2010 as if they were from before 1980.&lt;/p&gt;

    &lt;p&gt;Thomas looked at the timestamps of the author and committer dates in
these commits, but they didn’t appear to be broken, so he suspected a
Git bug.&lt;/p&gt;

    &lt;p&gt;Peff, alias Jeff King, thanked Thomas “for providing a clear example
and reproduction recipe” and pointed out that the commits that
appeared to be from before 1980 were “malformed, but only
slightly”. It appeared that their “author” and “committer” headers
contained something like:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Firstname Lastname&amp;lt;firstname.lastname &amp;lt;Firstname Lastname&amp;lt;firstname.lastname@example.com&amp;gt;&amp;gt; 1297247749 +0100&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;instead of simply:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Firstname Lastname &amp;lt;firstname.lastname@example.com&amp;gt; 1297247749 +0100&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;that is, with an extra weird set of angle brackets.&lt;/p&gt;

    &lt;p&gt;Peff also found that there were two different code paths for commit
parsing and they behaved differently when there was an extra set of
angle brackets. One, which was used to fill in the fields of a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;struct commit&lt;/code&gt;, only parsed the “parents”, “tree”, and “committer
timestamp” fields. For that last field, it was using the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parse_commit_date()&lt;/code&gt; function which stopped at the first ‘&amp;gt;’ and then
tried to parse the rest of the line as a timestamp, which failed and
returned a 0 timestamp if there was a second ‘&amp;gt;’.&lt;/p&gt;

    &lt;p&gt;The other code path, used when the commit was displayed, called the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;split_ident_line()&lt;/code&gt; function to parse the “author” and “committer”
headers, but this function was trying to find the last ‘&amp;gt;’ in these
headers instead of the first one, which yielded the correct timestamp
when there were two or more ‘&amp;gt;’.&lt;/p&gt;

    &lt;p&gt;Peff then suggested a patch to make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parse_commit_date()&lt;/code&gt; behave like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;split_ident_line()&lt;/code&gt; and find the last ‘&amp;gt;’ instead of the first
one. He also discussed other possible ways to fix the issue,
including doing nothing as the commits were indeed malformed.&lt;/p&gt;

    &lt;p&gt;Kristoffer Haugsbakk replied to Peff saying he was using a tool
called &lt;a href=&quot;https://git-repair.branchable.com&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repair&lt;/code&gt;&lt;/a&gt; to try to fix
the original repo. But Peff said he wasn’t sure &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repair&lt;/code&gt; would be
able to fix it. He mentioned that
&lt;a href=&quot;https://github.com/newren/git-filter-repo&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-repo&lt;/code&gt;&lt;/a&gt; or other
tools would be able to fix it, but would require the commit history
to be rewritten, which might not be “worth it for a minor problem
like this”.&lt;/p&gt;

    &lt;p&gt;Kristoffer replied that he gave up with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repair&lt;/code&gt; as it didn’t
seem to finish, but was actually more interested in seeing if the
weird &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; behavior went away to convince others it wasn’t a
bug, rather than fixing the repo.&lt;/p&gt;

    &lt;p&gt;Peff suggested carrying on with git-filter-repo’s
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--commit-callback&lt;/code&gt; option, or alternatively piping &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
fast-export&lt;/code&gt; through &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;, and then back to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fast-import&lt;/code&gt;, as he
was almost certain &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; would properly work if the repo was
fixed.&lt;/p&gt;

    &lt;p&gt;A few weeks later Kristoffer sent the URL of a repaired repo. He
said he couldn’t use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-repo&lt;/code&gt;, but “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit-tree&lt;/code&gt; +
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git replace&lt;/code&gt; + &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-repo --force&lt;/code&gt; worked”.&lt;/p&gt;

    &lt;p&gt;In the meantime, Junio Hamano, the Git maintainer, replied to Peff’s
initial findings wondering which commit parsing function was used to
populate the commit-graph files where commit data is cached, as it
wouldn’t be good to record broken timestamps there.&lt;/p&gt;

    &lt;p&gt;Peff replied to Junio saying the commit-graph files are written from
the parsed “struct commit” objects which is good as we want those
cache files to always match the code that is used when they are not
available. If Peff’s patch was applied to fix the parsing though,
that would mean that existing commit-graph files would need to be
manually removed, so that the fixed parsing could be used instead of
broken values stored in those files.&lt;/p&gt;

    &lt;p&gt;Peff also discussed modifying the commit-graph code so that when a 0
timestamp was recorded for a commit, this commit would be parsed again, but
thought it might not be worth the effort. Derrick Stolee discussed
this idea too, but agreed with Peff saying “this seems like quite a
big hammer for a small case”.&lt;/p&gt;

    &lt;p&gt;Thomas then thanked everyone for “clarifying this mystery” as the
explanations given “already helped a lot”. He said that it would be
very useful to fix the parsing of the broken commits, but, if that
was considered to be too small a problem, he would like some kind of
error handling to be introduced for commits with 0 timestamps
instead of them being listed in the wrong time period.&lt;/p&gt;

    &lt;p&gt;Peff then sent
&lt;a href=&quot;https://lore.kernel.org/git/20230422134150.GA3516940@coredump.intra.peff.net/&quot;&gt;a first version of a small patch series&lt;/a&gt;
to properly fix the parsing of the broken commits and to fix another
parsing bug he found in the same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parse_commit_date()&lt;/code&gt; function.&lt;/p&gt;

    &lt;p&gt;Junio reviewed Peff’s patches and made a few suggestions, mostly
about code comments. Peff took them into account and sent
&lt;a href=&quot;https://lore.kernel.org/git/20230425055244.GA4014505@coredump.intra.peff.net/&quot;&gt;a version 2 of his patch series&lt;/a&gt;
which behaved in the same way as the previous one, but had improved
code comments.&lt;/p&gt;

    &lt;p&gt;Phillip Wood then wondered if it would be better to not use
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strtoumax&lt;/code&gt;(3) to parse timestamps as this standard C library function
is using the standard &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;isspace&lt;/code&gt;(3) while we are using our own version
of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;isspace&lt;/code&gt;(3) which is different. Possible issues with strtoumax(3)
could also be related to different characters being considered
digits than in our code. This kind of issues come from the fact that
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strtoumax&lt;/code&gt;(3), like many other standard C library functions, is taking
the current
&lt;a href=&quot;https://en.wikipedia.org/wiki/Locale_(computer_software)&quot;&gt;locale&lt;/a&gt;
into account.&lt;/p&gt;

    &lt;p&gt;After some discussions between Peff, Phillip and Junio, Peff sent
&lt;a href=&quot;https://lore.kernel.org/git/20230427081330.GA1461786@coredump.intra.peff.net/&quot;&gt;a version 3 of his patch series&lt;/a&gt;
with small changes. Especially the new version makes sure Git rejects
timestamps that start with a character that we don’t consider a
whitespace or a digit or the ‘-‘ character before using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strtoumax&lt;/code&gt;(3)
as this was considered enough to avoid issues related to this
function.&lt;/p&gt;

    &lt;p&gt;Phillip, Junio and Peff discussed this version a little bit more but
found it good, so it was merged and these changes will be in Git
v2.41.0 which will be released soon.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqedn5fluv.fsf@gitster.g/&quot;&gt;2.41.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqedncqkzf.fsf@gitster.g/&quot;&gt;2.41.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqbkilvt63.fsf@gitster.g/&quot;&gt;2.41.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.41.0-rc2.windows.1&quot;&gt;2.41.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.41.0-rc1.windows.1&quot;&gt;2.41.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.41.0-rc0.windows.1&quot;&gt;2.41.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.5.html#356&quot;&gt;3.5.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.6.html#365&quot;&gt;3.6.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.7.html#373&quot;&gt;3.7.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.8.html#380&quot;&gt;3.8.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.3&quot;&gt;3.8.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.10&quot;&gt;3.7.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.13&quot;&gt;3.6.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.17&quot;&gt;3.5.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/05/24/gitlab-15-11-6-released/&quot;&gt;15.11.6&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2023/05/23/critical-security-release-gitlab-16-0-1-released/&quot;&gt;16.0.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/05/22/gitlab-16-0-released/&quot;&gt;16.0&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/05/19/gitlab-15-11-5-released/&quot;&gt;15.11.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/05/17/gitlab-15-11-4-released/&quot;&gt;15.11.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/05/10/security-release-gitlab-15-11-3-released/&quot;&gt;15.11.3, 15.10.7, and 15.9.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/05/05/critical-security-release-gitlab-15-11-2-released/&quot;&gt;15.11.2, 15.10.6, and 15.9.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/05/02/security-release-gitlab-15-11-1-released/&quot;&gt;15.11.1, 15.10.5, and 15.9.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.4.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.2.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.3.html&quot;&gt;4.2.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;9.3, 9.4&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-94/&quot;&gt;9.4 blog post&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.7.0&quot;&gt;0.7.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-05-08-github-code-search-is-generally-available/&quot;&gt;GitHub code search is generally available&lt;/a&gt;
by Colin Merkel on GitHub Blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.blog/2021-12-15-a-brief-history-of-code-search-at-github/&quot;&gt;A brief history of code search at GitHub&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;Git Rev News Edition #82&lt;/a&gt;, and
&lt;a href=&quot;https://github.blog/2023-02-06-the-technology-behind-githubs-new-code-search/&quot;&gt;The technology behind GitHub’s new code search&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2023/02/28/edition-96/&quot;&gt;edition #96&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://stackdiary.com/githubs-new-code-search-is-bad/&quot;&gt;GitHub’s New Code Search is Bad for Finding Code&lt;/a&gt;
by Alex Ivanovs on Stackdiary (complaining about lack of sort by &lt;em&gt;new&lt;/em&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bytes.zone/posts/modeling-git-internals-in-alloy-part-3-operations-on-blobs-and-trees/&quot;&gt;Modeling Git Internals in Alloy, Part 3: Operations on Blobs and Trees&lt;/a&gt;
by Brian Hicks on bytes.zone continues the series of articles from &lt;a href=&quot;https://git.github.io/rev_news/2023/04/30/edition-98/&quot;&gt;previous edition&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://trishagee.com/2023/05/29/why-i-prefer-trunk-based-development/&quot;&gt;Why I prefer trunk-based development&lt;/a&gt;
by Trisha Gee.
    &lt;ul&gt;
      &lt;li&gt;This article references &lt;a href=&quot;https://www.davefarley.net/?p=269&quot;&gt;Perceived Barriers to Trunk Based Development&lt;/a&gt;
by Dave Farley on his weblog (2018).&lt;/li&gt;
      &lt;li&gt;You can find more about this workflow
on &lt;a href=&quot;https://trunkbaseddevelopment.com/&quot;&gt;Trunk Based Development&lt;/a&gt; site,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/&quot;&gt;Git Rev News Edition #24&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Martin Fowler describes advantages and disadvantages of trunk-based development versus feature branches
in &lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
(biased towards better support for Continuous Integration),
mentioned first in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;For the other side of this discussion, see for example
&lt;a href=&quot;https://www.git-tower.com/blog/working-with-feature-branches/&quot;&gt;Working with Feature Branches&lt;/a&gt;
by Bruno Brito on Tower’s blog, mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2022/06/30/edition-88/&quot;&gt;Git Rev News Edition #88&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thenewstack.io/5-version-control-tools-game-developers-should-know-about/&quot;&gt;5 Version-Control Systems that Game Developers Should Know About&lt;/a&gt;
by Sharone Zitzman on The New Stack.
Those 5 VCSs are: Git, Perforce, Plastic SCM (now Unity Version Control), SVN,
and &lt;a href=&quot;https://www.diversion.dev/&quot;&gt;Diversion&lt;/a&gt; (cloud SCM, in beta).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.androidpolice.com/best-github-alternatives/&quot;&gt;9 best GitHub [Android App] alternatives in 2023&lt;/a&gt;
by Charnita Fance on Android Police.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/the-definitive-guide-to-git-merge/&quot;&gt;Git Merge – The Definitive Guide&lt;/a&gt;
by Omer Rosenbaum on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.30secondsofcode.org/git/s/undo-commit-without-rewriting-history/&quot;&gt;Undo a [published] commit in Git&lt;/a&gt;
by Angelos Chalaris on 30 Seconds of Code.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-use-git-best-practices-for-beginners/&quot;&gt;Git Best Practices – A Guide to Version Control for Beginners&lt;/a&gt;
by Adekola Olawale on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/abdelrahmanallam/common-git-issues-and-how-to-troubleshoot-them-3jmd&quot;&gt;Common Git Issues and How to Troubleshoot Them&lt;/a&gt;
by Abdelrahman Mohamed Allam on DEV.to, part of the
&lt;a href=&quot;https://dev.to/abdelrahmanallam/series/22744&quot;&gt;Mastering Git: Essential and Advanced Commands for Developers&lt;/a&gt; series.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/techishdeep/maximize-your-python-efficiency-with-pre-commit-a-complete-but-concise-guide-39a5&quot;&gt;The Power of Pre-Commit for Python Developers: Tips and Best Practices&lt;/a&gt;
by Deep Singh on DEV.to.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://pre-commit.com&quot;&gt;Pre-Commit&lt;/a&gt; framework for managing and maintaining
multiple multi-language pre-commit hooks (written as Python module) was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2018/11/21/edition-45/&quot;&gt;Git Rev News Edition #45&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://madhadron.com/programming/effective_pull_requests.html&quot;&gt;Creating effective pull requests&lt;/a&gt;,
by madhadron (Frederick J. Ross).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/semantixbr/how-to-make-your-code-shine-with-gitlab-ci-pipelines-48ade99192d1&quot;&gt;How to Make your [Python] Code Shine with GitLab CI Pipelines&lt;/a&gt;
by fernanda rodríguez on Medium.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sschueller.github.io/posts/ci-cd-with-kicad-and-gitlab/&quot;&gt;CI/CD with KiCad and GitLab&lt;/a&gt;
by Stefan Schüller on his blog (on GitHub Pages).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://drewdevault.com/2022/07/25/Code-review-with-aerc.html&quot;&gt;Code review at the speed of email&lt;/a&gt;
by Drew DeVault on Drew DeVault’s blog (2022).
    &lt;ul&gt;
      &lt;li&gt;See also for example &lt;a href=&quot;https://drewdevault.com/2018/07/02/Email-driven-git.html&quot;&gt;The advantages of an email-driven git workflow&lt;/a&gt;
by Drew DeVault, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/07/18/edition-41/&quot;&gt;Git Rev News Edition #41&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/mahadikrahul/connect-to-multiple-git-accounts-of-the-same-vendor-github-gitlab-portal-33l4&quot;&gt;Connect to multiple Git accounts of the same vendor (GitHub, Gitlab) portal&lt;/a&gt;
by Rahul Mahadik on DEV.to, originally guest-published at &lt;a href=&quot;https://theonetechnologies.com/blog/post/connect-to-multiple-git-accounts-of-the-same-vendor-github-gitlab-portal&quot;&gt;theonetechnologies.com&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://planetscale.com/blog/database-branching-three-way-merge-schema-changes&quot;&gt;Database branching: three-way merge for schema changes&lt;/a&gt;:
Learn how PlanetScale uses Git-like three-way diff to resolve schema change conflicts across database branches.
Article by Shlomi Noach on PlanetScale Blog.
    &lt;ul&gt;
      &lt;li&gt;You can find few tools to help version-control database schemas
in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News Edition #60&lt;/a&gt;;
you can also find there &lt;a href=&quot;https://github.blog/2020-02-14-automating-mysql-schema-migrations-with-github-actions-and-more/&quot;&gt;another article&lt;/a&gt; by Shlomi Noach.&lt;/li&gt;
      &lt;li&gt;In &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;Git Rev News Edition #82&lt;/a&gt;
you can find articles about different ways version control and databases connect,
and tools that can version control database schema (perform database migrations),
or version control queries, or version data within schema, etc.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://towardsdatascience.com/version-control-your-ml-model-deployment-with-git-using-modelbit-1b3d76411436&quot;&gt;Version Control Your ML (Machine Learning) Model Deployment With Git using Modelbit&lt;/a&gt;
by Avi Chawla, published in Towards Data Science, a Medium blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.weave.works/blog/gitops-operations-by-pull-request&quot;&gt;GitOps - Operations by Pull Request&lt;/a&gt; (2017)
and &lt;a href=&quot;https://www.weave.works/blog/what-is-gitops-really&quot;&gt;What Is GitOps&lt;/a&gt; (2018)
by Alex on Weaveworks blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.weave.works/blog/kubernetes-anti-patterns-let-s-do-gitops-not-ciops&quot;&gt;Another article&lt;/a&gt;
from Weaveworks about GitOps can be found
in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt; (2018).&lt;/li&gt;
      &lt;li&gt;You can find more about GitOps / GitDevOps on
&lt;a href=&quot;https://www.gitops.tech/&quot;&gt;GitOps.tech&lt;/a&gt; and &lt;a href=&quot;https://opengitops.dev/&quot;&gt;OpenGitOps&lt;/a&gt; sites,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/04/23/edition-62/&quot;&gt;Git Rev News Edition #62&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2022/12/31/edition-94/&quot;&gt;#94&lt;/a&gt;, respectively.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thenewstack.io/4-core-principles-of-gitops/&quot;&gt;4 Core Principles of GitOps&lt;/a&gt; by Alex Williams, and
&lt;a href=&quot;https://thenewstack.io/gitops-as-an-evolution-of-kubernetes/&quot;&gt;GitOps as an Evolution of Kubernetes&lt;/a&gt; by Steven J. Vaughan-Nichols
on The New Stack.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.jupyter.org/reproducible-data-dependencies-for-python-guest-post-d0f68293a99&quot;&gt;Reproducible Data Dependencies for Python [with Quilt]&lt;/a&gt;,
a guest post by Aneesh Karve published in Jupyter Blog (Medium-based blog).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://dagshub.com/&quot;&gt;DagsHub&lt;/a&gt;, a web platform for storing, versioning and managing data (data hub),
similar to &lt;a href=&quot;https://quiltdata.com/&quot;&gt;Quilt Data&lt;/a&gt; mentioned in this blog post,
was mentioned in various articles linked to in
&lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;#85&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2023/02/28/edition-96/&quot;&gt;#96&lt;/a&gt;, and
tangentially in &lt;a href=&quot;https://git.github.io/rev_news/2023/02/28/edition-96/&quot;&gt;#97&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;See also links about data versioning in
&lt;a href=&quot;https://git.github.io/rev_news/2023/02/28/edition-96/&quot;&gt;Git Rev News Edition #96&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/this-is-learning/github-copilot-x-cli-is-your-new-git-assistant-1edn&quot;&gt;GitHub Copilot X CLI is your new GIT assistant&lt;/a&gt;
by Leonardo Montini for This is Learning, a part 3 in &lt;a href=&quot;https://dev.to/balastrong/series/23030&quot;&gt;GitHub Copilot X (5 Part Series)&lt;/a&gt;
on DEV.to.  Originally published at &lt;a href=&quot;https://leonardomontini.dev/copilot-x-git-cli/&quot;&gt;leonardomontini.dev&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;Similar article, &lt;a href=&quot;https://dev.to/codepo8/github-copilot-for-cli-makes-terminal-scripting-and-git-as-easy-as-asking-a-question-3m81&quot;&gt;GitHub Copilot for CLI makes Terminal scripting and Git as easy as asking a question&lt;/a&gt;
can be found in &lt;a href=&quot;https://git.github.io/rev_news/2023/04/30/edition-98/&quot;&gt;Git Rev News Edition #98&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!-- Humor --&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://stateful.com/blog/branchgpt-ai-powered-branch-names&quot;&gt;BranchGPT: The AI-Powered Solution to Branch Names&lt;/a&gt;
by Sebastian Tiedtke on Stateful.com blog (&lt;em&gt;Tongue-in-cheek&lt;/em&gt; over the top take on AI).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching and listening&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2023/05/23/for-those-who-just-dont-git-it-ep-573/&quot;&gt;For those who just don’t Git it (The Stack Overflow Podcast | Ep. 573)&lt;/a&gt;
where Pierre-Étienne Meunier, creator and lead developer
of open-source version control system &lt;a href=&quot;https://pijul.org/&quot;&gt;Pijul&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/11/11/edition-9/&quot;&gt;Git Rev News Edition #9&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/&quot;&gt;#24&lt;/a&gt; and
&lt;a href=&quot;https://git.github.io/rev_news/2018/04/18/edition-38/&quot;&gt;#38&lt;/a&gt;),
talks about version control, functional programming, and OCaml.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.bytebase.com/&quot;&gt;Bytebase&lt;/a&gt; - database schema change and version control
(the GitLab for Database DevOps): web-based collaboration workspace to help DBAs
and developers manage the database development lifecycle.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://quiltdata.com/&quot;&gt;Quilt Data&lt;/a&gt; is a self-organizing data hub,
consisting of a Python API, web catalog, and backend to manage data sets in AWS S3.
The backend service is based on open-source &lt;a href=&quot;https://github.com/quiltdata/quilt&quot;&gt;Quilt&lt;/a&gt;
Python package (&lt;a href=&quot;https://docs.quiltdata.com/&quot;&gt;documentation&lt;/a&gt;.
The development of &lt;a href=&quot;https://github.com/quiltdata/jupyterlab&quot;&gt;jupyterlab-quilt&lt;/a&gt;
extension seems to be stalled, though.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/open-gitops/documents/blob/v0.1.0/PRINCIPLES.md&quot;&gt;GitOps Principles v0.1.0&lt;/a&gt;
published by &lt;a href=&quot;https://opengitops.dev/&quot;&gt;OpenGitOps&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-terminal.js.org/&quot;&gt;GIT Web Terminal&lt;/a&gt; (Git in your browser)
was created using &lt;a href=&quot;https://github.com/isomorphic-git/isomorphic-git&quot;&gt;isomorphic-git&lt;/a&gt;
(a pure JavaScript implementation of git for node and browsers).
Source code on GitHub: &lt;a href=&quot;https://github.com/jcubic/git&quot;&gt;jcubic/git&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://isomorphic-git.org/&quot;&gt;isomorphic-git&lt;/a&gt; was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;Git Rev News Edition #40&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://vitess.io/blog/2023-04-24-schemadiff/&quot;&gt;schemadiff&lt;/a&gt;
is a declarative, programmatic library in Vitess
that can produce a diff in SQL format of two entities:
tables, views, or full blown database schemas.
    &lt;ul&gt;
      &lt;li&gt;Compare &lt;a href=&quot;https://www.sqlite.org/sqldiff.html&quot;&gt;sqldiff.exe&lt;/a&gt;,
which is a command-line utility program (Windows binary)
that displays content differences between two SQLite databases.
Mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/05/26/edition-87/&quot;&gt;Git Rev News Edition #87&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Bruno Brito.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 98 (April 30th, 2023)</title>
      <link>https://git.github.io/rev_news/2023/04/30/edition-98/</link>
      <pubDate>Sun, 30 Apr 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/04/30/edition-98/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-98-april-30th-2023&quot;&gt;Git Rev News: Edition 98 (April 30th, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 98th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of March 2023 and April 2023.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/7E83DAA1-F9A9-4151-8D07-D80EA6D59EEA@clumio.com/&quot;&gt;Suspected git grep regression in git 2.40.0&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Stephane Odul reported that running the command&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep -cP &apos;^\w+ = json.load&apos;&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;on some files of a private repo started failing consistently with an
exit code of -11 in Git v2.40.0 while it worked with previous Git
versions.&lt;/p&gt;

    &lt;p&gt;Bagas Sanjaya replied to Stephane asking him if he could use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
bisect&lt;/code&gt; between v2.39.0 and v2.40.0 to see which commit in Git’s
history broke the feature.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, thought the issue might have been
created by a recent change in how Git uses the
&lt;a href=&quot;https://www.pcre.org/&quot;&gt;PCRE2 library&lt;/a&gt;. This change made Git try to
run PCRE2’s JIT (Just In Time) compiler on a sample pattern and fall
back to not using the JIT compiler if the attempt failed.&lt;/p&gt;

    &lt;p&gt;Junio said it could alternatively be that the version of the PCRE2
library linked to v2.40 had been updated compared to the one in
previous Git versions, but asked if it made a difference to disable
the JIT compiler by prefixing the pattern with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(*NO_JIT)&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Mathias Krause, who had worked on PCRE2 related issues recently,
replied that another commit with the subject “grep: correctly
identify utf-8 characters with {b,w} in -P” seemed more suspect to
him as it was about both the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-P&lt;/code&gt; option and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\w&lt;/code&gt; pattern.&lt;/p&gt;

    &lt;p&gt;Looking at the diff of that commit, Mathias found that it added the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PCRE2_UCP&lt;/code&gt; flag to the PCRE2 library call when an UTF-8 locale was
used, and that PCRE2 had a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PCRE2_ERROR_UTF8_ERR9&lt;/code&gt; (-11) error code
described as “5th-byte’s two top bits are not 0x80” that matched
the exit code of -11 which Stephane got.&lt;/p&gt;

    &lt;p&gt;Mathias then asked Stephane if a file in his repo might contain
invalid UTF-8 output, and suggested testing this using the following
command:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ iconv -f UTF-8 your_file &amp;gt; /dev/null &amp;amp;&amp;amp; echo OK || echo &quot;Not valid&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Stephane replied that he created a custom pipeline to try to
reproduce the issue and found that restricting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt;
command to Python files (using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;*.py&apos;&lt;/code&gt;) was a good workaround, and
that the issue was likely related to other files in “various
formats, including potentially some binaries that would definitely
not be proper UTF-8”. He also noted that using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(*NO_JIT)&lt;/code&gt; as
suggested by Junio prevented the issue but slowed down the command a
lot for some patterns.&lt;/p&gt;

    &lt;p&gt;Mathias, in the meantime, was able to reproduce the error on the Git
repo. He got a segfault and also a backtrace under gdb, but the
backtrace was very short and without any debug symbols, so he
supposed that it happened in the call stack of PCRE2’s JIT
compiler. Looking at the memory mapping and the instructions also
seemed to point to a JIT compiler bug.&lt;/p&gt;

    &lt;p&gt;Mathias then reverted the commit that added the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PCRE2_UCP&lt;/code&gt; flag to
the PCRE2 library call, and found that it fixed the bug, which
confirmed his earlier suspicion about that commit.&lt;/p&gt;

    &lt;p&gt;Stephane thanked Mathias for his great work and left saying he was
happy with the workaround he had found and did not believe there was
much more he could contribute to the issue.&lt;/p&gt;

    &lt;p&gt;Mathias replied to his previous email saying he had found “an
interesting entry in the PCRE2’s changelog for version 10.35”:&lt;br /&gt;
&lt;a href=&quot;https://github.com/PCRE2Project/pcre2/blob/pcre2-10.35/ChangeLog#L66&quot;&gt;https://github.com/PCRE2Project/pcre2/blob/pcre2-10.35/ChangeLog#L66&lt;/a&gt;:&lt;br /&gt;
“17. Fix a crash which occurs when the character type of an invalid UTF
character is decoded in JIT.”&lt;/p&gt;

    &lt;p&gt;He concluded that it was needed to implement “yet another quirk to
handle these broken versions”, and came up with an in-email patch
that was not using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PCRE2_UCP&lt;/code&gt; flag when Git was compiled to
link to a PCRE2 version lower than 10.35. He wondered though if it
was better to just revert the commit that had introduced the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PCRE2_UCP&lt;/code&gt; flag.&lt;/p&gt;

    &lt;p&gt;Junio replied to Mathias by first thanking him for “all the
investigation and a prompt fix” and then saying that the approach in
his patch was more sensible than reverting the commit. He suggested
a small code change though.&lt;/p&gt;

    &lt;p&gt;Mathias agreed with Junio’s suggestion and sent
&lt;a href=&quot;https://lore.kernel.org/git/20230323172539.25230-1-minipli@grsecurity.net/&quot;&gt;a version 2 of his patch&lt;/a&gt;
that was then merged into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqa5yv3n93.fsf@gitster.g/&quot;&gt;2.40.1 and friends&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.40.1.windows.1&quot;&gt;2.40.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.6.4&quot;&gt;1.6.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/04/22/gitlab-15-11-released/&quot;&gt;15.11&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2023/04/21/gitlab-15-10-4-15-9-5-released/&quot;&gt;15.10.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/04/20/gitlab-15-7-9-released/&quot;&gt;15.7.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/04/19/gitlab-15-8-6-released/&quot;&gt;15.8.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/04/14/gitlab-15-10-3-released/&quot;&gt;15.10.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/04/05/gitlab-15-10-2-released/&quot;&gt;15.10.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/03/30/security-release-gitlab-15-10-1-released/&quot;&gt;15.10.1, 15.9.4, and 15.8.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gitea &lt;a href=&quot;https://blog.gitea.io/2023/04/gitea-1.19.1-is-released/&quot;&gt;1.19.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.2&quot;&gt;3.8.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.16&quot;&gt;3.5.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.9&quot;&gt;3.7.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.12&quot;&gt;3.6.12&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.2.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.2.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-credential-oauth &lt;a href=&quot;https://github.com/hickford/git-credential-oauth/releases/tag/v0.6.0&quot;&gt;0.6.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-04-25-git-security-vulnerabilities-announced-4/&quot;&gt;Git security vulnerabilities announced&lt;/a&gt;:
CVE-2023-25652 and CVE-2023-29007,
and MS Windows specific CVE-2023-25815, CVE-2023-29011, and CVE-2023-29012.
By Taylor Blau on GitHub Blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/git-for-designers/&quot;&gt;Git and GitHub for Designers&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://initialcommit.com/blog/git-sim-3-month-dev-update&quot;&gt;Git-Sim 3 Month Dev Update: Community Response, New Features, &amp;amp; The Future&lt;/a&gt;
by Jacob Stopak on Initial Commit.  &lt;a href=&quot;https://github.com/initialcommit-com/git-sim&quot;&gt;Git-Sim&lt;/a&gt;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;Git Rev News Edition #95&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://andrewlock.net/smoother-rebases-with-auto-squashing-git-commits/&quot;&gt;Smoother rebases with auto-squashing Git commits&lt;/a&gt; and 
&lt;a href=&quot;https://andrewlock.net/super-charging-git-rebase-with-git-absorb/&quot;&gt;Super-charging ‘git rebase’ with ‘git absorb’&lt;/a&gt;
by Andrew Lock on .NET Escapades.
&lt;a href=&quot;https://github.com/tummychow/git-absorb&quot;&gt;git-absorb&lt;/a&gt; 
(a port of Facebook’s &lt;a href=&quot;https://www.mercurial-scm.org/repo/hg/rev/5111d11b8719&quot;&gt;hg absorb&lt;/a&gt; extension for Mercurial)
was mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bytes.zone/posts/modeling-git-internals-in-alloy-part-1-blobs-and-trees/&quot;&gt;Modeling Git Internals in Alloy, Part 1: Blobs and Trees&lt;/a&gt;
and &lt;a href=&quot;https://bytes.zone/posts/modeling-git-internals-in-alloy-part-2-commits-and-tags/&quot;&gt;Modeling Git Internals in Alloy, Part 2: Commits and Tags&lt;/a&gt;
by Brian Hicks on bytes.zone.
&lt;a href=&quot;https://bytes.zone/posts/alloy/&quot;&gt;Alloy&lt;/a&gt; is &lt;a href=&quot;http://alloytools.org/&quot;&gt;a tool&lt;/a&gt;
(with its own domain-specific programming language)
used for making and checking models of other software.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/926240/&quot;&gt;Avoiding the merge trap&lt;/a&gt;
by Jonathan Corbet on LWN.net
describes how one should explain merges in pull requests sent to Linus Torvalds.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tyler.cafe/graphics-and-versions&quot;&gt;Notes on graphics programming and version control&lt;/a&gt;
Tyler Angert on tyler.cafe blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/space/2023/04/18/space-git-flow/&quot;&gt;Introducing the Space Git Flow&lt;/a&gt;
by Evgenia Verbina on JetBrains Blog.  Space Git Flow is a branching strategy
similar to &lt;a href=&quot;https://blog.jetbrains.com/space/2023/04/18/space-git-flow/&quot;&gt;Git Flow&lt;/a&gt;
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/07/08/edition-5/&quot;&gt;Git Rev News Edition #5&lt;/a&gt;)
and specifically &lt;a href=&quot;https://docs.github.com/en/get-started/quickstart/github-flow&quot;&gt;GitHub Flow&lt;/a&gt;,
used by JetBrains to develop their products including 
&lt;a href=&quot;https://git.github.io/rev_news/2020/03/25/edition-61/&quot;&gt;Space&lt;/a&gt; development platform / software forge.&lt;br /&gt;
See also:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://georgestocker.com/2020/03/04/please-stop-recommending-git-flow/&quot;&gt;Please stop recommending Git Flow!&lt;/a&gt;
by George Stocker, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/03/25/edition-61/&quot;&gt;Git Rev News #61&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
by Martin Fowler, mentioned first in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News #63&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://til.simonwillison.net/jq/git-log-json&quot;&gt;Convert git log output to JSON using jq&lt;/a&gt;
with proper escaping, on Simon Willison’s TILs (Today I’ve Learned).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.waleedkhan.name/formatting-a-commit-stack/&quot;&gt;Quickly formatting a stack of commits&lt;/a&gt;
by Waleed Khan on Steno &amp;amp; PL personal blog.
It uses the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git test&lt;/code&gt; command from the &lt;a href=&quot;https://github.com/arxanas/git-branchless&quot;&gt;git-branchless&lt;/a&gt;
suite of tools, which was first mentioned 
in &lt;a href=&quot;https://git.github.io/rev_news/2021/06/27/edition-76/&quot;&gt;Git Rev News Edition #76&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mariushosting.com/how-to-install-gitqlient-on-your-synology-nas/&quot;&gt;How to Install GitQlient on Your Synology NAS&lt;/a&gt;
by Marius Bogdan Lixandru on his personal blog: Marius Hosting.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/atordvairn/some-secret-git-tricks-that-come-in-handy-2k8i&quot;&gt;Some &lt;del&gt;secret&lt;/del&gt; git tricks that come in handy&lt;/a&gt;
by raghav yadav on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://initialcommit.com/blog/git-banned-functions&quot;&gt;Git banned.h: Why Git’s Maintainers Have A List Of Banned Standard C Library Functions&lt;/a&gt;
by Jacob Stopak on Initial Commit.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/codepo8/github-copilot-for-cli-makes-terminal-scripting-and-git-as-easy-as-asking-a-question-3m81&quot;&gt;GitHub Copilot for CLI makes Terminal scripting and Git as easy as asking a question&lt;/a&gt;
by Christian Heilmann on DEV.to.&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- next list --&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2023/Apr/15/sqlite-history/&quot;&gt;sqlite-history: tracking changes to SQLite tables using triggers&lt;/a&gt;
by Simon Willison on his Weblog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cs.cmu.edu/~ckaestne/pdf/fse21_sc.pdf&quot;&gt;SmartCommit: A Graph-Based Interactive Assistant for Activity-Oriented Commits&lt;/a&gt; [PDF]
(&lt;a href=&quot;https://doi.org/10.1145/3468264.3468551&quot;&gt;DOI:10.1145/3468264.3468551&lt;/a&gt;) describes
a graph-partitioning-based interactive tool to help split tangled changesets.
The paper is accompanied by the &lt;a href=&quot;https://github.com/Symbolk/SmartCommitCore&quot;&gt;code for the core algorithm&lt;/a&gt;
of SmartCommit, a &lt;a href=&quot;https://github.com/Symbolk/SmartCommit&quot;&gt;demo GUI client&lt;/a&gt;,
and &lt;a href=&quot;https://github.com/Symbolk/SmartCommitEvaluation-Viz&quot;&gt;dataset and the visualization scripts&lt;/a&gt;
used in the article.  Since then, similar research studies have been conducted,
like &lt;a href=&quot;https://doi.org/10.1145/3545258.3545267&quot;&gt;ComUnt&lt;/a&gt;
and &lt;a href=&quot;https://doi.org/10.1145/3540250.3549171&quot;&gt;UTango&lt;/a&gt;,
which cite the SmartCommit article.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/EbookFoundation/free-programming-books&quot;&gt;List of Free Learning Resources (In Many Languages)&lt;/a&gt;
by the Free Ebook Foundation, includes the list organized by subject,
where there are &lt;a href=&quot;https://github.com/EbookFoundation/free-programming-books/blob/main/books/free-programming-books-subjects.md#version-control-systems&quot;&gt;free books about Version Control Systems&lt;/a&gt;,
including Git. Some of those were mentioned in Git Rev News.
This list was originally a clone of 
&lt;a href=&quot;https://web.archive.org/web/20140606191453/http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books/392926&quot;&gt;StackOverflow - List of Freely Available Programming Books&lt;/a&gt;.
Has a dynamic webpage for searching the list at
&lt;a href=&quot;https://ebookfoundation.github.io/free-programming-books-search/&quot;&gt;https://ebookfoundation.github.io/free-programming-books-search/&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/francescmm/GitQlient&quot;&gt;GitQlient&lt;/a&gt; is a multi-platform Git client written with Qt,
originally forked from &lt;a href=&quot;https://github.com/tibirna/qgit&quot;&gt;QGit&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gut-cli.dev/&quot;&gt;Gut&lt;/a&gt; is a user-friendly Git CLI for Windows, Mac, and GNU/Linux.
Written in Go, still in alpha stage of development.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://srcsnap.glitch.me/&quot;&gt;srcsnap&lt;/a&gt; (&lt;a href=&quot;https://github.com/LingDong-/srcsnap&quot;&gt;repository&lt;/a&gt;)
is a screenshot-driven version tracking tool, written using Electron.  It’s described in
&lt;a href=&quot;https://www.media.mit.edu/projects/srcsnap-screenshot-driven-version-tracking/overview/&quot;&gt;Srcsnap — Screenshot-Driven Version Tracking&lt;/a&gt; post
on &lt;a href=&quot;https://www.media.mit.edu/groups/future-sketches/overview/&quot;&gt;Future Sketches&lt;/a&gt;
MIT Media Lab group blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rtfpessoa/diff2html&quot;&gt;diff2html&lt;/a&gt; is a JavaScript library
that generates pretty HTML diffs from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; or unified &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt; output.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Bruno Brito.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 97 (March 31st, 2023)</title>
      <link>https://git.github.io/rev_news/2023/03/31/edition-97/</link>
      <pubDate>Fri, 31 Mar 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/03/31/edition-97/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-97-march-31st-2023&quot;&gt;Git Rev News: Edition 97 (March 31st, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 97th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of February 2023 and March 2023.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CAGF3oAcCi+fG12j-1U0hcrWwkF5K_9WhOi6ZPHBzUUzfkrZDxA@mail.gmail.com/&quot;&gt;Bug report: symbolic-ref –short command echos the wrong text while use Chinese language&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Mengzi Yi (孟子易) sent a bug report to the mailing list saying that
when a Chinese name like 测试-加-增加-加-增加 was given to a branch,
then calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git symbolic-ref --short HEAD&lt;/code&gt; on that branch didn’t
result in the right output (for example 测试-� instead of maybe 测试-加).&lt;/p&gt;

    &lt;p&gt;Peff, alias Jeff King, replied saying that he couldn’t reproduce the
issue on Linux and wondered if it was related to using MacOS as its
HFS+ filesystem might do some Unicode normalization. He said that it
might alternatively be related to the shortening code in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shorten_unambiguous_ref()&lt;/code&gt; treating the names as bytes instead of
characters. Another possibility he mentioned was that the shortening
code, which used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scanf()&lt;/code&gt;, was assuming that the resulting string
could not be longer than the input, but that this might be wrong
when some Unicode normalization and locale were used.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine replied to Peff saying he was able to reproduce the
bug on MacOS 10.13 (while Mengzi used MacOS 13.2), but that it
didn’t appear to be related to HFS+ Unicode normalization as on disk
the bytes of the branch name he got were the same as what Peff got
on Linux.&lt;/p&gt;

    &lt;p&gt;Peff replied to Eric asking if he could test a patch that would add
debug output and allocate twice as much memory for the shortened
name that would store the output from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scanf()&lt;/code&gt; than for the input
of that function. Peff said the debug output on his Linux machine
showed that the input was 39 bytes long while the output was 28.&lt;/p&gt;

    &lt;p&gt;Eric tested Peff’s patch and initially reported 39 and 9 for the
input and output respectively. When setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LANG=zh-CN.UTF-8&lt;/code&gt;, he
got the same input and output lengths as Peff though, which pointed
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scanf()&lt;/code&gt; being indeed the culprit.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Eric’s findings saying
“Well, that’s … criminal.” and wondering if setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LANG&lt;/code&gt; to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ANY_VALID_ONE.UTF-8&lt;/code&gt; would work the same way.&lt;/p&gt;

    &lt;p&gt;This made Eric realize that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zh-CN&lt;/code&gt; language code he used was
invalid (it should have been &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zh_CN&lt;/code&gt;, so with an underscore
character instead of a dash). Eric anyway found out that using valid
LANG codes like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;en_US&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fr_FR&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;de_DE&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ru_RU&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zh_CN&lt;/code&gt; resulted
in the 测试-? truncated output, while using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LANG=C&lt;/code&gt; yielded the correct
测试-加-增加-加-增加 output.&lt;/p&gt;

    &lt;p&gt;Junio, Peff and Eric discussed these results further, wondering what
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scanf()&lt;/code&gt; on MacOS could be doing wrong. Then Peff suggested
replacing the call to this function with some manual parsing, and
sent a sample in-email patch to do that.&lt;/p&gt;

    &lt;p&gt;Eric tested Peff’s patch and reported that it looked correct, worked
nicely and fixed the issue. He also agreed with the approach of
getting rid of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scanf()&lt;/code&gt; calls in general.&lt;/p&gt;

    &lt;p&gt;Peff then sent
&lt;a href=&quot;https://lore.kernel.org/git/Y+vVFFCRem6t4IGM@coredump.intra.peff.net/&quot;&gt;a regular small patch series&lt;/a&gt;
based on his previous patch, which fixed a leak and made the changes
easier to follow.&lt;/p&gt;

    &lt;p&gt;Junio and Eric reviewed the series and then discussed with Peff a bug
Junio found in it. Then Peff sent
&lt;a href=&quot;https://lore.kernel.org/git/Y+z3MtgayoXsxaHA@coredump.intra.peff.net/&quot;&gt;a version 2&lt;/a&gt;
of the patch series that fixed the bug and added tests.&lt;/p&gt;

    &lt;p&gt;Torsten Bögershausen in the meantime tried to reproduce the original
bug and discussed how to do that with Eric. He also commented on the
new tests in the version 2 of the patch series as he found that it
wasn’t clear in which context the bug could appear. Junio suggested
some clarifications that were approved by others. The resulting
patches were merged and included in the recent Git v2.40.0 release.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqjzzkv8xz.fsf@gitster.g/&quot;&gt;2.40.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqy1o8wdgi.fsf@gitster.g/&quot;&gt;2.40.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqilfknzen.fsf@gitster.g/&quot;&gt;2.40.0-rc1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.40.0.windows.1&quot;&gt;2.40.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.40.0-rc2.windows.1&quot;&gt;2.40.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.40.0-rc1.windows.1&quot;&gt;2.40.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.40.0-rc0.windows.1&quot;&gt;2.40.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.6.3&quot;&gt;1.6.3&lt;/a&gt;,
&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.6.2&quot;&gt;1.6.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.1&quot;&gt;3.8.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.8&quot;&gt;3.7.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.11&quot;&gt;3.6.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.15&quot;&gt;3.5.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.18&quot;&gt;3.4.18&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.0&quot;&gt;3.8.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.7&quot;&gt;3.7.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.10&quot;&gt;3.6.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.14&quot;&gt;3.5.14&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.17&quot;&gt;3.4.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/03/22/gitlab-15-10-released/&quot;&gt;15.10&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2023/03/09/gitlab-15-9-3-released/&quot;&gt;15.9.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/03/02/security-release-gitlab-15-9-2-released/&quot;&gt;15.9.2, 15.8.4, and 15.7.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gitea &lt;a href=&quot;https://blog.gitea.io/2023/03/gitea-1.19.0-is-released/&quot;&gt;1.19.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.7.html#372&quot;&gt;3.7.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.2.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.2.html&quot;&gt;4.2.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;4.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-03-13-highlights-from-git-2-40/&quot;&gt;Highlights from Git 2.40&lt;/a&gt;
by Taylor Blau on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20230313225507.M626677@dcvr/T/&quot;&gt;public-inbox.org/git to be downgraded&lt;/a&gt;
to a cheaper VPS.
    &lt;ul&gt;
      &lt;li&gt;There is &lt;a href=&quot;https://lore.kernel.org/git/&quot;&gt;https://lore.kernel.org/git/&lt;/a&gt; if there are problems with the public-inbox.org instance.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-03-06-unleash-your-potential-with-github-octernships-a-path-to-a-thriving-tech-career/&quot;&gt;Unleash your potential with GitHub Octernships: a path to a thriving tech career&lt;/a&gt;
by Arkodyuti Saha on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2023/03/20/scaling-repository-maintenance/&quot;&gt;Future-proofing Git repository maintenance&lt;/a&gt;
by Patrick Steinhardt on GitLab blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/git/CAJoAoZm7147oH9ECr=y+OXonK5WSgc9H0b95sF7BhKjMn+oMZg@mail.gmail.com/&quot;&gt;Notes from a video conference&lt;/a&gt;
on Thursday March 30 named
&lt;a href=&quot;https://lore.kernel.org/git/CAJoAoZ=KrnAWV3PpfBkYNs_KHFP5O2dVYOWY3jF=CM9+d89Dpg@mail.gmail.com/&quot;&gt;libification eng discussion&lt;/a&gt;
organized by Emily Shaffer are available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/git-performance/&quot;&gt;How to Improve Performance in Git: The Complete Guide&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/1password-ssh-tower/&quot;&gt;Integrating 1Password SSH with Git (and Tower!)&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://webdeveloperdiary.substack.com/p/slice-dice-and-squash-your-git-commit&quot;&gt;Slice, Dice, and Squash Your Git Commit History&lt;/a&gt;
by Anthony Fung on &lt;em&gt;Diary of a Web Developer&lt;/em&gt; Substack and 
&lt;a href=&quot;https://dev.to/ant_f_dev/slice-dice-and-squash-your-git-commit-history-2dk3&quot;&gt;on DEV.to&lt;/a&gt;
as 3rd part of &lt;a href=&quot;https://dev.to/ant_f_dev/series/22124&quot;&gt;The Secret of Tidy Git Repositories Series&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/leandronsp/git-fundamentals-a-complete-guide-do7&quot;&gt;Git fundamentals, a complete guide&lt;/a&gt;
by Leandro Proença on DEV.to.&lt;br /&gt;
See also:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://jwiegley.github.io/git-from-the-bottom-up/&quot;&gt;Git from the Bottom Up&lt;/a&gt; by John Wiegley,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/04/05/edition-2/&quot;&gt;Git Rev News Edition #2&lt;/a&gt;,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://eagain.net/articles/git-for-computer-scientists/&quot;&gt;Git for Computer Scientists&lt;/a&gt; by Tommi Virtanen,&lt;/li&gt;
      &lt;li&gt;and maybe also &lt;a href=&quot;https://think-like-a-git.net/&quot;&gt;Think Like (a) Git: a guide for the perplexed&lt;/a&gt; by Sam Livingston-Gray.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/zdybit/3-options-to-close-pull-requests-on-github-what-2j3n&quot;&gt;Options to close pull requests on GitHub&lt;/a&gt; and
&lt;a href=&quot;https://dev.to/zdybit/when-to-use-particular-options-to-close-pull-requests-on-github-3ce8&quot;&gt;Merge, squash &amp;amp; rebase on GitHub - pros &amp;amp; cons&lt;/a&gt;
by Kacper Rychel on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/git-revert-how-to-reset-a-file-or-commit/&quot;&gt;How to Reset a File or Commit in Git&lt;/a&gt;
by Ihechikara Vincent Abba on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/samuelfaure/how-atomic-git-commits-dramatically-increased-my-productivity-and-will-increase-yours-too-4a84&quot;&gt;How atomic Git commits dramatically increased my productivity - and will increase yours too&lt;/a&gt;
by Samuel Faure on DEV.to and on &lt;a href=&quot;https://suchdevblog.com/lessons/AtomicGitCommits.html&quot;&gt;Such Dev Blog&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://andrewlock.net/working-with-git-in-jetbrains-rider/&quot;&gt;Working with Git in JetBrains’ Rider IDE&lt;/a&gt;
by Andrew Lock on his .NET Escapades blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devclass.com/2023/03/06/github-desktop-3-2-adds-pull-request-preview-but-is-a-gui-needed-for-git/&quot;&gt;GitHub Desktop 3.2 adds pull request preview – but is a GUI needed for Git?&lt;/a&gt;
by Tim Anderson on Dev Class.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dagshub.com/blog/best-data-version-control-tools/&quot;&gt;Best 8 Data Version Control Tools for Machine Learning 2023&lt;/a&gt;
by Zoumana Keita on DagsHub Blog.
    &lt;ul&gt;
      &lt;li&gt;See also links about data versioning
in &lt;a href=&quot;https://git.github.io/rev_news/2023/02/28/edition-96/&quot;&gt;previous Git Rev News&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://discourse.julialang.org/t/a-better-git-workflow/95248&quot;&gt;A better Git workflow?&lt;/a&gt;
proposal by uje on the Julia Language Discourse forum.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://proandroiddev.com/code-commit-guidelines-using-conventional-commits-379321ce3785&quot;&gt;Code Commit Guidelines using Conventional Commits&lt;/a&gt;
by Pragnesh Ghoda on ProAndroidDev, a Medium blog.
    &lt;ul&gt;
      &lt;li&gt;The &lt;a href=&quot;https://www.conventionalcommits.org&quot;&gt;Conventional Commits&lt;/a&gt; specification
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!-- Only tangentially related to Git --&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.sonarsource.com/blog/empowering-weak-primitives-file-truncation-to-code-execution-with-git/&quot;&gt;Empowering weak primitives: file truncation to code execution with Git&lt;/a&gt;
by Thomas Chauchefoin on Sonar(Source) Blog
(note that it is not about a vulnerability in Git).&lt;br /&gt;
References the &lt;a href=&quot;https://www.sonarsource.com/blog/securing-developer-tools-git-integrations/&quot;&gt;Securing Developer Tools: Git Integrations&lt;/a&gt;
blog post.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2023/03/16/what-the-ml-ai/&quot;&gt;What the ML is up with DevSecOps and AI?&lt;/a&gt;
by Taylor McCaslin on GitLab Blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;There are a few tools that use GPT-3 / ChatGPT Large Language Model (LLM) to
help write commit messages. Please read the proposed commit message before
accepting it, especially for more complex changes. Those tools, as far as we
understand it, do not take information from an issue tracker, or from
code review comments attached to a pull request (or contained in a specialized
tool such as Gerrit) – so they cannot add this information to the proposed
commit message, they can only halucinate it.&lt;br /&gt;
All tools listed here require an &lt;a href=&quot;https://platform.openai.com/account/api-keys&quot;&gt;API key from OpenAI&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/di-sukharev/opencommit&quot;&gt;OpenCommit&lt;/a&gt;
is a GPT CLI to auto-generate impressive commits in 1 second;
it uses &lt;a href=&quot;https://www.conventionalcommits.org&quot;&gt;Conventional Commits&lt;/a&gt;,
and can use &lt;a href=&quot;https://gitmoji.dev/&quot;&gt;GitMoji&lt;/a&gt;.
Written as Node.js CLI app.
        &lt;ul&gt;
          &lt;li&gt;See also &lt;a href=&quot;https://dev.to/disukharev/opencommit-gpt-cli-to-auto-generate-impressive-commits-in-1-second-46dh&quot;&gt;OpenCommit: GPT generates impressive commits in 1 second (open-source)&lt;/a&gt;
by Dima Sukharev on DEV.to.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/Nutlope/aicommits&quot;&gt;AI Commits&lt;/a&gt;
is a CLI app (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aicommits&lt;/code&gt;) that writes your Git commit messages for you with AI,
that can also be used as &lt;a href=&quot;https://git-scm.com/docs/githooks#_prepare_commit_msg&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prepare-commit-msg&lt;/code&gt; hook&lt;/a&gt;.
Written as Node.js v14+ CLI app.
        &lt;ul&gt;
          &lt;li&gt;See also &lt;a href=&quot;https://dev.to/bdougieyo/ai-generated-git-commit-messages-4j7g&quot;&gt;AI generated Git commit messages&lt;/a&gt;
by Brian Douglas on DEV.to.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/nguyenvanduocit/ai-commit&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ai-commit&lt;/code&gt;&lt;/a&gt;
is a command line tool that uses &lt;a href=&quot;https://openai.com/&quot;&gt;OpenAI&lt;/a&gt;’s
language generation capabilities to generate
&lt;a href=&quot;https://www.conventionalcommits.org&quot;&gt;conventional commit&lt;/a&gt;
messages for your Git repositories.  Written in Go.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/zurawiki/gptcommit&quot;&gt;gptcommit&lt;/a&gt; is
a Git &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prepare-commit-msg&lt;/code&gt; &lt;a href=&quot;https://git-scm.com/docs/githooks&quot;&gt;hook&lt;/a&gt;
for authoring commit messages with &lt;a href=&quot;https://openai.com/&quot;&gt;OpenAI&lt;/a&gt;’s GPT-3 language model.
Written in Rust.
        &lt;ul&gt;
          &lt;li&gt;Mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;Git Rev News Edition #95&lt;/a&gt;;
see also &lt;a href=&quot;https://zura.wiki/post/never-write-a-commit-message-again-with-the-help-of-gpt-3/&quot;&gt;an article&lt;/a&gt;
about this tool there.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.useplanar.com/&quot;&gt;Planar&lt;/a&gt; is a Chrome extension
that adds features used internally by big tech to speed up and simplify GitHub code review.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://www.ycombinator.com/launches/ICU-planar-add-10x-features-to-github-code-review&quot;&gt;Planar - Add 10x features to GitHub code review&lt;/a&gt;
by Eshan Agarwal on Y Combinator (Launch YC).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://eagain.net/articles/git-for-computer-scientists/&quot;&gt;Git for Computer Scientists&lt;/a&gt;
by Tommi Virtanen is a quick introduction to Git internals for people
who are not scared by words like directed acyclic graph.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://think-like-a-git.net/&quot;&gt;Think Like (a) Git: a guide for the perplexed&lt;/a&gt;
by Sam Livingston-Gray, intended for “advanced beginners” with Git
to help them achieve some level of &lt;em&gt;Git enlightenment&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Bruno Brito.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 96 (February 28th, 2023)</title>
      <link>https://git.github.io/rev_news/2023/02/28/edition-96/</link>
      <pubDate>Tue, 28 Feb 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/02/28/edition-96/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-96-february-28th-2023&quot;&gt;Git Rev News: Edition 96 (February 28th, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 96th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of January and February 2023.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CA+JQ7M-ynq1cLN-3ZodXae=x-H5k7Ab6uPBwUFhG+kgtOvCgtA@mail.gmail.com/&quot;&gt;Bug?: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORIG_HEAD&lt;/code&gt; incorrect after reset during &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-rebase -i&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Erik Cervin Edin sent an email to the mailing list with steps to
reproduce a behavior that he didn’t like. The steps consisted of an
interactive rebase during which a commit was edited and a reset which
was performed while editing the commit.&lt;/p&gt;

    &lt;p&gt;After editing, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --continue&lt;/code&gt; finished the rebase. But then
Erik expected &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORIG_HEAD&lt;/code&gt; to point to the tip
of the rebased branch before the rebase, while instead it pointed to
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HEAD&lt;/code&gt; before the reset.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORIG_HEAD&lt;/code&gt; is one of the pseudo-references that some Git commands
use, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FETCH_HEAD&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MERGE_HEAD&lt;/code&gt;, and a few others.&lt;/p&gt;

    &lt;p&gt;Phillip Wood replied to Erik saying that it was expected that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
reset&lt;/code&gt; would change &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORIG_HEAD&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HEAD&lt;/code&gt; just before it was
performed. He suggested using the reflog with something like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;branch-name@{1}&lt;/code&gt; where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;branch-name&lt;/code&gt; is the branch being
rebased and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@{1}&lt;/code&gt; part indicates the previous entry in the
reflog for the branch.&lt;/p&gt;

    &lt;p&gt;Erik replied that he knew about the reflog but just expected
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORIG_HEAD&lt;/code&gt; to be reset to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/rebase-merge/orig-head&lt;/code&gt; at the end of
the rebase. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/rebase-merge/orig-head&lt;/code&gt; is an internal file that
stores the tip of the branch before a rebase operation.&lt;/p&gt;

    &lt;p&gt;Philippe Blain replied to Erik that he just hit the same bug. He
also said that he was confused by the rebase documentation and supplied
the series of commands he used to get hit.&lt;/p&gt;

    &lt;p&gt;Phillip Wood replied to both Erik and Philippe Blain that if we
changed the behavior to make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORIG_HEAD&lt;/code&gt; point to the tip of the
branch before it was rebased, some people might not be happy as they
might expect &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt; to have changed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORIG_HEAD&lt;/code&gt;. Other people
might expect on the contrary that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORIG_HEAD&lt;/code&gt; was always set to the
tip of the branch before the rebase when the rebase stopped, which
would mean that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --continue&lt;/code&gt; would always need to make
sure &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ORIG_HEAD&lt;/code&gt; fulfilled that expectation.&lt;/p&gt;

    &lt;p&gt;Phillip said he thought the situation was confusing and he didn’t
see a way to make it clearer.&lt;/p&gt;

    &lt;p&gt;Philippe Blain agreed that some people might rely on the current
behavior and said he would send documentation updates to make things
clearer.&lt;/p&gt;

    &lt;p&gt;He then sent
&lt;a href=&quot;https://lore.kernel.org/git/pull.1456.git.1673120359.gitgitgadget@gmail.com/&quot;&gt;a patch series&lt;/a&gt;
consisting of small changes to the documentation of a number of
commands: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cherry-pick&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset&lt;/code&gt;, as well as
to the &lt;a href=&quot;https://git-scm.com/docs/gitrevisions&quot;&gt;documentation about Git revisions&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, commented on some wordings, which
after short discussions led Philippe to send
&lt;a href=&quot;https://lore.kernel.org/git/pull.1456.v2.git.1673356521.gitgitgadget@gmail.com/&quot;&gt;a version 2 of his series&lt;/a&gt;
with very few changes.&lt;/p&gt;

    &lt;p&gt;This version was accepted and later merged into the master branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq7cw6yfpt.fsf@gitster.g/&quot;&gt;2.40.0-rc0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqr0us5dio.fsf@gitster.g/&quot;&gt;2.39.2 and friends&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.39.2.windows.1&quot;&gt;2.39.2(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.6.1&quot;&gt;1.6.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.5.2&quot;&gt;1.5.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.5.html#355&quot;&gt;3.5.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.6.html#364&quot;&gt;3.6.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.7.html#371&quot;&gt;3.7.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.6&quot;&gt;3.7.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.9&quot;&gt;3.6.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.13&quot;&gt;3.5.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.16&quot;&gt;3.4.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.8/admin/release-notes#3.8.0&quot;&gt;3.8.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.5&quot;&gt;3.7.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.8&quot;&gt;3.6.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.12&quot;&gt;3.5.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.15&quot;&gt;3.4.15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/02/24/gitlab-15-9-1-released/&quot;&gt;15.9.1&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2023/02/22/gitlab-15-9-released/&quot;&gt;15.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/02/14/critical-security-release-gitlab-15-8-2-released/&quot;&gt;15.8.2, 15.7.7 and 15.6.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/02/14/gitlab-15-8-3-released/&quot;&gt;15.8.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/01/31/security-release-gitlab-15-8-1-released/&quot;&gt;15.8.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.1.1&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.1.8&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.1.7&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.1.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;tig &lt;a href=&quot;https://github.com/jonas/tig/releases/tag/tig-2.5.8&quot;&gt;2.5.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;9.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;4.2&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/tower-win-4-2/&quot;&gt;blog post&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;The Git project has been accepted as
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2023/organizations/git&quot;&gt;a Mentor Organization&lt;/a&gt;
for Google Summer of Code (GSoC) 2023. We could still add project ideas to
&lt;a href=&quot;https://git.github.io/SoC-2023-Ideas/&quot;&gt;our idea page&lt;/a&gt; and volunteers to (co-)mentor are still welcome.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2023/02/gitlab-15-3-through-15-8-release/&quot;&gt;GitLab Improves Merge Requests, GitOps Functionality and More&lt;/a&gt;
by Matt Saunders on InfoQ, about versions 15.3 through 15.8.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/921787/&quot;&gt;Git archive generation meets Hyrum’s law&lt;/a&gt;
by Jonathan Corbet on LWN.net (affecting Git and GitHub).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.analyticsinsight.net/will-gitops-change-software-development-forever/&quot;&gt;Will GitOps Change Software Development Forever?&lt;/a&gt;
by Harshini on Analytics Insight.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/janderssonse/git-signoff-and-signing-like-a-champ-41f3&quot;&gt;Git signoff and signing like a champ&lt;/a&gt;
by Josef Andersson on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/esaraviam/how-to-merge-a-git-feature-branch-with-a-squash-commit-8af&quot;&gt;How to Merge a Git Feature Branch with a Squash Commit&lt;/a&gt;
by Luis Esteban Saravia M on DEV.to.&lt;br /&gt;
This is an alternative to repeatedly using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;squash&lt;/code&gt; command of the &lt;a href=&quot;https://git-scm.com/docs/git-rebase#_interactive_mode&quot;&gt;interactive rebase&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.delpuppo.net/why-i-love-gitlens-in-my-vscode-part-1&quot;&gt;Why I love GitLens in my VsCode - Part 1&lt;/a&gt;,
&lt;a href=&quot;https://blog.delpuppo.net/why-i-love-gitlens-in-my-vscode-part-2&quot;&gt;Part 2&lt;/a&gt;,
and &lt;a href=&quot;https://blog.delpuppo.net/why-i-love-gitlens-in-my-vscode-part-3&quot;&gt;Part 3&lt;/a&gt;
by Luca Del Puppo on his blog.&lt;br /&gt;
Also available &lt;a href=&quot;https://dev.to/this-is-learning/why-i-love-gitlens-in-my-vscode-part-1-5cmp&quot;&gt;on DEV.to&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://danmackinlay.name/notebook/data_versioning.html&quot;&gt;Data versioning&lt;/a&gt;,
a rough work-in-progress notebook by Dan MacKinlay.
Includes descriptions of
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://dvc.org/&quot;&gt;Data Version Control (DVC)&lt;/a&gt; (first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;),&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.dolthub.com/&quot;&gt;Dolt&lt;/a&gt;, which is a &lt;a href=&quot;https://www.dolthub.com/blog/2021-09-17-database-version-control/&quot;&gt;version controlled SQL database&lt;/a&gt;
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/04/23/edition-62/&quot;&gt;Git Rev News Edition #62&lt;/a&gt;),&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.pachyderm.com/&quot;&gt;Pachyderm&lt;/a&gt; (first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;),&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://git-annex.branchable.com/&quot;&gt;git-annex&lt;/a&gt; - not targeted specifically at data science
(first mentioned in passing in &lt;a href=&quot;https://git.github.io/rev_news/2015/05/13/edition-3/&quot;&gt;Git Rev News #3&lt;/a&gt;),&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.datalad.org/&quot;&gt;DataLad&lt;/a&gt;,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://gogetdata.github.io/&quot;&gt;Go Get Data (ggd)&lt;/a&gt; from the genomics community;
it seems to be a lighter version of Pachyderm,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.splitgraph.com/docs/getting-started/introduction&quot;&gt;Splitgraph&lt;/a&gt;,
which works on top of PostgreSQL,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://sno.earth/&quot;&gt;Sno&lt;/a&gt; to store geospatial and tabular data in Git&lt;br /&gt;
(see also &lt;a href=&quot;https://kartproject.org/&quot;&gt;Kart&lt;/a&gt;, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News #85&lt;/a&gt;,
&lt;em&gt;which is not listed in this notebook&lt;/em&gt;).&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;The notebook also mentions
&lt;a href=&quot;https://github.com/pangeo-forge/roadmap&quot;&gt;Pangeo Forge&lt;/a&gt; (like Conda Forge, but for data),
&lt;a href=&quot;https://intake.readthedocs.io/en/latest/index.html&quot;&gt;Intake&lt;/a&gt; (lightweight package for finding, investigating, loading and disseminating data), and
&lt;a href=&quot;https://githubnext.com/projects/flat-data&quot;&gt;Flat Data&lt;/a&gt; - formerly GitHub OCTO
(to bring working sets of data to your repositories, based on the
&lt;a href=&quot;https://simonwillison.net/2020/Oct/9/git-scraping/&quot;&gt;“Git scraping” approach pioneered by Simon Willison&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/10/30/edition-68/&quot;&gt;Git Rev News Edition #68&lt;/a&gt;)).&lt;br /&gt;
See also &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;Git Rev News #82&lt;/a&gt;,
which mentions tools for version controlling database schemas, version controlling queries,
data versioning, etc. – all taken from articles on DoltHub Blog.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://litchipi.github.io/infosec/2023/01/24/git-code-audit-viewed-as-rust-programmer.html&quot;&gt;The Git source code audit, viewed as a Rust programmer&lt;/a&gt;
by Litchi Pi (Tim); the audit itself was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2023/01/31/edition-95/&quot;&gt;Git Rev News #95&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/ovid/an-easy-git-workflow-4gm0&quot;&gt;An Easy git Workflow&lt;/a&gt;
by Curtis “Ovid” Poe on DEV.to.&lt;br /&gt;
Also available as &lt;a href=&quot;https://ovid.github.io/articles/easy-git-workflow.html&quot;&gt;Easy Git Workflow&lt;/a&gt; (2020)
on &lt;a href=&quot;https://ovid.github.io/articles.html&quot;&gt;(Technical) Articles by Ovid&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- Separated, because they are less connected to Git --&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-02-06-the-technology-behind-githubs-new-code-search/&quot;&gt;The technology behind GitHub’s new code search&lt;/a&gt;
by Timothy Clem in the Engineering section of the GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/mobile-price-classification-an-open-source-data-science-project-with-dagshub&quot;&gt;Mobile Price Classification: An Open Source Data Science Project with Dagshub&lt;/a&gt;
by Davis David (@davisdavid) on HackerNoon.
    &lt;ul&gt;
      &lt;li&gt;The workflow described in this article uses
&lt;a href=&quot;https://dvc.org/&quot;&gt;DVC&lt;/a&gt; (first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;),
&lt;a href=&quot;https://dagshub.com/&quot;&gt;DAGsHub&lt;/a&gt; (first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72&lt;/a&gt;),
MLflow, and the Streamlit library.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://royalsocietypublishing.org/doi/full/10.1098/rsta.2021.0300&quot;&gt;FAIR data pipeline: provenance-driven data management for traceable scientific workflows&lt;/a&gt;;
an open access research article in Volume 380, Issue 2233
of Philosophical Transactions of The Royal Society A
(&lt;a href=&quot;https://doi.org/10.1098/rsta.2021.0300&quot;&gt;DOI:10.1098/rsta.2021.0300&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=0pzFGXvemvA&quot;&gt;Move Commits Between Branches in Git&lt;/a&gt;
by Leonardo Montini, also known as Dev Leonardo.&lt;br /&gt;
You can read the accompanying &lt;a href=&quot;https://dev.to/this-is-learning/move-commits-between-branches-in-git-3-different-methods-22bb&quot;&gt;Move Commits Between Branches in Git - 3 Different Methods&lt;/a&gt;
article on DEV.to (for This is Learning), 5th part of the
&lt;a href=&quot;https://dev.to/balastrong/series/21372&quot;&gt;git better - Improve your git skills&lt;/a&gt; series.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://conventionalcomments.org/&quot;&gt;&lt;strong&gt;conventional:&lt;/strong&gt; comments&lt;/a&gt; are a set of conventions
to make code review comments to be easy to grok and grep.
    &lt;ul&gt;
      &lt;li&gt;This can be considered a companion to &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; specification,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.flipt.io/&quot;&gt;Flipt&lt;/a&gt; is an &lt;a href=&quot;https://github.com/flipt-io/flipt&quot;&gt;open source&lt;/a&gt;,
self-hosted feature flag solution.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://featureflags.io/&quot;&gt;Feature Flags&lt;/a&gt; or &lt;a href=&quot;https://martinfowler.com/articles/feature-toggles.html&quot;&gt;Feature Toggles&lt;/a&gt;
are a technique that allows to modify system behavior without changing code.
They are often used with &lt;a href=&quot;https://trunkbaseddevelopment.com/&quot;&gt;Trunk Based Development&lt;/a&gt;,
as described in &lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
by Martin Fowler, which was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Ovid/git-workflow&quot;&gt;git-workflow&lt;/a&gt;
by Curtis “Ovid” Poe is a simplified subset of the Git tools used by
&lt;a href=&quot;https://allaroundtheworld.fr/&quot;&gt;All Around the World&lt;/a&gt; company for software development.
It provides three new commands: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git refresh&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pushback&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git done&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jmforsythe/Git-Heat-Map&quot;&gt;Git-Heat-Map&lt;/a&gt;
is a tool to visualize a Git repository by diff activity using a treemap chart.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://danmackinlay.name/notebook/diffing.html&quot;&gt;Diff/merge tools&lt;/a&gt; and
&lt;a href=&quot;https://danmackinlay.name/notebook/git_guis.html&quot;&gt;Git GUIs&lt;/a&gt; - notebooks
of Dan MacKinlay.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://danmackinlay.name/notebook/git.html&quot;&gt;Git tricks&lt;/a&gt;:
Dan MacKinlay’s notes and links, not intended to be tutorial.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/agarrharr/awesome-cli-apps&quot;&gt;Awesome CLI Apps&lt;/a&gt;
is a curated list of command line apps, including the ones
&lt;a href=&quot;https://github.com/agarrharr/awesome-cli-apps#version-control&quot;&gt;for Version Control&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://automerge.org/blog/automerge-2/&quot;&gt;Automerge 2.0&lt;/a&gt;
is a &lt;a href=&quot;https://crdt.tech/&quot;&gt;CRDT&lt;/a&gt;, or “Conflict-free Replicated Data Type”,
that one can use to implement real-time collaboration for an application,
which is focused on optimizing editing of plaintext.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Bruno Brito.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 95 (January 31st, 2023)</title>
      <link>https://git.github.io/rev_news/2023/01/31/edition-95/</link>
      <pubDate>Tue, 31 Jan 2023 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2023/01/31/edition-95/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-95-january-31st-2023&quot;&gt;Git Rev News: Edition 95 (January 31st, 2023)&lt;/h2&gt;

&lt;p&gt;Welcome to the 95th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of December 2022 and January 2023.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CAOLTT8Tt3jW2yvm6BRU3yG+EvW1WG9wWFq6PuOcaHNNLQAaGjg@mail.gmail.com/&quot;&gt;Question: How to execute git-gc correctly on the Git server?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;ZheNing Hu asked about how he could run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git gc&lt;/code&gt; correctly on his
own Git server. He seemed to be afraid by
&lt;a href=&quot;https://git-scm.com/docs/git-gc&quot;&gt;the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git gc&lt;/code&gt; documentation&lt;/a&gt;
saying that there is a risk of failures and repository corruption
when the command is run concurrently with other Git processes.&lt;/p&gt;

    &lt;p&gt;He said that he
&lt;a href=&quot;https://github.blog/2022-09-13-scaling-gits-garbage-collection/&quot;&gt;read about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git gc --cruft&lt;/code&gt;&lt;/a&gt;
which could overcome these issues, but that he was still using Git
v2.35 on his server while &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cruft&lt;/code&gt; was introduced in v2.38.&lt;/p&gt;

    &lt;p&gt;He also wondered if there was a need for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git gc&lt;/code&gt; to set a
repository level lock blocking most or all other Git operations,
and what these operations – especially &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; –
should do or report when hitting this lock.&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason replied that running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git gc&lt;/code&gt; on a “live”
repo was always racy, but the odds of corrupting the repo were
becoming very small when the value of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gc.pruneExpire&lt;/code&gt; config
option was increased. He said that the default setting for this
option, 2 weeks, was “more than enough for even the most paranoid
user”.&lt;/p&gt;

    &lt;p&gt;About &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cruft&lt;/code&gt;, Ævar thought that its purpose was not only to avoid
possible repo corruption, but also to allow more aggressive gc
(garbage collection).&lt;/p&gt;

    &lt;p&gt;He also wondered if this question was about large hosting sites like
GitHub and GitLab, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git gc&lt;/code&gt; is run on live repos, and
suggested not to worry in this case, but to take backups.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, replied to Ævar saying he was “a bit less
optimistic” about the corruption risk decreasing when
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gc.pruneExpire&lt;/code&gt; was increased because there was no atomic view of
the ref namespace. So renaming a branch for example was risky
because it could be seen as removing a branch and adding a different
one by any concurrent process. Such a process could be another &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push&lt;/code&gt;,
not just a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gc&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Peff also said that using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cruft&lt;/code&gt; was not so much about avoiding
corruption, but about keeping cruft objects out of the main pack to
reduce the cost of lookups and bitmaps, and about avoiding to
explode a lot of old objects into loose objects, which could be very
bad for performance.&lt;/p&gt;

    &lt;p&gt;Ævar replied to Peff discussing further when corruption was likely
or not to happen, which issues &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cruft&lt;/code&gt; could help with, and a
patch he sent in the past to reduce possible corruption. He also
suggested running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git gc&lt;/code&gt; on the least busy hours of the day.&lt;/p&gt;

    &lt;p&gt;Later Taylor Blau replied to Ævar and Peff discussing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cruft&lt;/code&gt; in
the context of single-pack bitmaps or multi-pack (MIDX) bitmaps, and
also in the context of GitHub.&lt;/p&gt;

    &lt;p&gt;In the meantime, Michal Suchánek replied to Ævar’s first email
asking what the 2 week default expiration time applied to. He also
said that he got corrupted repos with less than 100 users “and some
scripting” which went away when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gc&lt;/code&gt; was disabled.&lt;/p&gt;

    &lt;p&gt;Peff replied to Michal, saying that the expiration time applied to
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mtime&lt;/code&gt; on the object file (or the pack containing it), and
confirmed that it was “far from a complete race-free solution”.&lt;/p&gt;

    &lt;p&gt;ZheNing also replied to Michal saying that he preferred “no error at
all” to a “small probability of error”.&lt;/p&gt;

    &lt;p&gt;Michal replied to Peff listing some workflows that are more likely
to lead to a corrupt repo, like deleting branches but pushing other
branches that are variants of these branches, and different people
pushing files from the same external source.&lt;/p&gt;

    &lt;p&gt;Peff confirmed that these workflows were indeed risky, and detailed
a bit further how the race conditions can happen.&lt;/p&gt;

    &lt;p&gt;ZheNing then replied to Peff asking if there was “an easy and poor
performance” way like a lock on a repository to avoid for example
concurrent &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gc&lt;/code&gt; processes.&lt;/p&gt;

    &lt;p&gt;Ævar replied that there was no such way but that we should have
one. He explained that it could perhaps be done using hooks,
&lt;a href=&quot;https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks&quot;&gt;like ‘pre-receive’ and ‘post-receive’&lt;/a&gt;,
when we were sure that all relevant operations were going through
these hooks. (For example no local branch deletion should be
possible.)&lt;/p&gt;

    &lt;p&gt;ZheNing and Michal discussed a bit further the details related to
how a repo corruption can happen with concurrent &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gc&lt;/code&gt;
processes, and how that could possibly be avoided.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-teng-long&quot;&gt;Developer Spotlight: Teng Long&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My work is related to R&amp;amp;D efficiency tools development at Alibaba Cloud.
Our team have currently built a code hosting service as codeup.aliyun.com
which provides free and high-quality code services for Chinese developers
on the public cloud. In addition, I used to be a Gerrit contributor, because
I wrote Java for nearly 10 years, and this process made me almost forget
the C language, LOL.&lt;/p&gt;

    &lt;p&gt;For the contributions of Git community, apart from me, Jiang Xin (the Git
localization coordinator), ZheNing Hu, and Chen BoJun are also in the team.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;First of all, I know Git for some years, but I’m new in the community,
because Git’s technical depth is obvious which involves algorithms,
operating systems, testing techniques, etc. Also, Git has many
subcommands, which makes the implementation of Git itself involve
many aspects, and I think it is difficult for a new contributor to understand
everything, but long-term participation may make you an expert in one
aspect of Git. Sadly, my time devoted to the Git community is actually
limited.&lt;/p&gt;

    &lt;p&gt;I contributed a feature last year to allow the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git ls-tree&lt;/code&gt; subcommand
to support the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--format&lt;/code&gt; option which let you print out the result as you
want, this is helpful for some automated tools or scripted work I think. If
you want to know about it further, a better way is to read &lt;a href=&quot;https://github.blog/2022-04-18-highlights-from-git-2-36/#tidbits&quot;&gt;the blog by
Taylor Blau&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I’ve been following the evolution of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bundle-uri&lt;/code&gt; feature recently, I think
the idea of this feature is great and attractive. If used properly, it can not
only improve the speed of code download in some scenarios, but also
reduce the load on the server.&lt;/p&gt;

    &lt;p&gt;I’m also reading about algorithms related code (like bitmap, multi-pack bitmap,
bloom-filter), as I want to know some details about the combination of Git and
algorithms. I think it’s interesting.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;We all know that it can be a pain in terms of resource load and cost to
provide large-scale Git services. I hope to be able to solve the problem
with Git’s storage and computing coupling to let Git be better
to integrate with cloud-native architecture. Like, should it be possible
to store the refs, loose objects and packs on a Distributed Database？&lt;/p&gt;

    &lt;p&gt;I think this is one of the future development direction of the Git
architecture, starting from lower cost and cloud friendliness. If you want to
do these tasks based on Git, you may need to make the internal related
implementations more adaptable, which requires a lot of professional work
I think.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Maybe introduce a new option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--branches&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; to replace &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--all&lt;/code&gt;.
Option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--all&lt;/code&gt; means to push all branches, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--tags&lt;/code&gt; means to push all tags, but
many people misunderstand it (at least those around me), because they think
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--all&lt;/code&gt; means to push &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;all&lt;/code&gt; the branches and tags together. In fact, I made an &lt;a href=&quot;https://public-inbox.org/git/20221205133525.60464-1-tenglong.tl@alibaba-inc.com/&quot;&gt;RFC
patch&lt;/a&gt;
before, hoping to support the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--branches&lt;/code&gt; parameter in the first step, and
I’ll consider following up with this patch.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of
Git itself?&lt;/p&gt;

    &lt;p&gt;I prefer &lt;a href=&quot;https://github.com/alibaba/git-repo-go&quot;&gt;git-repo&lt;/a&gt; which supports
doing code reviews or pull requests on the client, just like using a native
Git subcommand.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t. contributing to
the Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;Still memorable when my first commit was merged in, even though it was
a small fix. This process made me understand that contributing to Git is
completely different from other workflows, and the process and results both
feel good.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;First, I use &lt;a href=&quot;https://public-inbox.org/git/?q=a%3Adyroneteng&quot;&gt;https://public-inbox.org/git/?q=a%3Adyroneteng&lt;/a&gt;
to check if there is any new mails related to me.&lt;/p&gt;

    &lt;p&gt;Then, I’ve been using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; to create patchsets and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;
to post them, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; for local reviews. I don’t know if there’s a better
way, but it seems to be enough for me.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;Contributing to Git is not an easy task, after all, you are working with
other excellent contributors in the community, but continuous understanding
and participation may make you an expert in a certain direction.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;I think it would be “get used to the process of contribution slowly”.&lt;/p&gt;

    &lt;p&gt;The review process is sometimes frustrating, but most of the suggestions by
reviewers are still valuable; you can learn a lot from the process, then you
can better participate in the next contribution.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq7cxl9h0i.fsf@gitster.g/&quot;&gt;2.39.1 and others&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.39.1.windows.1&quot;&gt;2.39.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.5.1&quot;&gt;1.5.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2023/01/22/gitlab-15-8-released/&quot;&gt;15.8&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2023/01/17/critical-security-release-gitlab-15-7-5-released/&quot;&gt;15.7.5, 15.6.6, and 15.5.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/01/11/gitlab-15-7-3-released/&quot;&gt;15.7.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/01/09/security-release-gitlab-15-7-2-released/&quot;&gt;15.7.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2023/01/05/gitlab-15-7-1-released/&quot;&gt;15.7.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.4&quot;&gt;3.7.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.7&quot;&gt;3.6.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.11&quot;&gt;3.5.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.14&quot;&gt;3.4.14&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.19&quot;&gt;3.3.19&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.3&quot;&gt;3.7.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.6&quot;&gt;3.6.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.10&quot;&gt;3.5.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.13&quot;&gt;3.4.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.18&quot;&gt;3.3.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.0.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.1.5&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.1.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2023-01-17-git-security-vulnerabilities-announced-2/&quot;&gt;Git security vulnerabilities announced&lt;/a&gt;
that affect versions 2.39 and older.  Fixes were authored by engineers from
the &lt;a href=&quot;https://about.gitlab.com/handbook/security/threat-management/security-research/&quot;&gt;GitLab Security Research Team&lt;/a&gt;,
as well as GitHub Engineers, and members of the git-security mailing list.
    &lt;ul&gt;
      &lt;li&gt;Two of three vulnerabilities were found as part of an audit of the Git codebase
conducted by &lt;a href=&quot;https://x41-dsec.de/&quot;&gt;X41&lt;/a&gt;. This audit was sponsored by the
&lt;a href=&quot;https://ostif.org/&quot;&gt;Open Source Technology Improvement Fund (OSTIF)&lt;/a&gt;.
X41 have also published information about this
&lt;a href=&quot;https://x41-dsec.de/security/research/news/2023/01/17/git-security-audit-ostif/&quot;&gt;Security Audit of Git&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2023/01/24/git-security-audit/&quot;&gt;Git security audit: Inside the hunt for - and discovery of - CVEs&lt;/a&gt;
by Joern Schneeweisz on GitLab Blog.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://hackaday.com/2023/01/20/this-week-in-security-git-deep-dive-mailchimp-and-spf&quot;&gt;This Week In Security: Git Deep Dive, Mailchimp, And SPF&lt;/a&gt;
by Jonathan Bennett on Hackaday, and
&lt;a href=&quot;https://lwn.net/Articles/921067/&quot;&gt;A security audit of Git&lt;/a&gt; brief on LWN.net.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2023-01-23-github-sponsors-will-stop-supporting-paypal/&quot;&gt;GitHub Sponsors will stop supporting PayPal&lt;/a&gt;,
starting on February 23, 2023.&lt;/li&gt;
  &lt;li&gt;GitHub is &lt;a href=&quot;https://github.blog/2023-01-20-sunsetting-subversion-support/&quot;&gt;sunsetting Subversion support&lt;/a&gt;.
On January 8, 2024, GitHub will remove support for Subversion.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://techcrunch.com/2023/01/09/xethub-raises-7-5m-for-its-git-based-data-collaboration-platform/&quot;&gt;XetHub raises $7.5M for its Git-based data collaboration platform&lt;/a&gt;
by Frederic Lardinois on TechCrunch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2023/01/09/beyond-git-the-other-version-control-systems-developers-use/&quot;&gt;Beyond Git: The other version control systems developers use&lt;/a&gt;
by Ryan Donovan on The Overflow (stackoverflow.blog).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://zura.wiki/post/never-write-a-commit-message-again-with-the-help-of-gpt-3/&quot;&gt;Never write a commit message again (with the help of GPT-3)&lt;/a&gt;
by Roger Zurawicki on his blog &lt;em&gt;(though read the proposed commit message before accepting it, please)&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://people.kernel.org/monsieuricon/sending-a-kernel-patch-with-b4-part-1&quot;&gt;Sending a kernel patch with b4 (part 1)&lt;/a&gt;
by Konstantin Ryabitsev (sending patch with &lt;a href=&quot;https://git.kernel.org/pub/scm/utils/b4/b4.git&quot;&gt;b4&lt;/a&gt;
is described in &lt;a href=&quot;https://b4.docs.kernel.org/en/stable-0.11.y/contributor/overview.html&quot;&gt;Contributor overview&lt;/a&gt;
section of the tool documentation).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://people.kernel.org/monsieuricon/introducing-b4-and-patch-attestation&quot;&gt;Introducing b4 and patch attestation&lt;/a&gt;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/03/25/edition-61/&quot;&gt;Git Rev News Edition #61&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackaday.com/2023/01/08/the-github-silverware-drawer-dilemma-or-finding-active-repository-forks/&quot;&gt;The GitHub Silverware Drawer Dilemma, Or: Finding Active Repository Forks&lt;/a&gt;
by Maya Posch on Hackaday points to projects that help to find the most active fork.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/23/1/git-articles&quot;&gt;7 Git articles every open source practitioner should read&lt;/a&gt;
by AmyJune Hineline from RedHat on OpenSource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/nopenoshishi/understanding-git-through-images-4an1&quot;&gt;Understanding Git through images&lt;/a&gt;
by kataoka_nopeNoshishi on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://til.simonwillison.net/clickhouse/github-explorer&quot;&gt;Querying the GitHub archive with the ClickHouse Playground&lt;/a&gt;
by Simon Willison on Simon Willison’s TILs (Today I’ve Learned).
&lt;!-- Tutorials, guides, and how-tos --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.genezini.com/p/7-tips-for-improving-your-productivity-with-git/&quot;&gt;7 tips for improving your productivity with Git&lt;/a&gt;
by Daniel Genezini on his “It works on my machine” blog
(also &lt;a href=&quot;https://dev.to/dgenezini/7-tips-for-improving-your-productivity-with-git-ajg&quot;&gt;on DEV.to&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://weblog.west-wind.com/posts/2023/Jan/05/Fix-that-damn-Git-Unsafe-Repository&quot;&gt;Fix that damn Git Unsafe Repository&lt;/a&gt;
by Rick Strahl on Rick Strahl’s Weblog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/ashishxcode/mastering-the-art-of-writing-effective-github-commit-messages-5d2p&quot;&gt;Mastering the Art of Writing Effective Git Commit Messages&lt;/a&gt;
by Ashish Patel on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/22/12/git-commit-message&quot;&gt;11 tips for writing a good Git commit message&lt;/a&gt;
by AmyJune Hineline from RedHat on OpenSource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/lissy93/20-git-commands-you-probably-didnt-know-about-4j4o&quot;&gt;20 Git Commands you (probably) didn’t know about&lt;/a&gt;
by Alicia Sykes on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.howtogeek.com/864263/how-to-checkout-a-remote-git-branch/&quot;&gt;How to Checkout a Remote Git Branch&lt;/a&gt;
by Dave McKay on How-To Geek;
though the article misses the &lt;abbr title=&quot;Do What I Mean&quot;&gt;DWIM&lt;/abbr&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout &amp;lt;remote-branch&amp;gt;&lt;/code&gt; trick,
and does not mention the newer &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch &amp;lt;branch&amp;gt;&lt;/code&gt; command as alternative to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout &amp;lt;branch&amp;gt;&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/bitethecode/git-tutorials-understanding-of-rebase-and-merge-2cg4&quot;&gt;Git tutorials - understanding of rebase and merge&lt;/a&gt;
by Joonhyeok Ahn (Joon) on DEV.to is the final part in the 4 part
&lt;a href=&quot;https://dev.to/bitethecode/series/20767&quot;&gt;Git Cookbook&lt;/a&gt; series.
&lt;!-- Humor, or tangentially related --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://withinboredom.info/blog/2022/12/29/golang-is-evil-on-shitty-networks/&quot;&gt;Golang (and thus &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-lfs&lt;/code&gt;) is evil on shitty networks&lt;/a&gt;
on the Somewhere Within Boredom blog &lt;em&gt;(may be fixed by the time you are reading this)&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://initialcommit.com/blog/git-sim&quot;&gt;Git-Sim: Visually Simulate Git Operations In Your Own Repos&lt;/a&gt;.
Run a one-liner &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-sim&lt;/code&gt; command in the terminal,
for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-sim reset HEAD^&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-sim merge dev&lt;/code&gt;, 
to generate a custom Git command visualization (.jpg, .mp4) from your repository.
Written in Python, available as &lt;a href=&quot;https://pypi.org/project/git-sim/&quot;&gt;package on PyPI&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/james-stoup/heatwave&quot;&gt;heatwave&lt;/a&gt;
is a tool to visualize your Git commits with a heat map in the terminal,
similar to how GitHub’s heat map looks.
Written in Python, also available as &lt;a href=&quot;https://pypi.org/project/heatwave/&quot;&gt;package on PyPI&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/IonicaBizau/git-stats&quot;&gt;git-stats&lt;/a&gt; is a similar tool
to visualize local git statistics, including GitHub-like contributions calendars.
Written in JavaScript + HTML, available as &lt;a href=&quot;https://www.npmjs.com/package/git-stats&quot;&gt;npm.js package&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;Note that &lt;a href=&quot;https://gitstats.me/&quot;&gt;Git-Stats&lt;/a&gt;, also known as GitStats.me,
is an unrelated open-source GitHub contribution analyzer as a web service,
which was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/iterative/scmrepo&quot;&gt;scmrepo&lt;/a&gt; by Iterative
is a SCM wrapper and &lt;a href=&quot;https://filesystem-spec.readthedocs.io/&quot; title=&quot;fsspec: Filesystem interfaces for Python&quot;&gt;fsspec&lt;/a&gt; filesystem for Git for use in &lt;a href=&quot;https://dvc.org/&quot; title=&quot;Data Version Control · DVC&quot;&gt;DVC&lt;/a&gt;.
Works with multiple backends: pygit2 (libgit2), Dulwich, and GitPython.
    &lt;ul&gt;
      &lt;li&gt;DVC (Data Version Control) was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zurawiki/gptcommit&quot;&gt;gptcommit&lt;/a&gt; is a
git prepare-commit-msg &lt;a href=&quot;https://git-scm.com/docs/githooks&quot;&gt;hook&lt;/a&gt;
for authoring commit messages with the GPT-3 language model.  Written in Rust.&lt;br /&gt;
Note: you need to ensure you have sufficient credits in your OpenAI account to use it.&lt;/li&gt;
  &lt;li&gt;There are a few software forges working on implementing ForgeFed and/or ActivityPub federation.
&lt;a href=&quot;https://notabug.org/peers/forgefed&quot;&gt;ForgeFed&lt;/a&gt; (formerly GitPub) is a federation protocol
for forge services, first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/11/27/edition-69/&quot;&gt;Git Rev News Edition #69&lt;/a&gt; in 2020.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://vervis.peers.community/repos/WvWbo/source&quot;&gt;Vervis&lt;/a&gt; is a project hosting
and management application, with a focus on software projects and decentralization.
Self-hosted on the &lt;a href=&quot;https://vervis.peers.community&quot;&gt;https://vervis.peers.community&lt;/a&gt; instance.  Supports Git and Darcs,
and &lt;a href=&quot;https://vervis.peers.community/repos/WvWbo/source/FEDERATION.md&quot;&gt;ForgeFed/ActivityPub federation&lt;/a&gt;.
It is currently very much a work in progress.  Written in Haskell.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://forgeflux.org/&quot;&gt;ForgeFlux&lt;/a&gt; is &lt;a href=&quot;https://github.com/forgeflux-org/website/blob/master/content/about/index.md&quot;&gt;API-space software forge&lt;/a&gt;
federation with ForgeFed for Gitea, Sourcehut, GitLab, and GitHub.
Repositories are (also) &lt;a href=&quot;https://github.com/forgeflux-org&quot;&gt;hosted on GitHub&lt;/a&gt;.
Note: the project homepage on &lt;a href=&quot;https://forgeflux.org/&quot;&gt;https://forgeflux.org/&lt;/a&gt; seems to be down at the time of writing.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://forgefriends.org/&quot;&gt;Forgefriends&lt;/a&gt; is a &lt;a href=&quot;https://lab.forgefriends.org/forgefriends/forgefriends&quot;&gt;self-hosted&lt;/a&gt;
forge federation project, which purpose is to allow every Free Software developer
to use their favorite forge to contribute to software projects hosted on other forges.
Forgefriends is written in Go to share code with Gitea, 
and synchronization is done via the W3C ActivityPub protocol.
It is currently in pre-alpha stage.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Teng Long.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 94 (December 31st, 2022)</title>
      <link>https://git.github.io/rev_news/2022/12/31/edition-94/</link>
      <pubDate>Sat, 31 Dec 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/12/31/edition-94/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-94-december-31st-2022&quot;&gt;Git Rev News: Edition 94 (December 31st, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 94th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of November 2022 and December 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/xmqqfseargo4.fsf@gitster.g/&quot;&gt;What’s cooking in git.git (Nov 2022, #05; Tue, 22)&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, sent one of his usual “What’s
cooking in git.git” emails to the mailing list. At the beginning of
the email though he thanked everybody for “successfully concluding
the ‘bus factor’ exercise”.&lt;/p&gt;

    &lt;p&gt;It was indeed the first time in a few years that he temporarily
handed over the maintainership of the project to someone else, in
this case Taylor Blau, as he was having a vacation. It’s called a
‘bus factor’ exercise as it’s supposed to make a transition smoother
in case the current maintainer would be “hit by a bus”.&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://lore.kernel.org/git/Y3g95OYdwzq2OP3z@nand.local/&quot;&gt;previous “What’s cooking in git.git” email&lt;/a&gt;
had been sent a few days before by Taylor, who also thanked
everyone, as he saw that Junio was back online again.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CABYbkvP=fMmaFUD3bQbeQ-XKiMSP6g-u0p7Vq1Qt_K5=D5WJ+A@mail.gmail.com/&quot;&gt;Git Bug Report: out of memory using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git tag&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Martin Englund sent a bug report to the Git mailing list saying that
after creating a signed tag using a ssh-agent key, he ran the
following command that should have shown the body part of the tag
contents:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git tag -l --format &apos;%(contents:body)&apos; v0.6.1&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;But instead of displaying anything, the command crashed with:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fatal: Out of memory, malloc failed (tried to allocate 18446744073709551266 bytes)&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;Peff, alias Jeff King, thanked Martin for the report and said he had
found the function where the crash happened and the reason why it
happened. He also provided minimal reproduction instructions as well
as the commit that introduced the bug, and he put the author of that
commit in CC of his email.&lt;/p&gt;

    &lt;p&gt;Philippe Blain, the author of the commit, thanked Peff for the
information and said he would try to find a fix for the bug.&lt;/p&gt;

    &lt;p&gt;Peff replied to Philippe that after sleeping on the issue, he fully
understood what happened. He said there were actually two closely
related bugs and he was sending 2 patches to fix them both.&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://lore.kernel.org/git/Y2IfT0UFJ7H%2FmHMz@coredump.intra.peff.net/&quot;&gt;first patch&lt;/a&gt;
was a fix for cases where there was no blank line between the
subject of a tag and the signature in it, and when the signature
also contained no blank line. Such signatures could be generated by
ssh.&lt;/p&gt;

    &lt;p&gt;In such cases the code wasn’t properly detecting the start of the
signature and was instead using the end of the commit. When
computing the signature length, this would give a negative value,
which was then converted to a huge value as the variable for the
signature length used an unsigned type. In turn when allocating
memory for the signature, this would lead to the crash as it wasn’t
possible to allocate the requested amount of memory for it.&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://lore.kernel.org/git/Y2IfwL96Ku%2FdGuJR@coredump.intra.peff.net/&quot;&gt;second patch&lt;/a&gt;
fixed a similar bug that occurred when there was a blank line in the
signature but not before it, and this blank line ended with both the
CR (Carriage Return) and LF (Line Feed) characters instead of only
the latter.&lt;/p&gt;

    &lt;p&gt;In that case, the start of the signature was also not properly
detected, so a negative value was assigned to the variable for the
signature length, which led to a crash when allocating memory for
the signature.&lt;/p&gt;

    &lt;p&gt;Both patches are very well explained in long commit messages. This
prompted Elijah Newren to reply to Peff joking about the fact that
Peff’s patches didn’t set new records for the ratio of commit
message lines to changed code, as a previous patch from Elijah
contained 96 lines of explanation to describe a one-line fix.&lt;/p&gt;

    &lt;p&gt;In the same spirit, Peff replied to Elijah providing a script to
find the commit with the highest ratio between lines of explanations
in the commit message and the lines in the patch. He said that the
script would show “a few in the 100’s”.&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason then replied to Peff contesting the method
used in Peff’s scripts and suggesting computing “the Levenshtein
distance of the pre- and post-image”, and then using that distance
to commit message length instead of the previous ratio, which would
find other winners.&lt;/p&gt;

    &lt;p&gt;Elijah ended this subthread of discussion about the biggest comment
to code ratio in a commit in the Git repo with:&lt;/p&gt;

    &lt;p&gt;“Hehe, my offhand joke started a contest over the whimsical question of
who’s the most long-winded.  I think my work here is done.  :-)”&lt;/p&gt;

    &lt;p&gt;Eric Sunshine, after reviewing Peff’s patches, commented that they
were well explained and that he found no suggestion to improve on
them.&lt;/p&gt;

    &lt;p&gt;Philippe agreed with Eric that the patches were very well explained
and asked Peff about the case where there would be both no blank
line and lines terminated with both CR and LF in the tag. Peff then
confirmed that this would be properly handled by his first patch.&lt;/p&gt;

    &lt;p&gt;Taylor Blau, who was handling the maintainer’s role in the project
at that time, as Junio Hamano was having a vacation, also agreed
that the patches were very well explained, and agreed to take
them. The patches were then merged and part of the Git v2.39.0
feature release.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-zhening-hu&quot;&gt;Developer Spotlight: ZheNing Hu&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My name is ZheNing Hu, and I am a participant in the GSOC 2021
Git community. Currently I am interning at Alibaba (China).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;When I used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git shortlog --author=&quot;ZheNing Hu&quot;&lt;/code&gt; to look at the patches
I contributed, I was ashamed to find that my patches are quite small and
simple, because I’m more of a Git learner right now 😄.&lt;/p&gt;

    &lt;p&gt;If I had to pick one, I’d say it’s adding the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--trailer&lt;/code&gt; option to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt;.
It is very convenient to add something like “Signed-off-by”, “Reviewed-by”
at the end of the commit message.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Recently I’ve been working on &lt;a href=&quot;https://lore.kernel.org/git/pull.1398.v3.git.1669723221.gitgitgadget@gmail.com/&quot;&gt;implementing a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--scope&lt;/code&gt; option for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt;&lt;/a&gt;
and other Git commands. It tries to limit the scope of the file path to the
&lt;a href=&quot;https://github.com/git/git/blob/7c2ef319c52c4997256f5807564523dfd4acdfc7/Documentation/technical/sparse-checkout.txt#L73&quot;&gt;sparse specification&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;The reason I wanted to implement this feature is that I was researching
how monorepo users collaborate and discovered that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; might download
Git objects outside of the sparse specification. Meanwhile, Elijah Newren
is contributing the &lt;a href=&quot;https://git-scm.com/docs/sparse-checkout&quot;&gt;technical documentation of git-sparse-checkout&lt;/a&gt;
[ &lt;a href=&quot;https://github.com/git/git/blob/7c2ef319c52c4997256f5807564523dfd4acdfc7/Documentation/technical/sparse-checkout.txt&quot;&gt;source&lt;/a&gt; ],
the article details how other Git commands should properly recognize
sparse-checkout, and suggests implementing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--scope&lt;/code&gt; option, which
I think will solve the problem I encountered above, so I hope to implement it.&lt;/p&gt;

    &lt;p&gt;This patch was put on hold by me for a while, as no one seemed to review it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I’d like to have a well-developed concurrency model on the Git server side.
See &lt;a href=&quot;https://lore.kernel.org/git/CAOLTT8Tt3jW2yvm6BRU3yG+EvW1WG9wWFq6PuOcaHNNLQAaGjg@mail.gmail.com/&quot;&gt;“Question: How to execute git-gc correctly on the git server”&lt;/a&gt;
for more details.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;. It can be used to switch branches or restore working tree files,
I think these two functions are somewhat coupled. I don’t know if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt; would be perfect replacements for it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of
Git itself?&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://git-scm.com/docs/scalar&quot;&gt;scalar&lt;/a&gt;. Now I really like to use scalar to
download Git repositories to save time.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t. contributing to
the Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;Mainly during GSOC, my mentor Christian Couder and many people in the Git
community helped me, and I learned how to participate in open source for the
first time. It was a great experience to be brave and discuss technology with
people from all over the world.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and for
development of Git?&lt;/p&gt;

    &lt;p&gt;GitGitGadget. It has a clean commit process, and it runs GitHub action to
help me find out if my patch is buggy before committing to the community.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;First become its user&lt;/li&gt;
      &lt;li&gt;Understand its principles through the documentation&lt;/li&gt;
      &lt;li&gt;Read the source code to understand the general structure of the project&lt;/li&gt;
      &lt;li&gt;Understand some sub-modules of the project by solving some problems&lt;/li&gt;
      &lt;li&gt;Learn from others with an open mind&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;Stay curious about technology.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqlencspnl.fsf@gitster.g/&quot;&gt;2.39.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqv8miv7qj.fsf@gitster.g/&quot;&gt;2.38.2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq7cz59o6y.fsf@gitster.g/&quot;&gt;2.39.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqedtlynq8.fsf@gitster.g/&quot;&gt;2.39.0-rc1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.39.0.windows.2&quot;&gt;2.39.0(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.39.0.windows.1&quot;&gt;2.39.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.39.0-rc2.windows.1&quot;&gt;2.39.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.39.0-rc1.windows.1&quot;&gt;2.39.0-rc1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.2&quot;&gt;3.7.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.5&quot;&gt;3.6.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.9&quot;&gt;3.5.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.12&quot;&gt;3.4.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.17&quot;&gt;3.3.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/12/22/gitlab-15-7-released/&quot;&gt;15.7&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/12/16/gitlab-15-6-3-released/&quot;&gt;15.6.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/12/08/gitlab-15-5-6-released/&quot;&gt;15.5.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/12/02/gitlab-15-6-2-released/&quot;&gt;15.6.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/11/30/security-release-gitlab-15-6-1-released/&quot;&gt;15.6.1, 15.5.5 and 15.4.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/&quot;&gt;9.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.2.1.html&quot;&gt;4.2.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-assembler &lt;a href=&quot;https://lore.kernel.org/git/87tu2927yt.fsf@wavexx.thregr.org/&quot;&gt;1.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Siddharth Asthana,
&lt;a href=&quot;https://summerofcode.withgoogle.com/archive/2022/projects/yaKP2iJK&quot;&gt;who worked on Git during his GSoC 2022 for GitLab&lt;/a&gt;,
is looking for a 6-month Engineering internship, either full-time
starting from mid-July 2023 or part time starting now. See
&lt;a href=&quot;https://github.com/git/git.github.io/files/10180136/Siddharth_Asthana_Resume.pdf&quot;&gt;his resume&lt;/a&gt;
for more information.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-12-12-highlights-from-git-2-39/&quot;&gt;Highlights from Git 2.39&lt;/a&gt;
by Taylor Blau on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2022/12/07/introducing-the-gitlab-cli/&quot;&gt;Put &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glab&lt;/code&gt; at your fingertips with the GitLab CLI&lt;/a&gt;
by Kai Armstrong on GitLab Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/895689/&quot;&gt;Andrew Morton’s first pull request&lt;/a&gt;
by Jonathan Corbet on LWN.net (from May 2022).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://git.github.io/rev_news/2016/04/20/edition-14/&quot;&gt;Git Rev News Edition 14 (April 20th, 2016)&lt;/a&gt;
mentioned, when describing discussions at the Git Contributor Summit
(part 1, about big repos and big files), that Andrew Morton uses (used?)
&lt;a href=&quot;https://savannah.nongnu.org/projects/quilt&quot;&gt;quilt&lt;/a&gt;
to maintain his “-mm” kernels, and that he sent patches by email.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/szabgab/billions-of-unnecessary-files-in-github-i85&quot;&gt;Billions of unnecessary files in GitHub&lt;/a&gt;
and Git repositories in general, due to missing or lacking
&lt;a href=&quot;https://git-scm.com/docs/gitignore&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt;&lt;/a&gt;
files.  Article by Gabor Szabo on DEV.to (also known as The Practical Dev).
There is also some good information in the comments.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/imjoseangel/what-are-your-git-aliases-43om&quot;&gt;What are your git aliases?&lt;/a&gt;
by Jose Angel Munoz on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://leonardomontini.dev/close-pr-strategy-merge-commit-squash-rebase/&quot;&gt;How to Close a Pull Request - Merge Commit vs Squash vs Rebase on GitHub&lt;/a&gt;
by Leonardo Montini.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/topics/gitops/&quot;&gt;What is GitOps?&lt;/a&gt; on GitLab.
    &lt;ul&gt;
      &lt;li&gt;The topic of GitOps was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2018/09/19/edition-43/&quot;&gt;#43&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2020/03/25/edition-61/&quot;&gt;#61&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2020/04/23/edition-62/&quot;&gt;#62&lt;/a&gt;,
and &lt;a href=&quot;https://git.github.io/rev_news/2022/07/31/edition-89/&quot;&gt;#89&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2021/07/12/gitops-as-the-evolution-of-operations/&quot;&gt;GitOps viewed as part of the Ops evolution&lt;/a&gt;
by Viktor Nagy o GitLab Blog (2021).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/mortenolsen/deployment-confidence-with-git-4b0b&quot;&gt;A meta talk about Git strategies&lt;/a&gt;
for deployment (GitOps-like), by Morten Olsen on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://how-to.dev/rebases-in-git-and-why-you-shouldnt-be-afraid-of-them&quot;&gt;Rebases in Git and why you shouldn’t be afraid of them&lt;/a&gt;
by Marcin Wosinek for &lt;a href=&quot;https://how-to.dev/&quot;&gt;How to dev&lt;/a&gt;
(also &lt;a href=&quot;https://dev.to/how-to-dev/rebases-in-git-and-why-you-shouldnt-be-afraid-of-them-1fb5&quot;&gt;reposted on DEV.to&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2022/10/06/take-advantage-of-git-rebase/&quot;&gt;Take advantage of Git rebase&lt;/a&gt;
by Christian Couder on GitLab Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/thelarkinn/split-a-commit-into-2-commits-with-git-rebase-31ee&quot;&gt;Split a commit into 2 commits with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;&lt;/a&gt;
by Sean Larkin on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.trunk.io/minimum-viable-git-for-trunk-based-development-81a5da7a77a7&quot;&gt;Minimum Viable Git for Trunk-based Development&lt;/a&gt;
by Eli Schleifer on &lt;a href=&quot;https://trunk.io/&quot;&gt;trunk.io&lt;/a&gt; blog (a Medium-based blog).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://trunkbaseddevelopment.com/&quot;&gt;Trunk Based Development&lt;/a&gt;
was mentioned directly in &lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/&quot;&gt;Git Rev News Edition #24&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2021/03/27/edition-73/&quot;&gt;#73&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
by Martin Fowler, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;,
describes Trunk-Based Development in the section
&lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html#LookingAtSomeBranchingPolicies&quot;&gt;Looking at some branching policies&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.nvidia.com/blog/benefits-of-using-pull-requests-for-collaboration-and-code-review/&quot;&gt;Benefits of Using Pull Requests for Collaboration and Code Review&lt;/a&gt;
by Fatos Morina on NVIDIA Developer Technical Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.indooroutdoor.io/how-to-revert-a-merge-commit-and-then-merge-again&quot;&gt;How to revert a merge commit then merge again&lt;/a&gt;
by Jb Rocher on his blog
(&lt;a href=&quot;https://dev.to/jbrocher/how-to-revert-a-merge-commit-then-merge-again-hoo&quot;&gt;also on DEV.to&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.polettix.it/ETOOBUSY/2022/11/22/git-worktree/&quot;&gt;Git worktree&lt;/a&gt;
by Flavio Poletti (@polettix) on his ETOOBUSY blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tylercipriani.com/blog/2022/11/19/git-notes-gits-coolest-most-unloved-feature/&quot;&gt;Git Notes: Git’s Coolest, Most Unloved Feature&lt;/a&gt;
by Tyler Cipriani on his blog.
    &lt;ul&gt;
      &lt;li&gt;You can find various uses of the &lt;em&gt;Git notes&lt;/em&gt; feature mentioned in Git Rev News:
&lt;a href=&quot;http://who-t.blogspot.de/2015/07/using-git-notes-for-marking-test-suite.html&quot;&gt;marking test suite successes&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2015/08/05/edition-6/&quot;&gt;#6&lt;/a&gt;,
and &lt;a href=&quot;https://harrow.io/blog/effortlessly-maintain-a-high-quality-change-log-with-little-known-git-tricks/&quot;&gt;maintaining a high quality change log&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2017/12/20/edition-34/&quot;&gt;#34&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/google/git-appraise&quot;&gt;git-appraise&lt;/a&gt;,
a distributed code review system for Git repos using git notes
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/01/13/edition-11/&quot;&gt;Git Rev News Edition #11&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/22/11/advanced-git-commands&quot;&gt;Learn Git: 3 commands to level up your skill&lt;/a&gt;
by Dwayne McDaniel on Opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.halodoc.io/code-version-best-practices-with-clean-commit-formats/&quot;&gt;Code version best practices with clean commit formats&lt;/a&gt;,
following &lt;a href=&quot;https://github.com/angular/angular/blob/main/CONTRIBUTING.md#commit&quot;&gt;Angular commit convention guidelines&lt;/a&gt;,
by Chaitanya S. on Halodoc blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commit specification&lt;/a&gt;
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://commitlint.js.org/#/&quot;&gt;commitlint&lt;/a&gt; was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2021/11/29/edition-81/&quot;&gt;Git Rev News Edition #81&lt;/a&gt;,
&lt;a href=&quot;http://commitizen.github.io/cz-cli/&quot;&gt;Commitizen&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;#72&lt;/a&gt;,
&lt;a href=&quot;https://github.com/typicode/husky&quot;&gt;Husky&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;#63&lt;/a&gt;,
and &lt;a href=&quot;https://github.com/conventional-changelog/conventional-changelog&quot;&gt;conventional-changelog&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2021/11/29/edition-81/&quot;&gt;#81&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://leonardomontini.dev/merge-conflict-vscode/&quot;&gt;Resolving Merge Conflicts with Visual Studio Code&lt;/a&gt;
by Leonardo Montini (also &lt;a href=&quot;https://dev.to/this-is-learning/resolving-merge-conflicts-with-visual-studio-code-1mn1&quot;&gt;on This is Learning DEV.to blog&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.interviewbit.com/git-interview-questions/&quot;&gt;30+ Commonly Asked Git Interview Questions&lt;/a&gt;
on InterviewBit.
&lt;!-- this is humor, and should be last entry --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://westling.dev/b/extremely-linear-git&quot;&gt;Extremely Linear Git History&lt;/a&gt;,
where first commit in a repo hash a hash that starts with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0000000&lt;/code&gt;,
the second commit is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0000001&lt;/code&gt;, the third is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0000002&lt;/code&gt;, and so on
is possible with &lt;a href=&quot;https://github.com/zegl/extremely-linear&quot;&gt;extremely-linear&lt;/a&gt;
(aka &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git linearize&lt;/code&gt;) tool.  Article and tool by Gustav Westling.  ☺
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/&quot;&gt;Git Rev News Edition #24&lt;/a&gt;
mentions in passing the &lt;a href=&quot;https://bitbucket.org/tpettersen/git-sham&quot;&gt;git-sham&lt;/a&gt; tool,
which can be used to produce subsequent commits with SHA-1 identifiers
beginning with subsequent numbers - but the tool doesn’t seem to exist anymore at its original URL.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hickford/git-credential-oauth&quot;&gt;git-credential-oauth&lt;/a&gt;
is a Git credential helper that securely authenticates to GitHub,
GitLab, BitBucket and other forges using OAuth.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/semantic-release/semantic-release&quot;&gt;semantic-release&lt;/a&gt;
(&lt;a href=&quot;https://semantic-release.gitbook.io/semantic-release/&quot;&gt;documentation&lt;/a&gt;)
is a fully automated version management and package publishing Node.js tool.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/googleapis/release-please&quot;&gt;Release Please&lt;/a&gt; is a Node.js tool that
automates CHANGELOG generation, the creation of GitHub releases,
and version bumps for your projects; it does so by parsing your Git history
and looking for &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commit&lt;/a&gt; messages.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.toptal.com/developers/gitignore/&quot;&gt;gitignore.io&lt;/a&gt; by Toptal
is a service that creates useful &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; files for your project.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/github/gitignore&quot;&gt;github/gitignore&lt;/a&gt;
is GitHub’s collection of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; file templates.&lt;/li&gt;
      &lt;li&gt;Atlassian’s Bitbucket has a &lt;a href=&quot;https://www.atlassian.com/git/tutorials/saving-changes/gitignore&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; tutorial&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;GitLab provides a &lt;a href=&quot;https://docs.gitlab.com/ee/api/templates/gitignores.html&quot;&gt;.gitignore API&lt;/a&gt;
on all tiers.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/hackrslab/gig&quot;&gt;gig&lt;/a&gt;,
a Node.js command-line tool for quickly setting up &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; files,
which uses GitHub’s gitignore repository for gitignore templates,
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/08/05/edition-6/&quot;&gt;Git Rev News Edition #6&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=piotrpalarz.vscode-gitignore-generator&quot;&gt;.gitignore Generator&lt;/a&gt;
extension for &lt;em&gt;Visual Studio Code&lt;/em&gt;, which uses the gitignore.io API,
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/11/20/edition-57/&quot;&gt;Git Rev News Edition #57&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.diffchecker.com/&quot;&gt;Diffchecker.com&lt;/a&gt; is an online service that
will compare text to find the difference between two text files; there is also
an option for comparing &lt;a href=&quot;https://www.diffchecker.com/image-compare/&quot;&gt;images&lt;/a&gt;,
&lt;a href=&quot;https://www.diffchecker.com/pdf-compare/&quot;&gt;PDFs&lt;/a&gt;,
and &lt;a href=&quot;https://www.diffchecker.com/excel-compare/&quot;&gt;spreadsheets&lt;/a&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xls&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xlsx&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xlsm&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xlsb&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;csv&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;txt&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dif&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ods&lt;/code&gt; formats.
There are also commercial Diffchecker Pro service and Diffchecker Desktop apps.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opengitops.dev/&quot;&gt;OpenGitOps&lt;/a&gt; is a set of open-source standards,
best practices, and community-focused education to help organizations
adopt a structured, standardized approach to implementing GitOps.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.gitops.tech/&quot;&gt;GitOps.tech&lt;/a&gt;, a similar site that aggregates the essence of GitOps
(and includes free &lt;a href=&quot;https://leanpub.com/gitops&quot;&gt;GitOps: Cloud-native Continuous Deployment&lt;/a&gt;
e-book, published via Leanpub), was mentioned in passing in
&lt;a href=&quot;https://git.github.io/rev_news/2020/04/23/edition-62/&quot;&gt;Git Rev News Edition #62&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning Specification (SemVer)&lt;/a&gt;
is a simple set of rules and requirements that dictate
how version numbers are assigned and incremented.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from ZheNing Hu, Philip Oakley, Junio Hamano and
Mirth Hickford.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 93 (November 30th, 2022)</title>
      <link>https://git.github.io/rev_news/2022/11/30/edition-93/</link>
      <pubDate>Wed, 30 Nov 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/11/30/edition-93/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-93-november-30th-2022&quot;&gt;Git Rev News: Edition 93 (November 30th, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 93rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of October 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.1359.git.git.1665597148042.gitgitgadget@gmail.com/&quot;&gt;[PATCH] archive: add –recurse-submodules to git-archive command&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Heather Lapointe sent a patch to the mailing list that
enabled &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git archive&lt;/code&gt; to also include submodule contents in the
archives it produces.&lt;/p&gt;

    &lt;p&gt;She said she was inspired by
&lt;a href=&quot;https://github.com/dear-github/dear-github/issues/214&quot;&gt;a GitHub issue more than 160 upvotes&lt;/a&gt;
and thought the implementation wouldn’t be too difficult as most of
the plumbing was already in place.&lt;/p&gt;

    &lt;p&gt;One of the trickier parts was changing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;read_tree()&lt;/code&gt; function to
support other repos than the current one by not using the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;the_repository&lt;/code&gt; global variable.&lt;/p&gt;

    &lt;p&gt;Heather soon sent
&lt;a href=&quot;https://lore.kernel.org/git/pull.1359.v2.git.git.1665660960.gitgitgadget@gmail.com/&quot;&gt;a version 2 patch series&lt;/a&gt;.
This patch series contained only 2 patches. The first one was
identical to the one previously sent, while the second one fixed a
submodule traversal bug in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;read_tree()&lt;/code&gt; introduced by the first
patch.&lt;/p&gt;

    &lt;p&gt;René Scharfe replied to Heather, noticing that the cover letter of
the patch series had a TODO list with a number of items, most of
which seemingly already addressed. As the stats in the cover letter
showed 16 files changed, 269 insertions, and 96 deletions, he said it
was a bit much for a few patches, and suggested splitting them.&lt;/p&gt;

    &lt;p&gt;Heather replied to René that the TODO list came from GitGitGadget.
And René found that this tool was using an
&lt;a href=&quot;https://github.com/html-to-text/node-html-to-text&quot;&gt;HTML-to-text converter&lt;/a&gt;
that &lt;a href=&quot;https://github.com/html-to-text/node-html-to-text/issues/260&quot;&gt;doesn’t handle checkboxes nicely by default&lt;/a&gt;.
René and Heather then discussed how to split the patches, and a bit
how the first patch was implemented.&lt;/p&gt;

    &lt;p&gt;Heather then sent
&lt;a href=&quot;https://lore.kernel.org/git/pull.1359.v3.git.git.1665973401.gitgitgadget@gmail.com/&quot;&gt;a version 3 of her patch series&lt;/a&gt;
that split her previous patch series into 8 patches.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, along with Glen Choo, Jonathan
Tan, Phillip Wood and Ævar Arnfjörð Bjarmason all commented on some
of the patches in this series and suggested small improvements.&lt;/p&gt;

    &lt;p&gt;The Review Club &lt;a href=&quot;https://lore.kernel.org/git/kl6l35bbsubq.fsf@chooglen-macbookpro.roam.corp.google.com/&quot;&gt;selected this patch series&lt;/a&gt;
to be reviewed by participants on Wednesday October 26, and
participants generally agreed that “this is a really well-structured
and easy-to-follow series :)” and that “as far as new contributions go,
this is really good”.&lt;/p&gt;

    &lt;p&gt;Unfortunately it looks like Heather has been swamped with her own
work and didn’t have time to send a new version yet. Hopefully
though we will get this very requested feature soon.&lt;/p&gt;

    &lt;p&gt;As a side effect of the discussion, &lt;a href=&quot;https://github.com/gitgitgadget/gitgitgadget/pull/1128&quot;&gt;GitGitGadget formats checkboxes nicely now&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-bagas-sanjaya&quot;&gt;Developer Spotlight: Bagas Sanjaya&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m Bagas Sanjaya. I’m currently unemployed (due to my autistic condition
that makes working formally isn’t the nice option for me).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;Adding the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INSTALL_STRIP&lt;/code&gt; variable when installing Git from source (with
help from other Git developers due to lack of coding experience).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;For the benefit of the readers, is it possible for you to elaborate a
bit on what the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INSTALL_STRIP&lt;/code&gt; variable would help them with?&lt;/p&gt;

    &lt;p&gt;Typically users install Git from binary package provided by the
distribution. For those who wish to install from source, they can
install build-time dependencies first, then simply do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make &amp;amp;&amp;amp; make install&lt;/code&gt;.
However, it will install Git binaries with debugging info, which
can take a lot of space. In addition, many Unix systems have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;install(1)&lt;/code&gt;
that has an option to automatically strip debugging info during
installation. That’s why &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INSTALL_STRIP&lt;/code&gt; is introduced; if supported,
users can run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make INSTALL_STRIP=-s install&lt;/code&gt; to install
stripped binaries.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I’m mostly translating po strings in recent days. Otherwise I’m hacking
on Linux kernel documentation.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;As an autistic man, I’d like to meet developers who can accommodate my
special needs (often different from neurotypical people) so that I
can thrive my living.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;It is good to know that you would like to meet compassionate developers.
Is it possible for you expand a bit on what you would like to change /
enhance in Git when you get a team of such developers for a year?&lt;/p&gt;

    &lt;p&gt;I think more on communication. Sure, communicating with email makes life
easier for autistic developers (less physical interaction). However,
autistic people have different ways of communicating. For me, I need
a lot of time to process the information from a mailing list and formulate
the wording (which is due to comorbid ADHD). Thus, the community
expectation should have been adapted to individual needs, e.g. by being
more explicit on explanation of code of conduct when a new developer
is contributing. If he/she doesn’t understand the CoC, he/she can
proactively ask the community about points that he/she doesn’t understand.&lt;/p&gt;

    &lt;p&gt;In summary, besides adaptation from the community, there must be
initiatives from developers themselves.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

    &lt;p&gt;Gitea. I deployed the server application to the LXD instance on my
laptop as repository mirror when I push my favorite repos there.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;You have experience translating for Git. Is there something that
could be done differently to aid with the translation effort?&lt;/p&gt;

    &lt;p&gt;I think we need something like self-hosted Weblate to enable anyone
with translation skills to easily submit translated strings. But honestly
deploying one is tricky; I tried to deploy Weblate but couldn’t get strings
from Git source code to be available for translation on the interface.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How does your mailing list workflow look like?&lt;/p&gt;

    &lt;p&gt;Simplicistic. After configuring &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt; to send through outgoing
relay of your mail provider and your email clients to send plain text
email, unaltered (no line wrapping, intact tabs and spaces), you can
contribute by sending patches with the former and reviewing with the
latter.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;You need to find a joy in application development. If it doesn’t makes
you enjoy, you may need to take a break or find something else.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;As autistic, special interest fascinates me. You need to find one
in this project, while staying up-to-date with the general picture.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqr0xum8tn.fsf@gitster.g/&quot;&gt;2.39.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.39.0-rc0.windows.1&quot;&gt;2.39.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/11/22/gitlab-15-6-released/&quot;&gt;15.6&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/11/14/gitlab-15-5-4-released/&quot;&gt;15.5.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/11/14/gitlab-15-4-5-released/&quot;&gt;15.4.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/11/08/gitlab-15-5-3-released/&quot;&gt;15.5.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/11/02/security-release-gitlab-15-5-2-released/&quot;&gt;15.5.2, 15.4.4, and 15.3.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.4.html#347&quot;&gt;3.4.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.4.html#348&quot;&gt;3.4.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.5.html#354&quot;&gt;3.5.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.6.html#363&quot;&gt;3.6.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.7.html#370&quot;&gt;3.7.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.1&quot;&gt;3.7.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.4&quot;&gt;3.6.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.8&quot;&gt;3.5.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.11&quot;&gt;3.4.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.16&quot;&gt;3.3.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.0&quot;&gt;3.7.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/#version-8-10-3&quot;&gt;8.10.3&lt;/a&gt;,
&lt;a href=&quot;https://help.gitkraken.com/gitkraken-client/current/#version-8-10-2&quot;&gt;8.10.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;9.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Shaoxuan Yuan,
&lt;a href=&quot;https://ffyuanda.github.io/blog/GSoC-final-blog/&quot;&gt;who participated in the GSoC 2022&lt;/a&gt;,
is looking for a full time internship from mid-June 2023 to October
2023 or a part-time one starting now. See
&lt;a href=&quot;https://github.com/git/git.github.io/files/9995808/Resume_Shaoxuan_Yuan.pdf&quot;&gt;his resume&lt;/a&gt;
for more information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://andrewlock.net/working-with-stacked-branches-in-git-is-easier-with-update-refs/&quot;&gt;Working with stacked branches in Git is easier with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--update-refs&lt;/code&gt;&lt;/a&gt;
(an option which was included in Git 2.38, in October 2022)
by Andrew Lock on his blog, .NET Escapades.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.waleedkhan.name/bringing-revsets-to-git/&quot;&gt;Bringing revsets to Git&lt;/a&gt;
by Waleed Khan (@arxanas) describes how one can use the
&lt;a href=&quot;https://github.com/arxanas/git-branchless&quot;&gt;git-branchless&lt;/a&gt; suite of tools
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/06/27/edition-76/&quot;&gt;Git Rev News Edition #76&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2022/08/31/edition-90/&quot;&gt;#90&lt;/a&gt;)
and &lt;a href=&quot;https://www.mercurial-scm.org/repo/hg/help/revsets&quot;&gt;Mercurial’s revset notation&lt;/a&gt;
to form complex queries about a repo, display their results (for example in a graph view),
rebase changes using “patch-stack” workflow, and improve testing.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://engineering.fb.com/2022/11/15/open-source/sapling-source-control-scalable/&quot;&gt;Sapling: Source control that’s user-friendly and scalable&lt;/a&gt;
by Durham Goode on Engineering at Meta (Facebook) blog.
At this point, only the client side of the system has been released.&lt;br /&gt;
You can find some comments about it at:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/915104/&quot;&gt;Meta’s Sapling source-code management system&lt;/a&gt; on LWN.net.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=33612410&amp;amp;utm_term=comment&quot;&gt;Sapling: A new source control system with Git-compatible client&lt;/a&gt; on Hacker News.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/914041/&quot;&gt;Git evolve: tracking changes to changes&lt;/a&gt;
(&lt;a href=&quot;https://lwn.net/SubscriberLink/914041/fcffc20089b907b0/&quot;&gt;free preview link&lt;/a&gt;)
by Jonathan Corbet on LWN.net.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.jakelee.co.uk/using-gitstream-to-improve-pr-workflow/&quot;&gt;Using gitStream for ‘Continuous Merge’: automatically approving safe PRs,
 assigning reviewers, estimating review time, and more&lt;/a&gt;
by Jake Lee on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/22/11/git-tools&quot;&gt;My favorite Git tools&lt;/a&gt;
by Dwayne McDaniel on Opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/22/11/git-concepts&quot;&gt;Git concepts in less than 10 minutes&lt;/a&gt;
by Dwayne McDaniel on Opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/abbeyperini/gitpanic-interactive-rebase-48fe&quot;&gt;#gitPanic - Interactive Rebase&lt;/a&gt;
by Abbey Perini on DEV.to (part of the &lt;a href=&quot;https://dev.to/abbeyperini/series/20421&quot;&gt;gitPanic series&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.openreplay.com/top-dozen-advanced-git-commands-to-know/&quot;&gt;Top 12 Advanced Git Commands To Know&lt;/a&gt;
by El-Glory Oriabure on OpenReplay blog, with admittedly some pretty basic commands
in there.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.polettix.it/ETOOBUSY/2022/10/26/light-git-pwc/&quot;&gt;Light Git repository checkout&lt;/a&gt;
with &lt;a href=&quot;https://www.git-scm.com/docs/git-sparse-checkout&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git sparse-checkout&lt;/code&gt;&lt;/a&gt;
by Flavio Poletti (@polletix) on his ETOOBUSY blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2022/Oct/29/the-perfect-commit/&quot;&gt;The Perfect Commit&lt;/a&gt;
by Simon Willison on his Weblog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://happy-coding.visuellverstehen.de/posts/new-git-guidelines-we-have-switched-to-conventional-commits-1p0c&quot;&gt;New Git guidelines: We have switched to Conventional Commits&lt;/a&gt;
by Malte Riechmann for visuellverstehen on the Happy Coding blog.
(post is also available on &lt;a href=&quot;https://dev.to/visuellverstehen/new-git-guidelines-we-have-switched-to-conventional-commits-1p0c&quot;&gt;DEV.to&lt;/a&gt;).
The &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; specification
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/how-to-write-the-perfect-commit-message/&quot;&gt;How to Write the Perfect Commit Message&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/brunobrito/why-you-should-use-a-git-client-2dpe&quot;&gt;Why You Should Use a Git Client&lt;/a&gt; by Bruno Brito on dev.to.&lt;/li&gt;
  &lt;li&gt;Jakub Kozłowski &lt;a href=&quot;https://twitter.com/kubukoz/status/1590135952886075393&quot;&gt;tweeted&lt;/a&gt;
that Git conflict markers are parsed as valid Scala code, though you need to add some
appropriate &lt;a href=&quot;https://gist.github.com/kubukoz/894b049b5c1747f17c1e052754640b32&quot;&gt;definitions&lt;/a&gt;,
now available as a &lt;a href=&quot;https://github.com/polyvariant/scala-git-markers&quot;&gt;scala-git-markers library&lt;/a&gt;,
for it to run ;-).  Explained in more detail in his &lt;a href=&quot;https://www.youtube.com/watch?v=rSk_mea4U1E&quot;&gt;video on YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HrA_BbWUKRk&quot;&gt;Understanding Git Flow&lt;/a&gt;: A look at the operations of Git Flow through the Flying Logic visualisation of the branches and release process. The channel also has Git visualisations of Collaboration, merge and rebase, detached HEAD, and ‘What’s a DAG’.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://sapling-scm.com/&quot;&gt;Sapling SCM&lt;/a&gt; is a scalable, user-friendly
source control system that supports cloning and interacting with Git repositories,
and can be used by individual developers to work with GitHub
and other Git hosting services.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stacked-git.github.io/&quot;&gt;Stacked Git&lt;/a&gt;, &lt;strong&gt;StGit&lt;/strong&gt; for short,
is an application for managing Git commits as a stack of patches
(with its first release in 2005, it is almost as old as Git itself).
StGit was mentioned by Yann Dirson in the &lt;a href=&quot;https://git.github.io/rev_news/2021/04/30/edition-74/&quot;&gt;Git Rev News Edition #74&lt;/a&gt;
developer spotlight.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/brooksdavis/mergify&quot;&gt;Mergify&lt;/a&gt; is a tool
to merge changes from a branch one commit at a time,
most useful when merging changes to a highly diverged fork of a project.
    &lt;ul&gt;
      &lt;li&gt;Note that there is also &lt;a href=&quot;https://mergify.com/&quot;&gt;Mergify.com&lt;/a&gt;, mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2022/05/26/edition-87/&quot;&gt;Git Rev News Edition #87&lt;/a&gt;,
a web service free for open-source projects for automatizing pull requests
and securing the code merge using a merge queue.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/CTSRD-CHERI/git-mergify-rebase&quot;&gt;git-mergify-rebase&lt;/a&gt;
is a replacement for mergify, written using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; for better performance,
supporting most of features of the original.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nx.dev/&quot;&gt;Nx&lt;/a&gt; is a next generation build system for Node.js,
with first class monorepo support and various integrations.
Listed in the tools section of &lt;a href=&quot;https://monorepo.tools/&quot;&gt;monorepo.tools&lt;/a&gt;,
a site mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/02/28/edition-84/&quot;&gt;Git Rev News Edition #84&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitstream.cm/&quot;&gt;gitStream&lt;/a&gt; by LinearB is a GitHub app
that aims to improve the pull request review process.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/diracdeltas/tweets&quot;&gt;tweets&lt;/a&gt;
is @bcrypt’s janky twitter “replacement”,
using Git commit messages and GitHub for “microblogging”;
see the &lt;a href=&quot;https://twitter.com/bcrypt/status/1588416861552582657&quot;&gt;announcement on Twitter&lt;/a&gt; ;-).
Written as set of Bash scripts and a Makefile.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Bagas Sanjaya, Bruno Brito, Glen Choo and René Scharfe.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 92 (October 26th, 2022)</title>
      <link>https://git.github.io/rev_news/2022/10/26/edition-92/</link>
      <pubDate>Wed, 26 Oct 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/10/26/edition-92/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-92-october-26th-2022&quot;&gt;Git Rev News: Edition 92 (October 26th, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 92nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of October 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/organizations/git&quot;&gt;Git participated in GSoC (Google Summer of Code) 2022&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The following contributors have successfully passed their final
evaluation and published a final report:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Shaoxuan Yuan worked on the
&lt;a href=&quot;https://ffyuanda.github.io/blog/GSoC-final-blog/&quot;&gt;More Sparse Index Integrations project&lt;/a&gt;
project. He was co-mentored by Derrick Stolee and Victoria Dye.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Abhradeep Chakraborty worked on the
&lt;a href=&quot;https://medium.com/@abhra303/gsoc-final-report-feaaacfae737&quot;&gt;Reachability bitmap improvements&lt;/a&gt;
project. He was co-mentored by Kaartic Sivaraam and Taylor Blau.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Also Siddharth Asthana successfully participated in GSoC 2022 for
GitLab (instead of Git) and contributed to Git as part of his work on the
&lt;a href=&quot;https://gitlab.com/groups/gitlab-org/-/epics/8765&quot;&gt;Add Support for Mailmap&lt;/a&gt;
project. He was co-mentored by John Cai and Christian Couder.&lt;/p&gt;

    &lt;p&gt;Congratulations to these contributors and their mentors!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.1351.git.1663078962231.gitgitgadget@gmail.com/&quot;&gt;[PATCH] fuzz: add basic fuzz testing for git command&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Arthur Chan sent a patch to add basic fuzz testing to Git. The patch
added a set of helper functions in some &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fuzz-cmd-base.{h,c}&lt;/code&gt; files
and a demonstration entry point (called fuzzing target) for
&lt;a href=&quot;https://llvm.org/docs/LibFuzzer.html&quot;&gt;LibFuzzer&lt;/a&gt; or similar tools
to inject fuzzed data into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; in a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fuzz-cmd-status.c&lt;/code&gt;
file.&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason replied to Arthur. He suggested coding style
improvements to better match our style as well as taking a look at
the infrastructure code we already have for fuzzing. He also
wondered if existing code - that is, APIs for file generation and
the shell-based infrastructure in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t/&lt;/code&gt; directory - could not
be used for fuzzing, too.&lt;/p&gt;

    &lt;p&gt;Arthur replied that he couldn’t find existing infrastructure code
for fuzzing and that he was confused about avoiding the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;system&lt;/code&gt;(3)
calls as they were needed to reset the state of the repo after each
round of fuzzing, and the LLVM oss-fuzz library required such
resetting logic to be included in the C code.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, also replied to Arthur saying
that, before adding new fuzzing infrastructure, existing one should
be moved into a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fuzz/&lt;/code&gt; directory. Junio also suggested some
coding style improvements and commented on possible performance and
correctness issues.&lt;/p&gt;

    &lt;p&gt;Arthur replied to Junio that he implemented the suggested changes in
a version 2 of the patch that he was preparing, and then sent this
&lt;a href=&quot;https://lore.kernel.org/git/pull.1351.v2.git.1663349383852.gitgitgadget@gmail.com/&quot;&gt;version 2&lt;/a&gt;
to the mailing list.&lt;/p&gt;

    &lt;p&gt;This version of this patch indeed moved some existing
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fuzz-commit-graph.c&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fuzz-pack-headers.c&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fuzz-pack-idx.c&lt;/code&gt;
files into a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oss-fuzz&lt;/code&gt; directory. The patch still added the new
fuzzing infrastructure that was in the previous version, though a lot
of the issues that had been pointed out were fixed.&lt;/p&gt;

    &lt;p&gt;Junio replied that it was better to have the “cleaning up of
existing stuff” and “addition of new stuff” split into two separate
patches instead of having everything in the same one.&lt;/p&gt;

    &lt;p&gt;Arthur agreed to split the move of the existing fuzzing
infrastructure into
&lt;a href=&quot;https://lore.kernel.org/git/pull.1353.git.1663355009333.gitgitgadget@gmail.com/&quot;&gt;a separate preparatory patch&lt;/a&gt;
called “fuzz: reorganise the path for existing oss-fuzz fuzzers”
that he later sent to the mailing list.&lt;/p&gt;

    &lt;p&gt;Junio reviewed the preparatory patch and found that some changes to
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; file were likely missing. He also asked how the
fuzzing should be launched.&lt;/p&gt;

    &lt;p&gt;Arthur replied agreed that changing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; file was needed
and said that he got privately in touch with people from
&lt;a href=&quot;https://github.com/google/oss-fuzz/tree/master/projects/git&quot;&gt;oss-fuzz targeting Git&lt;/a&gt;
who had implemented the existing fuzzing. He also said that a
Dockerfile and build script prepared for Git would launch the
fuzzing.&lt;/p&gt;

    &lt;p&gt;Arthur then sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.1353.v2.git.1663457311149.gitgitgadget@gmail.com/&quot;&gt;version 2 of the preparatory patch&lt;/a&gt;
with a few small fixes and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; changes that Junio
suggested. Soon after he sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.1353.v3.git.1663542495094.gitgitgadget@gmail.com/&quot;&gt;version 3&lt;/a&gt;
with very minor changes compared to version 2.&lt;/p&gt;

    &lt;p&gt;Ævar replied to this new version suggesting some commit message
improvements to better explain the patch purpose as well as creating
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oss-fuzz/.gitignore&lt;/code&gt; instead of changing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; file at
the root of the repository.&lt;/p&gt;

    &lt;p&gt;Arthur sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.1353.v4.git.1663598215154.gitgitgadget@gmail.com/&quot;&gt;version 4&lt;/a&gt;
with the suggested changes.&lt;/p&gt;

    &lt;p&gt;Junio commented a bit on how to make sure people get CC’ed in the
emails sent by &lt;a href=&quot;https://gitgitgadget.github.io/&quot;&gt;GitGitGadget&lt;/a&gt; but
was happy with the patch itself, which has since been merged into the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; branch.&lt;/p&gt;

    &lt;p&gt;We are looking forward to even more fuzzing infrastructure
improvements in the near future.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq4jw1uku5.fsf@gitster.g/&quot;&gt;2.38.1 and others&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqmtacu8bw.fsf@gitster.g/&quot;&gt;2.38.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.38.1.windows.1&quot;&gt;2.38.1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.38.0.windows.1&quot;&gt;2.38.0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.7/admin/release-notes#3.7.0&quot;&gt;3.7.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.3&quot;&gt;3.6.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.7&quot;&gt;3.5.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.10&quot;&gt;3.4.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.15&quot;&gt;3.3.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.20&quot;&gt;3.2.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/10/24/gitlab-15-5-1-released/&quot;&gt;15.5.1&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/10/22/gitlab-15-5-released/&quot;&gt;15.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/10/19/gitlab-15-4-3-released/&quot;&gt;15.4.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/10/03/gitlab-15-4-2-released/&quot;&gt;15.4.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/09/29/security-release-gitlab-15-4-1-released/&quot;&gt;15.4.1, 15.3.4, and 15.2.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.4.html#346&quot;&gt;3.4.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.5.html#353&quot;&gt;3.5.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.6.html#362&quot;&gt;3.6.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.1.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.1.1&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;4.0&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/tower-windows-4/&quot;&gt;blog post&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The recorded talks of Git Merge 2022 &lt;a href=&quot;https://www.youtube.com/playlist?list=PL0lo9MOBetEGEAs1D28ExRQONnX-uZ3Wf&quot;&gt;are now live&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;The summary of Git Merge 2022 can be found in the
&lt;a href=&quot;https://github.blog/2022-10-21-git-merge-2022-mission-report/&quot;&gt;Git Merge 2022 – that’s a wrap!&lt;/a&gt;
blog post by Lee Reilly on the GitHub Blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-10-18-git-security-vulnerabilities-announced/&quot;&gt;Git security vulnerabilities announced&lt;/a&gt;
(CVE-2022-39253, and CVE-2022-39260) that affect Git’s &lt;a href=&quot;https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---local&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--local&lt;/code&gt; clone optimization&lt;/a&gt;
(important when cloning with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--recurse-submodules&lt;/code&gt; from untrusted repositories)
and &lt;a href=&quot;https://git-scm.com/docs/git-shell#_interactive_useA&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git shell&lt;/code&gt;’s interactive command mode&lt;/a&gt;.
Fixed in Git 2.38.1.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-10-03-highlights-from-git-2-38/&quot;&gt;Highlights from Git 2.38&lt;/a&gt;
by Taylor Blau on the GitHub Blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://www.phoronix.com/news/Git-2.38-Released&quot;&gt;Git 2.38 Adds Microsoft’s “Scalar” Repository Management Tool&lt;/a&gt;
by Michael Larabel on Phoronix.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cybernews.com/security/millions-git-folders-exposed/&quot;&gt;Cybernews research team discovered millions of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; folders exposed to public&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;A &lt;a href=&quot;https://www.sledgeworx.io/code-review-handbook/&quot;&gt;Code Review Handbook&lt;/a&gt; published by Sledgeworx Software.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/setting-up-gpg-windows/&quot;&gt;Setting Up GPG on Windows (The Easy Way)&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.kaleidoscope.app/2022/10/18/our-l33t-tower-features/&quot;&gt;Our Favorite Tower Features&lt;/a&gt; by Florian Albrecht on Kaleidoscope’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-10-13-the-story-of-scalar/&quot;&gt;The Story of Scalar&lt;/a&gt;
by Derrick Stolee and Victoria Dye on the GitHub Blog.&lt;/li&gt;
  &lt;li&gt;Literally the smallest changeset possible created:
&lt;a href=&quot;https://github.com/spyder-ide/spyder-docs/pull/332&quot;&gt;Fix: remove a ZERO WIDTH NO-BREAK SPACE in front of an inline literal&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amitmerchant.com/vs-code-timeline-your-local-version-control-system/&quot;&gt;VS Code “Timeline” feature — Your local version control system&lt;/a&gt;
by Amit Merchant.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/smitterhane/turn-around-your-git-mistakes-in-17-ways-2mn1&quot;&gt;Turn around your Git mistakes in 17 ways&lt;/a&gt;
by Smitter hane on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tylercipriani.com/blog/2022/09/30/githubs-missing-merge-option/&quot;&gt;GitHub’s Missing Merge Option&lt;/a&gt;
by Tyler Cipriani, explaining the conflict between team “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; should be clean” vs. team
“&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; should have an accurate history” and the consequences for GitHub users.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2022/10/06/take-advantage-of-git-rebase/&quot;&gt;Take advantage of Git rebase&lt;/a&gt; by Christian Couder on the GitLab blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2022/09/06/speed-up-your-monorepo-workflow-in-git/&quot;&gt;Speed up your monorepo workflow in Git&lt;/a&gt; by
John Cai on the GitLab blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://github.blog/2022-09-13-scaling-gits-garbage-collection/&quot;&gt;Scaling Git’s garbage collection&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/09/30/edition-91/&quot;&gt;Git Rev News #91&lt;/a&gt; and
&lt;a href=&quot;https://github.blog/2021-04-29-scaling-monorepo-maintenance/&quot;&gt;Scaling monorepo maintenance&lt;/a&gt;, mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2021/05/27/edition-75/&quot;&gt;Git Rev News #75&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/twitter/focus&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;focus&lt;/code&gt;&lt;/a&gt; is a tool to manage
&lt;a href=&quot;https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/&quot;&gt;Git sparse checkouts&lt;/a&gt;
derived from the &lt;a href=&quot;https://bazel.build/&quot;&gt;Bazel&lt;/a&gt; build graph.&lt;/li&gt;
  &lt;li&gt;Goblet is a Git proxy server that caches repositories for read access,
which is intended to be used as a library.
Created at Google as 20% project (with glue code for googlesource.com)
as &lt;a href=&quot;https://github.com/google/goblet&quot;&gt;google/goblet&lt;/a&gt;,
and also used in a modified form at Canva
as &lt;a href=&quot;https://github.com/canva-public/goblet&quot;&gt;canva-public/goblet&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;A different &lt;a href=&quot;https://pythonhosted.org/goblet/&quot;&gt;Goblet&lt;/a&gt;
&lt;em&gt;was&lt;/em&gt; some time ago a web frontend for Git repositories in Python,
using libgit2 and Flask; the &lt;a href=&quot;https://github.com/seveas/goblet&quot;&gt;seveas/goblet&lt;/a&gt;
repository has been archived by the owner.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://xwmx.github.io/nb/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nb&lt;/code&gt;&lt;/a&gt; is a command line and local web
note-taking, bookmarking, archiving, and knowledge base application
with Git-backed versioning and syncing.&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://git.github.io/git-reference/&quot;&gt;Git Reference&lt;/a&gt; site is meant to be a
quick reference for learning and remembering the most important and commonly
used Git commands, but it can also be used as a tutorial. Every page will also
link to more in-depth Git documentation.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-send-email.io/&quot;&gt;email + git = &amp;lt;3: Learn to use email with Git!&lt;/a&gt;
is a guide to contributing to email-driven projects like the Linux kernel, PostgreSQL, or Git.
Covers various operating systems and distributions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Johannes Schindelin and Bruno Brito.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 91 (September 30th, 2022)</title>
      <link>https://git.github.io/rev_news/2022/09/30/edition-91/</link>
      <pubDate>Fri, 30 Sep 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/09/30/edition-91/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-91-september-30th-2022&quot;&gt;Git Rev News: Edition 91 (September 30th, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 91st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of September 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge conference&lt;/a&gt; and Contributor’s Summit&lt;/p&gt;

    &lt;p&gt;The Git Merge conference happened
&lt;a href=&quot;https://git-merge.com/#schedule&quot;&gt;on September 14th and 15th&lt;/a&gt;.
On the afternoon of the first day there were optional workshops and
the Git Contributor’s Summit, while the main conference took place on
the second day.&lt;/p&gt;

    &lt;p&gt;As usual &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1QhkUkYvqtGJtN7ViiTmrfcP3s0cXgqyAIACRD5Q24Mg&quot;&gt;the topics&lt;/a&gt;
that were discussed during the Contributor’s Summit were proposed
and voted on before the summit started. The discussions started
with the topics with the most votes.&lt;/p&gt;

    &lt;p&gt;Taylor Blau sent &lt;a href=&quot;https://lore.kernel.org/git/YzXvMRc6X60kjVeY@nand.local/&quot;&gt;an email&lt;/a&gt;
summarizing what happened and asking for feedback, followed by an own
email thread for each topic that had a note-taker, starting with the 
topic’s broken-out notes.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.eventbrite.com/e/gerrit-user-summit-2022-tickets-424995963367&quot;&gt;Gerrit User Summit&lt;/a&gt; 2022&lt;/p&gt;

    &lt;p&gt;Gerrit User Summit is the event that brings together Gerrit and JGit
maintainers, contributors and users, as an opportunity to network face-to-face and
share news and experiences. It is now back on the 10-11 November 2022
in hybrid mode with a physical venue in &lt;a href=&quot;https://g.page/codenodeuk?share&quot;&gt;London at CodeNode&lt;/a&gt;
and online.&lt;/p&gt;

    &lt;p&gt;The summit is going to be recorded and published on the &lt;a href=&quot;https://tv.gerritforge.com&quot;&gt;GerritForge YouTube&lt;/a&gt;
channel, together with roundtables and discussions between the community
members.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CAO_RewbD+BJd1hPKCmCNM8wYBSUmZ2TuOoy6t1up1CT-rbn4DA@mail.gmail.com/&quot;&gt;rev-parse: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--&lt;/code&gt; is sometimes a flag and sometimes an arg?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tim Hockin sent an email to the mailing list containing a series of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse&lt;/code&gt; commands with some arguments that he ran on the
command line, along with their results and his comments.&lt;/p&gt;

    &lt;p&gt;First he ran &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse unknown-tag&lt;/code&gt;, which errored out after
printing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unknown-tag&lt;/code&gt;. The error message said that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unknown-tag&lt;/code&gt; is
an ambiguous argument and suggested to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--&lt;/code&gt; to separate paths
from revisions.&lt;/p&gt;

    &lt;p&gt;So he tried &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse unknown-tag --&lt;/code&gt;, which just errored saying
that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unknown-tag&lt;/code&gt; was a bad revision, as expected.&lt;/p&gt;

    &lt;p&gt;Unfortunately when he then tried &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse HEAD --&lt;/code&gt;, there was
no error, as expected, but instead of printing only the SHA1 hash
corresponding to HEAD, the command also printed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--&lt;/code&gt; on its own line
after the SHA1 hash.&lt;/p&gt;

    &lt;p&gt;This made Tim wonder why &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--&lt;/code&gt; was treated as a regular argument. He
looked at Git source code and said that it seemed intentional to
treat it that way, but he didn’t understand the reason.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse&lt;/code&gt; was
mostly a “plumber” command designed to be used by higher level
“porcelain” commands. By default, it should be able to “parse”
command line arguments, and then dump them all to its output after
translating “revs” into raw object names (SHA1 hashes).&lt;/p&gt;

    &lt;p&gt;As &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--&lt;/code&gt; is a valid option for “porcelain” commands or scripts that
would use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse&lt;/code&gt; to parse their command line arguments, it
makes sense for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse&lt;/code&gt; to just pass &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--&lt;/code&gt; along.&lt;/p&gt;

    &lt;p&gt;Tim then asked if there was “a more friendly way” to do what he
wanted to achieve. But Junio replied that it wasn’t clear what Tim
actually wanted to do.&lt;/p&gt;

    &lt;p&gt;Tim replied that his goal was to convert a string that could contain
a tag name, a branch name, or a SHA1 hash (abbreviated or not) into
a canonical SHA1.&lt;/p&gt;

    &lt;p&gt;Junio suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse --verify &amp;lt;string&amp;gt;&lt;/code&gt;, as it would
either convert &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;string&amp;gt;&lt;/code&gt; into an object ID (a SHA1 hash by
default), or it would error out. Junio also mentioned that
&lt;a href=&quot;https://git-scm.com/docs/git-rev-parse#_examples&quot;&gt;the “EXAMPLES” section&lt;/a&gt;
has more elaborate examples.&lt;/p&gt;

    &lt;p&gt;brian m. carlson chimed in to say that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse --verify &amp;lt;string&amp;gt;&lt;/code&gt;
would print a full object ID whether it exists in the repo or not, if
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;string&amp;gt;&lt;/code&gt; already contains one (for example, the all-zeros object ID).
He suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-parse --verify &amp;lt;string&amp;gt;^{object}&lt;/code&gt; if Tim
wanted to also verify that the object exists.&lt;/p&gt;

    &lt;p&gt;Tim thanked brian and Junio saying that their answer helps a lot.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-jeff-king-alias-peff&quot;&gt;Developer Spotlight: Jeff King (alias Peff)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My given name is Jeff, but most people call me Peff. Even in real life.
I’ve been working on Git since early 2006. For a while it was for fun
and to scratch my own itches (and maybe to avoid doing my school work),
but I joined GitHub in 2011, where my job was mostly about improving
Git. I stopped being a full-time employee earlier this year, but I’m
still working a few hours a week on Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How has your journey been as a long-time Git contributor? Do you
happen to have any memorable experience w.r.t. contributing to the
Git project?&lt;/p&gt;

    &lt;p&gt;One thing I’ve found with contributing to Git is that it sneaks up on
you over time.&lt;/p&gt;

    &lt;p&gt;I still remember one moment in 2008 or 2009. In my mind, Git was
something I did to procrastinate on “real” work. Shawn Pearce was
organizing an in-person meeting of developers, and emailed me
specifically to say that I was one of the core developers and should
consider coming. I was really confused. Wasn’t this just a thing I did
in my spare time? But running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git shortlog&lt;/code&gt; showed that I was one of
the top few contributors. That really changed my mindset; I realized I
was part of a larger community, and that it was something I did care
about.&lt;/p&gt;

    &lt;p&gt;And I have that same sense looking at how far Git has come. Day to day
(and especially when you’re fixing a bug in code from 2005) it can seem
like nothing changes. But when I look back over the span of 10 or 15
years, I’m amazed at the progress. Not just in terms of features in Git,
but at the overall development process. The way we work and communicate
has matured so much in that time. Some of that is from technical tools
(new Git features, new internal APIs and data structures to avoid whole
classes of bugs), but some of it is in what the people do. In my opinion,
our standards for testing and commit messages have gone up considerably
over the years.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Git Merge got over a few days ago. Any takeaways from the conference
that you would like to share?&lt;/p&gt;

    &lt;p&gt;To me, the most important part of Git Merge is making connections
between developers. I’m not convinced that sticking 30 people in a room
is the best way to have a technical discussion, and the real work later
happens solo, or on the list. But I think seeing people in person, and
especially chatting with them over lunch, etc, is so helpful to that
later work. We all know intellectually that there’s another person on
the end of every email, but I think having met them face to face helps
us empathize at a more gut level.&lt;/p&gt;

    &lt;p&gt;Of course, there were some talks, too.  I tend to prefer the more
technical ones, but being so involved in Git development, there doesn’t
tend to be anything too surprising for me there. I thought the talks
from Taylor and Elijah were nice dives into new technical material
(though they both also have great blog posts that go even deeper!).
Martin’s Jujutsu talk gave a lot of food for thought on different ways
for people to interact with Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Could you share a few words regarding your experience while you were
a member of the Git PLC?&lt;/p&gt;

    &lt;p&gt;I was the person who led the initial effort in 2010 to join Software
Freedom Conservancy. We had gotten some money for the project as part of
Google’s Summer of Code program. It was being passed around like a hot
potato (between countries, even!) as somebody took responsibility for
handling GSoC each year. I don’t even want to think of what we were
&lt;em&gt;supposed&lt;/em&gt; to do with it, tax-wise, but we knew it would be better with
some actual structure. So that led to us joining, which led to the PLC
as committee in control of the project as an entity (and the money), and
that led to handling more assets (the git-scm.com domain, donated
hosting agreements from various places, the trademark).&lt;/p&gt;

    &lt;p&gt;Since the Conservancy entity isn’t directly related to code development,
being on the PLC is long periods of nothing, punctuated by big threads
full of boring non-coding stuff. Some of it is fun-ish, like handing out
travel funds so people can come to Git Merge. Some of it I found very
tedious, like discussing trademark enforcement, or code of conduct
issues. I was happy to serve on the PLC for many years, but I’m also
happy that other people are doing that work now.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I think my biggest contribution is not any one thing, but rather being
there for all of the things. There’s hardly a C file in the repository
that I haven’t touched at some point, and when fixing a bug I’d often
try to find solutions we could apply to the whole code base (e.g.,
improving an API to be less error-prone and using it consistently in
other callers).&lt;/p&gt;

    &lt;p&gt;I do sometimes work on bigger features. One of the earliest things I did
after starting at GitHub was overhaul our HTTP authentication and
introduce the credential-helper protocol. I occasionally see other tools
using a similar protocol, proving that it was either a great idea, or a
seductively bad one!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;One of my favorite things in Git is to wake up, read an email on the
list that says “why does Git do X when I say Y?”, dig it down to some
bug or missing feature, and end up with a nice, tidy patch by lunchtime.
Of course it doesn’t always go that way, but I do often enjoy these
little fixes. It’s like solving a puzzle.&lt;/p&gt;

    &lt;p&gt;I also have a backlog of half-finished ideas. Some of them are garbage
that I’ll probably throw away, but many of them just need a little
polishing. One of them is more tunable knobs for repacking (which has
been in use on GitHub’s servers for a few years already!), and another
is handling negative commit timestamps (so we can finally import
pre-1970 Apollo code).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Arguably I had that already, so maybe past work speaks for itself. Or
maybe I squandered it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Trees should be sorted in order strictly by name, rather than
directories sorting as if “/” was appended. It’s a little thing, I know,
but it’s one of the few things that’s really impossible to fix because
it’s baked so deep into Git’s logical model.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

    &lt;p&gt;Definitely &lt;a href=&quot;https://jonas.github.io/tig/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt;&lt;/a&gt;. Its “blame” functionality,
and especially the “re-blame from parent” feature, are so useful. I almost
never run a bare &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your toolbox for interacting with the mailing list and
for developing Git itself?&lt;/p&gt;

    &lt;p&gt;I read the mailing list via mutt. I keep a local archive which I index
with notmuch. I used to actually subscribe to the list, but these days I
just pull the archive every few minutes from lore.kernel.org’s
public-inbox Git repository.&lt;/p&gt;

    &lt;p&gt;I do all of my development with a fairly vanilla vim setup. I have a few
niceties, like terminal hotkeys to cut and paste object hashes, and a
vim function to inline output from a Git command (like converting hashes
into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--format=reference&lt;/code&gt;).&lt;/p&gt;

    &lt;p&gt;I try to share my scripts when they’re not too gross or specific to my
workflows. An example there is &lt;a href=&quot;https://github.com/git/git/tree/master/contrib/git-jump&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contrib/git-jump&lt;/code&gt;&lt;/a&gt;.
I keep some other Git-specific scripts in the &lt;a href=&quot;https://github.com/peff/git/tree/meta&quot;&gt;meta branch&lt;/a&gt;
which I check out as the directory &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Meta&lt;/code&gt; inside my Git repository (I
stole the name from Junio, who has a similar tree of scripts). I use it
to rebase my topics and make my daily-driver build of Git. There’s
probably not much of use there for most people, but some of it has led
to useful features (e.g., our test suite’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress&lt;/code&gt; option started as
a script there, though SZEDER Gábor did all the heavy lifting to
integrate it).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;There are a lot of ways to get involved in open source, but I think the
best one is scratching your own itch. Pick something you want the tool
to do, and work on it. That’s probably harder with Git these days than
it was when I started, just because the system is larger and more
complex, and so much of the low-hanging fruit has already been picked.&lt;/p&gt;

    &lt;p&gt;A similar way is just reading the list and looking for bug reports. Once
you learn about a problem, then it becomes your itch.&lt;/p&gt;

    &lt;p&gt;Of course it’s fine to start work on a much larger project if you like.
But following my “sneaks up on you” philosophy from above, if you work
on enough small things, you will eventually find yourself quite
comfortable with the code base, and able to work on larger things.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;Re-read your emails before sending! Obviously it’s nice to catch typos
and other simple proofreading errors. But it’s also a final chance to
make sure you are saying what you want clearly and concisely, and that
you understand what the other person is saying.&lt;/p&gt;

    &lt;p&gt;I can’t count the number of times that I’ve almost sent out a very
confused explanation in a commit message, and upon re-reading realized
that not only was there a better way to explain it, but a better way to
write the code. It’s also one of the reasons I like writing verbose
commit messages. Trying to justify the decisions you’ve made in writing
a patch is often the moment you realize that your arguments are weak.&lt;/p&gt;

    &lt;p&gt;Likewise, there have been many times when I’m about to respond to
somebody along the lines of “I think you’re wrong, and here’s why”. And
upon re-reading I realize that I did not understand their point in the
first place. Of course if everybody remains polite, then hopefully the
error works its way to a shared understanding eventually. But besides
saving everybody time, catching a misunderstanding before sending means
you’re wrong on the Internet one less time!&lt;/p&gt;

    &lt;p&gt;Of course, ending the interview with this tip gives an almost certain
probability that I have a typo somewhere above. So maybe one more tip:
be humble. And remember to have fun. Oops, that’s two tips.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqzgek1q1p.fsf@gitster.g/&quot;&gt;2.38.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqk05wz2si.fsf@gitster.g/&quot;&gt;2.38.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqczbwkpt8.fsf@gitster.g/&quot;&gt;2.38.0-rc0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqzgflk211.fsf@gitster.g/&quot;&gt;2.37.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.38.0-rc2.windows.1&quot;&gt;2.38.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.38.0-rc1.windows.1&quot;&gt;2.38.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.38.0-rc0.windows.1&quot;&gt;2.38.0-rc0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.37.3.windows.1&quot;&gt;2.37.3(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.2&quot;&gt;3.6.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.6&quot;&gt;3.5.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.9&quot;&gt;3.4.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.14&quot;&gt;3.3.14&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.19&quot;&gt;3.2.19&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.1&quot;&gt;3.6.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.5&quot;&gt;3.5.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.8&quot;&gt;3.4.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.13&quot;&gt;3.3.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.18&quot;&gt;3.2.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/09/22/gitlab-15-4-released/&quot;&gt;15.4&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/09/05/gitlab-15-3-3-released/&quot;&gt;15.3.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/08/30/critical-security-release-gitlab-15-3-2-released/&quot;&gt;15.3.2, 15.2.4 and 15.1.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.0.8&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.0.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac&quot;&gt;9.0&lt;/a&gt; (&lt;a href=&quot;https://youtu.be/CuCCGSlBkis&quot;&gt;What’s New in Tower 9 video&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;3.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2022-08-23-ssh-commit-verification-now-supported/&quot;&gt;SSH commit verification now supported&lt;/a&gt;
in GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.1password.com/git-commit-signing/&quot;&gt;1Password now allows you to set up and use SSH keys to sign Git commits&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://blog.1password.com/1password-ssh-agent/&quot;&gt;SSH and Git, meet 1Password&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2022-08-23-new-options-for-controlling-the-default-commit-message-when-merging-a-pull-request/&quot;&gt;New options for controlling the default commit message when merging a pull request&lt;/a&gt;
via web interface in GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2022-09-12-merge-commits-now-created-using-the-merge-ort-strategy/&quot;&gt;Merge commits now created using the merge-ort strategy&lt;/a&gt;
on GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.bleepingcomputer.com/news/security/35-000-code-repos-not-hacked-but-clones-flood-github-to-serve-malware/&quot;&gt;35,000 code repos not hacked—but clones flood GitHub to serve malware&lt;/a&gt;,
and &lt;a href=&quot;https://nakedsecurity.sophos.com/2022/08/04/github-blighted-by-researcher-who-created-thousands-of-malicious-projects/&quot;&gt;GitHub blighted by “researcher” who created thousands of malicious projects&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gerritcodereview.com/2022-09-29-gerrit-3.7-release-plan.html&quot;&gt;Gerrit Code Review v3.7.0 release plan&lt;/a&gt; has been published.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-09-13-scaling-gits-garbage-collection/&quot;&gt;Scaling Git’s garbage collection&lt;/a&gt;
by Taylor Blau on GitHub Blog: a tour of recent work to re-engineer Git’s garbage collection process
to scale to GitHub’s largest and most active repositories.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://vikramoberoi.com/a-primer-on-roaring-bitmaps-what-they-are-and-how-they-work/&quot;&gt;A primer on Roaring bitmaps: what they are and how they work&lt;/a&gt;
by Vikram Oberoi.
    &lt;ul&gt;
      &lt;li&gt;Adding support for &lt;a href=&quot;https://roaringbitmap.org/&quot;&gt;Roaring Bitmaps&lt;/a&gt; to Git was a part of
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/UPtA6qdf&quot;&gt;Reachability bitmap improvements&lt;/a&gt;
Google Summer of Code 2022 project by Abhradeep Chakraborty, see for example their
&lt;a href=&quot;https://medium.com/@abhra303/gsoc-final-report-feaaacfae737&quot;&gt;GSoC Final Report&lt;/a&gt; on their Medium blog.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/erikaheidi/enable-gitsign-today-and-start-signing-your-commits-2gda&quot;&gt;Enable Gitsign Today and Start Signing your Commits&lt;/a&gt;
with so called &lt;em&gt;keyless signing&lt;/em&gt;, that is signing that relies on ephemeral keys.
Article by Erika Heidi on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sethmlarson.dev/blog/switching-git-back-to-gpg-signing&quot;&gt;Switching git back to GPG signing&lt;/a&gt;
from SSH key signing, by Seth Michael Larson on his own blog.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://blog.dbrgn.ch/2021/11/16/git-ssh-signatures/&quot;&gt;Signing Git Commits with SSH Keys&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/01/31/edition-83/&quot;&gt;Git Rev News Edition #83&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mjg59.dreamwidth.org/60916.html&quot;&gt;Git signatures with SSH certificates&lt;/a&gt;
by Matthew Garrett on his Dreamwidth journal.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hacks.mozilla.org/2022/08/merging-two-github-repositories-without-losing-commit-history/&quot;&gt;Merging two GitHub repositories without losing commit history&lt;/a&gt;
by Schalk Neethling on Mozilla Hacks blog; a simpler solution might be to use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git subtree&lt;/code&gt; command,
or use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subtree&lt;/code&gt; merge strategy, or the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ort&lt;/code&gt; merge strategy with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subtree[=&amp;lt;path&amp;gt;]&lt;/code&gt; strategy option.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/gitignore-file-how-to-ignore-files-and-folders-in-git/&quot;&gt;.gitignore File – How to Ignore Files and Folders in Git&lt;/a&gt;
by Dionysia Lemonaki on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://carlosbecker.com/posts/ssh-tips-and-tricks/&quot;&gt;SSH Tips and Tricks&lt;/a&gt;
by Carlos Alexandro Becker, including how to avoid having to touch Yubikey.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/09/24/do-and-dont-self-host-your-repos/&quot;&gt;Do (not) Self-Host your repos&lt;/a&gt;
by Kay Rhodes (@masukomi), explaining pros and cons of self hosting, with a simple suggestion on what to do.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/wadecodez/the-git-commands-i-use-every-day-5g17&quot;&gt;The Git Commands I Use Every Day&lt;/a&gt;
by Wade Zimmerman on DEV.to,
originally &lt;a href=&quot;https://devmap.org/the-git-commands-i-use-every-day-5277f90ab743&quot;&gt;published at devmap.org&lt;/a&gt;, a Medium blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/git-best-practices-commits-and-code-reviews/&quot;&gt;Git Best Practices – How to Write Meaningful Commits, Effective Pull Requests, and Code Reviews&lt;/a&gt;
by Grant Weatherston on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/error-src-refspec-master-does-not-match-any-how-to-fix-in-git/&quot;&gt;Error: src refspec master does not match any – How to Fix in Git&lt;/a&gt;
by Dillion Megida on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://whitep4nth3r.com/blog/rewrite-git-history/&quot;&gt;Rewrite your git history in 4 friendly commands&lt;/a&gt;,
making the git history of a demo project to start (again) with an &lt;em&gt;“Initial commit”&lt;/em&gt;.
By Salma Alam-Naylor on whitep4nth3r.com (also &lt;a href=&quot;https://dev.to/whitep4nth3r/rewrite-your-git-history-in-4-friendly-commands-an9&quot;&gt;on DEV.to&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.urth.org/2022/08/14/fixing-some-bugs-in-my-github-profile-generator/&quot;&gt;Fixing Some Bugs in My GitHub Profile Generator&lt;/a&gt;
by Dave Rolsky on his House Absolute(ly Pointless) blog,
among others on how to use &lt;a href=&quot;https://github.com/github/linguist/blob/master/docs/overrides.md&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;linguist-generated&lt;/code&gt; gitattribute&lt;/a&gt;
to exclude generated files from languages statistics.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.plover.com/prog/git/tips.html&quot;&gt;Things I wish everyone knew about Git (Part I)&lt;/a&gt;
and &lt;a href=&quot;https://blog.plover.com/prog/git/tips-2.html&quot;&gt;(Part II)&lt;/a&gt;
by Mark Dominus (陶敏修) on The Universe of Discourse blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thenewstack.io/why-we-built-an-open-source-ml-model-registry-with-git/&quot;&gt;Why We Built an Open Source ML (Machine Learning) Model Registry with git&lt;/a&gt;
by Dmitry Petrov of &lt;a href=&quot;https://iterative.ai/&quot;&gt;Iterative.AI&lt;/a&gt; (authors of DVC, CML and MLEM)
on The New Stack.
    &lt;ul&gt;
      &lt;li&gt;See &lt;a href=&quot;https://iterative.ai/blog/iterative-studio-model-registry&quot;&gt;Git-backed Machine Learning Model Registry to bring order to chaos&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2022/07/31/edition-89/&quot;&gt;Git Rev News Edition #89&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.codeproject.com/Articles/5338960/Git-Comparing-Visual-Studio-2022-with-MeGit-EGit-a&quot;&gt;Git – Comparing Visual Studio 2022 with MeGit/EGit and SourceTree&lt;/a&gt;
by Mark Pelf on CodeProject.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.kaleidoscope.app/2022/08/03/kaleidoscope-and-tower/&quot;&gt;Kaleidoscope + Tower: the perfect Git setup&lt;/a&gt; by Florian Albrecht.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/how-we-built-tower-3-for-windows/&quot;&gt;How we built Tower 3 for Windows&lt;/a&gt; by Kristian Lumme on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/mastering-google-developers/&quot;&gt;Mastering Google (for Developers)&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/10-useful-git-commands/&quot;&gt;10 Useful Git Commands You Should Know&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/learn/git/faq/git-interview-questions&quot;&gt;Git Interview Questions - The essential list, including answers&lt;/a&gt;,
a part of Git Tower’s &lt;a href=&quot;https://www.git-tower.com/learn/git/faq&quot;&gt;Git FAQ&lt;/a&gt;
(with tips for the Tower Git client).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tobymao/sqlglot/blob/main/posts/sql_diff.md&quot;&gt;Semantic Diff for SQL&lt;/a&gt; by Iaroslav Zeigerman;
implementation discussed in this post is now a part of the &lt;a href=&quot;https://github.com/tobymao/sqlglot/&quot;&gt;SQLGlot&lt;/a&gt; library.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://b4.docs.kernel.org/en/stable-0.10.y/index.html&quot;&gt;b4&lt;/a&gt;: has gained
&lt;a href=&quot;https://b4.docs.kernel.org/en/stable-0.10.y/contributor/overview.html&quot;&gt;contributor oriented features&lt;/a&gt;,
like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b4 send&lt;/code&gt; to send patch series to a mailing list; see
&lt;a href=&quot;https://lore.kernel.org/git/20220919145445.ifpjcah44pql2erl@meerkat.local/&quot;&gt;Konstantin Ryabitsev’s announce&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sigstore/gitsign&quot;&gt;Gitsign&lt;/a&gt;: Keyless Git signing with
&lt;a href=&quot;https://www.sigstore.dev/&quot;&gt;Sigstore&lt;/a&gt;, with your own GitHub / OIDC (OpenID Connect) identity.
Written in Go.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/x-motemen/ghq&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ghq&lt;/code&gt;&lt;/a&gt; provides a way to organize remote repository clones,
like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;go get&lt;/code&gt; does; for example when cloning it makes a directory under a specific root directory.
Written in Go.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Skydio/revup&quot;&gt;Revup&lt;/a&gt; provides command-line tools that allow developers
to iterate faster on parallel changes and reduce the overhead of creating and maintaining code reviews;
it creates multiple independent chains of branches for you in the background
and then creates and manages GitHub pull requests for all those branches.
Written in Python.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/erikbern/git-of-theseus&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-of-theseus&lt;/code&gt;&lt;/a&gt; is a set of scripts to
analyze how a Git repo grows over time.
    &lt;ul&gt;
      &lt;li&gt;See &lt;a href=&quot;https://erikbern.com/2016/12/05/the-half-life-of-code.html&quot;&gt;The half-life of code &amp;amp; the ship of Theseus&lt;/a&gt;
by Erik Bernhardsson (2016).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/darul75/git_dash&quot;&gt;git_dash&lt;/a&gt; is a command-line shell script
for generating a Git metrics dashboard directly in your terminal.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dotfiles.github.io/&quot;&gt;GitHub does dotfiles&lt;/a&gt;: Your unofficial guide to dotfiles on GitHub.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Peff (Jeff King), Bruno Brito and
Luca Milanesio.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 90 (August 31st, 2022)</title>
      <link>https://git.github.io/rev_news/2022/08/31/edition-90/</link>
      <pubDate>Wed, 31 Aug 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/08/31/edition-90/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-90-august-31st-2022&quot;&gt;Git Rev News: Edition 90 (August 31st, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 90th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of July 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/cover-0.2-00000000000-20211015T020351Z-avarab@gmail.com/&quot;&gt;[PATCH 0/2] git(1) doc + “git help”: split-out user &amp;amp; git format docs&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Last October, Ævar Arnfjörð Bjarmason sent a patch series containing
only 2 patches. The first one created a new “User-facing file
formats” section in the main Git manual page by splitting it off from
the existing “Guides” section. The reason for this was that it was a
stretch to have manual pages like “gitignore(5)” in a section called
“Guides” which otherwise contained pages like “gitcore-tutorial(7)”.&lt;/p&gt;

    &lt;p&gt;The second patch in the series created a new “Git file and wire
formats” section in the main Git manual page. Contrary to the
section created by the first patch, this one was only for internal
file and wire formats, that users were not supposed to touch, like
“gitformat-bundle(5)”.&lt;/p&gt;

    &lt;p&gt;The goal was to make the existing technical documentation, which was
in “Documentation/technical/” and available only in the HTML format,
more accessible and discoverable by moving it over into the new man
page sections and adding the corresponding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--user-formats&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--git-formats&lt;/code&gt; option to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help&lt;/code&gt; command.&lt;/p&gt;

    &lt;p&gt;The documentation had to be converted when moved over as the man
page format was different from the previous technical documentation
format, but the second patch only converted “bundle-format.txt” to a
new “gitformat-bundle(5)” man page. The plan was to convert and move
over more of them later.&lt;/p&gt;

    &lt;p&gt;Last December Ævar sent
&lt;a href=&quot;https://lore.kernel.org/git/cover-v2-0.5-00000000000-20211212T194047Z-avarab@gmail.com/&quot;&gt;a version 2&lt;/a&gt;
of his patch series which now contained 5 patches instead of 2 and
converted and moved over more documentation to the new man page
sections.&lt;/p&gt;

    &lt;p&gt;The cover letter of this patch series contained the following
examples of what the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help&lt;/code&gt; options would show:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  $ git help --user-formats

  The user-facing file formats are:
     gitattributes          Defining attributes per path
     githooks               Hooks used by Git
     gitignore              Specifies intentionally untracked files to ignore
     gitmailmap             Map author/committer names and/or E-Mail addresses
     gitmodules             Defining submodule properties
     gitrepository-layout   Git Repository Layout

  $ git help --git-formats

  Git&apos;s internal file and network formats are:
     gitformat-bitmap                  The bitmap file format
     gitformat-bundle                  The bundle file format
     gitformat-chunk                   Chunk-based file formats
     gitformat-commit-graph            Git commit graph format
     gitformat-index                   Git index format
     gitformat-pack-protocol           How packs are transferred over-the-wire
     gitformat-protocol-capabilities   Protocol v0 and v1 capabilities
     gitformat-protocol-common         Things common to various protocols
     gitformat-protocol-v2             Git Wire Protocol, Version 2
     gitformat-signature               Git cryptographic signature formats
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;As well as for the first patch series, there was no comment on this
patch series except for one from Eric Sunshine about a possible
typo. Ævar replied to Eric agreeing to fix some wordings.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/cover-v3-0.7-00000000000-20220712T195419Z-avarab@gmail.com/&quot;&gt;A version 3&lt;/a&gt;
of his patch series appeared only last July on the mailing list.
Containing 7 patches, it converted and moved over even more
documentation to the new man page sections.&lt;/p&gt;

    &lt;p&gt;Ævar soon spotted that gcc’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fanalyzer&lt;/code&gt; option complained about
some code in his patch series though. The issue was that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
help&lt;/code&gt; code, which was matching a user requested topic with a man
page, assumed that the name of man page files started with “git” and
then dropped this prefix. This was justified as all Git man page
filenames have always started with “git”, but the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fanalyzer&lt;/code&gt;
detected that things could go wrong if that was not the case.&lt;/p&gt;

    &lt;p&gt;So a few days later Ævar sent
&lt;a href=&quot;https://lore.kernel.org/git/cover-v4-0.8-00000000000-20220718T132911Z-avarab@gmail.com/&quot;&gt;a version 4&lt;/a&gt;
of his patch series with only minor changes. One of them was fixing
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fanalyzer&lt;/code&gt; complaint by adding a new patch at the beginning of
the series which would abort the current command using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BUG()&lt;/code&gt;
macro in case the man page name didn’t start with “git”.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Ævar suggesting a
slightly different fix for the complaint. Junio also thought that
“githooks(5)” didn’t really belong into a category named
“user-formats”, as a hook can be written in any language, so there
is no “format” for users to follow. Instead, he would have liked a
better name for a category that could contain both “gitignore” and
“githook” related pages.&lt;/p&gt;

    &lt;p&gt;Junio also suggested not distinguishing between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;guide&amp;gt;&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;doc&amp;gt;&lt;/code&gt; categories in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help&lt;/code&gt; documentation, as at some point
we would have enough &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;doc&amp;gt;&lt;/code&gt; documents that most probably everything
not related to a specific command would become &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;doc&amp;gt;&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;About the “user-formats” category name, Ævar replied that he
couldn’t find a better word than “format”. He thought about “layout”
as there is “gitrepository-layout(5)”, but found it odd.&lt;/p&gt;

    &lt;p&gt;He also proposed using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;name&amp;gt;&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;doc&amp;gt;&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;guide&amp;gt;&lt;/code&gt; in
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help&lt;/code&gt; documentation. Junio replied that he preferred &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;doc&amp;gt;&lt;/code&gt;
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;name&amp;gt;&lt;/code&gt; though.&lt;/p&gt;

    &lt;p&gt;Ævar and Junio also discussed interactions of the patch series with
patches that were worked on by others at the same time.&lt;/p&gt;

    &lt;p&gt;A few days later Ævar then sent
&lt;a href=&quot;https://lore.kernel.org/git/cover-v5-0.9-00000000000-20220721T160721Z-avarab@gmail.com/&quot;&gt;a version 5&lt;/a&gt;
of his patch series which mainly renamed “user formats” and
“developer formats” to “user interfaces” and “developer interfaces”.&lt;/p&gt;

    &lt;p&gt;These changes allowed the new “user interfaces” section to also
contain the “gitcli”, “gitrevisions” as well as “githook” man pages,
while the “developer interfaces” had pages called “protocol-*”
instead of only “format-*”:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  $ ./git help --user-interfaces
  User-facing repository, command and file interfaces:
     attributes          Defining attributes per path
     cli                 Git command-line interface and conventions
     hooks               Hooks used by Git
     ignore              Specifies intentionally untracked files to ignore
     mailmap             Map author/committer names and/or E-Mail addresses
     modules             Defining submodule properties
     repository-layout   Git Repository Layout
     revisions           Specifying revisions and ranges for Git

  $ ./git help --developer-interfaces
  File formats, protocols and other developer interfaces:
     format-bundle             The bundle file format
     format-chunk              Chunk-based file formats
     format-commit-graph       Git commit graph format
     format-index              Git index format
     format-multi-pack-index   The multi-pack-index file format
     format-pack               Git pack format
     format-pack-cruft         The cruft pack file format
     format-signature          Git cryptographic signature formats
     protocol-capabilities     Protocol v0 and v1 capabilities
     protocol-common           Things common to various protocols
     protocol-http             Git HTTP-based protocols
     protocol-pack             How packs are transferred over-the-wire
     protocol-v2               Git Wire Protocol, Version 2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Along with other small fixes in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help&lt;/code&gt; documentation, the
new version also didn’t distinguish between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;guide&amp;gt;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;doc&amp;gt;&lt;/code&gt;
categories anymore.&lt;/p&gt;

    &lt;p&gt;The only comment on this version was from Eric who found a trivial
typo in a commit message.&lt;/p&gt;

    &lt;p&gt;Anyway a few days later Ævar sent
&lt;a href=&quot;https://lore.kernel.org/git/cover-v6-0.9-00000000000-20220728T164243Z-avarab@gmail.com/&quot;&gt;a version 6&lt;/a&gt;
of his patch series fixing the trivial typo.&lt;/p&gt;

    &lt;p&gt;Junio commented that the first patch in this series, which had been
added in version 4 of the patch series to fix the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-fanalyzer&lt;/code&gt;
complaint, wasn’t really needed. What wasn’t actually needed was the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BUG()&lt;/code&gt; macro aborting everything in case the name of the man page
didn’t start with “git”, as it could be an unnecessary roadblock if
we ever wanted to add such man pages.&lt;/p&gt;

    &lt;p&gt;After some further discussion, Ævar sent
&lt;a href=&quot;https://lore.kernel.org/git/cover-v7-00.10-00000000000-20220802T125258Z-avarab@gmail.com/&quot;&gt;a version 7&lt;/a&gt;
of his patch series.&lt;/p&gt;

    &lt;p&gt;This series mostly removed the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BUG()&lt;/code&gt; macro that had been added
previously, but in the first patch still refactored the code
dropping the “git” prefix when a user requested topic needs to be
matched with a man page.&lt;/p&gt;

    &lt;p&gt;Junio commented about this first patch that he wasn’t sure the
commit message properly described what the code was doing in case
the man page name started with something like “git-git”.&lt;/p&gt;

    &lt;p&gt;He then spotted an issue with how some changes were split into
different patches, and suggested that a man page should be split
into different pages for different topics, while two other man pages
about similar topics should be merged into one. He also mentioned
some “leftoverbits” that could be done later.&lt;/p&gt;

    &lt;p&gt;Ævar sent
&lt;a href=&quot;https://lore.kernel.org/git/cover-v8-00.12-00000000000-20220804T162138Z-avarab@gmail.com/&quot;&gt;a version 8&lt;/a&gt;
of his patch series taking account Junio’s suggestions, except for
one documentation page, which he decided to be converted later if
needed, so he just removed the changes converting it from the patch
series.&lt;/p&gt;

    &lt;p&gt;Junio reviewed the series again and liked what it was doing. He
discussed further changes a bit with Ævar, but they agreed that they
could be done later in another patch series.&lt;/p&gt;

    &lt;p&gt;Since then, version 8 of the patch series has been merged into the
master branch, so we should have a significantly improved
documentation and help system in the next Git feature release
(v2.38.0) that should be out in the first weeks of October.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-glen-choo&quot;&gt;Developer Spotlight: Glen Choo&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a Software Engineer at Google on a team that works on Git. My prior
experience is comprised solely of different flavours of proprietary web
apps, so I’m constantly grateful for the opportunity to work on the
polar opposite of that :).&lt;/p&gt;

    &lt;p&gt;The only interesting thing I do outside of work is rock climbing.
Sometimes, I wish I spent as much time rock climbing as I do working,
which probably means that I should figure out how to do both
simultaneously.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;Hm, I’ve only been contributing for a short while, so it’s hard for me
to call any of them important per se. The most user-visible one is
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;safe.bareRepository&lt;/code&gt;, but I don’t think many users will use it in its
current form. If I had more time, I’d expand it into a safer default for
everyone.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Most of my work has been focused on getting submodules to work with
branches as well as general submodule cleanup work. I get a kick out of
searching “git submodule bad”, nodding my head at every single complaint
and dreaming about the day I get accurate search results for “git
submodule good”.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I’d probably find a different way to structure the test suite so that we
could share far less state between tests, or maybe come up with a way to
visualize the setup for each test case. It would be nice to be able to
read just a single test case to understand what’s happening.&lt;/p&gt;

    &lt;p&gt;If I had 5 teams of experts and 10 years I’d lib-ify all of Git’s
internals and have the Git CLI call the Git library in the same way
everyone else calls libgit2.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I’d remove nearly all of the CLI flags and replace them with more
consistent, mnemonic flags. It’s fun to be able to throw Git CLI trivia
at friends, but at some point, maybe it would be better for them to
be able to remember it themselves.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I owe almost everything I know about Git to &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt;
(the Emacs plugin). When I was much much newer to Git, it was a safer,
friendlier, more discoverable entry point than the Git CLI. These days, it’s
still an essential part of my toolbox since it vastly reduces the number of
keystrokes (I’m a really bad typist) and it gives an amazing interface
for modifying and applying diffs (I still have not touched “git add -p”
and at this point, I think it’s too late to start).&lt;/p&gt;

    &lt;p&gt;Honourable mention goes to &lt;a href=&quot;https://github.com/arxanas/git-branchless&quot;&gt;git-branchless&lt;/a&gt;.
It does so many amazing things that I’ve grown to rely on, like
anonymous branches, obsolescence tracking, and history manipulation.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t. contributing to
the Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;Jeff King, one of the most prolific contributors, took a break from the
Git project last year. I was probably one of the first people to realise
when he came back from the break because his first email on the mailing
list was a bug report comment on a bug that I created :’).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Could you describe your Git development toolbox?&lt;/p&gt;

    &lt;p&gt;For reading email, I’ve configured an email folder for the mailing list,
which gets pulled down by &lt;a href=&quot;http://www.offlineimap.org/&quot;&gt;offlineimap&lt;/a&gt; + &lt;a href=&quot;https://notmuchmail.org/&quot;&gt;notmuch&lt;/a&gt;.
I read email using notmuch-emacs, which claims to be a frontend to
notmuch, but is actually also a full-fledged MUA (just like how Emacs
claims to be a text editor, but is actually an OS).&lt;/p&gt;

    &lt;p&gt;For reviewing patches, I apply the patches to a dedicated worktree using
&lt;a href=&quot;https://github.com/mricon/b4&quot;&gt;b4&lt;/a&gt;. “b4 shazam” is as close to painless
as I can imagine.&lt;/p&gt;

    &lt;p&gt;For sending patches, I wrote a bunch of scripts around “git
format-patch” and “git send-email” and organised my branches so that I
could keep track of each version I sent out. Then one day I tried
GitGitGadget, realised that it does nearly all of those things for me
for free, and those scripts have remained virtually unused since :).
I will probably never use them again once GGG learns how to base
topics on topics.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;The best place to start is to get acquainted with the mailing list and
the community. Reading the mailing list and sending a low-stakes patch
(like a doc fix or usage string fix) are pretty good ways to do this.
Folks on the mailing list tend to communicate in a distinctive style –
it’s often direct, and silence can have a different meaning from what
you’re used to. I’m guessing that for most people, learning how to
communicate effectively on the mailing list is harder than the actual
technical aspects of Git development.&lt;/p&gt;

    &lt;p&gt;I’d also recommend that newcomers fight the urge to make their v1
patches absolutely perfect. The community is pretty accommodating to new
contributors, so once you’re convinced that the codebase is better off
with your change than without, it’s fine to send it out! Far more often
than not, it will lead to a positive interaction.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git developers,
what would it be?&lt;/p&gt;

    &lt;p&gt;Assume good intent from the people you interact with. I think the
mailing list can be intimidating at times (especially to newcomers), but
if you assume good intent, then everyone suddenly seems friendlier and
feedback becomes easier to receive. And of course, remember to pay it
forward by acting with good intent.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqedxmfyhe.fsf@gitster.g/&quot;&gt;2.37.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.37.2.windows.2&quot;&gt;2.37.2(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.37.2.windows.1&quot;&gt;2.37.2(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/08/22/critical-security-release-gitlab-15-3-1-released/&quot;&gt;15.3.1&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/08/22/gitlab-15-3-released/&quot;&gt;15.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/08/01/gitlab-15-2-2-released/&quot;&gt;15.2.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.4&quot;&gt;3.5.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.7&quot;&gt;3.4.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.12&quot;&gt;3.3.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.17&quot;&gt;3.2.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.0.6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A series of posts about “Git’s database internals” by Derrick Stolee
has been published on GitHub’s blog site:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-08-29-gits-database-internals-i-packed-object-store/&quot;&gt;part 1&lt;/a&gt;
is about how Git stores object data,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-08-30-gits-database-internals-ii-commit-history-queries/&quot;&gt;part 2&lt;/a&gt;
is about commit history queries,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-08-31-gits-database-internals-iii-file-history-queries/&quot;&gt;part 3&lt;/a&gt;
is about file history queries,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-09-01-gits-database-internals-iv-distributed-synchronization/&quot;&gt;part 4&lt;/a&gt;
is about distributed synchronization,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-09-02-gits-database-internals-v-scalability/&quot;&gt;part 5&lt;/a&gt;
is about scalability.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-08-23-the-full-lineup-for-git-merge-2022-revealed/&quot;&gt;The full lineup for Git Merge 2022&lt;/a&gt;
has been revealed by Lee Reilly.&lt;/li&gt;
&lt;/ul&gt;

&lt;!---
__Light reading__
--&gt;

&lt;!---
__Easy watching__
--&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/danobi/prr&quot;&gt;prr alias ‘Pull request review’&lt;/a&gt; by
Daniel Xu allows “offline reviews and inline comments” to Github
PRs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Glen Choo, Carlo Marcelo Arenas Belón
and Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 89 (July 31st, 2022)</title>
      <link>https://git.github.io/rev_news/2022/07/31/edition-89/</link>
      <pubDate>Sun, 31 Jul 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/07/31/edition-89/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-89-july-31st-2022&quot;&gt;Git Rev News: Edition 89 (July 31st, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 89th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of July 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/87h750q1b9.fsf@gnu.org/&quot;&gt;[BUG?] Major performance issue with some commands on our repo’s master branch&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tassilo Horn sent a long email to the mailing list saying that while
writing the email he found a solution to his problem, and that he
tells about that solution at the end of the email.&lt;/p&gt;

    &lt;p&gt;He then explained that he works on a quite big repo where usual
commands were all quick, but some plumbing commands invoked by
&lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt; were “extremely slow for no obvious
reasons”.&lt;/p&gt;

    &lt;p&gt;He found that:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show --no-patch --format=&quot;%h %s&quot; &quot;master^{commit}&quot; --&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;took around 13 seconds, while:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show --no-patch --format=&quot;%h %s&quot; &quot;SHD_ECORO_3_9_7^{commit}&quot; --&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;took around 23 milliseconds.&lt;/p&gt;

    &lt;p&gt;So there was almost a factor of 1000 difference when the same command
was launched on the master branch or on the last release branch.&lt;/p&gt;

    &lt;p&gt;He suspected that the difference could have something to do with the
fact that there had been a lot of merges recently in master.&lt;/p&gt;

    &lt;p&gt;The solution he found while writing the email was to comment out the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff.renameLimit = 10000&lt;/code&gt; he had in his &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.gitconfig&lt;/code&gt; file. This
reduced the time for the first command above from 13 seconds to 150
milliseconds.&lt;/p&gt;

    &lt;p&gt;Tassilo wondered though why &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff.renameLimit&lt;/code&gt; had such an
influence, as, when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-patch&lt;/code&gt; is provided, no diff should be
generated.&lt;/p&gt;

    &lt;p&gt;Tao Klerks replied to Tassilo that he used to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt; to get
metadata from a big repo as the command allows specifying an
arbitrary list of commits in one call which can save process
overhead on Windows. He stopped using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt; though after it had been
reported to be slow. Instead he switched to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; and accepted
some process overhead, as it solved his problem.&lt;/p&gt;

    &lt;p&gt;He found that large commits and merge commits with a
number of changes on any side were slow despite using
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-patch&lt;/code&gt;. And Tassilo’s email made him suspect that it could be
linked to rename detection.&lt;/p&gt;

    &lt;p&gt;Tassilo replied to Tao that using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; also
&lt;a href=&quot;https://github.com/magit/magit/commit/d0efb5ffff0b1d4e681f08ff64afbf1ab3257230&quot;&gt;solved his problem&lt;/a&gt;
but that someone might want to do something to fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt; when
no diff was generated.&lt;/p&gt;

    &lt;p&gt;Tao replied that he found that adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges=off&lt;/code&gt; to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show --no-patch ...&lt;/code&gt; command made it perform as fast as
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;. So he could now combine the performance of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;
with passing an arbitrary list of commits that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt; allowed.&lt;/p&gt;

    &lt;p&gt;Peff, alias Jeff King, also replied to Tassilo that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt; might
in some cases need underlying diffs even if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-patch&lt;/code&gt; is
requested, while &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; might need them too, but not when looking
at merges. Peff wondered if the code could be changed to detect when
underlying diffs aren’t needed, but thought that it could make the
code “a bit brittle”.&lt;/p&gt;

    &lt;p&gt;Kyle Meyer then asked Peff if making &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-patch&lt;/code&gt; imply
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges=off&lt;/code&gt; was safe, as Tao suggested, and showed benchmarks
on the git.git repo where it was nearly 15 times faster with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges=off&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Peff replied that he wasn’t sure it would be safe and gave an
example of a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt; command using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-filter=D&lt;/code&gt; where the output
changes when diff merges are suppressed as the commit isn’t showed
then. He suggested a mode skipping the diff when it’s not shown but
always showing the commit. He said that it would require someone
verifying it does the right thing in all cases though.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, chimed in to agree with Peff that
making &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-patch&lt;/code&gt; imply &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges=off&lt;/code&gt; would cause a
regression, and mentioned other &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt; options where the output
could be affected.&lt;/p&gt;

    &lt;p&gt;Junio also elaborated on Peff’s idea of a mode skipping the diff
when it’s not shown but always showing the commit. He suggested an
explicit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show --log-only&lt;/code&gt; option and mentioned a few ways to
make it work regarding other options.&lt;/p&gt;

    &lt;p&gt;Peff and Junio discussed the idea a bit more, but it doesn’t look
like something will be implemented soon.&lt;/p&gt;

    &lt;p&gt;Tassilo and Peff also discussed the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff.renameLimit&lt;/code&gt; option a bit.
It looks like Tassilo would like to set it to a high value
only in some contexts, though the current config might not be
sufficient to express that.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-junio-c-hamano&quot;&gt;Developer Spotlight: Junio C Hamano&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I am an open source toolsmith, who works at Open Source Program
Office (OSPO) at Google.  I work as the maintainer of Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How has your journey with Git as its maintainer been so far?&lt;/p&gt;

    &lt;p&gt;I have worked with many contributors since 2005, and seeing so many
of them grow into excellent developers as they work on this project
was a joy.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How does your work as the maintainer of the Git project look like?&lt;/p&gt;

    &lt;p&gt;Unlike earlier days, I no longer have to be in the driver’s seat to
design or implement a big feature, and luckily there are
multiple groups of people who do excellent job dreaming up new
ways to use Git and make it a reality.  My best days start by
getting greeted by a surprisingly good proposal of a new feature or
optimization of an existing feature, and the entire day is spent on
reviewing them.  It happens less often these days, but they still do
occasionally.&lt;/p&gt;

    &lt;p&gt;On my normal days, I scan the mailing list for patches and
discussions. My goal is to at least open every one of incoming
messages, and read carefully at least half of the patches I pick up
to queue on the ‘seen’ branch, which means that I may be queuing the
other half without carefully reading, trusting the reviews already
done by other members of the community.&lt;/p&gt;

    &lt;p&gt;I aim to finish picking up new topics, replacing existing topics,
and generally interacting with the mailing list, by around 2pm.
Then I rebuild the ‘seen’ topic, rewrite the latest draft of “What’s
cooking” report (which is the guide to choose which topics
will go to the ‘next’ branch), and push out the first integration
result of the day by 4pm.  After that, I merge the topics that
have cooked long enough in ‘next’ to ‘master’, and the topics that
have been adequately reviewed to ‘next’.  The ‘seen’ and ‘next’
branches are rebuilt, the “What’s cooking” report is rewritten, and
the second integration result of the day gets pushed out, before I
call it a day.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s anything you would like to say to your past self, what
would that be?&lt;/p&gt;

    &lt;p&gt;Study math and algorithms harder, perhaps.  I know them well enough
to get around, but it is primarily because there are so many other
community members who are good at them that I can rely on, so I do
not have to get involved in details that are too deep for me.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;There are too many to list in the design and implementation of the
internals, but in the end, I think what mattered to the project most
was that I was consistently there, available to help guide the
project.&lt;/p&gt;

    &lt;p&gt;While it may not be a particularly “important contribution”, my most favorite
creation is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rerere&lt;/code&gt;.  It was fun to design, work on, and (most
importantly) name it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;The interoperability between SHA-1 and SHA-256 repositories first
comes to mind.  The ingredients are almost all there, so are rough
designs.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I generally think that the hacks to lie to the object layer, like
“grafts” and “replace” mechanisms, and “alternate” object store,
were not great ideas.  There aren’t all that many that I would
remove, but there are too many that I wish we could redo entirely
without backward compatibility issues (e.g. path ordering in the
index).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;My recent favorites are Eric’s “public-inbox”, which powers the
https://lore.kernel.org/git mailing list archive, and Konstantin’s
“b4” that helps to interact with the lore archive better.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;That depends on why they want to do so.  Do they not like the way
the tool currently works and they want to change it?  Are they happy
with Git but they feel they do not know enough of it and are curious
about how things work?  For the former folks, the usual “scratch
your itch” advice would work well to a certain extent.  For the latter
folks, their “itch” can be to try to figure out how one of their
favorite subcommand works, and then perhaps clean up or optimize
the code paths they studied.  Following what our test scripts are
doing to your favorite feature may be a great way to learn them, too.&lt;/p&gt;

    &lt;p&gt;Either way, while identifying and scratching their “itch”, I’d
recommend they lurk on the mailing list for at least a few weeks,
and starting early is good.  Learn by reading others’ patches being
discussed, the kind of things the reviewers are interested in, and
how the development process works.  See who is active and how the
discussion goes.  These social conventions, how our developers work
with others, are just as important as, if not more than, technical
details.  The “MyFirstContribution” document may also be a good place to
start.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How does your mailing list workflow look like?&lt;/p&gt;

    &lt;p&gt;I try not to be the first to comment on any new topic (unless the
topic gains no attention from anybody, yet it looks worth commenting
on, which sometimes happens).  This is because other members of the
community may offer interesting viewpoints that I would not hear
(and think of myself) if I spoke first.&lt;/p&gt;

    &lt;p&gt;My ideal is that a topic gets discussed without me for a few rounds
and by the time I feel like taking a look myself, it is already
quite ready, thanks to the help from competent reviewers (which
happens quite often).  Then I can pick it up and queue almost
directly to ‘next’ (in practice, I’d first merge it to ‘seen’ to
ensure that there is no funny interactions with existing topics in
the first integration cycle of the day that happens before 2pm, and
then merge it down to ‘next’ in the second integration cycle of the
day, or perhaps the day after).&lt;/p&gt;

    &lt;p&gt;As I cannot keep track of all the things said in the discussion on
all topics, I make heavy use of the lore archive and use the draft
of “What’s cooking” report to take notes on each topic’s current
status.  So, the workflow is&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;to notice a new topic, whose merit is either obvious to see or
 others reviews helped to highlight, and queue it to ‘seen’,
 while sending comments to them,&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;record the topic in the “What’s cooking” draft,&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;to observe the discussion on the topic, perhaps taking a reroll
 and replacing the copy I have,&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;send out an updated “What’s cooking”, possibly the topic marked
 for promotion,&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;go back to (3)&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;until each topic graduates to ‘master’.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git
developers, what would it be?&lt;/p&gt;

    &lt;p&gt;It is very easy to be too strongly married to your initial solution
and become blind to the merits of other approaches suggested in the
discussion by others, or accept a possible reframing of the original
problem to solve a wider problem.&lt;/p&gt;

    &lt;p&gt;In the very early days of Git, before Linus passed the project’s
maintainership to me, I also had a “competitive” manner in a bad
way.  There were plenty of problems to be solved, and it felt as if
people competed to be the first to offer a solution to each of them.
When I had an idea to solve a problem that others were also
interested in, sometimes it felt like I had to “beat”
them, which meant that I had to send out patches even before they are well
reasoned and well explained enough.  Luckily, being maintainer means
I no longer have to compete with others.  Instead I can set the pace of
the project.  After having lived in such a “competitive” way for a
few months and saw its downsides, I learned to give contributors time
to think things through and wait for counter-proposals.&lt;/p&gt;

    &lt;p&gt;So, one “tip” is to take things slowly.  Be ready to step back, take
a deep breath and take time to rethink the problem, together with
those in the discussion.  You’d end up working well with the others
that way.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqv8s2fefi.fsf@gitster.g/&quot;&gt;2.37.1 and others&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.37.1.windows.1&quot;&gt;2.37.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.5.0&quot;&gt;1.5.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.4.4&quot;&gt;1.4.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.6/admin/release-notes#3.6.0&quot;&gt;3.6.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.3&quot;&gt;3.5.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.6&quot;&gt;3.4.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.11&quot;&gt;3.3.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.16&quot;&gt;3.2.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.2&quot;&gt;3.5.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.5&quot;&gt;3.4.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.10&quot;&gt;3.3.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.15&quot;&gt;3.2.15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/07/28/security-release-gitlab-15-2-1-released/&quot;&gt;15.2.1, 15.1.4, and 15.0.5&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/07/22/gitlab-15-2-released/&quot;&gt;15.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/07/19/gitlab-15-1-3-released/&quot;&gt;15.1.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/07/04/gitlab-15-1-2-released/&quot;&gt;15.1.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/06/30/critical-security-release-gitlab-15-1-1-released/&quot;&gt;15.1.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.0.5&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.0.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_4.1.9.html&quot;&gt;4.1.9&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/YtRqU5rAOsLw5s03@nand.local/&quot;&gt;Contributor’s Summit Registration details&lt;/a&gt; have been posted by Taylor Blau. As usual the Summit will happen the day before the main conference day of the &lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge&lt;/a&gt; and very close to it.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.git.live/gitlive-15.0-offline-merge-conflict-detection-across-all-branches-for-any-git-repository&quot;&gt;GitLive 15.0: Offline merge conflict detection across all branches for any Git repository and more&lt;/a&gt;
by Agnieszka Stec.&lt;/li&gt;
  &lt;li&gt;Iterative.AI, authors of the &lt;a href=&quot;https://dvc.org/&quot;&gt;DVC&lt;/a&gt; Data Version Control tool
(first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;),
bring &lt;a href=&quot;https://dvc.org/blog/iterative-studio-model-registry&quot;&gt;Git-backed Machine Learning Model Registry&lt;/a&gt;
to &lt;a href=&quot;https://studio.iterative.ai/&quot;&gt;Iterative Studio&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/git/?q=%3Cxmqqk09xhdma.fsf%40gitster.g%3E+&quot;&gt;About GIT Internals&lt;/a&gt;: Aman asked how to better understand GIT software internals. Junio (maintainer) suggested starting at the &lt;a href=&quot;https://github.com/git/git/tree/e83c5163316f89bfbde7d9ab23ca2e25604af290&quot;&gt;Initial revision of “git”, the information manager from hell (e83c5163, v0.99~954)&lt;/a&gt;.
“With only 1244 lines spread across 11 files, it is a short-read that
is completable in a single sitting for those who are reasonably
fluent in C.  It does not have any frills, but the basic data
structures to express the important concepts are already there.”&lt;/li&gt;
  &lt;li&gt;Matheus Tavares &lt;a href=&quot;https://www.linkedin.com/posts/matheus-tavares-bernardino_faster-git-checkouts-on-nfs-and-ssd-with-activity-6953084366075883520-usZP/&quot;&gt;successfully defended his Master’s dissertation about parallelizing Git checkout&lt;/a&gt;. Some of his work on this was done during &lt;a href=&quot;https://matheustavares.gitlab.io/posts/gsoc-final-report&quot;&gt;his 2019 Google Summer of Code&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/898522/&quot;&gt;Whatever happened to SHA-256 support in Git?&lt;/a&gt;:
an article by Jonathan Corbet on LWN.net.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sfconservancy.org/blog/2022/jun/30/give-up-github-launch/&quot;&gt;Give Up GitHub: The Time Has Come!&lt;/a&gt;
by Denver Gingerich and Bradley M. Kuhn of Software Freedom Conservancy,
(see also &lt;a href=&quot;https://www.theregister.com/2022/06/30/software_freedom_conservancy_quits_github/&quot;&gt;Open source body quits GitHub, urges you to do the same&lt;/a&gt; in The Register)
calls for FOSS project to migrate away from GitHub.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.codeproject.com/Articles/5334970/Introduction-to-GitOps&quot;&gt;Introduction to Git Ops&lt;/a&gt;: Some useful background to the Git - DevOps approach in this sponsored article.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developers.redhat.com/articles/2022/07/20/git-workflows-best-practices-gitops-deployments&quot;&gt;Git workflows: Best practices for GitOps deployments&lt;/a&gt;,
describing differences between how you manage your code in Git
and how you manage your GitOps configuration in Git.
By Christian Hernandez, GitOps Advocate, on Red Hat Developer blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://commaok.xyz/post/fork-point/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --fork-point&lt;/code&gt; considered harmful (by me)&lt;/a&gt;: The reflog lookup heuristics aren’t what you thought, are they? A UX report by Josh Bleecher Snyder.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cloudbees.com/blog/git-delete-branch-how-to-for-both-local-and-remote&quot;&gt;Git Delete Branch How-To, for Both Local and Remote&lt;/a&gt; with pictures, also includes deleting branches on GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.geeksforgeeks.org/git-subtree/&quot;&gt;Git - Subtree&lt;/a&gt;: A short overview of the common replacement for Git submodule.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/5/git-submodules-subtrees&quot;&gt;Managing Git projects with submodules and subtrees&lt;/a&gt; (2020):
More choices. This was previously mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://betterdev.blog/turn-off-git-fast-forward-merge/&quot;&gt;‘Turn off merge fast-forward by default’&lt;/a&gt;: An alternative viewpoint (from Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/issues/3858&quot;&gt;#3858&lt;/a&gt;) by Maciej Radzikowski on the Better Dev blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/git-hooks-husky/&quot;&gt;Getting Started with Git Hooks and Husky&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;“Codeberg” series by Flavio Poletti (@polettix),
starting with &lt;a href=&quot;https://github.polettix.it/ETOOBUSY/2022/07/05/codeberg/&quot;&gt;Codeberg&lt;/a&gt;
and currently ending with &lt;a href=&quot;https://github.polettix.it/ETOOBUSY/2022/07/18/codeberg-pages-domains/&quot;&gt;Codeberg Pages - Custom domains&lt;/a&gt;,
describes the &lt;a href=&quot;https://codeberg.org/&quot;&gt;Codeberg&lt;/a&gt; hosting service,
which is powered by &lt;a href=&quot;https://gitea.io/&quot;&gt;Gitea&lt;/a&gt; software
(a fork of &lt;a href=&quot;https://gogs.io/&quot;&gt;Gogs&lt;/a&gt;, which is written in Go).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-06-30-write-better-commits-build-better-projects/&quot;&gt;Write Better Commits, Build Better Projects&lt;/a&gt;:
Learn strategies to improve and use commits to streamline your development process.
By Victoria Dye on GitHub Engineering Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/simeg/write-git-commit-messages-that-your-colleagues-will-love-1757&quot;&gt;Write Git Commit Messages That Your Colleagues Will Love&lt;/a&gt;
by Simon Egersand on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/22/7/visualize-git-workflow-tig&quot;&gt;Why I love Tig for visualizing my Git workflows&lt;/a&gt;
by Sumantro Mukherjee (Correspondent, Red Hat) on OpenSource.com.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Easy watching&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_wj4MGuvcjc&quot;&gt;Git Internals - The BLOB&lt;/a&gt;: ‘A shot of code’ looks at the internals of the .git folder to see exactly what goes on under the hood.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aXXXiynr-4A&quot;&gt;Getting Comfortable with GIT&lt;/a&gt;, looking to get a deeper understanding of Git, and hopefully feeling a lot more comfortable when performing some of the more scary Git operations… says ‘A shot of code’.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Ax4EfY9LrF4&quot;&gt;It’s Impossible to Know If You’re a Good Programmer&lt;/a&gt;: The impostor syndrome and irrelevant code challenges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://wilsonmar.github.io/git-signing/&quot;&gt;Git Signing&lt;/a&gt;: All the details for signing commits and tags (for non-repudiation) in GitHub using GPG, Vault, Yubikey, Keybase!&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://initialcommit.com/tools/git-story&quot;&gt;Git-Story&lt;/a&gt;: Animate the story of your Git project,
by creating video animations (.mp4) of your commit history directly from your Git repo.
Note: arrows point in the direction of increasing time, not from commit to its parents.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://www.freecodecamp.org/news/animate-your-git-repo-with-git-story/&quot;&gt;How to Animate Your Git Commit History with git-story&lt;/a&gt;
by Jacob Stopak on freeCodeCamp.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/krzema12/github-actions-kotlin-dsl&quot;&gt;GitHub Actions Kotlin DSL&lt;/a&gt;
(&lt;a href=&quot;https://krzema12.github.io/github-actions-kotlin-dsl/&quot;&gt;docs&lt;/a&gt;)
allows authoring GitHub Actions workflows for GitOps in Kotlin.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://dev.to/jmfayard/github-actions-a-new-hope-in-yaml-wasteland-1i9c&quot;&gt;GitHub Actions DSL: a New Hope in YAML Programming Wasteland&lt;/a&gt;
by Jean-Michel Fayard on DEV.to.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kellyjonbrazil/jc&quot;&gt;jc&lt;/a&gt; (&lt;strong&gt;J&lt;/strong&gt;SON &lt;strong&gt;C&lt;/strong&gt;onvert)
is a CLI tool and Python library that converts the output of popular command-line tools and file-types
to JSON, YAML, etc… including &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;.  This allows automated processing with tools
such as &lt;a href=&quot;https://stedolan.github.io/jq/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jq&lt;/code&gt;&lt;/a&gt;, and simplifying automation scripts.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitjournal.io/&quot;&gt;GitJournal&lt;/a&gt; is a mobile first Markdown notes app
integrated with Git, for Android and iOS,
that can work with any Git hosting provider (via SSH).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/datafold/data-diff&quot;&gt;data-diff&lt;/a&gt; is an open-source command-line tool and Python library
by &lt;a href=&quot;https://www.datafold.com/open-source-data-diff&quot;&gt;Datafold&lt;/a&gt;
to efficiently diff rows across two different databases.
    &lt;ul&gt;
      &lt;li&gt;See also references to &lt;a href=&quot;https://www.dolthub.com/blog/2021-09-17-database-version-control/&quot;&gt;various&lt;/a&gt; &lt;a href=&quot;https://www.dolthub.com/blog/2021-11-26-so-you-want-git-database/&quot;&gt;blog&lt;/a&gt; &lt;a href=&quot;https://www.dolthub.com/blog/2021-12-20-git-sql/&quot;&gt;posts&lt;/a&gt;
by Tim Sehn on DoltHub Blog about version control, Git, and databases, which appeared
in &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;Git Rev News Edition #82&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/WangYihang/GitHacker&quot;&gt;GitHacker&lt;/a&gt; is a multithreaded tool
to detect whether a site has the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/&lt;/code&gt; folder leakage vulnerability, and if so
restores the entire Git repository, including data from stash.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://dev.to/jmau111/please-remove-that-git-folder-3i9a&quot;&gt;Please remove that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; folder&lt;/a&gt;
from directory browsing on the web server to avoid information leaks.
Don’t deploy the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/&lt;/code&gt; folder or, at least, forbid access.
By Julien Maury (jmau111) on DEV.to and on his
&lt;a href=&quot;https://blog.julien-maury.dev/en/snippet/practical-git-security/&quot;&gt;own blog&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/codecrafters-io/build-your-own-x&quot;&gt;Build your own X&lt;/a&gt;
is a compilation of well-written, step-by-step guides for re-creating our favorite technologies from scratch,
including &lt;a href=&quot;https://github.com/codecrafters-io/build-your-own-x#build-your-own-git&quot;&gt;Build your own Git&lt;/a&gt;.&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;What I cannot create, I do not understand — Richard Feynman.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Junio Hamano, Philip Oakley and Bruno Brito.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 88 (June 30th, 2022)</title>
      <link>https://git.github.io/rev_news/2022/06/30/edition-88/</link>
      <pubDate>Thu, 30 Jun 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/06/30/edition-88/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-88-june-30th-2022&quot;&gt;Git Rev News: Edition 88 (June 30th, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 88th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of May and June 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com&quot;&gt;Google Summer of Code&lt;/a&gt;
contributors working on Git are now in the &lt;a href=&quot;https://developers.google.com/open-source/gsoc/timeline#june_13&quot;&gt;“Coding Period”&lt;/a&gt;
(from June 13 to September 19) of the program and have posted at least
once on their blogs:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Abhradeep Chakraborty, who works on
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/UPtA6qdf&quot;&gt;“Reachability bitmap improvements”&lt;/a&gt;,
has published &lt;a href=&quot;https://medium.com/@abhra303/gsoc-week-2-redesign-the-table-format-829dae755a5&quot;&gt;his latest post&lt;/a&gt;
on &lt;a href=&quot;https://medium.com/@abhra303&quot;&gt;his Medium blog&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Shaoxuan Yuan, who works on &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/hz4rcOUB&quot;&gt;“More Sparse Index Integrations”&lt;/a&gt;
has published &lt;a href=&quot;https://ffyuanda.github.io/blog/GSoC-week-2/&quot;&gt;his latest post&lt;/a&gt;
on &lt;a href=&quot;https://ffyuanda.github.io/&quot;&gt;his website&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Jaydeep Das, who works on &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/8mYcnerl&quot;&gt;“Unify ref-filters with other pretty formats”&lt;/a&gt;
has published &lt;a href=&quot;https://jdeep.me/posts/10.d/&quot;&gt;his latest post&lt;/a&gt;
on &lt;a href=&quot;https://jdeep.me/posts/&quot;&gt;his website&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/kl6lee006mle.fsf@chooglen-macbookpro.roam.corp.google.com/&quot;&gt;Bug in merge-ort (rename detection can have collisions?)&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Glen Choo reported on the mailing list that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git merge&lt;/code&gt; was failing
on certain branches of a repo used at his workplace. As the repo is
a public one, Glen was able to share the full recipe to reproduce the bug.&lt;/p&gt;

    &lt;p&gt;When following it, this error appears:&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Assertion failed: (ci-&amp;gt;filemask == 2 || ci-&amp;gt;filemask == 4), function apply_directory_rename_modifications, file merge-ort.c, line 2410.&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;Glen noticed that the bug seemed to be specific to the “ort” merge
strategy, which became the default merge strategy in Git 2.34.0
released last November.  When using the “recursive” strategy,
which used to be the default merge strategy before “ort” took over,
the merge seemed to work as expected.&lt;/p&gt;

    &lt;p&gt;Glen also tried to debug the issue by himself and found that the
reason for the assertion failure seemed to be that two files
involved in the merge were renames of each other.&lt;/p&gt;

    &lt;p&gt;Elijah Newren, who developed the new “ort” strategy, thanked Glen
for the detailed report, and said that he found a small reproduction
recipe to simplify what’s going on. He explained it with the
following sequence:&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#   Commit O: sub1/file,                 sub2/other
#   Commit A: sub3/file,                 sub2/{other, new_add_add_file_1}
#   Commit B: sub1/{file, newfile}, sub1/sub2/{other, new_add_add_file_2}
#
#   In words:
#     A: sub1/ -&amp;gt; sub3/, add sub2/new_add_add_file_1
#     B: sub2/ -&amp;gt; sub1/sub2, add sub1/newfile, add sub1/sub2/new_add_add_file_2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;He noted, though, that he can also trigger a different fatal error
  in the “ort” strategy with a small tweak to the test setup, and can
  also trigger that same other fatal error in the “recursive” strategy
  with his test cases.&lt;/p&gt;

&lt;p&gt;He then explained that both the “ort” and “recursive” merge
  strategies have code to avoid “doubly transitive [directory]
  renames”. Such renames happen when, for example, on one side of the
  merge a directory named “A” is renamed to “B”, while on the other
  side “B” is renamed to “C”.&lt;/p&gt;

&lt;p&gt;However, the code to avoid “doubly transitive [directory] renames” is
  fooled when a parent directory of a directory is renamed. For
  example if on one side a directory named “A” is renamed to “B”,
  while on the other side a leading directory of “B” is renamed to
  “C”.  That still wouldn’t be quite enough to trigger this
  bug, though.  It also requires adding a file into directory A on one
  side and a file with the same name into directory B on the other.&lt;/p&gt;

&lt;p&gt;Junio Hamano, the Git maintainer, thanked Elijah for his continued
  support of the merge strategy, and noticed that at least the code was
  not “making a silent mismerge” in this special case, and that the
  recursive strategy could be used as a fallback.&lt;/p&gt;

&lt;p&gt;Elijah replied that he was glad the recursive strategy worked for
  Glen but noted that it didn’t work with his minimal reproduction
  test case, which suggests it’s less reliable as a fallback than one
  might hope.&lt;/p&gt;

&lt;p&gt;Glen then wondered if turning off rename detection could help in
  case of merges with complex renames like this, but Elijah pointed
  out &lt;a href=&quot;https://lore.kernel.org/git/CABPp-BGN0DoSr3bcjTmGZkcoj_dSVzOgFUQ++R=_z8v=nAJsTg@mail.gmail.com/&quot;&gt;that might be more problematic than
  helpful&lt;/a&gt;,
  particularly since this case had a very large number of renames and
  users tend to have difficulty correctly resolving the conflicts that
  result from a lack of rename detection.  However, he suggested that
  if turning off rename detection was really wanted that one could use
  the “resolve” strategy instead, which “is roughly the recursive strategy
  minus the renames and the multiple merge base handling”.&lt;/p&gt;

&lt;p&gt;Elijah also posted &lt;a href=&quot;https://lore.kernel.org/git/pull.1268.git.1655871651.gitgitgadget@gmail.com/&quot;&gt;a small patch
  series&lt;/a&gt;
  that adds test cases demonstrating the bug Glen found and the
  related ones he found based on it, and fixes the bugs in the ort
  strategy.  (The recursive strategy is deprecated, and the bugs noted
  here are not security critical.)&lt;/p&gt;

&lt;p&gt;Jonathan Tan reviewed the series and verified that it indeed fixes
  Glen’s test case. Calvin Wan also commented on the patch series. So
  there is good hope that after a few iterations to polish the series
  the bugs will be fixed soon.&lt;/p&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqy1xinf00.fsf@gitster.g/&quot;&gt;2.37.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqedzg4hqj.fsf@gitster.g/&quot;&gt;2.37.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqv8syloqp.fsf@gitster.g/&quot;&gt;2.37.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqwndk10gg.fsf@gitster.g/&quot;&gt;2.37.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.37.0.windows.1&quot;&gt;2.37.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.37.0-rc2.windows.1&quot;&gt;2.37.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.37.0-rc1.windows.1&quot;&gt;2.37.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.37.0-rc0.windows.1&quot;&gt;2.37.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;8.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.6.html#361&quot;&gt;3.6.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.1&quot;&gt;3.5.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.4&quot;&gt;3.4.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.9&quot;&gt;3.3.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.14&quot;&gt;3.2.14&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.22&quot;&gt;3.1.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/06/22/gitlab-15-1-released/&quot;&gt;15.1&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/06/16/gitlab-15-0-3-released/&quot;&gt;15.0.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/06/06/gitlab-15-0-2-released/&quot;&gt;15.0.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/06/01/critical-security-release-gitlab-15-0-1-released/&quot;&gt;15.0.1, 14.10.4, and 14.9.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.0.3&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.0.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.0.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac?show_tab=release-notes&quot;&gt;8.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows?show_tab=release-notes&quot;&gt;3.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-06-15-git-merge-2022/&quot;&gt;Git Merge 2022&lt;/a&gt;
by Lee Reilly on GitHub blog.
&lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge&lt;/a&gt;, the conference dedicated to bringing the Git community together,
returns on September 14-15 in Chicago, Illinois, USA.
&lt;a href=&quot;https://sessionize.com/git-merge-2022&quot;&gt;Call for Speakers&lt;/a&gt; is open through Sunday, July 10.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-06-27-highlights-from-git-2-37/&quot;&gt;Highlights from Git 2.37&lt;/a&gt;
by Taylor Blau on GitHub’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=c1VdZq77i70&quot;&gt;v2.37.0 highlights video&lt;/a&gt; by GitKraken.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.atlassian.com/engineering/faster-git-push-over-https-for-bitbucket-cloud&quot;&gt;How Atlassian made Git push over HTTPS faster for Bitbucket Cloud&lt;/a&gt;
by Brent Thew on &lt;a href=&quot;https://www.atlassian.com/engineering&quot;&gt;Atlassian Engineering&lt;/a&gt; blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thenewstack.io/why-were-sticking-with-ruby-on-rails-at-gitlab/&quot;&gt;Why We’re Sticking with Ruby on Rails at GitLab&lt;/a&gt;
by Sid Sijbrandij on The New Stack (contributed post, sponsored by GitLab).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2022-05-31-improved-verification-of-historic-git-commit-signatures/&quot;&gt;Improved verification of historic Git commit signatures [in GitHub]&lt;/a&gt;
with respect to public GPG signing keys that are expired or revoked (but not compromised).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devops.com/appsmith-adds-git-support-to-low-code-app-dev-framework/&quot;&gt;AppSmith Adds Git Support to Low-Code App Dev Framework&lt;/a&gt;
by Mike Vizard on DevOps.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-06-29-improve-git-monorepo-performance-with-a-file-system-monitor/&quot;&gt;Improve Git monorepo performance with a file system monitor&lt;/a&gt;
by Jeff Hostetler on GitHub’s blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://u92.eu/blog/git-vimdiff/&quot;&gt;Improvements in git 2.37 when resolving conflicts with vimdiff&lt;/a&gt;
describes a change in Git 2.37 w.r.t. vimdiff mergetool drivers.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/kaleidoscope/&quot;&gt;Better File Comparison with Kaleidoscope&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/working-with-feature-branches/&quot;&gt;Working with Feature Branches&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/coming-up-on-the-roadmap-2022/&quot;&gt;Coming Up on Tower’s Roadmap&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/three-phases-of-software-development/&quot;&gt;The Three Phases of Software Development&lt;/a&gt; by Kristian Lumme on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.halodoc.io/best-practices-for-git/&quot;&gt;Best practices for Git branching&lt;/a&gt;,
describing Git flow at Halodoc, by Ashish Anand.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-recover-a-deleted-file-in-git/&quot;&gt;How to Recover a Deleted File in Git – Revert Changes After a Hard Reset&lt;/a&gt;
by Zaira Hira on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/git-list-remote-branches/&quot;&gt;Git List Remote Branches&lt;/a&gt;
by Quincy Larson on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.warp.dev/blog/replace-git-cheat-sheet-ai-command-search&quot;&gt;Replacing Your Git Command Cheat Sheet With AI Command Search&lt;/a&gt;
by Jessica Wang on Warp blog; uses &lt;a href=&quot;https://docs.warp.dev/features/ai-command-search#:~:text=Press%20CTRL%2D%60%20to%20open,ENTER%20to%20generate%20the%20command.&quot;&gt;Warp’s AI Command search&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://canvatechblog.com/we-put-half-a-million-files-in-one-git-repository-heres-what-we-learned-ec734a764181&quot;&gt;We Put Half a Million files in One git (Mono-)Repository, Here’s What We Learned&lt;/a&gt;
by Ahn Lee in Canva Engineering Blog (a Medium-based blog).
    &lt;ul&gt;
      &lt;li&gt;See also, for example, articles on &lt;a href=&quot;https://stolee.dev/&quot;&gt;Developer Homepage of Derrick Stolee&lt;/a&gt;,
including &lt;a href=&quot;https://www.youtube.com/watch?v=pXdabSCz4JA&quot;&gt;The Future of Git at Scale&lt;/a&gt; 2021 presentation
(&lt;a href=&quot;https://stolee.dev/docs/universe-2020.pdf&quot;&gt;slides&lt;/a&gt; available),
a survey of some advanced Git features to help Git scale to the largest monorepos.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://andrewlock.net/reducing-the-size-of-a-git-repository-with-git-replace/&quot;&gt;Reducing the size of a git repository with git-replace&lt;/a&gt;
by Andrew Lock on andrewlock.net, where repository is split into
a small “current” repository containing a minimal amount of history, and
a “history” repository containing all the commits prior to the creation of the new repository,
stitched together when needed with git-replace.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blackgirlbytes.dev/how-to-prevent-merge-conflicts&quot;&gt;How to Prevent Merge Conflicts (or at least have less of them)&lt;/a&gt;
by Rizèl Scarlett, featured on daily.dev (&lt;a href=&quot;https://dev.to/github/how-to-prevent-merge-conflicts-or-at-least-have-less-of-them-109p&quot;&gt;also on DEV.to&lt;/a&gt;).
It is the last part
of 3 part &lt;a href=&quot;https://dev.to/blackgirlbytes/series/17601&quot;&gt;Intro to Git&lt;/a&gt; series on DEV.to,
beginning with &lt;a href=&quot;https://dev.to/github/how-do-i-resolve-merge-conflicts-5438&quot;&gt;How Do I Resolve Merge Conflicts?&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/devteam/people-rarely-use-complicated-git-commands-on-the-weekend-and-i-have-the-data-to-prove-it-3ae2&quot;&gt;People rarely use complicated git commands on the weekend, and I have the data to prove it.&lt;/a&gt;
by Ben Halpern for The DEV Team on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://towardsdatascience.com/how-git-truly-works-cd9c375966f6&quot;&gt;How Git truly works&lt;/a&gt;
by Alberto Prospero in Towards Data Science (a Medium-based blog).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gnu.wildebeest.org/blog/mjw/2022/06/22/sourceware-gnu-toolchain-infrastructure-roadmap/&quot;&gt;Sourceware – GNU Toolchain Infrastructure roadmap&lt;/a&gt;
by Mark J. Wielaard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://sourceware.org/&quot;&gt;Sourceware&lt;/a&gt; is community run infrastructure, mailing lists,
git, bug trackers, wikis, etc. hosted in the Red Hat Open Source
&lt;a href=&quot;https://osci.io/tenants/&quot;&gt;Community Infrastructure Community Cage&lt;/a&gt;.
Uses &lt;a href=&quot;https://builder.sourceware.org/&quot;&gt;shared buildbot&lt;/a&gt; for (test) automation,
and &lt;a href=&quot;https://patchwork.sourceware.org/&quot;&gt;patchwork&lt;/a&gt; for tracking the state of contributions;
most tests upload all results to &lt;a href=&quot;https://sourceware.org/git/bunsendb.git&quot;&gt;bunsendb&lt;/a&gt;.
Uses mirror at SourceHut, &lt;a href=&quot;https://sr.ht/~sourceware/&quot;&gt;https://sr.ht/~sourceware/&lt;/a&gt;, for web forge.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dspinellis/unix-history-repo&quot;&gt;unix-history-repo&lt;/a&gt; is a repository
representing a reconstructed version of the Unix history from 1970 until today,
based on the currently available data.  Note that this repository will be often
automatically regenerated from scratch.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-repair.branchable.com/&quot;&gt;git-repair&lt;/a&gt; can repair various forms of damage to Git repositories;
a complement to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fsck&lt;/code&gt;, which finds problems, but does not fix them.
It is a Haskell program,
developed as a spinoff of &lt;a href=&quot;http://git-annex.branchable.com/&quot;&gt;git-annex&lt;/a&gt; (for large files management).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/curusarn/resh&quot;&gt;Rich Enhanced Shell History (resh)&lt;/a&gt;
provides contextual shell history for zsh and bash,
where relevant results are based on current directory, &lt;em&gt;git repo&lt;/em&gt;, exit status, and host.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Bruno Brito, Elijah Newren, Matheus Tavares
and Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 87 (May 26th, 2022)</title>
      <link>https://git.github.io/rev_news/2022/05/26/edition-87/</link>
      <pubDate>Thu, 26 May 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/05/26/edition-87/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-87-may-26th-2022&quot;&gt;Git Rev News: Edition 87 (May 26th, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 87th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the months of April and May 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/organizations/git&quot;&gt;Git participates in GSoC (Google Summer of Code) 2022&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The following three contributors have been officially accepted to
work on Git as part of the
&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;GSoC 2022&lt;/a&gt;:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Abhradeep Chakraborty will work on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/UPtA6qdf&quot;&gt;Reachability bitmap improvements&lt;/a&gt;
project. He will be co-mentored by Kaartic Sivaraam and Taylor Blau.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Shaoxuan Yuan will work on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/hz4rcOUB&quot;&gt;More Sparse Index Integrations&lt;/a&gt;
project. He will be co-mentored by Derrick Stolee and Victoria Dye.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Jaydeep Das will work on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/8mYcnerl&quot;&gt;Unify ref-filters with other pretty formats&lt;/a&gt;
project. He will be co-mentored by Hariom Verma and Christian
Couder. His first blog post about it
&lt;a href=&quot;https://jdeep.me/posts/6.d/&quot;&gt;is up&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Congratulations to the selected contributors!&lt;/p&gt;

    &lt;p&gt;Thanks also to the other contributors who applied and worked on
micro-projects, but couldn’t be selected! We hope to continue to see
you in the community!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/YkcmtqcFaO7v1jW5@nand.local/&quot;&gt;[ANNOUNCE] git-scm.com Heroku credits update&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Taylor Blau announced that the Heroku credits for
&lt;a href=&quot;https://git-scm.com&quot;&gt;git-scm.com&lt;/a&gt;, Git project’s de facto homepage,
would not be provided for free by Heroku anymore.&lt;/p&gt;

    &lt;p&gt;The Git project has so far relied on those free credits from Heroku
and free support from &lt;a href=&quot;https://www.cloudflare.com/&quot;&gt;Cloudflare&lt;/a&gt; to
have $0 maintenance cost for the site.&lt;/p&gt;

    &lt;p&gt;Taylor suggested different options to deal with the change:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;convert to a static site, so that we don’t rely on Heroku and can
be hosted elsewhere hopefully for free,&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;try to reduce our Heroku bill by getting rid of some of the
services we currently use (like database and Ruby on Rails cache),&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;find a cheaper Ruby on Rails host.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;The Heroku credits amount to around $132 per month that are now
billed to Git’s account at
&lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Conservancy&lt;/a&gt;, as Git is Conservancy
member, while we “figure out what to do next”.&lt;/p&gt;

    &lt;p&gt;A few days later, Taylor replied to himself saying that Dan Moore
from &lt;a href=&quot;https://fusionauth.io/&quot;&gt;FusionAuth&lt;/a&gt; has offered to help assist
with our hosting costs, as FusionAuth, his company, “has benefited
tremendously from Git”.&lt;/p&gt;

    &lt;p&gt;Git project funds are usually used for things like sponsoring travel
and lodging for Git Merge attendees who could not otherwise make it
in person, so helping for hosting costs is welcome.&lt;/p&gt;

    &lt;p&gt;Sponsors for the site are listed on the
&lt;a href=&quot;https://git-scm.com/site&quot;&gt;Sponsors section of the about page&lt;/a&gt;,
so we would just have to list FusionAuth there along with
&lt;a href=&quot;https://www.cloudflare.com/&quot;&gt;Cloudflare&lt;/a&gt; and
&lt;a href=&quot;https://bonsai.io/&quot;&gt;Bonsai&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Dan then replied to Taylor confirming that FusionAuth “would love to
offer [their] monetary support if it makes sense for the community”.&lt;/p&gt;

    &lt;p&gt;Both Kaartic Sivaraam and Phillip Wood thanked Dan and his company
for their offer, and agreed with Taylor that it would be a good
solution.&lt;/p&gt;

    &lt;p&gt;Johannes Schindelin, alias Dscho, also replied to Taylor saying he
would be in favor of converting the site to a static web
site. Taylor then replied to Dscho, explaining some tasks, along
with technical details, that would need to be taken care of for the
conversion.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, Taylor and Christian Couder also discussed the idea of
proposing such conversion tasks as a future
&lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt; or
&lt;a href=&quot;https://summerofcode.withgoogle.com&quot;&gt;GSoC&lt;/a&gt; project.&lt;/p&gt;

    &lt;p&gt;For now the Git project accepted
&lt;a href=&quot;https://fusionauth.io/&quot;&gt;FusionAuth&lt;/a&gt;’s generous offer, and the
&lt;a href=&quot;https://git-scm.com&quot;&gt;git-scm.com&lt;/a&gt; web site will continue to run
in the same way.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-carlo-marcelo-arenas-belón&quot;&gt;Developer Spotlight: Carlo Marcelo Arenas Belón&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I am a Peruvian hacker who likes to argue he is also “American” to
his neighbours and accidental coworkers/friends in the USA, because
while I flew to get here, and I even crossed an ocean to do so, I
might as well have walked instead.&lt;/p&gt;

    &lt;p&gt;To be honest, my close family and probably most of my friends in Perú
would instead call me a “characato” but I am starting to worry I am
getting slightly off-topic here.&lt;/p&gt;

    &lt;p&gt;About “what I do”, it is a little complicated; I used to call myself a
“server babysitter” until I had a real human one and realized how
inaccurate that was. I usually have a lot of computers around me and
one day realized I might become a cyborg of sorts even if none of them
is strictly connected to me, because AFAIK nobody has figured out how
to do that yet, but again I seem to be going off-topic, because I am
guessing what you really meant is either “what it says in my current
business card” or “what sort of thing I do to contribute to society
that is good enough so I have the means to pay the bills”?&lt;/p&gt;

    &lt;p&gt;Well; due to either a series of unfortunate misunderstandings or some
bureaucratic mistake akin to the Vogon Constructor Fleet job that
demolished Earth at the beginning of the Hitchhiker’s Guide to the Galaxy, I am
now open to a lot more opportunities to help you do anything, and MUST
do it for free.  Hope that is a good answer, but ping me if you would
like some additional explanation.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;None.&lt;/p&gt;

    &lt;p&gt;I did break Git for macOS once long ago when I was trying to make it
more useful in Linux. Then, I did the same at least once for
Windows after I bought an Apple computer to make sure that
wouldn’t happen again and changed my email address so no one would be
able to connect the dots.&lt;/p&gt;

    &lt;p&gt;I might have found one bug in Windows that might have redeemed me from
that breakage after I bought a Windows computer for similar reasons
though.&lt;/p&gt;

    &lt;p&gt;I did fix Git for Minix after I met Linus Torvalds in a Google
conference and just in spite of him not understanding a funny joke I
made (not a fault of his, I am sure, since I have such a thick accent
I sometimes can’t understand myself), but I had yet to upstream the
patches, so maybe that?&lt;/p&gt;

    &lt;p&gt;Either way, I am hoping whatever it is, it will be great and might make
my mom or my son proud, even if it is yet to come.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Scratching itches and learning from the best, aren’t you?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I’m not sure if it will take a full year, but it would be great to
have a Git conference to get everyone in a room (obviously not while
there is a pandemic, of course).&lt;/p&gt;

    &lt;p&gt;Something less ambitious but maybe even more effective would be to get a
virtual hackathon, even though I have to admit realistically a physical
one would be even better.&lt;/p&gt;

    &lt;p&gt;It is a shame they don’t do the “Linux cruise” anymore, but it might
be also a good format at a much smaller scale and I even remember
reading somewhere that even in a cruise (which usually has terrible
internet connectivity), Git was still useful since you might as well
send patches around in USB drives.&lt;/p&gt;

    &lt;p&gt;I guess the first thing to implement in that hackathon might be ZMODEM
transport for git push/pull, and I might be more than happy to make
sure everyone has a working cable to use if they are still lucky
enough to get a computer that has a DB9.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;The bugs, but then even those are fun to have from time to time.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I don’t have a favorite, but it is because I just don’t know enough to have one.
Luckily you guys have this monthly “magazine” of sorts, so I might be
able to eventually find one.&lt;/p&gt;

    &lt;p&gt;It sort of feels as exciting as when I used to go to one private
library in my hometown to read about the latest games in the computer
magazines they had that I might be able to type into that first
computer my parents got for me, that had an 8-bit CPU and 64KB of RAM
(not all of it totally usable though, as it also had a ROM with a
basic interpreter that I think used half of that), but I am not sure.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t. contributing to the
Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;Lots indeed, that is why I sometimes actively try to fix some bugs any
reasonable person would either ignore or at most report.&lt;/p&gt;

    &lt;p&gt;My code might be a mess, but I think it is usually better than a bug,
and I get the chance to get to work and learn from people that are way
better than me at fixing them, mostly nicer as well, and especially
way more patient than I would be.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How does your mailing list workflow look like?&lt;/p&gt;

    &lt;p&gt;What do you mean by workflow?&lt;/p&gt;

    &lt;p&gt;(&lt;em&gt;Editor’s note: Here, Carlo jokes about his workflow which according
 to him “is a nightmare that is stitched together with masking tape”.&lt;/em&gt;)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;My first contribution was probably a real and annoying bug that I
couldn’t believe was there, so most people I presume would just
scratch that itch and go away.&lt;/p&gt;

    &lt;p&gt;Some might fall in love with the technology, or the community and come
back like I did.&lt;/p&gt;

    &lt;p&gt;Regardless of that, there is a lot of wisdom (and luckily for me,
incomplete features or minor bugs) which once you realize this tool is
meant to be used by developers, kind of makes sense.&lt;/p&gt;

    &lt;p&gt;The documentation and the list content is pure gold, so take your time
to read as much of it as you can first, if possible.&lt;/p&gt;

    &lt;p&gt;Jump straight at it and make sure all the tests and linters are quiet
and try to fight the urge to send it out until you can’t improve it
further and let it go.&lt;/p&gt;

    &lt;p&gt;Read the feedback you’d get, and try to improve it further based on
that, and iterate.  Be patient and take your time.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git developers,
what would it be?&lt;/p&gt;

    &lt;p&gt;Don’t Panic.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqczgqmv0f.fsf@gitster.g/&quot;&gt;2.36.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.36.1.windows.1&quot;&gt;2.36.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/05/22/gitlab-15-0-released/&quot;&gt;15.0&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/05/16/gitlab-14-10-3-released/&quot;&gt;14.10.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/05/05/gitlab-14-10-2-released/&quot;&gt;14.10.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/05/02/security-release-gitlab-14-10-1-released/&quot;&gt;14.10.1, 14.9.4, and 14.8.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.3.html#3311&quot;&gt;3.3.11&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.4.html#345&quot;&gt;3.4.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.5.html#352&quot;&gt;3.5.2&lt;/a&gt; and
&lt;a href=&quot;https://www.gerritcodereview.com/3.6.html#360&quot;&gt;3.6.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.5/admin/release-notes#3.5.0&quot;&gt;3.5.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.3&quot;&gt;3.4.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.8&quot;&gt;3.3.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.13&quot;&gt;3.2.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.21&quot;&gt;3.1.21&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.5.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows&quot;&gt;3.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;!---
__Various__
--&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lemire.me/blog/2022/04/21/an-overview-of-version-control-in-programming/&quot;&gt;An overview of version control in programming&lt;/a&gt;
by Daniel Lemire on his blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/kcdchennai/revisiting-the-pain-the-world-without-git-3jod&quot;&gt;Revisiting the Pain: The World without Git&lt;/a&gt;
by Sneh Chauhan for Kubernetes Community Days Chennai on DEV.to.
    &lt;ul&gt;
      &lt;li&gt;Compare &lt;a href=&quot;http://tom.preston-werner.com/2009/05/19/the-git-parable.html&quot;&gt;The Git Parable&lt;/a&gt;,
by Tom Preston-Werner (2009) - the ideas behind the architecture of Git;
covered in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;Git Rev News #30&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/mastering-tower/&quot;&gt;Mastering Tower (Mac Edition)&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://youtu.be/OChAwMBLjnY&quot;&gt;Mastering Tower for Mac — 40 Tips in under 10 Minutes&lt;/a&gt; video by Bruno Brito.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/abbeyperini/git-commit-message-template-in-terminal-and-vs-code-326p&quot;&gt;Git Commit Message Template in Terminal and VS Code&lt;/a&gt;
by Abbey Perini on DEV.to.  This article refers to:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://cbea.ms/git-commit/&quot;&gt;How to Write a Git Commit Message&lt;/a&gt; (2014), which appeared in
&lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/&quot;&gt;Git Rev News Edition #24&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits specification&lt;/a&gt;, first appearing in
&lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/tuasegun/a-guide-to-writing-industry-standard-git-commit-message-2ohl&quot;&gt;A Guide to writing Industry Standard Git Commit Message&lt;/a&gt;
by Tuasegun on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://betterprogramming.pub/your-git-commit-history-should-read-like-a-history-book-heres-how-7f44d5df1801&quot;&gt;Your Git Commit History Should Read Like a History Book. Here’s How.&lt;/a&gt;
by Mirco, on Better Programming, a Medium blog (member-only story).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.halodoc.io/automatically-formatting-and-beautifying-code-on-commit/&quot;&gt;Automatically formatting and cleaning code on commit&lt;/a&gt;
by Muhammad Sibra on Halodoc.
    &lt;ul&gt;
      &lt;li&gt;This article mentions &lt;a href=&quot;https://typicode.github.io/husky/#/&quot;&gt;husky&lt;/a&gt;,
which was first included in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News #63&lt;/a&gt;,
and &lt;a href=&quot;https://www.npmjs.com/package/lint-staged&quot;&gt;lint-staged&lt;/a&gt;,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/11/21/edition-45/&quot;&gt;Git Rev News #45&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/wesen/squash-commits-considered-harmful-ob1&quot;&gt;Squash [merge] commits considered harmful&lt;/a&gt;
by Manuel Odendahl on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/benjamincohen123/can-you-resolve-merge-conflicts-before-they-happen-46nd&quot;&gt;Can You Resolve Merge Conflicts Before They Happen?&lt;/a&gt;
by Benjamin C. Baker on DEV.to describes how to resolve merge conflicts manually,
and how one can detect potential conflicts in advance with the &lt;a href=&quot;https://git.live/&quot;&gt;GitLive&lt;/a&gt; extension.
GitLive was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/07/31/edition-77/&quot;&gt;Git Rev News Edition #77&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;#82&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/resolve-merge-conflicts-in-git-a-practical-guide/&quot;&gt;How to Resolve Merge Conflicts in Git – A Practical Guide with Examples&lt;/a&gt;
by Tapas Adhikary on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackaday.com/2022/04/29/arduino-and-git-two-views/&quot;&gt;Arduino and Git: Two Views&lt;/a&gt;
by Al Williams on Hackaday.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sqlite.org/whynotgit.html&quot;&gt;Why SQLite Does Not Use Git&lt;/a&gt; but &lt;a href=&quot;https://fossil-scm.org/&quot;&gt;Fossil&lt;/a&gt;
(a version control system that was specifically designed and written to support SQLite).
An article about Fossil did appear in &lt;a href=&quot;https://git.github.io/rev_news/2016/01/13/edition-11/&quot;&gt;Git Rev News Edition #11&lt;/a&gt;,
but is nowadays unavailable except through the &lt;a href=&quot;https://web.archive.org/web/20160304055320/https://blog.kotur.org/posts/fossil-keeps-more-than-just-your-code.html&quot;&gt;Internet Archive&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://edofic.com/posts/2020-04-20-rebase-rename/&quot;&gt;Rename rebase with git&lt;/a&gt; (2020),
or how to perform a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; in which you rename a file without conflicts – though
nowadays one would use &lt;a href=&quot;https://github.com/newren/git-filter-repo&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-repo&lt;/code&gt;&lt;/a&gt;
instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-branch&lt;/code&gt; as in the article.
Post on Andraž Bajt’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://edofic.com/posts/2016-02-24-git-repair/&quot;&gt;Repairing a corrupt Git repo using a clone&lt;/a&gt; (2016)
on Andraž Bajt’s blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=adam-bender.commit-message-editor&quot;&gt;Commit Message Editor&lt;/a&gt;
plugin for Visual Studio Code, by Adam Bender.
The default settings follow the Conventional Commits specification.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=rioukkevin.vscode-git-commit&quot;&gt;VSCode Git Commit Message&lt;/a&gt;
plugin for Visual Studio Code, by Kévin Riouk.
An extension made to formalize git commit messages.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mergify.com/&quot;&gt;Mergify&lt;/a&gt; is a web service for
automatizing pull requests and securing the code merge using a merge queue.
Free for open-source.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://dev.to/aniket762/merging-pull-requests-like-a-pro-with-mergify-30fa&quot;&gt;Merging Pull Requests Like a Pro With Mergify&lt;/a&gt;
by Aniket Pal on DEV.to.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alajmo/mani&quot;&gt;Mani&lt;/a&gt; is a CLI tool that helps you manage multiple repositories.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://dev.to/alajmo/mani-a-cli-tool-to-manage-multiple-repositories-1eg&quot;&gt;mani, a CLI Tool to Manage Multiple Repositories&lt;/a&gt;
by Samir Alajmovic on DEV.to.  The article includes list of
&lt;a href=&quot;https://dev.to/alajmo/mani-a-cli-tool-to-manage-multiple-repositories-1eg#alternatives&quot;&gt;alternatives&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fig.io/&quot;&gt;Fig&lt;/a&gt; adds IDE-style autocomplete (including for git, cd, ssh)
to your existing terminal (macOS Terminal, iTerm, Hyper, Tabby, Kitty, bash, zsh, …).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jsonpatch.com/&quot;&gt;JSON Patch&lt;/a&gt; is a format for describing changes to a JSON document
as a JSON document itself. Specified in &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc6902/&quot;&gt;RFC 6902&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.sqlite.org/sqldiff.html&quot;&gt;sqldiff.exe&lt;/a&gt; is a command-line utility program (Windows binary)
that displays content differences between two &lt;a href=&quot;https://www.sqlite.org/&quot;&gt;SQLite&lt;/a&gt; databases.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitcoin.co/&quot;&gt;Gitcoin (GTC)&lt;/a&gt; is a Web3 platform which combines
open-source programming projects with an Ethereum-based crypto payment system.
&lt;em&gt;In spite of its name it has no connection with Git.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Carlo Marcelo Arenas Belón, Bruno Brito and Luca
Milanesio.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 86 (April 30th, 2022)</title>
      <link>https://git.github.io/rev_news/2022/04/30/edition-86/</link>
      <pubDate>Sat, 30 Apr 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/04/30/edition-86/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-86-april-30th-2022&quot;&gt;Git Rev News: Edition 86 (April 30th, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 86th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of March 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.1170.git.1647043729.gitgitgadget@gmail.com/&quot;&gt;[PATCH 0/5] Separate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--skip-refresh&lt;/code&gt; from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset&lt;/code&gt;, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt; internally in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stash&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Victoria Dye sent a 5 patch long series to improve the following:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;the way the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt; command line options work in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt;,&lt;/li&gt;
      &lt;li&gt;the way index refreshing is handled in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt;, and&lt;/li&gt;
      &lt;li&gt;the way the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--index&lt;/code&gt; command line option work in
  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt;.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;She had discovered issues with these features when she was working
on tests for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; sparse index integration. (See Victoria’s
interview in last month’s
&lt;a href=&quot;https://git.github.io/rev_news/2022/03/31/edition-85/&quot;&gt;Git Rev News Edition #85&lt;/a&gt;
for information on Victoria’s current work.) She found that
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; does not suppress all non-error output when
used with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--index&lt;/code&gt;, and that this comes from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset_head()&lt;/code&gt; being
called without the internal flag corresponding to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;When calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset_head()&lt;/code&gt; with the flag set though, the index
is not refreshed, while &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; needs the index to be refreshed.
The underlying issue was that the internal flags related to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt; and refreshing the index were not independent.&lt;/p&gt;

    &lt;p&gt;So the first goal with her patch series was to decouple these
behaviors, and the second goal was to allow &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; to
internally use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset_head()&lt;/code&gt; with the internal flag corresponding
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt; and to still refresh the index.&lt;/p&gt;

    &lt;p&gt;To decouple the behaviors one of her patches introduced the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--[no-]refresh&lt;/code&gt; option and the corresponding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset.refresh&lt;/code&gt; config
setting to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt;. Derrick Stolee, who prefers to be called
just Stolee, reviewed the patch series and agreed that the changes
in that patch were “well motivated”, and otherwise he found that the
“code looks great”, and he mostly suggested improvements to the
tests.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, also agreed that it was a good
idea to separate refreshing from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Victoria then sent &lt;a href=&quot;https://lore.kernel.org/git/pull.1170.v2.git.1647274230.gitgitgadget@gmail.com/&quot;&gt;a version 2&lt;/a&gt;
of her patch series, with improvements to the tests, some commit
messages and the cover letter title.&lt;/p&gt;

    &lt;p&gt;Junio then reviewed the patch series and mostly suggested further
improvements to the tests saying that otherwise “everything looked
good”, while Stolee was happy with the series as it took into
account all his previous suggestions.&lt;/p&gt;

    &lt;p&gt;Victoria then sent &lt;a href=&quot;https://lore.kernel.org/git/pull.1170.v3.git.1647308982.gitgitgadget@gmail.com/&quot;&gt;a version 3&lt;/a&gt;
of her patch series that added a few more tests and improved some
others.&lt;/p&gt;

    &lt;p&gt;Junio and Victoria then discussed the tests a bit more, and Junio
agreed with Victoria’s approach.&lt;/p&gt;

    &lt;p&gt;Phillip Wood though chimed in a few days later saying that the
approach taken by the patch series, which consisted in still not
refreshing the index by default when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt; was given, was maybe
not the best. He considered that it was a “hack” that had been
introduced for performance reasons before the sparse index feature
was introduced, and that we should take the opportunity to get rid of
it and go back to the original behavior of refreshing the index when
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt; was given.&lt;/p&gt;

    &lt;p&gt;Junio agreed with Phillip saying that “he would very much prefer to
see &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--quiet&lt;/code&gt; not making a contribution to the decision to refresh or
not in the longer term”.  He suggested introducing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-refresh&lt;/code&gt; to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt; and said he thought &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset.refresh&lt;/code&gt; wasn’t a good idea
as it could lead to issues for people using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt; in scripts.&lt;/p&gt;

    &lt;p&gt;Victoria replied that she agreed with them but wanted to preserve as
much backward compatibility as possible. She said she would gladly
make the change if backwards-compatibility wasn’t an issue. She also
asked if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset.quiet&lt;/code&gt; should be kept as it could also harm people
using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt; in scripts.&lt;/p&gt;

    &lt;p&gt;As her patch series had already been merged into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next&lt;/code&gt; branch,
she would send a new series on top deprecating &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset.refresh&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset.quiet&lt;/code&gt;, and making refreshing the default for all modes of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
reset&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Later she indeed sent the first version of
&lt;a href=&quot;https://lore.kernel.org/git/pull.1184.git.1647894889.gitgitgadget@gmail.com/&quot;&gt;a 4 patch long series&lt;/a&gt;
removing all instances of skipping index refresh in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt;
except for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-refresh&lt;/code&gt; itself, and removing both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset.refresh&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset.quiet&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Phillip reviewed her new patch series suggesting to allow both
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-refresh&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--refresh&lt;/code&gt; as one patch of the series removed
the latter. He said that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--refresh&lt;/code&gt; could be used to countermand a
previous &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-refresh&lt;/code&gt; typically when using an alias that includes
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-refresh&lt;/code&gt;. He also discussed possible improvements to the
documentation of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--refresh&lt;/code&gt; and to commit messages.&lt;/p&gt;

    &lt;p&gt;Victoria then sent
&lt;a href=&quot;https://lore.kernel.org/git/pull.1184.v2.git.1648059480.gitgitgadget@gmail.com/&quot;&gt;a version 2 of this new patch series&lt;/a&gt;
taking into account Phillip’s suggestions.&lt;/p&gt;

    &lt;p&gt;Junio liked the changes and agreed to merge the series. Later
though, Phillip suggested that the short help sentence given by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
reset -h&lt;/code&gt; should be about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-refresh&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--refresh&lt;/code&gt; as this
was “the form that users will want most of the time”.&lt;/p&gt;

    &lt;p&gt;Junio agreed with Phillip’s suggestion. He had already merged the
series to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next&lt;/code&gt; though, so he proposed another patch on top
implementing Phillip’s suggestion. Victoria tested the patch and
agreed with it. Junio replied he would merge it then.&lt;/p&gt;

    &lt;p&gt;All these patches were indeed merged into the master branch before
the recent release of the latest Git 2.36.0, so that in this new Git
version &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; handle some of their options in
a much better way.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqh76qz791.fsf@gitster.g/&quot;&gt;2.36.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq1qy04iqa.fsf@gitster.g/&quot;&gt;2.35.3 and below as a usability fix&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqfsmib5el.fsf@gitster.g/&quot;&gt;2.36.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqv8veb5i6.fsf@gitster.g/&quot;&gt;2.35.2 and below for CVE-2022-24765 and CVE-2022-24767&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqy20fjgpy.fsf@gitster.g/&quot;&gt;2.36.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqo81gpokn.fsf@gitster.g/&quot;&gt;2.36.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.36.0.windows.1&quot;&gt;2.36.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.36.0-rc2.windows.1&quot;&gt;2.36.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.36.0-rc1.windows.1&quot;&gt;2.36.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.36.0-rc0.windows.1&quot;&gt;2.36.0-rc0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.35.3.windows.1&quot;&gt;2.35.3(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.35.2.windows.1&quot;&gt;2.35.2(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.4.3&quot;&gt;1.4.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.2&quot;&gt;3.4.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.7&quot;&gt;3.3.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.12&quot;&gt;3.2.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.20&quot;&gt;3.1.20&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.1&quot;&gt;3.4.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.6&quot;&gt;3.3.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.11&quot;&gt;3.2.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.19&quot;&gt;3.1.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/04/22/gitlab-14-10-released/&quot;&gt;14.10&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/04/12/gitlab-14-9-3-released/&quot;&gt;14.9.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/04/01/gitlab-14-6-7-released/&quot;&gt;14.6.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/03/31/critical-security-release-gitlab-14-9-2-released/&quot;&gt;14.9.2, 14.8.5, and 14.7.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.4.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;3.0.0&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.15&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.14&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.13&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-04-12-git-security-vulnerability-announced/&quot;&gt;Git security vulnerability announced&lt;/a&gt;
by Taylor Blau.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/892755/&quot;&gt;The risks of embedded bare repositories in Git&lt;/a&gt;
by Jake Edge on LWN (&lt;a href=&quot;https://lwn.net/SubscriberLink/892755/a087f0c8092e873e/&quot;&gt;free link for non-subscribers&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-04-18-highlights-from-git-2-36/&quot;&gt;Highlights from Git 2.36&lt;/a&gt;
by Taylor Blau.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2022/02/04/ultimate-perks-for-open-source-projects/&quot;&gt;Public open source projects are eligible for Ultimate [GitLab] tier features&lt;/a&gt;
by Orit Golowinski on GitLab blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.bleepingcomputer.com/news/security/github-can-now-auto-block-commits-containing-api-keys-auth-tokens/&quot;&gt;GitHub can now auto-block commits containing API keys, auth tokens&lt;/a&gt;
by Sergiu Gatlan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;April Fool’s&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/22/4/brew-coffee-git-command&quot;&gt;Make a cup of coffee with Git&lt;/a&gt;
by Moshe Zadka on opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://drewdevault.com/2022/04/01/git-snail-mail.html&quot;&gt;Announcing git snail-mail&lt;/a&gt;
on Drew DeVault’s blog… which almost got created for real (though without &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git scan-mail&lt;/code&gt; it would require).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.sonarsource.com/securing-developer-tools-git-integrations&quot;&gt;Securing Developer Tools: Git Integrations&lt;/a&gt;
by Thomas Chauchefoin on SonarSource blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/mac-dev-survey-2022-results/&quot;&gt;Mac Dev Survey 2022 Results&lt;/a&gt; by Kristian Lumme on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/git-wsl/&quot;&gt;Setting Up Git on Windows Subsystem for Linux&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/how-to-clean-up-merged-feature-branches/&quot;&gt;How to Clean Up Fully Merged Feature Branches&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/git-stash-commands/&quot;&gt;How to Use the Git Stash Command&lt;/a&gt;
by Preethi on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-04-07-git-credential-manager-authentication-for-everyone/&quot;&gt;Git Credential Manager: authentication for everyone&lt;/a&gt;
by Matthew John Cheetham on GitHub blog, in &lt;a href=&quot;https://github.blog/category/engineering/&quot;&gt;Engineering&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-04-25-the-friend-zone-friendly-forks-101/&quot;&gt;The friend zone: friendly forks 101&lt;/a&gt;
by Lessley Dennington on GitHub blog, in &lt;a href=&quot;https://github.blog/category/engineering/&quot;&gt;Engineering&lt;/a&gt; and &lt;a href=&quot;https://github.blog/category/open-source/&quot;&gt;Open Source&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/889760/&quot;&gt;Handling messy pull-request diffstats&lt;/a&gt;
by Jonathan Corbet on LWN (&lt;a href=&quot;https://lwn.net/SubscriberLink/889760/1b10fc1d270a0874/&quot;&gt;free link for non-subscribers&lt;/a&gt;).
    &lt;ul&gt;
      &lt;li&gt;Present in the Linux kernel documentation as &lt;a href=&quot;https://github.com/torvalds/linux/blob/master/Documentation/maintainer/messy-diffstat.rst&quot;&gt;maintainer/messy-diffstat.rst&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thenewstack.io/radicle-a-decentralized-alternative-to-github-for-web3/&quot;&gt;Radicle: a Decentralized Alternative to GitHub for Web3&lt;/a&gt;
by Jake Ludington on The New Stack. &lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt; was previously mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt; and &lt;a href=&quot;https://git.github.io/rev_news/2020/12/26/edition-70/&quot;&gt;#70&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/22/4/git-branches&quot;&gt;Explaining Git branches with a LEGO analogy&lt;/a&gt;
by Seth Kenlon on opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/22/4/customize-git-subcommands&quot;&gt;Make your own Git subcommands&lt;/a&gt;
by Seth Kenlon on opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/22/4/git-each-ref-command&quot;&gt;How I use the Git &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;for-each-ref&lt;/code&gt; command for DevOps&lt;/a&gt;
by Evan “Hippy” Slatis on opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/22/4/manage-git-commits-rebase-i-command&quot;&gt;My guide to understanding Git &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase -i&lt;/code&gt;&lt;/a&gt;
by Vaishnavi R on opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/github/how-to-undo-pushed-commits-with-git-2pe6&quot;&gt;How to “Undo” Pushed Commits with Git&lt;/a&gt;
by Rizèl Scarlett for GitHub on DEV.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/mbarzeev/5-resources-to-get-your-monorepo-off-the-ground-3mlp&quot;&gt;5 resources to get your Monorepo off the ground&lt;/a&gt;
by Matti Bar-Zeev on DEV;
    &lt;ul&gt;
      &lt;li&gt;first mention of monorepos in Git Rev News can be found in &lt;a href=&quot;https://git.github.io/rev_news/2015/06/03/edition-4/&quot;&gt;edition #4&lt;/a&gt;,&lt;/li&gt;
      &lt;li&gt;most recent mention is the &lt;a href=&quot;https://monorepo.tools/&quot;&gt;Monorepo.tools&lt;/a&gt; site in &lt;a href=&quot;https://git.github.io/rev_news/2022/02/28/edition-84/&quot;&gt;edition #84&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2022/04/06/use-git-tactically/&quot;&gt;Use Git tactically&lt;/a&gt;:
How you can use micro-commits to effectively apply the &lt;a href=&quot;https://martinfowler.com/bliki/StranglerFigApplication.html&quot;&gt;Strangler Fig pattern&lt;/a&gt;,
by Mark Seeman on The Overflow (Stack Overflow blog).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/presentations/reading-code/&quot;&gt;The Programmer’s Brain&lt;/a&gt; by Felienne Hermans: Why we should be taught to ‘read code’.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://andrewlock.net/working-on-two-git-branches-at-once-with-git-worktree&quot;&gt;Working on two git branches at once with git worktree&lt;/a&gt;
by Andrew Lock on andrewlock.net.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://buildtogether.tech/&quot;&gt;Building Software Together&lt;/a&gt; is a free online book by Greg Wilson
which aims to teach you how to be a &lt;em&gt;compassionate programmer&lt;/em&gt;;
it includes two chapters about Git:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://buildtogether.tech/git-solo/&quot;&gt;Chapter 7: Using Git On Your Own&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://buildtogether.tech/git-team/&quot;&gt;Chapter 8: Using Git Together&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://swcarpentry.github.io/git-novice/index.html&quot;&gt;Version Control with Git&lt;/a&gt;
is a tutorial by the Software Carpentry Foundation.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ChappIO/git-backup&quot;&gt;git-backup&lt;/a&gt; is a command-line tool
to pull all your GitHub and GitLab repositories for backup purposes; it doesn’t require Git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dianne.skoll.ca/hacks/gitquickbranch.c&quot;&gt;gitquickbranch.c&lt;/a&gt;
by Dianne Skoll is a small program in C to quickly find the current branch name.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dandavison/delta&quot;&gt;delta&lt;/a&gt; is a syntax-highlighting pager
for git, diff, and grep output.
    &lt;ul&gt;
      &lt;li&gt;It is one of the tools on &lt;a href=&quot;https://github.com/ibraheemdev/modern-unix&quot;&gt;Modern Unix tools&lt;/a&gt; list,
which is a collection of modern/faster/saner alternatives to common unix commands.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Wilfred/difftastic&quot;&gt;Difftastic&lt;/a&gt;
is an experimental diff tool that compares files based on their syntax.
The &lt;a href=&quot;https://difftastic.wilfred.me.uk/&quot;&gt;manual&lt;/a&gt; includes list of
&lt;a href=&quot;https://difftastic.wilfred.me.uk/tree_diffing.html&quot;&gt;some other tree diffing tools available&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://vershd.io/&quot;&gt;Vershd&lt;/a&gt; is an &lt;a href=&quot;https://www.electronjs.org/apps?q=git&quot;&gt;Electron-based&lt;/a&gt;
multi-platform Git GUI, with separate views of branches and their commits, pending files and stashes,
and the ability to show in advance what’s going to happen when actions are taken.
Free for, among others, personal use and educational institutions.
If only it’s marketing was less &lt;abbr title=&quot;Fear, uncertainty, and doubt&quot;&gt;FUD&lt;/abbr&gt;-ish
&lt;em&gt;(“Git […] can easily destroy days of work in just seconds and requires thousands of keyboard commands and parameters”)&lt;/em&gt;…&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/git-for-professionals/&quot;&gt;Git for Professionals – Free Version Control Course&lt;/a&gt;:
freeCodeCamp intro by Tobias Günther with follow-on more ‘Advanced Git Tutorial’ sessions, all on YouTube. Plenty of useful tidbits.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Bruno Brito, Brandon Pugh,
Carlo Marcelo Arenas Belón and Philip Oakley.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 85 (March 31st, 2022)</title>
      <link>https://git.github.io/rev_news/2022/03/31/edition-85/</link>
      <pubDate>Thu, 31 Mar 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/03/31/edition-85/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-85-march-31st-2022&quot;&gt;Git Rev News: Edition 85 (March 31st, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 85th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of February 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/patch-1.1-1cec367e805-20220126T212921Z-avarab@gmail.com/&quot;&gt;[PATCH] http API: fix dangling pointer issue noted by GCC 12.0&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason sent a patch to the mailing list to fix an
issue that appears when compiling Git with the gcc 12.0 development
branch.&lt;/p&gt;

    &lt;p&gt;The issue is that this gcc version emits a warning on the last line
of the following code:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;      int finished = 0;

      slot-&amp;gt;finished = &amp;amp;finished;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slot&lt;/code&gt; is an instance of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;struct active_request_slot&lt;/code&gt; which
has an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int *finished&lt;/code&gt; member.&lt;/p&gt;

    &lt;p&gt;The warning is “storing the address of local variable ‘finished’ in
‘*slot.finished’ [-Werror=dangling-pointer=]”.&lt;/p&gt;

    &lt;p&gt;Ævar first thought about making the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;struct active_request_slot&lt;/code&gt; member an
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int finished&lt;/code&gt; member, so it wouldn’t be a pointer anymore, and then about
removing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int *finished&lt;/code&gt; member entirely and using the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int in_use&lt;/code&gt; member instead. His patch implemented the latter.&lt;/p&gt;

    &lt;p&gt;Taylor Blau reviewed Ævar’s patch but wasn’t sure about one of the
places where the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int *finished&lt;/code&gt; member was removed.&lt;/p&gt;

    &lt;p&gt;Junio Hamano also reviewed the patch and wondered if the new gcc
version was correct in flagging the code in the first place, as it
appeared that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slot-&amp;gt;finished&lt;/code&gt; wasn’t used outside the function
where it’s assigned the address of a local variable.&lt;/p&gt;

    &lt;p&gt;Junio also wondered if it was correct to remove the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int *finished&lt;/code&gt;
member entirely and use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int in_use&lt;/code&gt; member instead, as that
looked like reversing the patch that introduced &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int *finished&lt;/code&gt;
without fully explaining why it was correct to do so.&lt;/p&gt;

    &lt;p&gt;To address the issue Junio then proposed implementing the following:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;      if (slot-&amp;gt;finished == &amp;amp;finished)
            slot-&amp;gt;finished = NULL;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;so that hopefully gcc would understand that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slot-&amp;gt;finished&lt;/code&gt;
field isn’t using a local address outside the current function.&lt;/p&gt;

    &lt;p&gt;Ævar replied to Junio, that assigning &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slot-&amp;gt;finished&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt; at
the end of the function would indeed quiet gcc. So he sent
&lt;a href=&quot;https://lore.kernel.org/git/patch-v2-1.1-777838267a5-20220225T090816Z-avarab@gmail.com/&quot;&gt;a version 2 of his patch&lt;/a&gt;
that only added &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slot-&amp;gt;finished = NULL;&lt;/code&gt; at the end of the function.&lt;/p&gt;

    &lt;p&gt;Junio wasn’t sure if the change was completely correct as he said he
no longer trusted his own reading of the http code, but he agreed
that it should be merged if gcc wasn’t fixed soon.&lt;/p&gt;

    &lt;p&gt;Taylor took another look at the patch and found other functions
where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slot-&amp;gt;finished&lt;/code&gt; is assigned, so he wondered if a better fix
would be to change the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int *finished&lt;/code&gt; member into a tri-state
“UNKNOWN/TRUE/FALSE enum”.&lt;/p&gt;

    &lt;p&gt;Ævar then sent &lt;a href=&quot;https://lore.kernel.org/git/patch-v3-1.1-69190804c67-20220325T143322Z-avarab@gmail.com/&quot;&gt;a version 3 of his patch&lt;/a&gt;
where he only improved the commit message compared to the previous
version. In the new commit message he explains why the other places
where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slot-&amp;gt;finished&lt;/code&gt; is assigned are already correct and don’t
need any change.&lt;/p&gt;

    &lt;p&gt;Taylor then agreed with Ævar’s explanations, but Junio wasn’t sure
about them, so he changed the commit message a bit, explaining how
we could make sure that the change to clear &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slot-&amp;gt;finished&lt;/code&gt; is
correct by adding the following code before it:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;        if (slot-&amp;gt;finished)
               BUG(&quot;the unconditional clearing at the end is wrong&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;For now the patch has still not been merged into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next&lt;/code&gt; branch
as Junio hopes that gcc 12.0 will be fixed before it’s actually
released. But in case it isn’t, at least we are ready for it.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-victoria-dye&quot;&gt;Developer Spotlight: Victoria Dye&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;Hi! My name is Victoria Dye, and I work as a software developer at GitHub. I
spend a lot of my time contributing to Git &amp;amp; some of its downstream forks
(Git for Windows and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;microsoft/git&lt;/code&gt;), and &lt;em&gt;occasionally&lt;/em&gt; Git Credential
Manager (although it’s been a while). I really enjoy solving tough
performance problems in software, so I’m hoping to do more of that in Git in
the not-so-distant future!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I haven’t been contributing to Git for all that long, so it’s hard to judge
the importance of anything I’ve done. That said, I’m pretty proud of the
work I’ve done around sparse index and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sparse-checkout&lt;/code&gt;. It’s been exciting
to contribute and see those features mature so rapidly over the past couple
months, and I hope it continues to gain traction with users looking for
better performance in Git!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;My focus pretty much since I started working on Git has been on integrating
commands with sparse index. Most recently that’s been &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt;, which not
only requires its own integration, but also the integration of all the
commands it shells out to (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;update-index&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;read-tree&lt;/code&gt;, etc.). The goal of
these initial sparse index integrations (including those by Derrick Stolee &amp;amp;
Lessley Dennington) is to cover the most popular commands as reported by
users at $DAYJOB (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt;, etc.), so the theoretical
performance gains of the sparse index can turn into a real improvement to
user experience.&lt;/p&gt;

    &lt;p&gt;Beyond my own work, I’m looking forward to mentoring a GSoC contributor in
&lt;em&gt;more&lt;/em&gt; sparse index integration! It’s an admittedly complicated topic, but —
based on my own experience – working on it can give new contributors an
incredible depth of knowledge in Git that’s hard to get elsewhere. Plus, I
love mentoring developers and creating a positive environment for them, so
I’m excited to have the chance to do that here!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;It would be great to see the shell script-based test suite rewritten into a
unit/integration/end-to-end testing stack. The tests we have are almost
exclusively end-to-end (excepting hackery with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test-tool&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2&lt;/code&gt; logs
exposing internal functions to test them), so we often have incomplete
coverage of some of the trickier code paths (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unpack_trees&lt;/code&gt;). And,
especially for developers that like test-driven development, it can be a
&lt;em&gt;lot&lt;/em&gt; easier working with code that has a robust unit testing suite.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;In general, I don’t think there’s a &lt;em&gt;feature&lt;/em&gt; that I’d want to completely
remove. Git is a fantastic tool in that it lets developers structure their
work in whatever way works best for them; something I personally don’t have
a great experience with (looking at you, &lt;em&gt;submodules&lt;/em&gt;) might just happen to
be someone else’s favorite tool.&lt;/p&gt;

    &lt;p&gt;However, I would absolutely remove an implementation pattern in Git itself:
shell script builtins and Git commands shelling out to other Git commands.
They’re prone to bugs, difficult to troubleshoot, and can almost always be
implemented more efficiently by commonizing the code they’re trying to get
out of another command.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I really, really like my current setup of VSCode +
&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&quot;&gt;GitLens&lt;/a&gt;.
I used to have a bit of a “text editor is for editing text, Git command line
is for source control” attitude and avoided using any integrations between
the two, but recently I gave in and installed GitLens. I tend to heavily use
the commit history when investigating bugs &amp;amp; learning a new area of the
code, so the inline ‘blame’ and commit-message-on-hover in particular make
that process about as fast it could be.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What does your mailing list workflow look like?&lt;/p&gt;

    &lt;p&gt;For submissions, I use &lt;a href=&quot;https://github.com/gitgitgadget/git&quot;&gt;GitGitGadget&lt;/a&gt;.
It really simplifies the process of submitting to Git (especially re-rolls)
and, if anything, it prevents me from making silly mistakes with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;For everything else, I have two email inbox folders: things addressed to me
directly (submission feedback, patches I’ve been CC’d on) and “everything
else”. For direct feedback/CCs, I try to respond within a couple days if I
think I can contribute something valuable to the discussion. The “everything
else” folder is set to “automatically mark as read” to avoid a distracting
barrage of “unread”s in my inbox, so I typically scan it a couple times a
day to stay up-to-date and check whether there’s anything I can help with or
review.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you think contributing to Git has a high entry barrier? If yes, do
you have any suggestions to improve the experience for new contributors?&lt;/p&gt;

    &lt;p&gt;In my experience, not really (at least, not so high that it excludes
would-be contributors). But I think it might seem that way because the
mailing list can be super intimidating when you’re looking to get started.&lt;/p&gt;

    &lt;p&gt;The mailing list is constantly active with complex patches and lots of
experienced developers iterating on complicated feedback, so it can be easy
to feel as though you can’t contribute much to it or that your code won’t
meet the project’s standards. There have been efforts in the past to guide
new contributors and help them technically learn the project, but it
ultimately comes down to the first interactions someone has with the rest of
the mailing that that determines whether or not they stick with it.&lt;/p&gt;

    &lt;p&gt;In terms of suggestions for improvement, I think it’s important for
reviewers to maintain a supportive tone in even highly constructive reviews.
A lot can get lost in text communication, so sometimes it’s worth explicitly
calling out your appreciation for a contribution. This is &lt;em&gt;especially&lt;/em&gt; true
for new contributors, but is just as applicable to any reviews.&lt;/p&gt;

    &lt;p&gt;Another (more concrete) suggestion would be to make it easier for new
contributors to find appropriate “starter” features/bugs of different sizes.
Other open source projects have issue trackers with a “good first project”
tag (and, as a new contributor on other projects, I’ve definitely
appreciated them). Although there have been discussions about creating
public issue trackers outside the mailing list, to my knowledge nothing like
that exists yet for Git, let alone a subset for new contributors.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;If you’re not coming in with a clear project or bugfix in mind, it can be
really difficult to figure out where to start. If you’re in that position,
something that has helped me in the past has been to just start testing
things until they break. Read up on a command you find interesting, look for
scenarios (e.g. options, sequences) that aren’t well-tested in our existing
tests, and start experimenting! Worst case, you can improve test coverage
and help us avoid issues in the future; a lot of times, though, you’ll find
a bug or an opportunity to add a new option. In any event, the experience
will teach you a ton about Git and make you more comfortable with
contributing.&lt;/p&gt;

    &lt;p&gt;And once you have a working change, don’t be afraid to submit it out of fear
that it’s not “good enough”. The goal we all share is to make Git as good as
it can possibly be, so your contribution – no matter how small or trivial
you think it is – is a valuable part of what makes this project succeed.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git developers,
what would it be?&lt;/p&gt;

    &lt;p&gt;Keep learning and trying new things! The Git development community has a
vast range of experience across its members – from people who worked on it
since the beginning to people making their first open source contribution
ever. But it’s also an easy place to get stuck in “your niche” (if you’re
lucky, you get stuck with a couple of other people so you can review each
others’ work).&lt;/p&gt;

    &lt;p&gt;Of course, none of us have infinite time to spend on Git. But every once in
a while, take a minute to read a contribution from someone you don’t know on
a topic you’re not familiar with. Or investigate a bug report on a command
you’ve never worked on! Or share your idea for a process we could try (like
the Git Review Club)! Not only will you learn something new and improve
yourself as a developer, but the collaboration you foster will help all of
us improve Git in the long term.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.4.2&quot;&gt;1.4.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/03/23/gitlab-14-9-1-released/&quot;&gt;14.9.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/03/22/gitlab-14-9-released/&quot;&gt;14.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/03/16/gitlab-14-8-4-released/&quot;&gt;14.8.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/03/15/gitlab-14-8-3-released/&quot;&gt;14.8.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/03/24/gitlab-14-7-6-released/&quot;&gt;14.7.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/03/09/gitlab-14-7-5-released/&quot;&gt;14.7.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/03/02/gitlab-14-6-6-released/&quot;&gt;14.6.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.5.html#351&quot;&gt;3.5.1&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.4.html#344&quot;&gt;3.4.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.3.html#3310&quot;&gt;3.3.10&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.0&quot;&gt;3.4.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.5&quot;&gt;3.3.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.10&quot;&gt;3.2.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.18&quot;&gt;3.1.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.3.3&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.3.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.3.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.12&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Windows &lt;a href=&quot;https://www.git-tower.com/release-notes/windows&quot;&gt;3.1&lt;/a&gt; (&lt;a href=&quot;https://www.git-tower.com/blog/gpg-windows/&quot;&gt;What’s New in Tower 3.1 for Windows blog post&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac&quot;&gt;8.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2022-03-15-removed-unencrypted-git-protocol-and-certain-ssh-keys/&quot;&gt;Removed unencrypted Git protocol and certain SSH keys in GitHub&lt;/a&gt;
(removed all support for DSA keys, removed legacy SSH algorithms HMAC-SHA-1 and CBC ciphers, etc.);
the motivation behind these changes can be found in the
&lt;a href=&quot;https://github.blog/2021-09-01-improving-git-protocol-security-github/&quot;&gt;Improving Git protocol security on GitHub&lt;/a&gt;
article on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.1password.com/1password-ssh-agent/&quot;&gt;SSH and Git, meet 1Password&lt;/a&gt;:
you can now, among other things, enable the SSH agent in 1Password.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://discuss.huggingface.co/t/announcement-switching-our-git-infra-to-gitaly/15030&quot;&gt;Hugging Face uses Gitaly to store Machine Learning related repos&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://boards.greenhouse.io/gitlab/jobs/5949673002&quot;&gt;GitLab is hiring to work on Gitaly&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/how-to-really-use-git-10-rules-to-make-git-more-useful&quot;&gt;How to Really Use Git: 10 Rules to Make Git More Useful&lt;/a&gt; by Bruno Brito on HackerNoon.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/git-for-marketing-teams/&quot;&gt;Git and GitHub for Marketing Teams&lt;/a&gt; by Bruno Brito on Tower’s blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://world.hey.com/dhh/the-advantages-of-large-long-running-pull-requests-c33d913c&quot;&gt;The advantages of large, long-running pull requests&lt;/a&gt; by David Heinemeier Hanson on hey.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/github/how-do-i-resolve-merge-conflicts-5438&quot;&gt;How Do I Resolve Merge Conflicts?&lt;/a&gt;
(without using graphical tools) by Rizèl Scarlett for GitHub, on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-rename-a-local-or-remote-branch-in-git/&quot;&gt;How to Rename a Local or Remote Branch in Git&lt;/a&gt;
by Kolade Chris on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/ruppysuppy/automatically-format-your-code-on-git-commit-using-husky-eslint-prettier-in-9-minutes-45eg&quot;&gt;Automatically Format your code on Git Commit using Husky, ESLint, Prettier in 9 minutes&lt;/a&gt;
by Tapajyoti Bose on DEV.to and Medium.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cloudsavvyit.com/14038/how-do-git-branches-work/&quot;&gt;How Do Git Branches Work?&lt;/a&gt;
by Anthony Heddings on Cloud Savvy IT.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RzYJvSnzlMk&quot;&gt;Teamwork &amp;amp; Git&lt;/a&gt;:
Dr Max Wilson explains how teams collaborate using Git
in a video on the &lt;a href=&quot;https://www.youtube.com/channel/UC9-y-6csu5WGm29I7JiwpnA&quot;&gt;Computerphile&lt;/a&gt;
channel on YouTube.
    &lt;ul&gt;
      &lt;li&gt;Links to previous videos in this series can be found in
&lt;a href=&quot;https://git.github.io/rev_news/2022/01/31/edition-83/&quot;&gt;Git Rev News Edition #83&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2022/02/28/edition-84/&quot;&gt;#84&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.dolthub.com/blog/2021-10-15-speeding-up-commit-graph-walks-with-materialized-closures/&quot;&gt;Speeding Up Commit Graph Walks in Dolt with Materialized Ancestor Closures&lt;/a&gt;:
&lt;a href=&quot;https://www.dolthub.com/&quot;&gt;Dolt&lt;/a&gt; is a &lt;a href=&quot;https://www.dolthub.com/blog/2021-09-17-database-version-control/&quot;&gt;version controlled SQL database&lt;/a&gt;,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/04/23/edition-62/&quot;&gt;Git Rev News #62&lt;/a&gt;;
you can find more information about versioning and databases in &lt;a href=&quot;https://git.github.io/rev_news/2021/12/30/edition-82/&quot;&gt;edition #82&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://kartproject.org/&quot;&gt;Kart&lt;/a&gt; stores geospatial and tabular data in Git,
providing version control at the row and cell level.
It provides repository working copies
as &lt;abbr title=&quot;Geographic Information System&quot;&gt;GIS&lt;/abbr&gt; databases and files,
allowing one to edit them directly in common GIS software without plugins.
Support for GeoPackage, PostGIS, Microsoft SQL Server and MySQL formats.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aleclearmind/split-patch&quot;&gt;split-patch&lt;/a&gt; project consists of
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;split-patch.py&lt;/code&gt; tool, which is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add -p&lt;/code&gt; on steroids for patches (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*.patch&lt;/code&gt; files),
allowing to choose in which &lt;em&gt;bucket&lt;/em&gt; to put each hunk, and
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-split-commit&lt;/code&gt; command (which can be used from interactive rebase)
which uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;split-patch.py&lt;/code&gt; to split the HEAD commit into multiple commits.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dagshub.com/&quot;&gt;DagsHub&lt;/a&gt; is a web platform for data version control
and collaboration for data scientists and machine learning engineers.
The free tier provides 10 GB of DAGsHub Storage,
and allows up to 3 collaborators in private projects.&lt;br /&gt;
See also the following articles:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://towardsdatascience.com/dagshub-a-github-supplement-for-data-scientists-and-ml-engineers-9ecaf49cc505&quot;&gt;DagsHub: a GitHub Supplement for Data Scientists and ML Engineers&lt;/a&gt;
by Khuyen Tran in Towards Data Science, a Medium blog.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://towardsai.net/p/l/dagshub-%E2%86%92-github-for-data-science&quot;&gt;DagsHub → Github for Data Science&lt;/a&gt;
by Shubham Saboo on Towards AI blog.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/DAGsHub/fds&quot;&gt;fds&lt;/a&gt; (Fast Data Science),
is a CLI for Data Scientists to version control data and code at once,
by conveniently wrapping Git and &lt;a href=&quot;https://dvc.org/&quot;&gt;DVC&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;DVC (Data Version Control) was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/martinvonz/jj&quot;&gt;Jujutsu&lt;/a&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jj&lt;/code&gt;) is an experimental Git-compatible DVCS.
It combines features from Git (data model, speed),
Mercurial (anonymous branching, simple CLI free from “the index”, revsets, powerful history-rewriting),
and Pijul/Darcs (first-class conflicts), with features not found in either of them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Victoria Dye and Bruno Brito.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 84 (February 28th, 2022)</title>
      <link>https://git.github.io/rev_news/2022/02/28/edition-84/</link>
      <pubDate>Mon, 28 Feb 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/02/28/edition-84/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-84-february-28th-2022&quot;&gt;Git Rev News: Edition 84 (February 28th, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 84th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of January 2022.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/Yfl1%2FZN%2FtaYwfGD0@google.com/&quot;&gt;Join us for Review Club!&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Josh Steadmon announced that the Review Club meeting he has been
organizing at Google for a while is now open to everyone. It happens
every other Wednesday at 14:00 Pacific time (UTC-8) via Google Meet.&lt;/p&gt;

    &lt;p&gt;The first opened meeting happened on Wednesday February 2nd and
discussed &lt;a href=&quot;https://lore.kernel.org/git/pull.1122.v2.git.1643479633.gitgitgadget@gmail.com/&quot;&gt;Elijah’s “In-core git merge-tree” patch series&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Please contact Josh Steadmon at &lt;a href=&quot;mailto:steadmon@google.com&quot;&gt;steadmon@google.com&lt;/a&gt; if you are
interested and want to join.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20220127153714.1190894-1-t.gummerer@gmail.com/&quot;&gt;[PATCH] &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fetch --prune&lt;/code&gt;: exit with error if pruning fails&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Thomas Gummerer sent a patch so that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt;, when it’s used
with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--prune&lt;/code&gt; flag or its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-p&lt;/code&gt; short form, will not exit with
exit status 0 anymore if pruning a ref fails.&lt;/p&gt;

    &lt;p&gt;Pruning a ref means removing a remote tracking ref, usually a branch,
if the ref disappeared on the remote. For example, if a remote called
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;origin&lt;/code&gt; has a branch called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feature1&lt;/code&gt;, then fetching from
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;origin&lt;/code&gt; will cause Git to create a remote tracking branch called
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;origin/feature1&lt;/code&gt; on the local machine. After the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feature1&lt;/code&gt; branch
is removed on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;origin&lt;/code&gt;, subsequent fetches from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;origin&lt;/code&gt; will yield
the deletion of the local &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;origin/feature1&lt;/code&gt; branch only if pruning is
requested.&lt;/p&gt;

    &lt;p&gt;Thomas noted in his patch that an error message was already printed
on stderr when pruning a ref failed, but it felt like a bug that
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt; was still exiting with the 0 exit status in this case, as
this could be interpreted as if no error happened.&lt;/p&gt;

    &lt;p&gt;Thomas had looked up the commit that introduced pruning, but he
couldn’t find if the exit status behavior was “an oversight or
intentional”, but it felt like an oversight to him.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, agreed with Thomas about using a
non-zero exit status when ref pruning failed, but he was unsure about
which actual exit status would be emitted by the code in Thomas’ patch.&lt;/p&gt;

    &lt;p&gt;Junio also found an issue with the current code as in some cases it
appeared that -1 could be passed to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exit()&lt;/code&gt;. This would result in a
255 exit status, as exit statuses have only 8 bits and are unsigned. He
left a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#leftoverbits&lt;/code&gt; mention related to this in his email, which
helps find usually small issues that should be fixed later.&lt;/p&gt;

    &lt;p&gt;Junio also thought that is probably wasn’t a good idea to error out
as soon as an error happens when pruning. It was probably best to
continue to fetch and prune as much as possible, “given that we have
already paid for the cost of discovering the refs from the other
side”.&lt;/p&gt;

    &lt;p&gt;Thomas’ patch added a new regression test that was then discussed a
bit by Junio, who left another &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#leftoverbits&lt;/code&gt; mention related to
the fact that many tests in the test script, where Thomas added the
new test, were using an old style and might want a cleanup.&lt;/p&gt;

    &lt;p&gt;Dscho, alias Johannes Schindelin, replied to Junio that it might
actually be confusing and unexpected for users if the fetch would
continue when pruning failed. He suggested adding a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--prune-best-effort&lt;/code&gt; option for cases where we might want the fetch
to continue as much as possible when pruning fails.&lt;/p&gt;

    &lt;p&gt;Thomas replied to Dscho that he was unsure what the behavior should
be when writing the patch, but that exiting early “felt like the
right thing to do for the user”. He said that he would be OK with
introducing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--prune-best-effort&lt;/code&gt;. He wasn’t sure people would
actually use it much though, as “it should be very rare that
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--prune&lt;/code&gt; fails”.&lt;/p&gt;

    &lt;p&gt;Junio replied to Thomas and Dscho that “when we fetch to update
multiple refs, we do not stop at the first ref-update failure, but
try to do as much as possible and then report an error”, and that
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--prune&lt;/code&gt; should behave similarly.&lt;/p&gt;

    &lt;p&gt;Thomas also replied separately about Junio’s initial comment related
to the actual exit status that would be emitted after Thomas’ patch. He
wondered if the exit status should always be 1 when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt; fails
at pruning.&lt;/p&gt;

    &lt;p&gt;Thomas and Dscho then discussed the new test, following Junio’s
comments, and agreed on adding a comment in the code to explain what
the test was doing.&lt;/p&gt;

    &lt;p&gt;Thomas then sent &lt;a href=&quot;https://lore.kernel.org/git/20220131133047.1885074-1-t.gummerer@gmail.com/&quot;&gt;a version 2 of his patch&lt;/a&gt;
with the changes that had been discussed.&lt;/p&gt;

    &lt;p&gt;Junio reviewed this new version and decided to merge it down, so
this small improvement will be in the next Git version.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-eric-sunshine&quot;&gt;Developer Spotlight: Eric Sunshine&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;(Eric has already been interviewed in &lt;a href=&quot;https://git.github.io/rev_news/2015/09/09/edition-7/#developer-spotlight-eric-sunshine&quot;&gt;Git Rev News #7, September 2015&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Since your previous interview, have there been changes in who you
are and what you do?&lt;/p&gt;

    &lt;p&gt;About a year after the previous interview, taking on the role of
caregiver for a family member consumed the bulk of my time to the
point that I was unable to keep up with the Git project or contribute
in any meaningful way, and was effectively absent from the project
for at least a year and a half. Since returning to the project, my
contributions have been far more scarce due to time constraints of
“real life” and a new job which I started a few years ago.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;You were a long-time RCS, CVS, and Subversion user. Do you miss
any features of those version controls systems in Git?&lt;/p&gt;

    &lt;p&gt;I can say without hesitation that I do not miss any features of those
older version control systems. In fact, I can report (perhaps
happily) that I have mostly forgotten how to use them. This is true
of Subversion, in particular, in which I have had to consult the
documentation to tackle even the simplest tasks the couple times I
had to use it in the last few years, despite having been a longtime
and experienced user.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How are your contributions to Git these days? Code contributions?
Code reviews? Others?&lt;/p&gt;

    &lt;p&gt;In the past, I was generally able to keep up with the mailing list
and read most or all patches submitted to the project and often
provide detailed reviews, but my Git time is fairly limited these
days, so I have to be much more selective about which topics I follow
or participate in.&lt;/p&gt;

    &lt;p&gt;Since I contributed quite a bit to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt; command (and am
perhaps an “area expert”, especially since Nguyễn Thái Ngọc Duy
departed from the project), I pay particular attention to bug reports
about that command or topics touching it in some significant fashion.
In the case of a bug report, I either provide a fix for the problem
myself or help guide some other contributor. In the case of topics
which touch &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt;, I try to set aside time to review the
topic’s patches carefully and follow along as the topic progresses.&lt;/p&gt;

    &lt;p&gt;That aside, I also provide reviews for other topics when they fit
into my limited Git time, and answer the periodic question on the
mailing list, or interact in a discussion if I have something
meaningful to offer on the subject.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Are ‘ability to stage changes’ and ‘interactive rebase’ still your
favorite Git features? Or do you have new favorites?&lt;/p&gt;

    &lt;p&gt;Yes they are, and no I do not have new favorites.&lt;/p&gt;

    &lt;p&gt;In fact, a few years back, I started using the &lt;a href=&quot;http://www.catb.org/~esr/src/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;src&lt;/code&gt;&lt;/a&gt;
version control system for managing standalone files (which, although built
atop RCS, features a “modern” command line interface quite like Git’s
and in no way like RCS’s interface). Although I find &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;src&lt;/code&gt; handy for
versioning standalone files, I always feel as if my hands are tied
when using it since it lacks the very useful features of staging
changes and rebasing interactively.&lt;/p&gt;

    &lt;p&gt;As a consequence, aside from contributing bug fixes and enhancements
to the project, I also spent some time significantly improving the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fast-import&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fast-export&lt;/code&gt; round trip fidelity of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;src&lt;/code&gt;. This
allows me to temporarily import a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;src&lt;/code&gt; history into Git, which gives
me access to Git’s staging and interactive rebasing, and finally
convert the history back to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;src&lt;/code&gt;. Yes, it’s a terrible kludge, and a
painful one, but at least gives me a way to take advantage of those
Git features when absolutely required. I don’t use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;src&lt;/code&gt; often enough
presently to justify the development effort, but adding staging and
interactive rebasing to the tool directly would be on my wish list
for that project.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How does your mailing list workflow look like?&lt;/p&gt;

    &lt;p&gt;I understand that some developers have special tooling set up to
improve the mailing list-centric workflow on the Git project, but I
still use a plain email client with no special provisions, and I
likely will continue with this set-up as long as it works well enough
for my simple needs.&lt;/p&gt;

    &lt;p&gt;I do find the Git mailing list archive at &lt;a href=&quot;https://lore.kernel.org/git&quot;&gt;https://lore.kernel.org/git&lt;/a&gt;
quite useful and often go spelunking through it when researching some
topic or bug report, as well as to fetch sets of patches which I may
have already deleted from my local email client. Much more recently,
I have also started taking advantage of its NNTP feed (nntp.lore.kernel.org).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Could you elaborate a bit about the email client you use?&lt;/p&gt;

    &lt;p&gt;I use Gmail in the web browser almost exclusively. Lately, I have
been using Thunderbird to access the lore.kernel.org NNTP feed.
Infrequently, I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mutt&lt;/code&gt; when I need to send a patch inline within
a reply when I don’t want the Gmail web interface to modify
whitespace or the formatting in general. (I also have Emacs set up
for email, thus could use it for the same purpose as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mutt&lt;/code&gt;, but
never actually do so.)&lt;/p&gt;

    &lt;p&gt;[ &lt;em&gt;Editor’s note: If you’re going to use Gmail in the web browser,
  ensure “Plain text mode” is checked. Also, see &lt;a href=&quot;https://git-scm.com/docs/git-format-patch#_gmail&quot;&gt;Gmail specific
  format-patch hints&lt;/a&gt;&lt;/em&gt; ]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;Getting involved in the Git project can be intimidating (I know, even
after all these years, I still feel intimidated each time I submit
patches), but people on the project are generally quite friendly, and
the goal of reviewers is to help you refine your submission so that
it can eventually be accepted into the project. After all, that’s why
reviewers take the time to read submissions so thoroughly and offer
(sometimes in-depth and exhaustive) comments to improve the
submission. One thing to note: people who review a lot of patches
tend (out of necessity) to be economical with their words, pointing
out just the parts of the patch which need improvement and often
forgetting to praise the parts which are done well. As such, reviews
can sometimes feel cold and off putting, but that is not the
intention. Reviewers are genuinely trying to help; they would not put
in such effort otherwise.&lt;/p&gt;

    &lt;p&gt;A good way to learn how the project works is to subscribe to the
mailing list and read submissions from active contributors and
reviews from regular reviewers. You can learn by example via passive
observation. From a patch or patch series, you can learn not only how
a patch series should be constructed, but also how an effective
commit message is written. By reading reviews, you can learn what
reviewers are looking for and how they interact.&lt;/p&gt;

    &lt;p&gt;To become actively involved in the project, submit a patch, even a
small one fixing a bug you found or making a minor improvement to
documentation. If you have an idea for a functionality improvement or
a new feature, send it to the mailing list. Or, if you just want to
contribute without having anything particular in mind, monitor the
mailing list for bug reports (as I did when I joined the project) and
try to devise a fix and submit it to the mailing list in the form of
a patch.&lt;/p&gt;

    &lt;p&gt;Another way to contribute to the project is by reviewing submissions.
Reviews do not need to be extensive or elaborate. A review which
points out a minor logic flaw in a patch or highlights a
typographical error in a comment or commit message is useful.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git developers,
what would it be?&lt;/p&gt;

    &lt;p&gt;When reviewing a patch, make it clear which of your comments you
expect the submitter to act upon and which suggestions can be left to
the discretion of the submitter. This is especially important for new
contributors who may not be able to distinguish between mandatory
changes to the patch and “it might be nice to have” changes. Also let
the submitter know that it is okay to push back on a review comment
if necessary since newcomers may not realize that doing so is an
option.&lt;/p&gt;

    &lt;p&gt;For a submitter, try to respond to each review comment – even if the
response is a simple “OK” or “I agree with all your comments” or “I
disagree with this comment because…” – so that reviewers do not
feel that their effort has been wasted.&lt;/p&gt;

    &lt;p&gt;(Oops, that’s two tips, not one. Sorry.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;It is difficult to judge the importance of various contributions. I
may instead be able to highlight a few areas in which I have been
involved.&lt;/p&gt;

    &lt;p&gt;Although I do not do many reviews these days, I used to be an active
reviewer, and hope that my review comments and suggestions helped
improve various submissions in at least some way.&lt;/p&gt;

    &lt;p&gt;From an end-user perspective, perhaps the my most visible
contribution to Git has been all the work I did to improve and
enhance the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt; command and multiple-worktree support in
general (though much of the praise for the mechanics of
multiple-worktree support belongs to Nguyễn Thái Ngọc Duy who
designed and originated the implementation).&lt;/p&gt;

    &lt;p&gt;From a Git developer perspective, perhaps my most valuable(?)
contribution is the so-called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;chainlint&lt;/code&gt; which identifies a specific
type of problem in Git test scripts which could, if undetected, allow
a test to miss a failure and erroneously report success.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;As mentioned, my Git time is limited, so my involvement is scaled
back. I do try to answer a question here or there or contribute to a
discussion if possible, and I review the periodic submission.&lt;/p&gt;

    &lt;p&gt;Aside from contributing a few bug-fix patches and introducing the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree repair&lt;/code&gt; command relatively recently, my recent focus
has been on a new and much enhanced version of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;chainlint&lt;/code&gt; tool
mentioned above. Although the implementation has been complete for
well over a half year (at the time of writing), I am still trying to
find time to polish the patch series itself for submission. In the
meantime, I did manage to submit a couple other somewhat lengthy
patch series in preparation for the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;chainlint&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq1r0rtfw9.fsf@gitster.g/&quot;&gt;2.35.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.35.1.windows.2&quot;&gt;2.35.1(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.35.1.windows.1&quot;&gt;2.35.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.4.1&quot;&gt;1.4.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.4.0&quot;&gt;1.4.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.4&quot;&gt;3.3.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.9&quot;&gt;3.2.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.17&quot;&gt;3.1.17&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.25&quot;&gt;3.0.25&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.4/admin/release-notes#3.4.0&quot;&gt;3.4.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.3&quot;&gt;3.3.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.8&quot;&gt;3.2.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.16&quot;&gt;3.1.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.24&quot;&gt;3.0.24&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/02/22/gitlab-14-8-released/&quot;&gt;14.8&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/02/14/gitlab-14-7-3-released/&quot;&gt;14.7.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/02/08/gitlab-14-7-2-released/&quot;&gt;14.7.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/02/03/security-release-gitlab-14-7-1-released/&quot;&gt;14.7.1, 14.6.4, and 14.5.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.9&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.8&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tower for Mac &lt;a href=&quot;https://www.git-tower.com/release-notes/mac&quot;&gt;8.0&lt;/a&gt; (&lt;a href=&quot;https://youtu.be/US4W1lNEJCE&quot;&gt;What’s New in Tower 8 video&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How some Git fetch performance improvements were made, &lt;a href=&quot;https://about.gitlab.com/blog/2022/01/20/git-fetch-performance/&quot;&gt;part 1&lt;/a&gt; and
&lt;a href=&quot;https://about.gitlab.com/blog/2022/02/07/git-fetch-performance-2021-part-2/&quot;&gt;part 2&lt;/a&gt;, by the GitLab Scalability team.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/&quot;&gt;Include diagrams in your Markdown files with Mermaid&lt;/a&gt;,
automatically rendered on GitHub and possibly also in other
&lt;a href=&quot;https://commonmark.org/&quot;&gt;CommonMark&lt;/a&gt; implementations.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2022-02-03-more-ways-to-keep-your-pull-request-branch-up-to-date/&quot;&gt;More ways to keep your pull request branch up-to-date&lt;/a&gt;
on GitHub.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://people.kernel.org/monsieuricon/cross-fork-object-sharing-in-git-is-not-a-bug&quot;&gt;Cross-fork object sharing in git (is not a bug)&lt;/a&gt;
by Konstantin Ryabitsev.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/git-bash/&quot;&gt;Getting Started with Git Bash&lt;/a&gt;
by Bruno Brito on Git Tower blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://youtu.be/bSA91XTzeuA&quot;&gt;Inside the Hidden Git Folder - Computerphile&lt;/a&gt;
by Dr Max Wilson on Computerphile channel on YouTube.
Beware a blink and you miss it error about the purpose of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/logs/&lt;/code&gt; folder.
A link to the previous video on the topic of Git by Dr Max Wilson can be found in
&lt;a href=&quot;https://git.github.io/rev_news/2022/01/31/edition-83/&quot;&gt;Git Rev News Edition #83&lt;/a&gt;
(the previous edition).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developers.redhat.com/articles/2022/02/02/protect-secrets-git-cleansmudge-filter&quot;&gt;Protect secrets in Git with the clean/smudge filter&lt;/a&gt;
by Tomer Figenblat on Red Hat Developer blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/git-switching-unstaged-changes-to-a-new-branch/&quot;&gt;Git: Switching Unstaged Changes to a New Branch&lt;/a&gt;
two ways, by Chris Coyier on CSS-Tricks; read also featured comments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://monorepo.tools/&quot;&gt;Monorepo.tools&lt;/a&gt; – Everything you need to know about monorepos,
and the tools to build them.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.nrwl.io/announcing-monorepo-tools-da605afbb5d5&quot;&gt;Announcing monorepo.tools&lt;/a&gt;
by Juri Strumpflohner for Nrwl.&lt;/li&gt;
      &lt;li&gt;You can find the most recent list of pros and cons of monorepos in
&lt;a href=&quot;https://git.github.io/rev_news/2021/11/29/edition-81/&quot;&gt;Git Rev News Edition #81&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Eric Sunshine, Philip Oakley, Bruno Brito
and Josh Steadmon.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 83 (January 31st, 2022)</title>
      <link>https://git.github.io/rev_news/2022/01/31/edition-83/</link>
      <pubDate>Mon, 31 Jan 2022 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2022/01/31/edition-83/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-83-january-31st-2022&quot;&gt;Git Rev News: Edition 83 (January 31st, 2022)&lt;/h2&gt;

&lt;p&gt;Welcome to the 83rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of December 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CABceR4ZW4rRWZnH0ZBkWty_H84Z4CmXque_LO+1edETEWrO8PQ@mail.gmail.com/&quot;&gt;Custom subcommand help handlers&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Sean Allred wrote to the mailing list saying that in his company he
is distributing a Git subcommand he named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-foo&lt;/code&gt;, which can
display its own help, but he was struggling to make this work.&lt;/p&gt;

    &lt;p&gt;Running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git foo --help&lt;/code&gt; doesn’t pass &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--help&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-foo&lt;/code&gt;, but
instead it is rewritten internally in Git to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help foo&lt;/code&gt;, which
tries to find and then display a help page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-foo&lt;/code&gt;. This
could have worked if Sean could install such a page for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-foo&lt;/code&gt;
along with the help pages for regular Git commands.&lt;/p&gt;

    &lt;p&gt;On Windows, though, by default help pages are displayed in HTML
format instead of the ‘man’ or ‘info’ formats, and these pages
are expected to be in a Git for Windows controlled installation
directory that he’d rather not touch.&lt;/p&gt;

    &lt;p&gt;One solution he suggested would be to not rewrite &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git foo --help&lt;/code&gt;
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help foo&lt;/code&gt; if the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo&lt;/code&gt; command is not a builtin.&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason replied to this suggestion that this might
not please everyone, as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email --help&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git annex --help&lt;/code&gt; were currently expected to show the manual, even
though these commands are not builtins.&lt;/p&gt;

    &lt;p&gt;Dscho, alias Johannes Schindelin, also replied to Sean saying that just
looking whether the command is a builtin or not might not be enough,
as Git also installs scripts or executables, and provided some
example code implementing an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;is_in_git_exec_path()&lt;/code&gt; function.&lt;/p&gt;

    &lt;p&gt;Ævar and Dscho then discussed a bit if such a function was needed as
Ævar pointed that we already have a way to dump builtins, other known
commands and commands unknown to Git, using respectively:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git --list-cmds=builtins&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git --list-cmds=main&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git --list-cmds=others&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Meanwhile Erik Cervin Edin replied to Ævar’s initial reply to Sean
saying that when a Git alias is configured for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo&lt;/code&gt; and it’s used with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--help&lt;/code&gt;, the user is told that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo&lt;/code&gt; is an alias for another
command, and the help page for the other command is displayed. So he
suggested doing something similar for non-builtin commands that are
missing help pages.&lt;/p&gt;

    &lt;p&gt;Erik also mentioned that using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-foo --help&lt;/code&gt; directly or
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git foo -h&lt;/code&gt;, instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git foo --help&lt;/code&gt;, would allow &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-foo&lt;/code&gt; to
handle everything.&lt;/p&gt;

    &lt;p&gt;brian m. carlson replied to Erik that for man pages it might not be
possible to distinguish a missing page from another error. He then
wondered if there is a similar environment variable as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MANPATH&lt;/code&gt; for
HTML pages, as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MANPATH&lt;/code&gt; on Unix systems instructs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;man&lt;/code&gt; to search
for pages in the directories specified in this variable. He also
suggested installing the HTML documentation alongside Git’s, as it’s
expected on Unix systems to have all man pages installed into the
same place.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, then agreed to this suggestion.&lt;/p&gt;

    &lt;p&gt;Erik replied to brian and Junio that there was no standard or
convention around HTML documentation, and talked about the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;help.htmlPath&lt;/code&gt; configuration variable that could be used to tell Git
where to look for HTML pages. He also suggested falling back to
searching a missing HTML page starting at the path of the command.&lt;/p&gt;

    &lt;p&gt;The discussion continued for some time between Erik, Junio, Philip
Oakley and Dscho, especially around the topic of aliases.&lt;/p&gt;

    &lt;p&gt;Then Junio spotted the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_HTML_PATH&lt;/code&gt; environment variable in the
code, and noticed that it can currently be used to specify just
one directory for HTML pages, while &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MANPATH&lt;/code&gt; can be a
colon-separated list of directories. So he suggested changing the
code to allow &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_HTML_PATH&lt;/code&gt; to also be a colon-separated list of
directories. This would allow people to install HTML pages in
directories without the need of administrator rights.&lt;/p&gt;

    &lt;p&gt;It looks like no one has yet started working on this though.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqee4x3pij.fsf@gitster.g/&quot;&gt;2.35.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqwniui6wd.fsf@gitster.g/&quot;&gt;2.35.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq35lp68rw.fsf@gitster.g/&quot;&gt;2.35.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq7db7xfgn.fsf@gitster.g/&quot;&gt;2.35.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.35.0.windows.1&quot;&gt;2.35.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.35.0-rc2.windows.1&quot;&gt;2.35.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.35.0-rc1.windows.1&quot;&gt;2.35.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.35.0-rc0.windows.1&quot;&gt;2.35.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2022/01/22/gitlab-14-7-released/&quot;&gt;14.7&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2022/01/17/gitlab-14-6-3-released/&quot;&gt;14.6.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/01/11/security-release-gitlab-14-6-2-released/&quot;&gt;14.6.2, 14.5.3, and 14.4.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2022/01/04/gitlab-14-6-1-released/&quot;&gt;14.6.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.2&quot;&gt;3.3.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.7&quot;&gt;3.2.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.15&quot;&gt;3.1.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.23&quot;&gt;3.0.23&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2022-01-24-highlights-from-git-2-35/&quot;&gt;Highlights from Git 2.35&lt;/a&gt;
by Taylor Blau on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.zdnet.com/article/linux-foundation-launches-open-source-software-development-linux-git-certification/&quot;&gt;Linux Foundation launches Open Source Software Development, Linux, and &lt;strong&gt;Git&lt;/strong&gt; certification&lt;/a&gt;,
and three new training courses on the edX platform (including
&lt;a href=&quot;https://www.edx.org/course/git-for-distributed-development&quot;&gt;Git for Distributed Software Development (LFD109x)&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/introducing-new-git-features-to-visual-studio-2022/&quot;&gt;Introducing new Git features to Visual Studio 2022&lt;/a&gt;
by Taysser Gherfal on Microsoft Visual Studio DevBlog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.dbrgn.ch/2021/11/16/git-ssh-signatures/&quot;&gt;Signing Git Commits with SSH Keys&lt;/a&gt;
by Danilo Bargen (available since Git version 2.34).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=92sycL8ij-U&quot;&gt;Git Overview - Computerphile&lt;/a&gt;,
a video by dr Max Wilson, filmed and edited by Sean Riley.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://davidwalsh.name/awesome-git-aliases&quot;&gt;Awesome Git Aliases&lt;/a&gt; and
&lt;a href=&quot;https://davidwalsh.name/more-awesome-git-aliases&quot;&gt;More Awesome Git Aliases&lt;/a&gt;
by Landon Schropp on Dawid Walsh Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://render.com/blog/git-organized-a-better-git-flow&quot;&gt;Git Organized: A Better Git Flow&lt;/a&gt;
by Annie Sexton on Render.com Blog; though a better solution would be to use interactive rebase,
as described in &lt;a href=&quot;https://dev.to/render/git-organized-a-better-git-flow-56go#comment-subscription&quot;&gt;comments for this article on DEV.to&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.raycast.com/blog/no-code-reviews-by-default/&quot;&gt;No code reviews by default (to move faster)&lt;/a&gt;
by Thomas Paul Mann of Raycast (and how it works for them).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/make-a-component-multiple-frameworks-in-a-monorepo/&quot;&gt;How to Make a Component That Supports Multiple Frameworks in a Monorepo&lt;/a&gt;
by Rob Levin on CSS-Tricks.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/git-under-the-hood/&quot;&gt;How Git Works Under the Hood&lt;/a&gt;
by Faisal Albasu on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/ruppysuppy/advanced-git-concepts-you-should-know-nle&quot;&gt;Advanced Git Concepts You Should Know&lt;/a&gt;
by Tapajyoti Bose on The Practical Dev (also known as DEV.to).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-write-better-git-commit-messages/&quot;&gt;How to Write Better Git Commit Messages – A Step-By-Step Guide&lt;/a&gt;
by Natalie Pina on freeCodeCamp; this article talks also about the
&lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; specification,
first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/anibalardid/how-to-check-commit-message-and-branch-name-with-git-hooks-without-any-new-installation-n34&quot;&gt;How to check commit message and branch name with git hooks without any new installation&lt;/a&gt;,
a short article by Anibal on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ndss-symposium.org/ndss-paper/how-bad-can-it-git-characterizing-secret-leakage-in-public-github-repositories/&quot;&gt;How Bad Can It Git? Characterizing Secret Leakage in Public GitHub Repositories&lt;/a&gt;
by Michael Meli, Matthew R. McNiece, Bradley Reaves in NDSS 2019;
via &lt;a href=&quot;https://blog.acolyer.org/2019/04/08/how-bad-can-it-git-characterizing-secret-leakage-in-public-github-repositories/&quot;&gt;the morning paper article&lt;/a&gt;
by Adrian Colyer.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dzone.com/articles/the-pull-request-paradox-merge-faster-by-promoting&quot;&gt;The Pull Request Paradox: Merge Faster by Promoting Your PR&lt;/a&gt;
Adding more context to our Pull Requests got them merged two days faster. Here’s how it works. By Dan Lines.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.morling.dev/blog/whats-in-a-good-error-message/&quot;&gt;What’s in a Good Error Message?&lt;/a&gt;
Some thoughts on ensuring error messages are useful to the reader. By Gunnar Morling.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.codeproject.com/Articles/5322503/Lets-talk-about-Error-Messages&quot;&gt;Let’s Talk about Error Messages&lt;/a&gt;
More thoughts on error messages, by Brien King.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Ovid/git-critic&quot;&gt;git-perl-critic&lt;/a&gt; - Command-line interface for the
Perl &lt;a href=&quot;https://metacpan.org/pod/Git::Critic&quot;&gt;Git::Critic&lt;/a&gt; module,
reporting &lt;a href=&quot;https://metacpan.org/pod/Perl::Critic&quot;&gt;Perl::Critic&lt;/a&gt; failures
(that is, code violating Perl best practices) only on lines changed in the current Git branch.
By Curtis “Ovid” Poe.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tkellogg/dura&quot;&gt;Dura&lt;/a&gt; is a background process that watches
your Git repositories and commits your uncommitted changes without impacting HEAD,
the current branch, or the Git index (staged files).  With this tool you should not
ever lose your work if you’re using Git.
Written in Rust by Tim Kellogg.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/johnzeng/ResumableGitClone&quot;&gt;ResumableGitClone&lt;/a&gt; (2017)
is a Bash shell script to clone a large repo without retrying again and again,
by using a deepening shallow clone.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/git-pull-run&quot;&gt;git-pull-run&lt;/a&gt; is an npm package
which automatically runs commands like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm install&lt;/code&gt; when fetching changes from Git,
but only if certain files have changed.  Extended version of the script presented in
&lt;a href=&quot;https://dev.to/zirkelc/automatically-install-npm-dependencies-on-git-pull-bg0&quot;&gt;Automatically Install NPM Dependencies on Git Pull&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alirezanet/Husky.Net&quot;&gt;Husky.Net&lt;/a&gt; is a Git hooks manager for .NET,
among others making it possible to run linters against staged Git files.
Inspired by &lt;a href=&quot;https://github.com/typicode/husky&quot;&gt;husky&lt;/a&gt;,
&lt;a href=&quot;https://github.com/okonet/lint-staged&quot;&gt;lint-staged&lt;/a&gt;,
a few other tools, and by &lt;a href=&quot;https://kaylumah.nl/2019/09/07/using-csharp-code-your-git-hooks.html&quot;&gt;Using C# code in your git hooks&lt;/a&gt;
article by Max Hamulyák (2019).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/okonet/lint-staged&quot;&gt;lint-staged&lt;/a&gt; was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2018/11/21/edition-45/&quot;&gt;Git Rev News #45&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/typicode/husky&quot;&gt;husky&lt;/a&gt; was first mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News #63&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Philip Oakley.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 82 (December 30th, 2021)</title>
      <link>https://git.github.io/rev_news/2021/12/30/edition-82/</link>
      <pubDate>Thu, 30 Dec 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/12/30/edition-82/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-82-december-30th-2021&quot;&gt;Git Rev News: Edition 82 (December 30th, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 82nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of November 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/YboaAe4LWySOoAe7@coredump.intra.peff.net/&quot;&gt;Peff is taking a break from Git&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Peff, alias Jeff King, announced on the mailing list that he is
going to take a five months break from Git starting at the end of
December. He is also stepping down from Git’s PLC (Project Leadership
Committee), the entity that represents Git within
&lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Software Freedom Conservancy&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Peff has been involved in the project for 15 years and has
contributed a huge number of patches as well as an enormous amount of
reviews, support and discussions.&lt;/p&gt;

    &lt;p&gt;He also used to maintain &lt;a href=&quot;https://git-scm.com/&quot;&gt;git-scm.com&lt;/a&gt;, the main site of the
project. It looks like Taylor Blau, who has been working at GitHub
with Peff, will take over maintaining this site.&lt;/p&gt;

    &lt;p&gt;Along with others on the mailing list, let’s thank Peff for his
contributions to Git and Git Development Community!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CA+34VNLj6VB1kCkA=MfM7TZR+6HgqNi5-UaziAoCXacSVkch4A@mail.gmail.com/&quot;&gt;misleading message printed when worktree add fails&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Baruch Burstein posted a bug report on the mailing list saying that
he ran &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree add &amp;lt;path&amp;gt; &amp;lt;branch&amp;gt;&lt;/code&gt;, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;branch&amp;gt;&lt;/code&gt; was an
already checked-out branch, and saw a message that seemed to
indicate that the command was a success, when in fact it was not.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine replied to him asking if he saw something similar as:&lt;/p&gt;

    &lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;% git worktree add ../foo bar
Preparing worktree &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;checking out &lt;span class=&quot;s1&quot;&gt;&apos;bar&apos;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
fatal: &lt;span class=&quot;s1&quot;&gt;&apos;bar&apos;&lt;/span&gt; is already checked out at &lt;span class=&quot;s1&quot;&gt;&apos;.../wherever&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Baruch replied that he actually saw the messages emitted by Git in a
different order:&lt;/p&gt;

    &lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;fatal: &lt;span class=&quot;s1&quot;&gt;&apos;master&apos;&lt;/span&gt; is already checked out at &lt;span class=&quot;s1&quot;&gt;&apos;C:/Users/bmbur/temp&apos;&lt;/span&gt;
Preparing worktree &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;checking out &lt;span class=&quot;s1&quot;&gt;&apos;master&apos;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Eric then diagnosed the following:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;Okay, that’s happening because the ‘Preparing’ message is sent to
stdout, whereas the ‘fatal’ error is sent to stderr, and the streams
are being flushed on Windows in a different order than what we
typically see on Unix platforms even though the ‘Preparing’ message is
actually output first by the code.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;He then proposed to have the die() function, which is emitting the
‘fatal’ error, or the vreportf(), which is used by die() to emit the
‘fatal’ error, flush stdout before emitting an error. This would fix
not only the issue Baruch saw, but also other similar issues in
other parts of the code.&lt;/p&gt;

    &lt;p&gt;Randall S. Becker replied to Eric that his proposed fix was
“probably a good idea” as “there is no guarantee even in Unix
regarding stream buffer flushing”.&lt;/p&gt;

    &lt;p&gt;Eric posted &lt;a href=&quot;https://lore.kernel.org/git/20211130043946.19987-1-sunshine@sunshineco.com/&quot;&gt;an RFC patch&lt;/a&gt;
implementing his proposed fix. The patch added a call to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fflush(stdout)&lt;/code&gt; in vreportf() just before this function calls
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fflush(stderr)&lt;/code&gt; and before it actually writes a message on stderr.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to the patch wondering if
flushing stdout when it is going to a pipe talking to another
process could cause issues. He noticed that the HTTP backend code
uses vreportf() in this way, though he said that any code using
stdio “cannot precisely control when the buffered contents are
flushed anyway”, so the patch might be OK.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, then started a discussion about the
possibility of arbitrary flushing causing some code to block, which might
create a deadlock, as some other code might be waiting for something
from the now blocking code. Eric suggested that this could be
addressed by flushing stdout only if stdout is attached to a
terminal, though he thought this would be “rather ugly”.&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason chimed in to ask about the warning() and
error() functions that also call vreportf(), but Peff replied that
they were probably OK.&lt;/p&gt;

    &lt;p&gt;Meanwhile Peff also replied to Eric’s patch wondering if “status
messages like this go to stderr anyway”. He remarked that&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;in general our approach in Git is more “if it is the main
output of the program, it goes to stdout; if it is
chatter or progress for the user, it goes to stderr”.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;He also explained that it works consistently on glibc as “stdout to
a terminal is line buffered by default, so the ‘Preparing’ line is
flushed immediately”. But even on Linux, without a terminal, like
when both stdout and stderr are redirected to the same file, for
example with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree add ../foo bar &amp;gt;out 2&amp;gt;&amp;amp;1&lt;/code&gt;, the output to
stderr appears before the one to stdout.&lt;/p&gt;

    &lt;p&gt;Eric replied to Peff saying he had considered emitting the
‘Preparing’ line on stderr instead of stdout, as Peff suggests, but
he thought that it’s not documented and not very consistent that
this kind of output from Git should go to stderr, and also that it
could be a regression if people relied on that. He suggested adding
a fflush(stdout) to git-worktree’s code and “live with that
localized ugliness”.&lt;/p&gt;

    &lt;p&gt;Peff agreed that Git has not been very consistent, but he said that
more careful reviews and “laying out guidelines could help”. He also
pointed to &lt;a href=&quot;https://lore.kernel.org/git/20110907215716.GJ13364@sigill.intra.peff.net/&quot;&gt;a previous discussion&lt;/a&gt;
from 10 years ago where he had “laid out his mental model” about this topic.&lt;/p&gt;

    &lt;p&gt;He also noticed that the ‘Preparing’ line was marked for
translation, so “not reliably machine-readable anyway”. He also
pointed to &lt;a href=&quot;https://github.com/git/git/commit/68b939b2f0&quot;&gt;a previous commit&lt;/a&gt;
that moved some &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; output from stdout to stderr for similar
reasons.&lt;/p&gt;

    &lt;p&gt;Eric then agreed with Peff about sending a different patch to move
the ‘Preparing’ line output to stderr and another patch to improve
documentation about this topic. Eric also noticed that this output
had been changed significantly 3 years ago without any complaints.&lt;/p&gt;

    &lt;p&gt;He then sent &lt;a href=&quot;https://lore.kernel.org/git/20211201053214.2902-1-sunshine@sunshineco.com/&quot;&gt;a patch&lt;/a&gt;
to improve our documentation about this. A second version of this
patch was eventually merged to the master branch after Eric took
into account some reviews by Fabian Stelzer, Junio, Peff and Philip
Oakley to improve some wordings.&lt;/p&gt;

    &lt;p&gt;Ævar and Junio discussed a bit further the “you shouldn’t write
anything that isn’t an error” view of the world, and Ævar cited the
&lt;a href=&quot;https://manpages.debian.org/jessie/moreutils/chronic.1.en.html&quot;&gt;“chronic” utility&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Eric also sent &lt;a href=&quot;https://lore.kernel.org/git/20211203034420.47447-1-sunshine@sunshineco.com/&quot;&gt;a small patch series&lt;/a&gt;
that moved the ‘Preparing’ line output to stderr and fixed a minor
problem in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt; documentation he noticed along the
way.&lt;/p&gt;

    &lt;p&gt;This patch series started a small inconclusive discussion between
Ævar, Eric, Peff and Junio about automating the synopsis and maybe
other parts of the documentation from the code or other ways to
avoid duplication and mismatches.&lt;/p&gt;

    &lt;p&gt;The patch series was eventually merged as is to the master branch
though.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-randall-s-becker&quot;&gt;Developer Spotlight: Randall S. Becker&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I am Randall S. Becker, president of Nexbridge Inc. I have been a
software developer and architect for many decades. Aside from the
obvious SCM domain knowledge, my interests are around data structures,
performance, computability, and languages. About 10 years ago, I joined
the ITUGLIB Technical Committee, which is an Open-Source group that
maintains code for the HPE Nonstop community - the platform was
originally called Tandem Computers Inc.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I have been maintaining the code associated with the HPE NonStop
platform for the past six years and was key to its successful port to
both the x86 and ia64 variants of the platform. In addition, I keep an
eye out for changes that may put the port at risk and run the CI/CD
environment that builds and tests Git on the platform.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I am currently working on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/config&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;includeIf&lt;/code&gt; function for
worktrees, planning a threaded version of the port, which is challenging
considering the nature of the platform and community. We have to
maintain compatibility with some old versions of the operating systems
that lack some more modern capabilities. The platform is an MPP
architecture without kernel level threads (yet), and the port to POSIX
threads is very messy with the operating system wrappers we have to use.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;There are really three areas where I would want to work. The first, most
important, is improving multi-level signing capabilities in Git to
support the software supply chain. I could leave it at that, but the
full set of requirements in various countries are not yet fully fleshed
out. Another two, purely to support the NonStop community is converting
the code written in Go (Git LFS) into C and making it part of the standard
product. The other is migrating the interpretive code to a C99-standard
code base.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I would move directly to SHA-384 or SHA-512 and toss both SHA-1 and
SHA-256 as soon as possible. The same applies to any signing
capabilities to support 8K or higher key sizes in defense against future
hacking using the capabilities quantum computers.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

    &lt;p&gt;This is a bit of self-promotion for my company, and I apologise for that.
We build façade-style interface facilities that allow legacy platforms,
including HPE NonStop and IBM’s TSO/ISPF environments to have full Git
experiences despite the native file systems not supporting POSIX-like
hierarchies. These are Git clients that map file system attributes and
structures to and from what Git can understand. Our NonStop product was
recently added to the HPE price book. These products allow older
codebases to share in the benefits of real DevOps capabilities without
having to rely on proprietary knowledge and processes. I am the chief
architect of those products.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience with respect to contributing
to the Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;I think the most satisfying experience was the few months it took to
contribute all the code associated with the NonStop port. It was a huge
pain to maintain the separate fork even with Git’s awesome merge
capabilities. Being allowed to be lazy is a dream of many developers and
cutting down the time and effort spent on each release to a simple push
of the Jenkins “Build Now” button frees up a lot of time.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;Learn about Merkle Trees and general data structures.&lt;/p&gt;

    &lt;p&gt;I am still learning when it comes to general functional contributions.
Watching how others contribute is really crucial if you have any hope of
your contribution being accepted.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If there’s one tip you would like to share with other Git developers,
what would it be?&lt;/p&gt;

    &lt;p&gt;For every change you make, think about the security implications.
Think about what a hacker might do to compromise Git or an organisation
using Git before you move forward, no matter how good an idea might
seem. The last thing you want is to have your contribution show up as a
Critical Vulnerability Exposure on the NIST database.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq7dcx1ent.fsf@gitster.g/&quot;&gt;2.34.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.34.1.windows.1&quot;&gt;2.34.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.1&quot;&gt;3.3.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.6&quot;&gt;3.2.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.14&quot;&gt;3.1.14&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.22&quot;&gt;3.0.22&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.0&quot;&gt;3.3.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.5&quot;&gt;3.2.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.13&quot;&gt;3.1.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.21&quot;&gt;3.0.21&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.4&quot;&gt;3.2.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.12&quot;&gt;3.1.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.20&quot;&gt;3.0.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/12/22/gitlab-14-6-released/&quot;&gt;14.6&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2021/12/06/security-release-gitlab-14-5-2-released/&quot;&gt;14.5.2, 14.4.4, and 14.3.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/12/01/gitlab-14-5-1-released/&quot;&gt;14.5.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/12/01/gitlab-14-4-3-released/&quot;&gt;14.4.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/11/26/gitlab-14-3-5-released/&quot;&gt;14.3.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/11/26/gitlab-14-2-7-released/&quot;&gt;14.2.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.5.html#350&quot;&gt;3.5.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.2.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.6&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.googleblog.com/2021/11/expanding-google-summer-of-code-in-2022.html&quot;&gt;Google Summer of Code (GSoC) 2022&lt;/a&gt;
is expanding to everyone 18 years or older, to different project sizes and to flexible timelines.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/877964/&quot;&gt;Stochastic bisection in Git&lt;/a&gt;
by Jonathan Corbet on LWN.net.  The patches in question  were
&lt;a href=&quot;https://lore.kernel.org/git/20211118164940.8818-1-jack@suse.cz/t/#u&quot;&gt;proposed for inclusion in Git&lt;/a&gt;
by Jan Kara.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/877240/&quot;&gt;Fedora revisits the Git-forge debate&lt;/a&gt;
by Jake Edge on LWN.net.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2021-12-15-a-brief-history-of-code-search-at-github/&quot;&gt;A brief history of code search at GitHub&lt;/a&gt;
by Pavel Avgustinov on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/cse/2021/11/23/working-with-a-monorepo/&quot;&gt;Working with a Monorepo&lt;/a&gt;,
co-authored by Claus Matzinger, Stephanie Visser and Martin Tirion;
on Microsoft’s CSE Developer Blog.
You can find most recent list of pros and cons of monorepos in
&lt;a href=&quot;https://git.github.io/rev_news/2021/11/29/edition-81/&quot;&gt;Git Rev News Edition #81&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/alexeagleson/how-to-create-a-node-and-react-monorepo-with-git-submodules-2g83&quot;&gt;How to Create a React Typescript Monorepo with Git Submodules&lt;/a&gt;
by Alex Eagleson on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thedailywtf.com/articles/git-pull-for-the-holidays&quot;&gt;Git Pull, for the Holidays&lt;/a&gt;,
a song from The Daily WTF; Lyrics - Remy Porter and James Rushin, Music - James Rushin.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.makeuseof.com/git-reset-single-file/&quot;&gt;How to Reset a Single Git File and Why&lt;/a&gt;
by Bobby Jack on MakeUseOf.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://domm.plix.at/perl/2021_12_git_merge_repos_with_history.html&quot;&gt;Merging multiple git repos with their commit history&lt;/a&gt;
by Thomas Klausner (domm).  Note that there might be a better, simpler solution for the problem.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/using-the-reflog-to-restore-lost-commits/&quot;&gt;Using the Reflog to Restore Lost Commits&lt;/a&gt;
by Tobias Günther on CSS-Tricks is the next part of
the &lt;a href=&quot;https://www.git-tower.com/&quot;&gt;Tower Git Client&lt;/a&gt;’s “Advanced Git” series.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/aashiya123/git-commands-cheatsheet-advanced-20-git-commands-advanced--35i3&quot;&gt;Git Commands Cheatsheet: Advanced (20+ Git Commands Advanced)&lt;/a&gt;
by aashiya123 on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/yenyih/10-useful-git-tips-to-improve-your-workflow-kf1&quot;&gt;10 useful Git tips to improve your workflow&lt;/a&gt;
by Jordan Soo Yen Yih on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://levelup.gitconnected.com/top-30-git-commands-you-should-know-to-master-git-cli-f04e041779bc&quot;&gt;Top 30 Git Commands You Should Know To Master Git CLI&lt;/a&gt;
by Tara Prasad Routray on Level Up Coding by gitconnected.com (a Medium.com blog).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2020/Oct/9/git-scraping/&quot;&gt;Git scraping: track changes over time [to a web site or a web service] by scraping to a Git repository&lt;/a&gt; and
&lt;a href=&quot;https://simonwillison.net/2021/Dec/7/git-history/&quot;&gt;git-history: a tool for analyzing scraped data collected using Git and SQLite&lt;/a&gt;
by Simon Willison on his weblog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/thenomadevel/top-5-best-git-extensions-for-vs-code-you-must-have-40b6&quot;&gt;Top 5 Best Git Extensions For VS Code (You must have)&lt;/a&gt;
by Nomadev on DEV.to.  You can find a similar list in
&lt;a href=&quot;https://git.github.io/rev_news/2021/07/31/edition-77/&quot;&gt;Git Rev News Edition #77&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.dolthub.com/blog/2021-09-17-database-version-control/&quot;&gt;So you want Database Version Control?&lt;/a&gt;,
&lt;a href=&quot;https://www.dolthub.com/blog/2021-11-26-so-you-want-git-database/&quot;&gt;So you want a Git Database?&lt;/a&gt;, and
&lt;a href=&quot;https://www.dolthub.com/blog/2021-12-20-git-sql/&quot;&gt;So you want Git SQL?&lt;/a&gt;
by Tim Sehn on DoltHub Blog.  &lt;a href=&quot;https://www.doltdb.com/&quot;&gt;Dolt&lt;/a&gt; and &lt;a href=&quot;https://www.dolthub.com/&quot;&gt;DoltHub&lt;/a&gt;
were mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/04/23/edition-62/&quot;&gt;Git Rev News Edition #62&lt;/a&gt;.
Those blog posts talk about different ways databases and version control can connect:
    &lt;ul&gt;
      &lt;li&gt;version controlling database schema, aka &lt;strong&gt;database migrations&lt;/strong&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.liquibase.com/&quot;&gt;Liquibase&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News #60&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.red-gate.com/products/redgate-deploy/&quot;&gt;Redgate Deploy&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.planetscale.com/&quot;&gt;Planetscale&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://alembic.sqlalchemy.org/&quot;&gt;Alembic&lt;/a&gt; for SQLAlchemy &lt;em&gt;(not mentioned in those articles)&lt;/em&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News #60&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://sqitch.org/&quot;&gt;Sqitch&lt;/a&gt; &lt;em&gt;(not mentioned in those articles)&lt;/em&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News #60&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/&quot;&gt;Entity Framework Migrations&lt;/a&gt; &lt;em&gt;(not mentioned in those articles)&lt;/em&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://flywaydb.org/&quot;&gt;Flyway&lt;/a&gt; by Redgate &lt;em&gt;(not mentioned in those articles)&lt;/em&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News #60&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.dbmaestro.com/&quot;&gt;DBmaestro&lt;/a&gt; &lt;em&gt;(not mentioned in those articles)&lt;/em&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.skeema.io/&quot;&gt;skeema&lt;/a&gt; for MySQL, MariaDB, and Percona Server &lt;em&gt;(not mentioned in those articles)&lt;/em&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News #60&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-ost&quot;&gt;gh-ost&lt;/a&gt;: GitHub’s online schema migration for MySQL &lt;em&gt;(not mentioned in those articles)&lt;/em&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News #60&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;version controlling queries:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.versionsql.com/&quot;&gt;VersionSQL&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.getdbt.com/&quot;&gt;DBT&lt;/a&gt; (Data Build Tool)&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://caitlinhudon.com/2018/11/28/git-sql-together/&quot;&gt;Git Your SQL Together (with a Query Library)&lt;/a&gt;
by Caitlin Hudon (2018) &lt;em&gt;(not mentioned in those articles)&lt;/em&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/12/19/edition-46/&quot;&gt;Git Rev News #46&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;data versioning&lt;/strong&gt; (version control within schema, or &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Slowly_changing_dimension&quot;&gt;Slowly Changing Dimension&lt;/a&gt;&lt;/strong&gt;):
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/attic-labs/noms&quot;&gt;Noms&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.terminusdb.com/&quot;&gt;TerminusDB&lt;/a&gt; for graph or document databases;
whitepaper about TerminusDB was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News #60&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.dolthub.com/&quot;&gt;Dolt&lt;/a&gt; for relational databases,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/04/23/edition-62/&quot;&gt;Git Rev News Edition #62&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/aergoio/litetree&quot;&gt;LiteTree: SQLite with Branches&lt;/a&gt; which is a modification of the SQLite engine to support branching &lt;em&gt;(not mentioned in those articles)&lt;/em&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/09/19/edition-43/&quot;&gt;Git Rev News #43&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Git as database (with own query language):
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://gitrows.com/&quot;&gt;GitRows&lt;/a&gt; for JSON and CSV files&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.kenneth-truyers.net/2016/10/13/git-nosql-database/&quot;&gt;Git as a NoSQL database&lt;/a&gt; by Kenneth Truyers (2016),
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/06/14/edition-28/&quot;&gt;Git Rev News #28&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://nede.dev/blog/turning-git-into-an-application-database&quot;&gt;Turning Git into an application database&lt;/a&gt; by Peter Ruttkay-Nedecký (2019)&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;SQL for querying Git repos:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/src-d/gitbase&quot;&gt;Gitbase&lt;/a&gt; by source{d} aka src-d - using MySQL,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Git Rev News #48&lt;/a&gt;;
note that the link &lt;a href=&quot;https://docs.sourced.tech/gitbase&quot;&gt;on the source{d} site&lt;/a&gt; no longer works&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/mergestat/mergestat&quot;&gt;MergeStat&lt;/a&gt; - using SQLite&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://livablesoftware.com/gitana-sql-git-repository-inspector/&quot;&gt;Gitana&lt;/a&gt;
(&lt;a href=&quot;https://github.com/SOM-Research/Gitana&quot;&gt;repo&lt;/a&gt;, &lt;a href=&quot;http://gitanadocs.getforge.io/&quot;&gt;docs&lt;/a&gt;, &lt;a href=&quot;https://www.researchgate.net/publication/279058070_Gitana_a_SQL-based_Git_Repository_Inspector&quot;&gt;paper&lt;/a&gt;)- using MySQL
&lt;em&gt;(not mentioned in those articles, possibly because it started as a research project)&lt;/em&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/09/09/edition-7/&quot;&gt;Git Rev News #7&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;#48&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;storing a database in Git:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://sqlite.org&quot;&gt;SQLite&lt;/a&gt; where databases are files&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/gitsql&quot;&gt;gitSQL&lt;/a&gt; exporting flat file SQL statements of objects from the database for storage in a Git repository&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Ealdwulf/BBChop&quot;&gt;BBChop&lt;/a&gt; is a tool in Python by Ealdwulf Wuffinga
implementing a bisection algorithm which works on intermittent bugs (experimental code).
BBChop is based on &lt;a href=&quot;https://en.wikipedia.org/wiki/Bayesian_search_theory&quot;&gt;Bayesian Search Theory&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/charmbracelet/soft-serve&quot;&gt;Soft Serve&lt;/a&gt;
is a self-hostable Git server for the command line, written in Go.
It is configurable with Git, you can create repos on demand with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt;,
and you can browse repos with an SSH-accessible &lt;abbr title=&quot;Text-based User Interface&quot;&gt;TUI&lt;/abbr&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.live/&quot;&gt;GitLive&lt;/a&gt; is a proprietary extension with a free tier
for Visual Studio Code, JetBrains IDEs, and Android Studio,
providing real-time collaborative support, giving insight about what other developers in the team are working on.
It supports GitHub, Bitbucket, GitLab (including self-hosted) and Azure DevOps repository hosting services.&lt;br /&gt;
GitLive was mentioned as &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=TeamHub.teamhub&quot;&gt;VS Code extension&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2021/07/31/edition-77/&quot;&gt;Git Rev News Edition #77&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Randall S. Becker.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 81 (November 29th, 2021)</title>
      <link>https://git.github.io/rev_news/2021/11/29/edition-81/</link>
      <pubDate>Mon, 29 Nov 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/11/29/edition-81/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-81-november-29th-2021&quot;&gt;Git Rev News: Edition 81 (November 29th, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 81st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of October 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.1054.git.1633589461.gitgitgadget@gmail.com/&quot;&gt;[PATCH 0/3] Fun with cpp word regex&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Johannes Sixt sent a small patch series about improving C++ (also
called ‘cpp’) support in the userdiff mechanism. This mechanism is
used by Git to generate diffs that are customized to specific
programming languages (like C, shell, Perl, MATLAB, etc.) or markup
languages (like HTML, Markdown, TeX, etc.).&lt;/p&gt;

    &lt;p&gt;Especially one of the patches splits the regex that was matching all
the numbers into 3 different regexes:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;one for floating point numbers that begin with a decimal point,&lt;/li&gt;
      &lt;li&gt;one for decimal and octal integers as well as other
floating point numbers, and&lt;/li&gt;
      &lt;li&gt;one for hexadecimal and binary integers.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;The result is that expressions like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1+2&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.5-e+2+f&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.l&lt;/code&gt; are
not considered numbers any more and are properly parsed for diff
purposes in C++ files.&lt;/p&gt;

    &lt;p&gt;Another patch in the series allows single-quote characters as digit
separators according to the C++17 standard, like in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.141&apos;592&apos;654&lt;/code&gt;
or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0xdead&apos;beaf&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;The third and last patch prevents the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;=&amp;gt;&lt;/code&gt; generalized comparison
operator (also called ‘spaceship’ operator) introduced in C++20 from
being split into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;=&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;gt;&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason replied to Johannes suggesting to add a
few tests in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t/t4034/cpp/&lt;/code&gt; directory, where test files for the
cpp userdiff mechanism reside.&lt;/p&gt;

    &lt;p&gt;Johannes agreed with Ævar and sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.1054.v2.git.1633720197.gitgitgadget@gmail.com/&quot;&gt;second version&lt;/a&gt;
of his patch series. This series included 2 new patches that
improved existing tests and added new tests for problematic behavior
that the other patches were fixing.&lt;/p&gt;

    &lt;p&gt;Ævar commented on this series saying that it was much improved, but
it could perhaps be even better if:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;the C++ support was split up from the C support,&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;some tests were added first, before the behavior was changed,
and&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;some tests could be added for code comments, as he wondered if
tokens that often occur in natural language, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;&lt;/code&gt;,
were still correctly handled when they appeared in code comments.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Johannes agreed with the second point, but wasn’t interested in
working on the others.&lt;/p&gt;

    &lt;p&gt;Ævar and Johannes discussed a bit further if it was worth doing
something for code comments, but Johannes concluded that it wasn’t.&lt;/p&gt;

    &lt;p&gt;Johannes then sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.1054.v3.git.1633885384.gitgitgadget@gmail.com/&quot;&gt;third version&lt;/a&gt;
of his patch series. In this new version test cases for single-quote
characters as digit separators and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;=&amp;gt;&lt;/code&gt; generalized comparison
operator were moved to a new commit before the commits supporting
these features.&lt;/p&gt;

    &lt;p&gt;Later on, Johannes &lt;a href=&quot;https://lore.kernel.org/git/a5a05e33-3ad9-e78c-69c0-a466eadeffec@kdbg.org/&quot;&gt;noticed&lt;/a&gt;
that the single-quote character as digit separator is problematic
and requires a more sophisticated implementation. For example, as
implemented the character literal &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;.&apos;&lt;/code&gt; would be split into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;.&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;&lt;/code&gt;. The support for digit separators was eventually reverted.&lt;/p&gt;

    &lt;p&gt;This patch series was then merged into the master branch, so that
Git 2.34 that was recently released has better support for C++ in
diffs.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq8rxpgwki.fsf@gitster.g/&quot;&gt;2.34.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq4k8kzuz2.fsf@gitster.g/&quot;&gt;2.34.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqsfwc4yne.fsf@gitster.g/&quot;&gt;2.34.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqwnlve57e.fsf@gitster.g/&quot;&gt;2.34.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.34.0.windows.1&quot;&gt;2.34.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.34.0-rc2.windows.1&quot;&gt;2.34.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.34.0-rc1.windows.1&quot;&gt;2.34.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.34.0-rc0.windows.1&quot;&gt;2.34.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.3/admin/release-notes#3.3.0&quot;&gt;3.3.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.3&quot;&gt;3.2.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.11&quot;&gt;3.1.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.19&quot;&gt;3.0.19&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.2&quot;&gt;3.2.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.10&quot;&gt;3.1.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.18&quot;&gt;3.0.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/11/22/gitlab-14-5-released/&quot;&gt;14.5&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2021/11/15/gitlab-14-1-8-released/&quot;&gt;14.1.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/11/08/gitlab-14-4-2-released/&quot;&gt;14.4.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/11/05/gitlab-14-0-12-released/&quot;&gt;14.0.12&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/11/03/gitlab-13-12-15-released/&quot;&gt;13.12.15&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/10/28/security-release-gitlab-14-4-1-released/&quot;&gt;14.4.1, 14.3.4, and 14.2.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.4.html#342&quot;&gt;3.4.2&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.3.html#338&quot;&gt;3.3.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#3214&quot;&gt;3.2.14&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21628&quot;&gt;2.16.28&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.1.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Derrick Stolee and Lessley Dennington &lt;a href=&quot;https://www.youtube.com/watch?v=pXdabSCz4JA&quot;&gt;talk about the future of Git at scale&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2021-11-15-highlights-from-git-2-34/&quot;&gt;Highlights from Git 2.34&lt;/a&gt;
by Taylor Blau on GitHub Blog, and&lt;br /&gt;
&lt;a href=&quot;https://devclass.com/2021/11/17/version-control-git-2_34/&quot;&gt;Git 2.34 sets new merge default, speeds things up for monorepo users&lt;/a&gt;
by Julia Schmidt on Dev Class.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2021-11-10-require-pull-requests-without-requiring-reviews/&quot;&gt;Require pull requests without requiring reviews&lt;/a&gt; on GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bitbucket.org/blog/deprecating-atlassian-account-password-for-bitbucket-api-and-git-activity&quot;&gt;Deprecating Atlassian account password for Bitbucket API and Git activity&lt;/a&gt;
(for Git over HTTPS) on Bitbucket.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/tahsinature/get-lazy-with-lazygit-4h37&quot;&gt;Get lazy with lazygit&lt;/a&gt; by Tahsin on DEV.to.
&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;Lazygit&lt;/a&gt; was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42 (August 22nd, 2018)&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cloudsavvyit.com/14822/should-you-use-https-or-ssh-for-git/&quot;&gt;Should You Use HTTPS or SSH For Git?&lt;/a&gt;
by Anthony Heddings on Cloud Savvy IT.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cloudsavvyit.com/14747/how-to-switch-a-github-repository-to-ssh-authentication/&quot;&gt;How To Switch a GitHub Repository to SSH Authentication&lt;/a&gt;
by Anthony Heddings on Cloud Savvy IT.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/ifrah/5-underrated-resources-to-learn-git-and-github-4edi&quot;&gt;5 Underrated [free] resources to learn Git and GitHub&lt;/a&gt;
by ifrah on DEV.to.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://profy.dev/project/github-minesweeper&quot;&gt;GitHub Minesweeper&lt;/a&gt; by Profy
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/10/30/edition-80/&quot;&gt;Git Rev News Edition #80 (October 30th, 2021)&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://ohmygit.org/&quot;&gt;Oh My Git!&lt;/a&gt; game by bleeptrack and blinry
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;Git Rev News Edition #72 (February 27th, 2021)&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;The “&lt;a href=&quot;https://css-tricks.com/cherry-picking-commits-in-git/&quot;&gt;Advanced Git&lt;/a&gt;” series
by Tobias Günther on CSS-Tricks, courtesy of the Tower Git client,
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/10/30/edition-80/&quot;&gt;Git Rev News #80&lt;/a&gt;),
continues:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/better-collaboration-with-pull-requests/&quot;&gt;Better Collaboration With Pull Requests&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/merge-conflicts-what-they-are-and-how-to-deal-with-them&quot;&gt;Merge Conflicts: What They Are and How to Deal with Them&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/rebase-vs-merge-integrating-changes-in-git&quot;&gt;Rebase vs. Merge: Integrating Changes in Git&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/interactive-rebase-clean-up-your-commit-history&quot;&gt;Interactive Rebase: Clean up your Commit History&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/cherry-picking-commits-in-git&quot;&gt;Cherry-Picking Commits in Git&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/sagarbarapatre/how-to-become-a-git-expert-1jl2&quot;&gt;How to become a Git expert!&lt;/a&gt;
by Sagar Barapatre on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/what-is-gitkeep/&quot;&gt;What is .gitkeep? How to Track and Push Empty Folders in Git.&lt;/a&gt;
by Kealan Parr on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-use-commitlint-to-write-good-commit-messages/&quot;&gt;How to Write Good Commit Messages with Commitlint&lt;/a&gt;
by Anish De on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://daily-dev-tips.com/posts/removing-a-env-file-from-git-history/&quot;&gt;Removing a .env file from Git history&lt;/a&gt;
(or any other accidentally added, committed, and pushed file)
by Chris Bongers on Daily Dev Tips.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoworld.com/article/3638860/the-case-against-monorepos.html&quot;&gt;The case against monorepos&lt;/a&gt;
by Lee Atchison on Info World.
    &lt;ul&gt;
      &lt;li&gt;You can find various arguments for and against monorepos in Git Rev News editions
&lt;a href=&quot;https://git.github.io/rev_news/2015/06/03/edition-4/&quot;&gt;#4&lt;/a&gt;, &lt;a href=&quot;https://git.github.io/rev_news/2015/11/11/edition-9/&quot;&gt;#9&lt;/a&gt;, &lt;a href=&quot;https://git.github.io/rev_news/2019/01/23/edition-47/&quot;&gt;#47&lt;/a&gt; (pros and cons), &lt;a href=&quot;https://git.github.io/rev_news/2021/02/27/edition-72/&quot;&gt;#72&lt;/a&gt;, &lt;a href=&quot;https://git.github.io/rev_news/2021/08/31/edition-78/&quot;&gt;#78&lt;/a&gt;,
not counting articles about improving the performance of large repositories, which monorepos usually are.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/mage_ai/how-to-do-pull-request-reviews-mm6&quot;&gt;How to do pull request reviews&lt;/a&gt;
by Mage company on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/jenc/git-rebase-for-preventing-merge-commits-2len&quot;&gt;Git Rebase for Preventing Merge Commits&lt;/a&gt;
by jen chan on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://people.kernel.org/monsieuricon/signed-git-pushes&quot;&gt;Signed git pushes&lt;/a&gt;
by Konstantin Ryabitsev (2020).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cadonau.net/blog/2020/08/24/deploybot-git-lfs/&quot;&gt;DeployBot Configuration with Git LFS&lt;/a&gt;
by Markus Cadonau (2020).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://commitlint.js.org/#/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commitlint&lt;/code&gt;&lt;/a&gt; is a tool written in JavaScript and running on Node.js
(that is, an npm tool) that helps your team with adhering to a commit convention.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/conventional-changelog/conventional-changelog&quot;&gt;Conventional Changelog&lt;/a&gt;
is an npm tool to generate changelogs and release notes from a project’s commit messages and metadata.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitexplorer.com/&quot;&gt;Git Command Explorer&lt;/a&gt; is a web application
to help you find the right commands you need
without digging through the web,
made by Summitech company.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/RefactoringCombos/ArlosCommitNotation&quot;&gt;Arlo’s Commit Notation&lt;/a&gt;
is a notation for small commit messages that shows
the risk involved in each step and the author’s intention,
conveyed in the first 3 characters of the commit summary line.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Johannes Schindelin and Johannes Sixt.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 80 (October 30th, 2021)</title>
      <link>https://git.github.io/rev_news/2021/10/30/edition-80/</link>
      <pubDate>Sat, 30 Oct 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/10/30/edition-80/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-80-october-30th-2021&quot;&gt;Git Rev News: Edition 80 (October 30th, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 80th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of September 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20210913194816.51182-1-chooglen@google.com/&quot;&gt;[PATCH] MyFirstContribution: Document &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--range-diff&lt;/code&gt; option when writing v2&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Glen Choo sent a patch to the mailing list to improve the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Documentation/MyFirstContribution.txt&lt;/code&gt; tutorial, so that it
suggests using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--range-diff&lt;/code&gt; option of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; when
sending a new v2 version of an already sent patch series.&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Documentation/MyFirstContribution.txt&lt;/code&gt; tutorial was initially
created by Emily Shaffer in 2019, and has been a popular way for
developers to start learning how to improve Git.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine agreed with Glen’s idea, but made a few comments on
some minor issues, like using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--range-diff=psuh&lt;/code&gt; over &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--range-diff
psuh..psuh-v2&lt;/code&gt; and adding a link to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git range-diff&lt;/code&gt;
documentation.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, also replied to Glen, saying that
the tutorial should promote a slightly different workflow to work on
an updated branch.&lt;/p&gt;

    &lt;p&gt;He suggested creating a topic branch or a lightweight tag, for example
called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psuh-v1&lt;/code&gt;, that points to the old tip of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psuh&lt;/code&gt; branch,
and continuing to work on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psuh&lt;/code&gt; branch to prepare the version 2
of a patch series, instead of creating and working on a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psuh-v2&lt;/code&gt;
branch.&lt;/p&gt;

    &lt;p&gt;He also commented that the commands given in the tutorial might not
work well when the branch corresponding to the first and second
patch series had the same commits after diverging from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;
branch.&lt;/p&gt;

    &lt;p&gt;Glen agreed with Junio’s suggestion, though they discussed it a bit
further.&lt;/p&gt;

    &lt;p&gt;Bagas Sanjaya replied to Glen’s initial email saying he wasn’t sure
if the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--range-diff&lt;/code&gt; option was necessary, but Eric disagreed
with him saying:&lt;/p&gt;

    &lt;p&gt;“Anyone who does any serious amount of review on this project finds
it tremendously helpful to have both a prose description of the
changes (“Changes since v1…” plus a link to the previous
submission) and a mechanical range-diff or interdiff.”&lt;/p&gt;

    &lt;p&gt;Glen then sent a
&lt;a href=&quot;https://lore.kernel.org/git/20210920223226.25877-1-chooglen@google.com/&quot;&gt;version 2 of his patch&lt;/a&gt;
that took into account Junio’s and Eric’s suggestions. Especially it
recommends marking the tip of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psuh&lt;/code&gt; branch corresponding to
version 1 and continuing to work on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psuh&lt;/code&gt; branch to prepare the
version 2.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine replied to this new patch with a number of suggestions
to improve some wordings and explanations. Glen agreed with Eric’s
suggestions.&lt;/p&gt;

    &lt;p&gt;Bagas then suggested creating a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;psuh-v2&lt;/code&gt; branch and continuing to
work on it, but this was against what Junio had suggested earlier,
so Glen didn’t agree with that. He agreed with a wording improvement
that Bagas suggested though.&lt;/p&gt;

    &lt;p&gt;Philip Oakley chimed in to discuss some wording when the version
number would change again later to 3, 4, etc. But after further
discussion with Glen and Bagas, he agreed with the original wording.&lt;/p&gt;

    &lt;p&gt;Glen then sent a
&lt;a href=&quot;https://lore.kernel.org/git/20210922202218.7986-1-chooglen@google.com/&quot;&gt;version 3 of his patch&lt;/a&gt;
taking into account Eric’s and Bagas’s suggestions. This version of
the patch was later merged into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; branch, so we can now
enjoy a better tutorial explaining an improved workflow.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-david-aguilar&quot;&gt;Developer Spotlight: David Aguilar&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My name is David Aguilar and I work as a Staff Software Engineer -
Architecture Lead for a small team of devops and infrastructure
engineers at the Walt Disney Animation Studios. Outside of work I’m a
husband and a caretaker, so my time is usually pretty occupied these
days.&lt;/p&gt;

    &lt;p&gt;Cats, art, music and mountain biking are a few of my favorite things
outside of the usual technical topics.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;We started adopting Git as our VCS of choice relatively early in Git’s
history around 2007 at Disney Animation. One of the things that I
tried to do early on was to listen to some of the loudest and most
vocal critics and get to the root of their complaints about Git at the
time.&lt;/p&gt;

    &lt;p&gt;One of the tools that fell out of this was &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git difftool&lt;/code&gt;. The
criticism at the time was along the lines of, “I can’t believe Git is
missing such a fundamentally basic workflow that even tkcvs / tkdifff
have”. Git already had &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git mergetool&lt;/code&gt; for helping resolve merge
conflicts at the time, so adding support for diff workflows seemed
like a natural extension of Git’s capabilities.&lt;/p&gt;

    &lt;p&gt;The original difftool RFC patches started as a crude shell script that
drove the diff itself and handled interacting with external diff tools
directly. Feedback from the Git mailing list improved it by making it
use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt;’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_EXTERNAL_DIFF&lt;/code&gt; functionality when it first landed in
git.git’s contrib/ area. difftool eventually graduated out of contrib/
to become a builtin tool, and its implementation was heavily
refactored so that it can share all of its tool-specific
implementation details with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git mergetool&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Mergetool and difftool are a small yet key part of day-to-day Git
usage for many developers and is a great example of a general internal
need that was best addressed by proposing a solution to the Git
development community so that it can be evolved and improved alongside
Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Beyond difftool, I’m the author and maintainer of &lt;a href=&quot;https://git-cola.github.io/&quot;&gt;Git Cola&lt;/a&gt;,
a powerful yet simple GUI for Git [&lt;a href=&quot;https://github.com/git-cola/git-cola/&quot;&gt;source code&lt;/a&gt;].&lt;/p&gt;

    &lt;p&gt;Git Cola started as a learning project. I wanted to better learn PyQt
and Git in 2007, and creating a user interface for Git’s unique and
powerful staging area features seemed like a perfect project. One of
the features I use very often is its keyboard-driven interactive
staging feature. If you’ve ever wanted to stage, unstage, and revert
edits at a line-by-line granularity, using a unified interface (no
need to jump between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add -p&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout -p&lt;/code&gt;) that is
keyboard-driven with vim-inspired hotkeys for power users that
understand Git and its strengths, then Git Cola might be just the tool
for you.&lt;/p&gt;

    &lt;p&gt;Git Cola has been gradually improved over the last 14 years and is
extremely stable and capable these days. It includes everything from a
drag+drop rebase editor (itself reusable as a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_SEQUENCE_EDITOR&lt;/code&gt; that
is provided as a standalone &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-cola-sequence-editor&lt;/code&gt; tool) and
encourages users to leverage Git’s unique strengths by making it easy
for new Git users to follow Git “best practices” such as creating
fixup commits and rebasing their work.&lt;/p&gt;

    &lt;p&gt;These days I do try to keep an eye on difftool (a big thank you to
Johannes Schindelin for rewriting difftool in C in the context of the
Git for Windows improvements) and continue to improve Git Cola.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I would really like to see more effort put into getting the
ideas/improvements from the Microsoft Scalar project integrated into
Core Git. Props should go to Microsoft for working alongside the Git
project towards up-streaming this work. Focusing on the scaling
challenges that come up when working with huge repositories is an area
I am hopeful will continue to improve. Git continues to be perceived
as being “bad at binary files”, and “not industrial-grade like
Perforce” by the GameDev community, and that’s something that can
definitely be improved.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Submodules are useful and serve a specific use case, but working with
them involves a lot of little paper cuts that makes them painful for
users that aren’t ready to deal with their complexities.
Double-commits (having to commit in the sub and super-project) is one
of the little paper cuts that really shouldn’t exist were the
capability to compose and operate on multiple repos intrinsic to Git
itself. This is by no means a simple problem.&lt;/p&gt;

    &lt;p&gt;On the bright side, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodule&lt;/code&gt; has been getting a lot of
attention recently. I don’t think I would remove them without a
compelling replacement in their place.&lt;/p&gt;

    &lt;p&gt;Sometimes the downsides of submodules are more so about how they are
used than how they are implemented. Whenever I encounter a project
that does &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodule update&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; in their &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make&lt;/code&gt; build
process, I get a bit nervous. That’s not really Git’s fault, though.&lt;/p&gt;

    &lt;p&gt;Transitioning to SHA-256 is an obvious area that would be much simpler
if it didn’t have to deal with backwards compatibility.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;Git Cola =)&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://git-annex.branchable.com/&quot;&gt;Git Annex&lt;/a&gt; is a really great tool
for archival purposes and is what I use for backing up my personal
files. It’d be nice if it didn’t have to exist, but I’m very happy
that it does. Git Annex has some concepts that are unique and
different from Git LFS and other solutions in this space.&lt;/p&gt;

    &lt;p&gt;I somewhat recently wrote a Git workflow tool for myself that I call
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;garden&lt;/code&gt;. &lt;a href=&quot;https://github.com/davvid/garden/&quot;&gt;Garden&lt;/a&gt; is basically
a glorified way to operate over ad-hoc collections of Git trees.
I wrote it because I have lots of Git Annexes and other repos in
arbitrary places that I often need to iterate over and perform
custom commands or other operations on. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;garden&lt;/code&gt; lets me do that.
I’m not sure if anyone would ever find it useful, but I wrote
it for myself so that’s okay.&lt;/p&gt;

    &lt;p&gt;I often find myself cloning random repos, figuring out how to build
them (lots of projects have bespoke build systems), and then later
figuring out how to run and interact with the repo. I used to have a
smattering of shell scripts to build and run various projects. I now
use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;garden&lt;/code&gt; for holding all of these disparate bits in a single place
so that the workflows become easier to transport (and store in Git).
URLs, multiple worktrees, the remotes associated with each worktree
(useful for recreating a worktree with dozens of remotes from
contributors) and custom commands for operating in the context of the
worktrees can all be grouped together into a single “garden file” that
can be shared and reproduced on another machine.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Do you happen to have any memorable experience w.r.t contributing to the
Git project? If yes, could you share it with us?&lt;/p&gt;

    &lt;p&gt;I personally learned a lot from the Git development community. The
review process is one that focuses on quality and perfection (Git
doesn’t settle for “good enough”) with a strong eye towards
maintainability and not breaking existing users. The Git project
teaches us to create commits that are reviewable, to make independent,
logically-separate changes, and to describe our changes well. These
principles, alongside the idea that all code should be reviewed and
collaborated on, is something that has helped transform our internal
development processes.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your advice for people who want to start Git development?
Where and how should they start?&lt;/p&gt;

    &lt;p&gt;If you’ve never built Git yourself from scratch then the quickest way
to get started is to clone the repo and run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make&lt;/code&gt;. Start looking
around the code base, read the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; messages, and start reading
the new contributor documentation in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Documentation/&lt;/code&gt; folder.&lt;/p&gt;

    &lt;p&gt;A lot of effort has been put into making it easier to contribute to
Git itself, but the community won’t know about any of the pain points
unless you reach out and illuminate what might be blind spots in our
practices.&lt;/p&gt;

    &lt;p&gt;Set up your mail filters and subscribe to the Git mailing list once
you’re ready to start diving deeper. There is a lot of activity, but
there’s also no shortage of things you can learn by reaching out and
engaging with the community.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqczo922vm.fsf@gitster.g/&quot;&gt;2.33.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.33.1.windows.1&quot;&gt;2.33.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.3.0&quot;&gt;1.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.3.html#337&quot;&gt;3.3.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#3213&quot;&gt;3.2.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.1&quot;&gt;3.2.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.9&quot;&gt;3.1.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.17&quot;&gt;3.0.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/10/22/gitlab-14-4-released/&quot;&gt;14.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/10/12/gitlab-14-3-3-released/&quot;&gt;14.3.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/10/01/gitlab-14-3-2-released/&quot;&gt;14.3.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/09/30/security-release-gitlab-14-3-1-released/&quot;&gt;14.3.1, 14.2.5, and 14.1.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/09/27/gitlab-14-0-11-released/&quot;&gt;14.0.11&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/09/27/gitlab-14-1-6-released/&quot;&gt;14.1.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.1.0&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.0.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Cola &lt;a href=&quot;http://git-cola.github.io/share/doc/git-cola/html/relnotes.html#v3-11-0&quot;&gt;3.11.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.2110221202430.62@tvgsbejvaqbjf.bet/t/&quot;&gt;Notes from the Git Contributors’ Summit 2021, virtual, Oct 19/20&lt;/a&gt;,
a thread by Johannes Schindelin.
    &lt;ul&gt;
      &lt;li&gt;One of the topics was having public “Git chalk talks”, an idea which
&lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.2110220950020.62@tvgsbejvaqbjf.bet/t/#u&quot;&gt;has now its own thread&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.softwareatscale.dev/p/software-at-scale-35-maintaining&quot;&gt;Software at Scale 35 - Maintaining Git [for Windows] with Johannes Schindelin&lt;/a&gt;, a podcast.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://initialcommit.com/blog/history-git-init-command&quot;&gt;A 16 Year History Of The Git Init Command&lt;/a&gt;
by Jacob Stopak on Initial Commit.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/sublimegeek/clean-conventional-commits-40l8&quot;&gt;Clean Conventional Commits&lt;/a&gt;
by Jonathan Irvin on DEV.to.
    &lt;ul&gt;
      &lt;li&gt;The &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commit message standard&lt;/a&gt;
was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cloudsavvyit.com/14500/how-to-remove-git-version-tracking-from-a-folder/&quot;&gt;How to Remove Git Version Tracking from a Folder&lt;/a&gt; and
&lt;a href=&quot;https://www.cloudsavvyit.com/14289/how-to-delete-git-branches-on-local-and-remote-repositories/&quot;&gt;How to Delete Git Branches On Local and Remote Repositories&lt;/a&gt;
by Anthony Heddings on Cloud Savvy IT.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.jumpingrivers.com/blog/git-moving-master-to-main/&quot;&gt;Git: Moving from Master to Main&lt;/a&gt;
(as the name of the default branch), challenges faced by Jumping Rivers company;
note however that they got the origin history of Git using ‘master’ wrong in this article.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/branching-strategies-in-git/&quot;&gt;Branching Strategies in Git&lt;/a&gt;
by Tobias Günther on CSS Tricks is a part two post in the “Advanced Git” series.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt; in &lt;a href=&quot;https://git.github.io/rev_news/2021/03/27/edition-73/&quot;&gt;#73&lt;/a&gt;
and &lt;a href=&quot;https://martinfowler.com/articles/ship-show-ask.html&quot;&gt;Ship / Show / Ask: A modern branching strategy&lt;/a&gt; in &lt;a href=&quot;https://git.github.io/rev_news/2021/09/30/edition-79/&quot;&gt;#79&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.jez.io/cli-code-review/&quot;&gt;Code Review from the Command Line&lt;/a&gt;
by Jake Zimmerman (2018).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tomayko.com/blog/2008/the-thing-about-git&quot;&gt;The Thing About Git&lt;/a&gt;
by Ryan Tomayko (2008).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/torbiak/git-autofixup&quot;&gt;git-autofixup&lt;/a&gt; automatically
creates fixup commits for topic branches.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/takaaki-kasai/git-foresta&quot;&gt;git-foresta&lt;/a&gt; is a text-based git log graph viewer,
written in Perl, using Unicode for drawing.
It is a modified version of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-forest&lt;/code&gt; (written in Perl by Jan Engelhardt), see below.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://inai.de/projects/hxtools/&quot;&gt;hxtools&lt;/a&gt; by Jan Engelhardt
is a collection of small tools and scripts, which include 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-author-stat&lt;/code&gt; (commit author statistics of a git repository),
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-blame-stat&lt;/code&gt; (per-line author statistics),
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-revert-stats&lt;/code&gt; (reverting statistics), and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-forest&lt;/code&gt; (display the commit graph).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zaquestion/lab&quot;&gt;Lab&lt;/a&gt; is a tool that wraps Git,
making it simple to clone, fork, and interact with repositories
&lt;a href=&quot;https://gitlab.com/gitlab-org/ecosystem-stage/lab&quot;&gt;on GitLab&lt;/a&gt;,
including seamless workflows for creating merge requests, issues and snippets.
It was inspired by and is similar to the &lt;a href=&quot;https://github.com/github/hub&quot;&gt;hub&lt;/a&gt;
tool that does the same for GitHub.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://glab.readthedocs.io/&quot;&gt;GLab&lt;/a&gt; for GitLab, and
&lt;a href=&quot;https://github.com/cli/cli&quot;&gt;gh&lt;/a&gt; for GitHub are more interactive
command line tools, that do not aim to be familiar to a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; and to leverage it.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/learn/git/advanced-git-kit&quot;&gt;The Advanced Git Kit&lt;/a&gt;
is a 10 part video course for free from makers of the &lt;a href=&quot;https://www.git-tower.com/&quot;&gt;Tower&lt;/a&gt; Git client.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/opencodeiiita/GoGit&quot;&gt;GoGit&lt;/a&gt; is a project under OpenCode’21
that aims to improve the Git and GitHub skills of the contributors by completing some tasks.
The tasks are being specified in the Issues section of the project’s GitHub repo.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://profy.dev/project/github-minesweeper&quot;&gt;GitHub Minesweeper&lt;/a&gt; by Profy
is a GitHub bot to learn a professional Git and GitHub workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Johannes Altmanninger and David Aguilar.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 79 (September 30th, 2021)</title>
      <link>https://git.github.io/rev_news/2021/09/30/edition-79/</link>
      <pubDate>Thu, 30 Sep 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/09/30/edition-79/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-79-september-30th-2021&quot;&gt;Git Rev News: Edition 79 (September 30th, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 79th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of August 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/organizations/5908380398387200/#projects&quot;&gt;GSoC (Google Summer of Code) 2021 End&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Congratulations to the two students who had been accepted to work on
Git as part of the &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;GSoC 2021&lt;/a&gt;
as they successfully passed all the evaluations!&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Atharva Raykar worked on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#4754589292691456&quot;&gt;Finish converting submodule to builtin&lt;/a&gt;
project. He was co-mentored by Shourya Shukla and Christian Couder. He posted 2 final blog posts about it,
some &lt;a href=&quot;https://atharvaraykar.me/gitnotes/final-reflection&quot;&gt;Reflections on Working With the Git Community&lt;/a&gt;
and a &lt;a href=&quot;https://atharvaraykar.me/gitnotes/final-report&quot;&gt;Technical Report&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;ZheNing Hu worked on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#6499923274498048&quot;&gt;Use ref-filter formats in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cat-file&lt;/code&gt;&lt;/a&gt;
project. He was co-mentored by Hariom Verma and Christian Couder and posted
&lt;a href=&quot;https://adlternative.github.io/GSOC-Git-Final-Blog/&quot;&gt;a final blog post about it&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/60DF1C22020000A100042225@gwsmtp.uni-regensburg.de/&quot;&gt;bug in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fsck&lt;/code&gt;?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Last July, Ulrich Windl asked the mailing list whether &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fsck&lt;/code&gt;
should be able to cleanup orphaned branches. He pointed to
&lt;a href=&quot;https://stackoverflow.com/questions/68226081/how-to-recover-head-problems-in-filtered-repository&quot;&gt;a question he asked on StackOverflow&lt;/a&gt;
as he wanted to get rid of obsolete branches after filtering a repo.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fsck&lt;/code&gt; was complaining about a branch called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bitmap-generic&lt;/code&gt;
saying &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;notice: HEAD points to an unborn branch (bitmap-generic)&lt;/code&gt;,
because that branch was pointing to a commit that didn’t exist
anymore after filtering the repo, and he couldn’t delete that branch
as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch -d&lt;/code&gt; errored out with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fatal: Couldn&apos;t look up commit
object for HEAD&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Junio Hamano replied to Ulrich that “HEAD pointing at an unborn
branch is not even a corruption”, as that’s what happen to the
default branch when a repo is initialized.&lt;/p&gt;

    &lt;p&gt;Ulrich replied that he might have been confused by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fsck&lt;/code&gt; and
suggested updating the documentation to explain what “unborn”
means. Ævar Arnfjörð Bjarmason then agreed with Ulrich that “fsck’s
error messages/reporting is pretty bad”. He said that he had been
working on it though.&lt;/p&gt;

    &lt;p&gt;Meanwhile René Scharfe replied to Junio saying that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch -D&lt;/code&gt;
(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-D&lt;/code&gt; is a shortcut for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--delete --force&lt;/code&gt;) should delete a branch
pointing to an unexisting commit, instead of requiring users to
first reset the branch to some known commit using
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch --force&lt;/code&gt; and then to delete it with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch --delete&lt;/code&gt;.
In this reply René even provided a patch called “branch: allow deleting
dangling branches with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--force&lt;/code&gt;” that implemented what he suggested.&lt;/p&gt;

    &lt;p&gt;Ulrich and René then discussed how to actually force a branch in a way
that it can then be deleted. The issue was that Ulrich tried to
force the dangling branch, using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch --force bitmap-generic&lt;/code&gt;
when the current branch wasn’t a valid one, so the dangling branch
wasn’t restored to a valid commit.&lt;/p&gt;

    &lt;p&gt;To René’s patch, Junio replied that he felt the filtering process
Ulrich used shouldn’t have left dangling branches hanging around in
the first place. He agreed though that it should be easy to recover
from “such a deliberate repository corruption”.&lt;/p&gt;

    &lt;p&gt;René’s patch then fell through the cracks for several weeks, until
the end of August when
&lt;a href=&quot;https://public-inbox.org/git/7894f736-4681-7656-e2d4-5945d2c71d31@web.de/&quot;&gt;René resent it&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Junio replied that the test in René’s patch went “against the
spirit” of a recently merged patch series by Han-Wen Nienhuys that
was preparing tests for the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reftable&lt;/code&gt; ref backend.&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://www.git-scm.com/docs/reftable&quot;&gt;reftable backend&lt;/a&gt; was
initially &lt;a href=&quot;https://lore.kernel.org/git/CAJo=hJtyof=HRy=2sLP0ng0uZ4=S-DpZ5dR1aF+VHVETKG20OQ@mail.gmail.com/&quot;&gt;proposed and developed&lt;/a&gt;
in 2017 by Shawn Pearce. An implementation of it has then been integrated in
&lt;a href=&quot;https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/refs/heads/master/Documentation/technical/reftable.md&quot;&gt;JGit&lt;/a&gt;,
and Han-Wen has been working for some time on versions of this backend
for Git and libgit2.&lt;/p&gt;

    &lt;p&gt;Junio suggested to change parts of the test that were creating or
testing refs to use higher functions to manipulate refs, instead of
directly manipulating loose ref files like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/refs/heads/dangling&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Junio, Ævar, Han-Wen, Ulrich and René then discussed different ways
to change the test, like using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;REFFILES&lt;/code&gt; test
prerequisite. They wondered if such a dangling ref could also happen
with the reftable backend, and it seemed that this could indeed
happen.&lt;/p&gt;

    &lt;p&gt;Han-Wen suggested the ref-store test-helper’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;update-ref&lt;/code&gt; command
to manipulate refs instead. Ulrich proposed implementing a new
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--disarm-safety-belt&lt;/code&gt; option to disable checks for testing
purposes. Ævar suggested a workaround using an alternate object
directory.&lt;/p&gt;

    &lt;p&gt;Meanwhile Ævar commented a bit on René’s resent patch. And René
replied to the comments, especially noting that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git tag -d&lt;/code&gt; would
delete a dangling tag even without &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--force&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;René then sent &lt;a href=&quot;https://public-inbox.org/git/325d64e9-8a31-6ba0-73f2-5e9d67b8682f@web.de/&quot;&gt;a version 2&lt;/a&gt;
of his resent patch with an updated test that was now
independent from any ref backend.&lt;/p&gt;

    &lt;p&gt;Junio, Ævar and René discussed the patch a bit more, after which René sent
&lt;a href=&quot;https://public-inbox.org/git/c192f438-2eaf-c098-9fe4-c03a9d36cbd0@web.de/&quot;&gt;a version 3&lt;/a&gt;
with a few more improvements to the test.&lt;/p&gt;

    &lt;p&gt;As this version of the patch has since been merged into the master
branch, Git will soon allow to delete dangling branches more easily.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-josh-steadmon&quot;&gt;Developer Spotlight: Josh Steadmon&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a Software Engineer at Google, and I work on a team dedicated to
Git. Outside of work, I’m a husband and a new dad, which doesn’t leave
me much time for anything else :).&lt;/p&gt;

    &lt;p&gt;Git is actually my first experience as a professional developer. Up
until I joined the Git team in 2018, my career had been in system
administration and reliability engineering.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;Probably the addition of fuzz tests. Not so much due to impact so far
(although it has found a few small bugs), but because of the opportunity
for future work in this area. If I had more time, I’d love to look into
having a proper fuzz tester for client/server communication, for
example.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Until recently, the majority of my work has been internal performance
monitoring of Git usage by Google developers. Lately I’ve been winding
down my work on monitoring and starting to look into improving
performance and the user experience with submodules. Only the very
beginnings of that have started to show up on-list so far.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I think I’d echo my former coworker &lt;a href=&quot;https://git.github.io/rev_news/2017/06/14/edition-28/#developer-spotlight-brandon-williams&quot;&gt;Brandon Williams (edition 28)&lt;/a&gt;,
and work on cleaning up the global state. For a new-ish developer who
doesn’t have full history on all the various subsystems, it can be
difficult to follow the logic when there’s lots of non-local state being
modified.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Not so much to remove as change: I wish it was easier to move away from
SHA-1 hashes. I’m very happy that brian m. carlson has been working on
supporting SHA-256.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I’m a huge fan of &lt;a href=&quot;https://git-annex.branchable.com/&quot;&gt;git-annex&lt;/a&gt; and use
it to keep my ever-growing pile of PDFs and ebooks synced and organized
across various devices. I also use it to archive primary sources in a
homebrew personal knowledge base.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.2.0&quot;&gt;1.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/09/22/gitlab-13-12-12-released/&quot;&gt;13.12.12&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/09/22/gitlab-14-3-released/&quot;&gt;14.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/09/17/gitlab-14-2-4-released/&quot;&gt;14.2.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/09/02/gitlab-13-12-11-released/&quot;&gt;13.12.11&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/09/02/gitlab-14-0-10-released/&quot;&gt;14.0.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/09/01/gitlab-14-2-3-released/&quot;&gt;14.2.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/08/31/security-release-gitlab-14-2-2-released/&quot;&gt;14.2.2, 14.1.4, and 14.0.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.16&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.8&quot;&gt;3.1.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.16&quot;&gt;3.0.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.22&quot;&gt;2.22.22&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.2/admin/release-notes#3.2.0&quot;&gt;3.2.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.7&quot;&gt;3.1.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.15&quot;&gt;3.0.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.21&quot;&gt;2.22.21&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;8.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/swyx/3-reasons-to-upgrade-git-2bj3&quot;&gt;3 Reasons to Upgrade Git For The First Time Ever&lt;/a&gt;
by swyx on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/867956/&quot;&gt;Emacs discusses web-based development workflows&lt;/a&gt;
by Jake Edge on LWN.net.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.palantir.com/optimizing-gits-merge-machinery-6-7bf887a131d8&quot;&gt;Optimizing Git’s Merge Machinery, Part VI&lt;/a&gt; by Elijah Newren on Palantir Blog, the final in the series.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://martinfowler.com/articles/ship-show-ask.html&quot;&gt;Ship / Show / Ask: A modern branching strategy&lt;/a&gt;
by Rouan Wilsenach on martinFowler.com, showing different ways of doing
Continuous Integration with a Pull Request workflow, and explaining when
to use which method.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.theregister.com/2021/09/06/github_merges_useless_garbage_says/&quot;&gt;GitHub merges ‘useless garbage’ says Linus Torvalds (as new NTFS support added to Linux kernel 5.15)&lt;/a&gt;
by Tim Anderson in The Register.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.geeksforgeeks.org/how-to-protect-your-private-email-addresses-in-git-github/&quot;&gt;How to Protect Your Private Email Addresses in Git &amp;amp; GitHub?&lt;/a&gt;
on GeeksforGeeks (GitHub specific with respect to hiding your email while
still counting your contributions).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/dotnet/2021/09/13/advanced-git-workflow-tips/&quot;&gt;Advanced Git Workflow Tips&lt;/a&gt;
by Khalid Abuhakmeh on JetBrains’ The .NET Tools Blog, additionally explaining
how to perform the actions from &lt;a href=&quot;https://www.jetbrains.com/rider/&quot;&gt;Rider&lt;/a&gt;’s .NET IDE UI.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2021-09-07-increasing-developer-happiness-github-code-scanning/&quot;&gt;Increasing developer happiness with GitHub code scanning&lt;/a&gt;
by Sam Partington on the GitHub Blog; the examples use the Go language.
&lt;a href=&quot;https://github.blog/2021-09-07-increasing-developer-happiness-github-code-scanning/&quot;&gt;GitHub code scanning&lt;/a&gt;
uses the &lt;a href=&quot;https://securitylab.github.com/tools/codeql/&quot;&gt;CodeQL&lt;/a&gt; semantic code analysis engine.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/aarondski/github-workflow-merge-and-rebase-1cig&quot;&gt;GitHub Workflow, Merge and Rebase&lt;/a&gt;,
actually more about Git than about GitHub, by AaronDski on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cloudsavvyit.com/14036/how-to-use-git-hooks-for-commit-automation/&quot;&gt;How to Use Git Hooks For Commit Automation&lt;/a&gt;
by Anthony Heddings on CloudSavvy IT.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://prabinpoudel.com.np/articles/run-rubocop-on-git-commit-with-overcommit-gem/&quot;&gt;Run RuboCop on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt; with Overcommit Gem&lt;/a&gt;
by Prabin Poudel on his blog.  &lt;a href=&quot;https://github.com/sds/overcommit&quot;&gt;Overcommit gem&lt;/a&gt;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News #63&lt;/a&gt;,
along various other hook management tools.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_w6TwnLCFwA&quot;&gt;Git Flow Is A Bad Idea&lt;/a&gt; video by Dave Farley of Continuous Delivery.
An interesting perspective on the Git branching model. Worth reflecting on the underlying assumptions
and management approaches that make Git branches such a bad idea, in that particular context.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=58zsLtwzL60&quot;&gt;Full Git Tutorial&lt;/a&gt;. Basics for the new user.
Leap to Part 7 for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Git Log Fully Explained&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://glean.software/&quot;&gt;Glean&lt;/a&gt;: System for collecting, deriving and querying facts about source code.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/anotherdevuser/5-jetbrains-plugins-to-upgrade-the-builtin-git-support-to-the-next-level-3ojf&quot;&gt;5 JetBrains plugins to upgrade the built-in Git support to the next level!&lt;/a&gt;
by Thomas Scott on DEV.to.  A similar list for Visual Studio Code was
presented in &lt;a href=&quot;https://git.github.io/rev_news/2021/07/31/edition-77/&quot;&gt;Git Rev News Edition #77&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/github/vscode-in-the-browser-for-free-github-web-editor-k4h&quot;&gt;GitHub Web Editor: FREE VSCode in the browser&lt;/a&gt;
by Davide ‘CoderDave’ Benvegnù on DEV.to, about the lightweight code editor,
based on Visual Studio Code (VSCode), that is a part of &lt;a href=&quot;https://dev.to/github/github-codespaces-ga-any-good-reviewed-and-tested-3e62&quot;&gt;GitHub Codespaces&lt;/a&gt;.
The GitHub Codespaces project was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Josh Steadmon, Elijah Newren and
Philip Oakley.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 78 (August 31st, 2021)</title>
      <link>https://git.github.io/rev_news/2021/08/31/edition-78/</link>
      <pubDate>Tue, 31 Aug 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/08/31/edition-78/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-78-august-31st-2021&quot;&gt;Git Rev News: Edition 78 (August 31st, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 78th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of July 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/1C6C1E49-5EC1-420D-A72A-8C50BD1931A2@getmailspring.com/&quot;&gt;Bug report: GIT_CONFIG and user.email/name&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;German Lashevich sent a bug report about an issue when using the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_CONFIG&lt;/code&gt; environment variable.&lt;/p&gt;

    &lt;p&gt;He gave an example where he sets the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;user.name&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;user.email&lt;/code&gt;
config variables to some values in a temporary
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/tmp/git-test/.gitconfig&lt;/code&gt; config file, and then sets &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_CONFIG&lt;/code&gt;
to point to this file.&lt;/p&gt;

    &lt;p&gt;When he then tried to commit some changes, Git errored out with an
“Author identity unknown” error and instructions about how to set
the current account’s default identity. He expected that the values
of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;user.name&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;user.email&lt;/code&gt; variables set in the temporary
config file would have been taken into account.&lt;/p&gt;

    &lt;p&gt;Peff, alias Jeff King, replied that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_CONFIG&lt;/code&gt; is a historical
wart that isn’t used by all of Git, but only the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config&lt;/code&gt;
command, and even there &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config --file&lt;/code&gt; should be used instead.&lt;/p&gt;

    &lt;p&gt;He suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_CONFIG_GLOBAL&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_CONFIG_SYSTEM&lt;/code&gt; which
are available since v2.32.0. They instruct Git to read a specific
file instead of the usual global (usually &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/gitconfig&lt;/code&gt;) or
system-level (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$HOME/.gitconfig&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$XDG_CONFIG_HOME/git/config&lt;/code&gt;)
config files respectively.&lt;/p&gt;

    &lt;p&gt;German thanked Peff saying &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_CONFIG_GLOBAL&lt;/code&gt; was what he needed.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Peff that reading the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_CONFIG&lt;/code&gt; documentation gave a misleading impression as it
didn’t say that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_CONFIG&lt;/code&gt; was only for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config&lt;/code&gt; command.&lt;/p&gt;

    &lt;p&gt;Peff agreed with Junio saying that the documentation hadn’t been
updated since 2007, when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_CONFIG&lt;/code&gt; really did impact other
commands, and that he was sending
&lt;a href=&quot;https://lore.kernel.org/git/YO9ZGTX9f1fOpTkh@coredump.intra.peff.net/&quot;&gt;a small patch series&lt;/a&gt;
to improve the situation.&lt;/p&gt;

    &lt;p&gt;Taylor Blau and Martin Ågren reviewed the patches and discussed them
a bit with Peff and Junio.&lt;/p&gt;

    &lt;p&gt;The patch series was later merged into the master branch, and the
documentation improvements are now available in the recently
released Git 2.33.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq1r6touqi.fsf@gitster.g/&quot;&gt;2.33.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqo8a37eim.fsf@gitster.g/&quot;&gt;2.33.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq5ywigls4.fsf@gitster.g/&quot;&gt;2.33.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqbl6fv2b8.fsf@gitster.g/&quot;&gt;2.33.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.33.0.windows.2&quot;&gt;2.33.0(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.33.0.windows.1&quot;&gt;2.33.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.33.0-rc2.windows.1&quot;&gt;2.33.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.33.0-rc1.windows.1&quot;&gt;2.33.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.33.0-rc0.windows.1&quot;&gt;2.33.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.6&quot;&gt;3.1.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.14&quot;&gt;3.0.14&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.20&quot;&gt;2.22.20&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.5&quot;&gt;3.1.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.13&quot;&gt;3.0.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.19&quot;&gt;2.22.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/08/26/gitlab-14-0-8-released/&quot;&gt;14.0.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/08/23/gitlab-14-2-1-released/&quot;&gt;14.2.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/08/22/gitlab-14-2-released/&quot;&gt;14.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/08/17/gitlab-14-1-3-released/&quot;&gt;14.1.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/08/10/gitlab-13-12-10-released/&quot;&gt;13.12.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/08/03/security-release-gitlab-14-1-2-released/&quot;&gt;14.1.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/07/28/gitlab-14-1-1-released/&quot;&gt;14.1.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.3.html#336&quot;&gt;3.3.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#3212&quot;&gt;3.2.12&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#3116&quot;&gt;3.1.16&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.4.html#341&quot;&gt;3.4.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.7.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.7.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2021-08-16-highlights-from-git-2-33/&quot;&gt;Highlights from Git 2.33&lt;/a&gt;
by Taylor Blau on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://venturebeat.com/2021/07/28/treeverse-raises-23m-to-bring-git-like-version-control-to-data-lakes/&quot;&gt;Treeverse raises $23M to bring Git-like version control to data lakes&lt;/a&gt;:
&lt;a href=&quot;https://lakefs.io/&quot;&gt;lakeFS&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2021-08-12-git-password-authentication-is-shutting-down/&quot;&gt;GitHub has shut down its Git password authentication on August 13, 2021&lt;/a&gt;;
you should preferably use &lt;a href=&quot;https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/&quot;&gt;token-based authentication&lt;/a&gt; instead; support for SSH keys continues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.palantir.com/optimizing-gits-merge-machinery-part-v-46ff3710633e&quot;&gt;Optimizing Git’s Merge Machinery, Part V&lt;/a&gt; by Elijah Newren on Palantir Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://drewdevault.com/2021/05/19/How-to-write-release-notes.html&quot;&gt;How to write release notes&lt;/a&gt;
by Drew DeVault.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/from-a-single-repo-to-multi-repos-to-monorepo-to-multi-monorepo/&quot;&gt;From a Single Repo, to Multi-Repos, to Monorepo, to Multi-Monorepo&lt;/a&gt;
by Leonardo Losoviz on CSS-Tricks.
    &lt;ul&gt;
      &lt;li&gt;The idea of monorepos was first mentioned by this name in &lt;a href=&quot;https://git.github.io/rev_news/2015/06/03/edition-4/&quot;&gt;Git Rev News Edition #4&lt;/a&gt;,
with &lt;a href=&quot;https://git.github.io/rev_news/2019/01/23/edition-47/&quot;&gt;Edition #47&lt;/a&gt;
including many links to discussions about their advantages and disadvantages.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://next.github.com/projects/repo-visualization&quot;&gt;Visualizing a codebase&lt;/a&gt;:
how can we automatically “fingerprint” a codebase to see its structure at a glance,
by Amelia Wattenberger on GitHub Next.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ahmedgouda.hashnode.dev/the-history-behind-git&quot;&gt;The History Behind Git&lt;/a&gt;
by Ahmed Gouda (also &lt;a href=&quot;https://dev.to/ahmedgouda/the-history-behind-git-53ag&quot;&gt;on DEV.to&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wanago.io/courses/getting-geeky-with-git/&quot;&gt;Getting geeky with Git&lt;/a&gt;,
an 11 part series by Marcin Wanago.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.banterly.net/2021/07/31/new-in-git-switch-and-restore/&quot;&gt;New in Git: switch and restore&lt;/a&gt;
by Dragos Barosan (new to the author; &lt;a href=&quot;https://git-scm.com/docs/git-switch&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch&lt;/code&gt;&lt;/a&gt;
and &lt;a href=&quot;https://git-scm.com/docs/git-restore&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt;&lt;/a&gt; appeared in Git 2.23 in 2019).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/pragativerma18/a-guide-to-git-stash-2h5d&quot;&gt;A Guide to Git Stash&lt;/a&gt;
by Pragati Verma on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cloudsavvyit.com/13067/how-to-fix-edit-or-undo-git-commits-changing-git-history/&quot;&gt;How to Fix, Edit, or Undo Git Commits (Changing Git History)&lt;/a&gt;
by Anthony Heddings on CloudSavvy IT.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.sitepoint.com/5-ways-to-undo-mistakes-with-git&quot;&gt;5 Ways to Undo Mistakes with Git&lt;/a&gt;
by Tobias Günther on SitePoint.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/shadid12/5-git-tricks-every-developer-should-know-1201&quot;&gt;5 Git Tricks Every Developer Should Know&lt;/a&gt;
by Shadid Haque on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thenewstack.io/git-for-managing-small-projects/&quot;&gt;Git for Managing Small Projects&lt;/a&gt;
by Rob “drtorq” Reilly on The New Stack, the first part in a planned series of tutorials on Git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://longair.net/blog/2009/04/16/git-fetch-and-merge/&quot;&gt;Git: Fetch and Merge, don’t Pull&lt;/a&gt;,
an old blog post by Mark Longair about his tips related to fetching and merging versus pulling,
that was &lt;a href=&quot;https://lore.kernel.org/git/alpine.DEB.1.00.0904191709220.10279@pacific.mpi-cbg.de/&quot;&gt;discussed a long time ago on the mailing list&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2021/07/05/best-practices-for-writing-code-comments/&quot;&gt;Best practices for writing code comments&lt;/a&gt;
by Ellen Spertus about writing better code comments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lakefs.io/&quot;&gt;lakeFS&lt;/a&gt; is an open source tool that transforms your
object storage into a Git-like repository. It enables you to manage your
&lt;a href=&quot;https://aws.amazon.com/big-data/datalakes-and-analytics/what-is-a-data-lake/&quot;&gt;data lake&lt;/a&gt;
(storing &lt;em&gt;unprocessed&lt;/em&gt; data) the way you manage your code. Supports AWS S3,
Azure Blob Storage and Google Cloud Storage; works seamlessly with all
modern data frameworks such as Spark, Hive, AWS Athena, Presto, etc.
    &lt;ul&gt;
      &lt;li&gt;Existing products comparable to LakeFS include tools such as
&lt;a href=&quot;https://dvc.org/&quot;&gt;DVC&lt;/a&gt; (first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;),
&lt;a href=&quot;https://www.pachyderm.com/&quot;&gt;Pachyderm&lt;/a&gt; (first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/&quot;&gt;Git Rev News Edition #49&lt;/a&gt;), and
&lt;a href=&quot;https://meltano.com/&quot;&gt;Meltano&lt;/a&gt; (first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://citation-file-format.github.io/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CITATION.cff&lt;/code&gt;&lt;/a&gt; files,
which use Citation File Format (CFF), are plain text files with
human- and machine-readable citation information for software (and datasets).
Code developers can include them in their repositories to let others know
how to correctly cite their software.  Supported by GitHub, Zenodo and Zotero.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/extrawurst/gitui&quot;&gt;GitUI&lt;/a&gt; is a blazing fast terminal based GUI for Git
written in Rust, meant to work reliably even on large repositories.
Similar to &lt;a href=&quot;https://jonas.github.io/tig/&quot;&gt;tig&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Elijah Newren and Philip Oakley.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 77 (July 31st, 2021)</title>
      <link>https://git.github.io/rev_news/2021/07/31/edition-77/</link>
      <pubDate>Sat, 31 Jul 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/07/31/edition-77/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-77-july-31st-2021&quot;&gt;Git Rev News: Edition 77 (July 31st, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 77th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of June 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/patch-1.1-61d7e6e079-20210607T111008Z-avarab@gmail.com/&quot;&gt;[PATCH] builtins + test helpers: use return instead of exit() in cmd_*&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason sent a patch to the mailing list that
changed some &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd_*()&lt;/code&gt; functions so that they use a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;return&lt;/code&gt; statement
instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exit()&lt;/code&gt;. He further said that it is legitimate for the
SunCC compiler on Solaris to complain about the exit() calls, as
they would skip any cleanup made after them.&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd_*()&lt;/code&gt; functions are important in the architecture of Git, as
there is one such function for each Git “builtin” command, and the
function is called by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;run_builtin()&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git.c&lt;/code&gt; to perform the
command. For example when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; is launched, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd_log()&lt;/code&gt;
function is called by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;run_builtin()&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Felipe Contreras reviewed the patch and found it obviously correct.&lt;/p&gt;

    &lt;p&gt;Peff, alias Jeff King, also said that it looked like simple and
obvious conversions, but he wondered what was SunCC complaining
about, especially if it didn’t know about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NORETURN&lt;/code&gt;, and would
complain about many other &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exit()&lt;/code&gt; calls.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NORETURN&lt;/code&gt; is a special statement to tell the compiler that a
function doesn’t return, but instead uses a function like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exit()&lt;/code&gt;
to stop the current process.&lt;/p&gt;

    &lt;p&gt;Phillip Wood also wondered if SunCC would complain about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;die()&lt;/code&gt;
calls, which use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exit()&lt;/code&gt; underneath.&lt;/p&gt;

    &lt;p&gt;Ævar then sent
&lt;a href=&quot;https://lore.kernel.org/git/patch-1.1-f225b78e01-20210608T104454Z-avarab@gmail.com/&quot;&gt;a version 2&lt;/a&gt;
of his patch, with no code change but explaining that SunCC actually
complains when there’s no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NORETURN&lt;/code&gt; while we declare a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd_*()&lt;/code&gt;
function to return an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int&lt;/code&gt;. He replied to Peff with the same
explanation and added that around half of SunCC warnings are
legitimate, and that he had already been sending miscellaneous fixes
for 15-20 of them.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to the version 2 patch.
He especially had an issue with the part in the commit message that
said that directly &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exit()&lt;/code&gt;-ing would skip the cleanups &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git.c&lt;/code&gt; would
otherwise do, like closing file descriptors and issuing errors if it
failed. He considered that it was “not a crime” for the functions to
exit themselves as file descriptors are closed when we exit and “if
we do have clean-ups that are truly important, we would have
arranged them to happen in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;atexit()&lt;/code&gt; handler”.&lt;/p&gt;

    &lt;p&gt;Junio anyway thought that the patch was still “a good idea because
it encourages good code hygiene”.&lt;/p&gt;

    &lt;p&gt;Ævar replied to Junio that file descriptors are indeed closed when we
exit, but the errors we could get when closing them would not be
reported. He pointed to previous commits that had been merged back
in 2007 to make sure IO errors were properly reported after the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd_*()&lt;/code&gt; functions return, and said that “the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;atexit()&lt;/code&gt; handlers
cannot modify the exit code (both per the C standard, and POSIX)”.
He also discussed a bit how glibc allows &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;atexit()&lt;/code&gt; handlers to
munge the exit code though it’s not portable behavior.&lt;/p&gt;

    &lt;p&gt;Junio replied that Ævar was right and that “we leave a final clean-up
for normal returns (i.e. when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd_foo()&lt;/code&gt; intends to return or exit
with 0) to be done by the caller”.&lt;/p&gt;

    &lt;p&gt;The patch was later merged into the master branch and the next
version of Git will better signal IO errors, thanks to SunCC and
people running it to compile Git on Solaris machines.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.32.0.windows.2&quot;&gt;2.32.0(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.1.1&quot;&gt;1.1.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.3.html#335&quot;&gt;3.3.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#3211&quot;&gt;3.2.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.3&quot;&gt;3.1.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.11&quot;&gt;3.0.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.17&quot;&gt;2.22.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/07/22/gitlab-14-1-released/&quot;&gt;14.1.0&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/07/20/gitlab-14-0-6-released/&quot;&gt;14.0.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/07/08/gitlab-14-0-5-released/&quot;&gt;14.0.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/07/07/critical-security-release-gitlab-14-0-4-released/&quot;&gt;14.0.4, 13.12.8, and 13.11.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/07/06/gitlab-14-0-3-released/&quot;&gt;14.0.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/07/05/gitlab-13-12-7-released/&quot;&gt;13.12.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/07/01/security-release-gitlab-14-0-2-released/&quot;&gt;14.0.2, 13.12.6, and 13.11.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.7.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/tower-mac-7&quot;&gt;Tower 7 - The New Commit Experience&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://no-color.org/&quot;&gt;NO_COLOR&lt;/a&gt; is a proposed universal standard of
disabling colored text output in command-line software programs. The website
also documents which software has adopted this standard and when support was
added, and for projects that did not adopt this standard it tries to document
how to otherwise disable color.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.anavela.dev/how-to-get-better-with-git&quot;&gt;How to Get Better with Git&lt;/a&gt;
by Ana Vela provides a list of free and paid resources to help you boost your
Git know-how.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://citizen428.net/blog/git-quick-tips-1-commit-fixup/&quot;&gt;Git quick tips #1: git commit –fixup&lt;/a&gt; and
&lt;a href=&quot;https://citizen428.net/blog/git-quick-tips-2-working-with-many-branches/&quot;&gt;Git quick tips #2: Working with many branches&lt;/a&gt;
by Michael Kohl.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://towardsdatascience.com/git-for-data-engineers-a8b979d8b2ab&quot;&gt;Git For Data Engineers&lt;/a&gt;
by Kovid Rathee: a shortish guide to source control for data engineers,
data analysts, and data scientists.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://suchdevblog.com/lessons/HowToLearnGit.html&quot;&gt;How to Learn Git Slowly&lt;/a&gt;
by Samuel Faure.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.greenroots.info/how-not-to-use-git-in-practice-ten-git-usages-you-should-know-to-avoid&quot;&gt;How NOT to use Git in Practice. Ten Git usages, you should know to avoid.&lt;/a&gt;
by Tapas Adhikary on GreenRoots Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/abhaykrishna/elevate-your-git-fu-3ip4&quot;&gt;Elevate your Git-fu!&lt;/a&gt;
by Abhay Krishna Arunachalam on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/giteden/how-to-collaborate-on-components-across-projects-with-bit-29c3&quot;&gt;How to Collaborate on Components across Projects with Bit&lt;/a&gt;
by Eden Ella on DEV.to. The &lt;a href=&quot;https://github.com/teambit/bit&quot;&gt;Bit&lt;/a&gt; project was
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/11/21/edition-45/&quot;&gt;Git Rev News Edition #45&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thinkinglabs.io/articles/2021/07/14/on-the-evilness-of-feature-branching-a-tale-of-two-teams.html&quot;&gt;On the Evilness of Feature Branching - A Tale of Two Teams&lt;/a&gt;,
one novice practising &lt;a href=&quot;https://trunkbaseddevelopment.com/&quot;&gt;trunk-based development&lt;/a&gt;,
the other very experienced using &lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;GitFlow&lt;/a&gt;,
by Thierry de Pauw.
    &lt;ul&gt;
      &lt;li&gt;See also &lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
by Martin Fowler, mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.danieljanus.pl/2021/07/01/commit-groups/&quot;&gt;Things I wish Git had: Commit groups&lt;/a&gt;
by Daniel Janus - to have advantages of topic branch workflow
when using “rebase and merge” workflow.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/pb/git-squash-simplified-3ba1&quot;&gt;Git Squash Simplified&lt;/a&gt;
by Pawel Borkar on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-git-branches-work/&quot;&gt;How Git Branches Work&lt;/a&gt;:
Git Branches Tutorial, by Beau Carnes, on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://felipec.wordpress.com/2021/07/05/git-update/&quot;&gt;git update: the odyssey for a sensible git pull&lt;/a&gt;
by Felipe Contreras.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://palantir.medium.com/optimizing-gits-merge-machinery-part-iv-5bbc4703d050&quot;&gt;Optimizing Git’s Merge Machinery, Part IV&lt;/a&gt;
by Elijah Newren on Palantir Blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/afnanenayet/diffsitter&quot;&gt;diffsitter&lt;/a&gt; creates semantically meaningful
diffs that ignore formatting differences like spacing.  It does so by computing a diff
on the AST (abstract syntax tree) of a file rather than computing the diff on the text
contents of the file.  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diffsitter&lt;/code&gt; uses the parsers from
the &lt;a href=&quot;https://tree-sitter.github.io/tree-sitter&quot;&gt;tree-sitter&lt;/a&gt; project
to parse source code.  Written in Rust, it is very much a work in progress.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/jamieswift90/the-best-vs-code-extensions-to-supercharge-git-yes-there-s-more-than-gitlens-4588&quot;&gt;The best 6 VS Code extensions to supercharge Git&lt;/a&gt;
by Jamie Swift on DEV.to.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=TeamHub.teamhub&quot;&gt;GitLive&lt;/a&gt;
is a Visual Studio Code extension &lt;a href=&quot;https://dev.to/gitlive/how-to-see-which-branch-your-teammates-are-on-in-vs-code-cb1&quot;&gt;to see which branch your teammates are on in VS Code&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitimmersion.com/index.html&quot;&gt;Git Immersion&lt;/a&gt; provides a guided tour
that walks through the fundamentals of Git, inspired by the premise that to
know a thing is to do it.  Another &lt;a href=&quot;http://jce-il.github.io/git-immersion/index.html&quot;&gt;variant of Git Immersion&lt;/a&gt;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/04/18/edition-38/&quot;&gt;Git Rev News Edition #38&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt; with help from Elijah Newren.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 76 (June 27th, 2021)</title>
      <link>https://git.github.io/rev_news/2021/06/27/edition-76/</link>
      <pubDate>Sun, 27 Jun 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/06/27/edition-76/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-76-june-27th-2021&quot;&gt;Git Rev News: Edition 76 (June 27th, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 76th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of May 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/009d01d74b44$9efe8a60$dcfb9f20$@nexbridge.com/&quot;&gt;[BUG] Unix Builds Requires Pthread Support&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Not long after 2.32.0-rc0 was released, Randall S. Becker reported
to the mailing list that
&lt;a href=&quot;https://lore.kernel.org/git/pull.766.v4.git.1613598529.gitgitgadget@gmail.com/&quot;&gt;a patch series&lt;/a&gt;
from Jeff Hostetler, which introduced a “Simple IPC Mechanism”,
broke the build for the NonStop x86 and ia64 platforms. This build
defines &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_PTHREADS&lt;/code&gt;, as supporting pthreads on these platforms is
considered to cause “a bunch of other issues”.&lt;/p&gt;

    &lt;p&gt;It seems that Jeff patch series has introduced a file, called
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ipc-unix-socket.c&lt;/code&gt;, which contains a call to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pthread_sigmask()&lt;/code&gt; function part of the pthreads library, which is
of course not linked to when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_PTHREADS&lt;/code&gt; is defined.&lt;/p&gt;

    &lt;p&gt;Randall suggested a “simple, but probably wrong fix” which just
surrounds the call to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pthread_sigmask()&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#ifndef NO_PTHREADS&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#endif&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Peff, alias Jeff King, replied to Randall that usually an “async”
mechanism is used for tasks that can be performed by several workers
in parallel, and that underneath this mechanism can be implemented
both using different processes and using different threads. At build
time, depending on the availability of pthread, one or the other
implementation is selected.&lt;/p&gt;

    &lt;p&gt;Peff couldn’t tell though, if the “async” interface that the IPC
mechanism defines can actually be implemented using
processes. Anyway he proposed an improved patch to fix the build by
just removing the files implementing the mechanism from the build if
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_PTHREADS&lt;/code&gt; if defined, similar to dealing with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_UNIX_SOCKETS&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Jeff Hostetler, who had implemented the IPC mechanism, then replied
to Peff that the mechanism was heavily threaded and that there was
no point in trying to “fake it” with processes. So he agreed with
Peff’s patch, which conditionally removes it from the build.&lt;/p&gt;

    &lt;p&gt;Peff replied to Jeff asking if he wanted to pick his patch up from
there and produce a polished patch before the 2.32.0 release. Jeff
then agreed to do that, and sent
&lt;a href=&quot;https://lore.kernel.org/git/pull.955.git.1621352192238.gitgitgadget@gmail.com/&quot;&gt;a more elaborate patch&lt;/a&gt;
based on Peff’s patch and on some discussions about it that happened
in the meantime between Peff and Randall.&lt;/p&gt;

    &lt;p&gt;Junio reviewed Jeff’s patch and made some suggestions, which after
further discussion were integrated in
&lt;a href=&quot;https://lore.kernel.org/git/pull.955.v2.git.1621520547726.gitgitgadget@gmail.com/&quot;&gt;version 2 of the patch&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;A &lt;a href=&quot;https://lore.kernel.org/git/pull.955.v3.git.1621535291406.gitgitgadget@gmail.com/&quot;&gt;version 3&lt;/a&gt;
soon followed to fix the build for people using CMake instead of make.
This version was merged before 2.32.0-rc1.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-han-wen-nienhuys&quot;&gt;Developer Spotlight: Han-Wen Nienhuys&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m Han-Wen Nienhuys. I work at Google, where I manage the Gerrit
team. If you don’t know yet, &lt;a href=&quot;https://www.gerritcodereview.com/&quot;&gt;Gerrit&lt;/a&gt;
is the Git-based code review system that Google uses for large open
source projects, such as Android and Chrome.&lt;/p&gt;

    &lt;p&gt;For a while, Shawn Pearce was my boss. I got to know him because of
previous Git adventures at Google: I created git5, a wrapper around
our internal Perforce (‘p4’) deployment as a side project. You can
still see some traces of this, if you look at the commit history of
git-p4.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I didn’t contribute many patches to Git directly, but here is my
biggest one so far:&lt;/p&gt;

    &lt;p&gt;Gerrit accepts code for review through a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; command, and user
studies showed that Gerrit’s error messages didn’t stand out among
the verbose terminal output. I added colorization for keywords like
“ERROR” and “WARNING” to draw more attention.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Gerrit uses Git as a database, storing all review metadata
(comments, LGTMs) in Git itself, which is extremely cool, but it
also creates extremely ..interesting.. scaling problems for Git and
JGit.&lt;/p&gt;

    &lt;p&gt;One area of scaling is the ref database: Gerrit stores both metadata
and each version of a code review in a separate ref. As a result,
large projects, such as Chrome, now have several millions of refs in
their repository. Handling those efficiently is a challenge. Shawn
designed reftable to solve these problems, and partly implemented it
in JGit, but he never got round to updating the Git project itself
to use the format.&lt;/p&gt;

    &lt;p&gt;At the end 2019, I thought it would be an interesting and fun
project to drive that project further. I did severely underestimate
how complicated it would be to do brain surgery on Git itself,
though, so 1.5 years later, it still hasn’t merged. Working on Git
itself (as opposed to Gerrit, and managing the team) is a side
project, so progress hasn’t been as fast as I’d like it to be.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Rewrite Git on top of &lt;a href=&quot;https://libgit2.org/&quot;&gt;libgit2&lt;/a&gt;. Or even
better, rewrite it in Go. Hacking on Git is a fun trip down memory
lane, because the last time I wrote C seriously, I was half my
current age. It doesn’t feel very productive though, in part because
of limitations of the language (memory management, lack of
strings/maps/GC etc.).&lt;/p&gt;

    &lt;p&gt;I realize that’s ambitious, and would turn off a lot of the current
contributors, however, I think much could also be gained by
structuring the program better (e.g. banish global variables,
introduce more unit tested abstraction boundaries), and that could be
achieved by rewriting parts on top of libgit2.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;The packed/loose ref backend. All of Git storage is user-accessible
(under the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; directory), but the packed/loose ref storage is
extra insidious, because you read/write it using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;echo&lt;/code&gt;,
which invites people to break abstraction boundaries.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

    &lt;p&gt;It’s Gerrit, of course.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqa6o3xj2e.fsf@gitster.g/&quot;&gt;2.32.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq4kegr7o3.fsf@gitster.g/&quot;&gt;2.32.0-rc3&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq4ken75cv.fsf@gitster.g/&quot;&gt;2.32.0-rc2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.32.0.windows.1&quot;&gt;2.32.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.32.0-rc3.windows.1&quot;&gt;2.32.0-rc3(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.32.0-rc2.windows.1&quot;&gt;2.32.0-rc2(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.2&quot;&gt;3.1.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.10&quot;&gt;3.0.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.16&quot;&gt;2.22.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.1&quot;&gt;3.1.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.9&quot;&gt;3.0.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.15&quot;&gt;2.22.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.21/admin/release-notes#2.21.23&quot;&gt;2.21.23&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.0&quot;&gt;3.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/06/24/gitlab-14-0-1-released/&quot;&gt;14.0.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/06/22/gitlab-14-0-released/&quot;&gt;14.0&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/06/21/gitlab-13-12-5-released/&quot;&gt;13.12.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/06/14/gitlab-13-12-4-released/&quot;&gt;13.12.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/06/07/gitlab-13-12-3-released/&quot;&gt;13.12.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/06/01/security-release-gitlab-13-12-2-released/&quot;&gt;13.12.2, 13.11.5, and 13.10.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.9.0&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.8.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/11Ivu6xtYZBYTU5e5y_lc6tni3nm9fNIUbX2VRTyTMbE/edit#slide=id.ge209b6f75c_0_1459&quot;&gt;The 2021 Gerrit Community Survey results&lt;/a&gt;
have been published, showing a robust increase of the overall number of users and the adoption
of the most recent versions of &lt;a href=&quot;https://www.gerritcodereview.com&quot;&gt;Gerrit Code Review&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://devclass.com/2021/06/07/got-typos-git-2-32-lands-finally-offers-way-to-reword-commits/&quot;&gt;Got typos? Git 2.32 lands, finally offers way to reword commits [easily]&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/n3wt0n/crypto-mining-is-killing-all-free-ci-cd-platforms-4chc&quot;&gt;Crypto Mining is Killing All Free CI/CD Platforms&lt;/a&gt;
by Davide ‘CoderDave’ Benvegnù is a blog post on Dev.to
and a &lt;a href=&quot;https://www.youtube.com/watch?v=9TOJqJSHVvI&quot;&gt;video on YouTube&lt;/a&gt;.
The platforms affected include GitLab, TravisCI, CircleCI and GitHub Actions;
the CI providers have limited their free tiers, or have to spend much effort
on combating crypto miners abusing the platform in response.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/860607/&quot;&gt;Pulling GitHub into the kernel process&lt;/a&gt; by Jake Edge on LWN.net
(&lt;a href=&quot;https://lwn.net/SubscriberLink/860607/fdbce807fe931123/&quot;&gt;free link for not subscribed&lt;/a&gt;)
describes attempts to make it possible to submit patches to the Linux kernel
via GitHub pull requests (PR).  While at it, it also mentions various attempts
and tools to improve an email-based workflow.&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;For submitting patch series to the Git project via GitHub pull requests,
there is &lt;a href=&quot;https://gitgitgadget.github.io/&quot;&gt;GitGitGadget&lt;/a&gt;, described in
&lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://bakkenbaeck.github.io/a-random-walk-through-git/&quot;&gt;A Random Walk Through Git&lt;/a&gt;
by Bakken &amp;amp; Bæck is a weird in-depth tour through Git and some of its internals,
including reflog, interactive rebase, bisect and rerere.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/github/how-to-never-type-passwords-when-using-git-18bb&quot;&gt;How to never type passwords when using Git&lt;/a&gt;
by Michelle Mannering on Dev.to.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/pragativerma18/confusing-terms-in-the-git-terminology-1578&quot;&gt;Confusing Terms in the Git Terminology&lt;/a&gt;
by Pragati Verma on Dev.to.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://simplabs.com/blog/2021/05/26/keeping-a-clean-git-history/&quot;&gt;Git Good - The magic of keeping a clean Git history&lt;/a&gt;
post by Chris Manson is designed to help you form a solid mental model while
working with Git both professionally and in an open source project, and how to
ensure you are following best practices to make the process easier for
everyone.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/emyller/merge-vs-rebase-63e&quot;&gt;Merge vs rebase&lt;/a&gt;
by Evandro Myller on Dev.to.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://careerkarma.com/blog/git-log/&quot;&gt;Git Log: How to Use It&lt;/a&gt;
by James Gallagher (2020), one of Git tutorials on Career Karma blog.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/abh1navv/fixing-basic-mistakes-with-git-4m4l&quot;&gt;Fixing basic mistakes with Git&lt;/a&gt;
by Abhinav Pandey on Dev.to.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://johnmosesman.com/post/after-crud-git/&quot;&gt;After CRUD: Intro to Git and basic workflows&lt;/a&gt;
by John Mosesman (2019).&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://git-history.jpalmer.dev/&quot;&gt;A Git history visualization page&lt;/a&gt;
by Jeff Palmer &amp;lt;&lt;a href=&quot;mailto:jeffrey.palmer@acm.org&quot;&gt;jeffrey.palmer@acm.org&lt;/a&gt;&amp;gt; shows “An Interactive Development History” of Git in
three columns: project and contributor statistics, relative cumulative
contributions by contributor, and aggregated commits by
contributor by month with milestone annotations. Jeff wrote
&lt;a href=&quot;https://jpalmer.dev/2021/05/interactive-git-history/&quot;&gt;an associated blog post&lt;/a&gt; about how
he created the visualization, and he’s also looking for
feedback and ideas for milestones or features he could add.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://blog.waleedkhan.name/git-undo/&quot;&gt;git undo: We can do better&lt;/a&gt;
describes the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-undo&lt;/code&gt; tool that is
a &lt;a href=&quot;https://github.com/arxanas/git-branchless&quot;&gt;part of the git-branchless suite of tools&lt;/a&gt;;
it can undo bad merges and rebases with ease, and even some rarer operations.
This &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git undo&lt;/code&gt; tool was made possible by a recent addition to Git:
the &lt;a href=&quot;https://git-scm.com/docs/githooks#_reference_transaction&quot;&gt;reference-transaction hook&lt;/a&gt;
(not yet present on the &lt;a href=&quot;https://githooks.com&quot;&gt;GitHooks.com&lt;/a&gt; site, mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2018/09/19/edition-43/&quot;&gt;Git Rev News Edition #43&lt;/a&gt;;
the reference-transaction hook was described in &lt;a href=&quot;https://git.github.io/rev_news/2021/03/27/edition-73/&quot;&gt;#75&lt;/a&gt;).&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;The &lt;a href=&quot;https://gitup.co/&quot;&gt;GitUp&lt;/a&gt; client also supports undo/redo via snapshots,
also by adding additional plumbing on top of Git.  This tool was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2015/07/08/edition-5/&quot;&gt;Git Rev News #5&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;undo&lt;/code&gt; Git alias described in &lt;a href=&quot;http://megakemp.com/2016/08/25/git-undo/&quot;&gt;Git Undo&lt;/a&gt;
post by Enrico Campidoglio simply uses the reflog, and is less capable.  This post
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/08/17/edition-18/&quot;&gt;Git Rev News #19&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/arxanas/git-branchless&quot;&gt;git-branchless&lt;/a&gt; is a suite of tools,
written in Rust, to help you &lt;strong&gt;visualize&lt;/strong&gt;, &lt;strong&gt;navigate&lt;/strong&gt;, &lt;strong&gt;manipulate&lt;/strong&gt;, and &lt;strong&gt;repair&lt;/strong&gt;
your commit history. It’s based off of the branchless Mercurial workflows at large companies
such as Google and Facebook.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Han-Wen Nienhuys, Luca Milanesio and
Jeffrey Palmer.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 75 (May 27th, 2021)</title>
      <link>https://git.github.io/rev_news/2021/05/27/edition-75/</link>
      <pubDate>Thu, 27 May 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/05/27/edition-75/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-75-may-27th-2021&quot;&gt;Git Rev News: Edition 75 (May 27th, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 75th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of April 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/organizations/5908380398387200/#projects&quot;&gt;Git participates in GSoC (Google Summer of Code) 2021&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The following two students have been officially accepted to work on Git
as part of the &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;GSoC 2021&lt;/a&gt;:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;ZheNing Hu will work on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#6499923274498048&quot;&gt;Use ref-filter formats in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cat-file&lt;/code&gt;&lt;/a&gt;
project. He will be co-mentored by Hariom Verma and Christian
Couder. His first blog post about it &lt;a href=&quot;https://adlternative.github.io/GSOC-Git-Blog-1/&quot;&gt;is up&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Atharva Raykar will work on the
&lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#4754589292691456&quot;&gt;Finish converting submodule to builtin&lt;/a&gt;
project. He will be co-mentored by Shourya Shukla and Christian
Couder. His first blog posts about it are &lt;a href=&quot;https://atharvaraykar.me/gitnotes/&quot;&gt;also up&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Thanks to the students who applied and worked on micro-projects, but
couldn’t be selected! We hope to continue to see you in the
community!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/60ad75ac7ffca_2ae08208b@natae.notmuch/&quot;&gt;The top 1% of commit trailers&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Felipe Contreras posted a fun analysis of how often various commit
trailers (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reviewed-by&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tested-by&lt;/code&gt;, etc) appear in the git.git project.&lt;/p&gt;

    &lt;p&gt;Setting aside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;signed-off-by&lt;/code&gt; (which all contributions must include),
the most common trailers are &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;acked-by&lt;/code&gt; (1945 occurrences) and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reviewed-by&lt;/code&gt; (1729 occurrences), together accounting for almost half
of all trailers.&lt;/p&gt;

    &lt;p&gt;The next 4 most common trailers give a great insight into just how
much collaboration goes on in the git.git project: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;helped-by&lt;/code&gt; (1336),
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reported-by&lt;/code&gt; (960), &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mentored-by&lt;/code&gt; (379), and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;suggested-by&lt;/code&gt; (281).&lt;/p&gt;

    &lt;p&gt;Perhaps most interesting is the long list of trailers that have only
been seen once, though now that this list is out there we may see more
of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deemed-obviously-correct-by&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;worriedly-acked-by&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cheered-on-by&lt;/code&gt;
in the future.&lt;/p&gt;

    &lt;p&gt;One can also note that this distribution roughly follows
&lt;a href=&quot;https://en.wikipedia.org/wiki/Zipf%27s_law&quot;&gt;Zip’s law&lt;/a&gt;; the 10th most
popular line (“improved-by”) is about 1/10 as popular as the 1st.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://gist.github.com/felipec/ce491d351c88e4acbdbf6bc02a47223d&quot;&gt;This script&lt;/a&gt;
can be used to replicate the analysis.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.939.git.1619195245606.gitgitgadget@gmail.com/&quot;&gt;[PATCH] [GSOC] pretty: provide human date format&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;ZheNing Hu sent a patch to the mailing list to add the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ah&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ch&lt;/code&gt; formatting options to the “pretty formats”. The “pretty
formats” are the main way for users to customize the output of the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-list&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff-tree&lt;/code&gt; commands.&lt;/p&gt;

    &lt;p&gt;These formats are specified by the
&lt;a href=&quot;https://git-scm.com/docs/git-log#Documentation/git-log.txt---prettyltformatgt&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--pretty[=&amp;lt;format&amp;gt;]&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--format=&amp;lt;format&amp;gt;&lt;/code&gt;&lt;/a&gt;
command line flags, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;format&amp;gt;&lt;/code&gt;is the actual
&lt;a href=&quot;https://git-scm.com/docs/git-log#_pretty_formats&quot;&gt;“pretty format”&lt;/a&gt;,
and can be either a “built-in format”, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oneline&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;raw&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;short&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;medium&lt;/code&gt;, etc, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;format:&amp;lt;string&amp;gt;&lt;/code&gt;, which is called a
“format string”.&lt;/p&gt;

    &lt;p&gt;These format strings work in a similar way to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;printf()&lt;/code&gt; formats, as
they can contain placeholders starting with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%&lt;/code&gt; character, that
will be expanded by the command. For example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%H&lt;/code&gt; will be expanded
to print the commit hash, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%an&lt;/code&gt; the author name, etc.&lt;/p&gt;

    &lt;p&gt;A lot of placeholders already exist. For the author date, there are:
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ad&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%aD&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ar&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%at&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ai&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%aI&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%as&lt;/code&gt;. For the
committer date, there are the corresponding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cd&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cD&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cr&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ct&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ci&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cI&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cs&lt;/code&gt; ones. Each pair of these placeholders uses
a different date format. For example, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%aI&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cI&lt;/code&gt; use the “strict
ISO 8601 format”.&lt;/p&gt;

    &lt;p&gt;Formats &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ad&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cd&lt;/code&gt;, though, are special as they use the format specified
by the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=&amp;lt;format&amp;gt;&lt;/code&gt; command line flag, so for example with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=iso-strict&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ad&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cd&lt;/code&gt; will behave in the same way as
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%aI&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cI&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;ZheNing’s patch added the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ah&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ch&lt;/code&gt; placeholders that
would behave in the same way as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%ad&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cd&lt;/code&gt; with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=human&lt;/code&gt;. The rationale for the patch being that there are
placeholders corresponding to most of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=&amp;lt;format&amp;gt;&lt;/code&gt; options
except &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=human&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Taylor Blau was the first to review ZheNing’s patch and found it
“pretty good”, as it was similar to a previous patch by René Scharfe
that added the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%as&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cs&lt;/code&gt; placeholders for dates in the “short
date format”. ZheNing acknowledged that he indeed learned from
René’s patch.&lt;/p&gt;

    &lt;p&gt;Philip Oakley, though, commented on the documentation part of the
patch suggesting to add an example similar to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;YYYY-MM-DD&lt;/code&gt; for the
short format. ZheNing replied that in the “human format” a date
could take many forms, so he said he would rather add links to the
documentation of the “human format”.&lt;/p&gt;

    &lt;p&gt;ZheNing then sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.939.v2.git.1619275340051.gitgitgadget@gmail.com/&quot;&gt;version 2&lt;/a&gt;
of his patch where he had added the links. Philip suggested further
small superficial changes to the link and the related text added in
this version though.&lt;/p&gt;

    &lt;p&gt;Meanwhile Ævar Arnfjörð Bjarmason sent
&lt;a href=&quot;https://lore.kernel.org/git/cover-0.2-00000000000-20210425T090506Z-avarab@gmail.com/&quot;&gt;a small patch series&lt;/a&gt;
that made a “couple of trivial changes” to the tests related to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%aI&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%cI&lt;/code&gt;, and at the same time suggested ZheNing to make
similar changes to the tests in his patch.&lt;/p&gt;

    &lt;p&gt;ZheNing then sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.939.v3.git.1619347306291.gitgitgadget@gmail.com/&quot;&gt;version 3&lt;/a&gt;
of his patch, taking Philip’s and Ævar’s suggestions into account.
This patch contained a typo, though, so ZheNing sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.939.v4.git.1620056221874.gitgitgadget@gmail.com/&quot;&gt;version 4&lt;/a&gt;
of his patch.&lt;/p&gt;

    &lt;p&gt;As the version 3 of the patch had already been merged to the “next”
branch before ZheNing sent the version 4, the typo got noticed by
Martin Ågren who sent
&lt;a href=&quot;https://lore.kernel.org/git/cover.1620551314.git.martin.agren@gmail.com/&quot;&gt;a small patch series&lt;/a&gt;
fixing this typo as well as another unrelated one.&lt;/p&gt;

    &lt;p&gt;Eventually both ZheNing’s patch and Martin’s patches were merged
into the “master” branch, so that their improvements will appear in
the soon upcoming Git version v2.32.0.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-patrick-steinhardt&quot;&gt;Developer Spotlight: Patrick Steinhardt&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a software developer working at GitLab, more specifically in the
team working on Gitaly. Gitaly is our RPC interface to all Git
repositories, so it is the backbone to all things Git at GitLab.&lt;/p&gt;

    &lt;p&gt;In my own free time, I love to tinker with my Gentoo-based systems and
tailor them to my own needs, which results in occasional drive-by
patches to all kinds of open source projects to scratch my own itches.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;To me, this is the introduction of the reference-transaction hook, which
gets executed whenever a reference is about to be updated. This allows
tight control over all reference updates happening in a given repository
in a command-agnostic way. At GitLab, we use this hook to coordinate
reference updates across multiple replicas of the same repository such
that we can be sure that all nodes have the same state and move to the
same state.&lt;/p&gt;

    &lt;p&gt;My most important contributions I’d not locate in the Git project itself
though, but instead in libgit2. While I unfortunately haven’t found the
time to contribute to it lately, I’ve done a lot more work on libgit2
than I did on Git. And there it’s probably the initial introduction of
support for worktrees, maintenance of the CMake build system and work on
the gitconfig subsystem.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;My current work is mostly focussed on tuning performance of some areas
we have found to be slow for gitlab.com. This has motivated the recent
introduction of a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-rev-list(1)&lt;/code&gt; filter which allows to filter by
object type via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--filter=object:type=&amp;lt;type&amp;gt;&lt;/code&gt;. This makes it easy to
find for example all blobs introduced between two revisions.&lt;/p&gt;

    &lt;p&gt;And right now I’m trying to devise a new implementation of the object
connectivity check performed by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-receive-pack(1)&lt;/code&gt; whenever a push gets
accepted on the server side. Depending on the repository’s shape, the
current implementation can be a major bottleneck and take dozens of
seconds to compute even for small pushes. You may have noticed this
check when it says “Checking connectivity” on a push.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I’m obviously biased coming from the libgit2 project, but I’d really
love to further push the libification of Git. There has been great
progress on this front already to make internal C interfaces look more
like the typical interfaces you’d see from a linkable library. But my
dream would be to merge the efforts of Git and libgit2 such that Git
also provides an official library which can be linked against in your
own program.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Tough question. There’s many user-facing commands which could benefit
from a more consistent design, but my take is that these probably could
provide an improved user interface while still retaining backwards
compatibility.&lt;/p&gt;

    &lt;p&gt;But what I’d really love to get rid of is the file-based reference
backend. It works reasonably well to represent references as file paths
in smallish repositories, but even there it imposes limitations which
are only a result of its implementation. It’s also inefficient for
bigger repositories and does not really allow for atomic modification of
multiple references at once. There luckily is ongoing work on the
reftable backend, which fixes many of the shortcomings, but it will
likely still take some time to land.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I guess the answer to that question is going to be obvious by now:
libgit2.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqk0nqq266.fsf@gitster.g/&quot;&gt;2.32.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqh7j13kmc.fsf@gitster.g/&quot;&gt;2.32.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.32.0-rc1.windows.1&quot;&gt;2.32.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.32.0-rc0.windows.1&quot;&gt;2.32.0-rc0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/05/22/gitlab-13-12-released/&quot;&gt;13.12&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/05/14/gitlab-13-11-4-released/&quot;&gt;13.11.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/04/30/gitlab-13-11-3-released/&quot;&gt;13.11.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/04/28/security-release-gitlab-13-11-2-released/&quot;&gt;13.11.2, 13.10.4, and 13.9.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.4.html&quot;&gt;3.4.0&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.3.html#334&quot;&gt;3.3.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#3210&quot;&gt;3.2.10&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#3115&quot;&gt;3.1.15&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#329&quot;&gt;3.2.9&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#3114&quot;&gt;3.1.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.7&quot;&gt;3.0.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.13&quot;&gt;2.22.13&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.21/admin/release-notes#2.21.21&quot;&gt;2.21.21&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.1/admin/release-notes#3.1.0&quot;&gt;3.1.0&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.6&quot;&gt;3.0.6&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.12&quot;&gt;2.22.12&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.21/admin/release-notes#2.21.20&quot;&gt;2.21.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Magit &lt;a href=&quot;https://emacsair.me/2021/05/25/magit-3.0&quot;&gt;3.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Forge &lt;a href=&quot;https://emacsair.me/2021/05/25/forge-0.2&quot;&gt;0.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.6.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.6.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.8.1&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.8.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Linus Torvalds was &lt;a href=&quot;https://www.tag1consulting.com/blog/interview-linus-torvalds-linux-and-git&quot;&gt;interviewed&lt;/a&gt;
on the Tag1 Consulting site about 30 Years Of Linux and
&lt;a href=&quot;https://www.tag1consulting.com/blog/interview-linus-torvalds-linux-and-git#git-distributed-version-control-&quot;&gt;about Git&lt;/a&gt;.
A &lt;a href=&quot;https://www.tag1consulting.com/blog/interview-linus-torvalds-open-source-and-beyond-part-2&quot;&gt;part 2&lt;/a&gt;
of the interview not related to Git has also been published.&lt;/li&gt;
  &lt;li&gt;GitHub announced that &lt;a href=&quot;https://github.blog/2021-05-10-security-keys-supported-ssh-git-operations/&quot;&gt;security keys are now supported for SSH Git operations&lt;/a&gt; via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ecdsa-sk&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ed25519-sk&lt;/code&gt; key types.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2021-04-29-scaling-monorepo-maintenance/&quot;&gt;Scaling monorepo maintenance&lt;/a&gt;
by Taylor Blau on GitHub Blog, with reverse indexes, multi-pack bitmaps, and geometric repacking.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/vkroll/common-misconception-of-beginners-51jb&quot;&gt;Developing a script in small steps&lt;/a&gt;
by Volker Kroll on Dev.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://schleiss.io/plotting-source-code-todos-for-open-source-projects&quot;&gt;Plotting the source code “TODO” history of the most popular open source projects&lt;/a&gt;
by Martin Schleiss.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/git-push-to-remote-branch-how-to-push-a-local-branch-to-origin/&quot;&gt;Git Push to Remote Branch - How to Push a Local Branch to Origin&lt;/a&gt;
by John Mosesman on freeCodeCamp.org.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ricardoanderegg.com/posts/git-push-deployments-docker-tags/&quot;&gt;Heroku-style deployments with Docker and Git tags&lt;/a&gt;
(and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;post-receive&lt;/code&gt; hook) by Ricardo Ander-Egg Aguilar.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ocramius.github.io/blog/yubikey-for-ssh-gpg-git-and-local-login/&quot;&gt;YubiKey for SSH, Login, 2FA, GPG and Git Signing&lt;/a&gt; by Marco Pivetta (Ocramius).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://paulfitz.github.io/2014/07/09/diff-merge-csv.html&quot;&gt;Diff and merge CSV files in your Git client&lt;/a&gt;
using &lt;a href=&quot;http://paulfitz.github.io/daff/&quot;&gt;daff&lt;/a&gt; by Paul Fitz (2014).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2021/05/20/vscode-workflows-for-working-with-gitlab/&quot;&gt;Visual Studio code editor: Eight tips for using GitLab VS Code&lt;/a&gt;
extension by Tomas Vik on GitLab Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.honeybadger.io/blog/git-tricks/&quot;&gt;Top Ten Git Tips &amp;amp; Tricks&lt;/a&gt;
by Julie Kent on Honeybadger blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GitSquared/komit&quot;&gt;Komit&lt;/a&gt; is a Node.js based small command line
application providing interactive prompt, designed to be run as a Git hook to
help follow the &lt;a href=&quot;https://www.conventionalcommits.org/en/v1.0.0/&quot;&gt;Conventional Commit message standard&lt;/a&gt;.
This standard was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt; and &lt;a href=&quot;https://git.github.io/rev_news/2019/08/21/edition-54/&quot;&gt;#54&lt;/a&gt;;
another tool that helps follow this standard is &lt;a href=&quot;https://github.com/craicoverflow/sailr&quot;&gt;Sailr&lt;/a&gt;
(also mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;edition #52&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://octo.github.com/projects/flat-data&quot;&gt;Flat Data&lt;/a&gt; explores how to make
it easy to work with data in Git and GitHub. The Flat Data project
incorporates three different pieces: the Flat Action (GitHub Action), the Flat Editor
VS Code extension, and the Flat Viewer website.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/banga/git-split-diffs&quot;&gt;git-split-diffs&lt;/a&gt;, a Node.js
command-line application, provides side-by-side split diffs with syntax
highlighting in your terminal, and can be used via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.pager&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pager.diff&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://paulfitz.github.io/daff/&quot;&gt;daff: data diff&lt;/a&gt; is a library and a tool for
comparing tables, producing a summary of their differences, and using such a
summary as a patch file. It is optimized for comparing tables that share a
common origin, in other words multiple versions of the “same” table. With daff,
you can also make Git diffs and merges table-aware.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/wy-z/github-csv-diff&quot;&gt;github-csv-diff&lt;/a&gt; and
&lt;a href=&quot;https://github.com/Data-Liberation-Front/csvhub&quot;&gt;CSVHub&lt;/a&gt; are both
Chrome extensions to show CSV diffs on GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://semgrep.dev/&quot;&gt;Semgrep&lt;/a&gt; is a fast, Open Source, static analysis tool
for finding bugs and enforcing code standards at editor, commit, or CI time;
rules look like the code you’re searching.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Patrick Steinhardt, Andrew Ardill,
Felipe Contreras and Jonas Bernoulli.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 74 (April 30th, 2021)</title>
      <link>https://git.github.io/rev_news/2021/04/30/edition-74/</link>
      <pubDate>Fri, 30 Apr 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/04/30/edition-74/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-74-april-30th-2021&quot;&gt;Git Rev News: Edition 74 (April 30th, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 74th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of March 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/4442fd0a-3306-a22b-3614-e3272f8f0be5@FreeBSD.org/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-edit&lt;/code&gt; not respected after conflict&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Renato Botelho explained in an email to the mailing list that while he
was reverting multiple commits using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-edit&lt;/code&gt; option, there
was a conflict he resolved using
&lt;a href=&quot;https://git-scm.com/docs/git-mergetool&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git mergetool&lt;/code&gt;&lt;/a&gt;. After that
though, the revert was not respecting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-edit&lt;/code&gt; option anymore
for the next commits, so for each of them an editor was opened for him
to review the commit messages.&lt;/p&gt;

    &lt;p&gt;After brian m. carlson replied to him asking for the set of commands
he used or a reproduction test case, Renato provided a test case
which shows that indeed after &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git revert --continue&lt;/code&gt; the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-edit&lt;/code&gt; option, that was provided in the initial
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git revert --no-edit commit1 commit2 ... commitN&lt;/code&gt; command, doesn’t
seem to be taken into account anymore.&lt;/p&gt;

    &lt;p&gt;Elijah Newren thanked Renato, confirmed he could reproduce the issue
and said he started working on a patch that fixed the issue as well
as a similar one he had found. The next day though Elijah replied to
himself saying the issue turned out to be messier than expected.&lt;/p&gt;

    &lt;p&gt;He &lt;a href=&quot;https://lore.kernel.org/git/CABPp-BEGEcws69sg6Z2=B1nihFG227mAsSx=boU3uSx2xDUEjg@mail.gmail.com/&quot;&gt;provided tables&lt;/a&gt;
showing that the behavior (launching an editor or
not) could depend on a number of factors: the command (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;revert&lt;/code&gt; or
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cherry-pick&lt;/code&gt;), the use of a terminal or not, before or after a
conflict, which option (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--edit&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-edit&lt;/code&gt; or no option) had been
passed. The tables also showed that Elijah had some doubts in some
cases.&lt;/p&gt;

    &lt;p&gt;Elijah for example was not sure what should be done after a conflict
when neither &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--edit&lt;/code&gt; nor &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-edit&lt;/code&gt; had been specified and when there
was no terminal. It was not clear if an editor should be launched as
it was likely to fail if there was no terminal.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Elijah saying that
when there is a conflict and when reverting (instead of
cherry-picking), the default (that is, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-edit&lt;/code&gt; is not provided)
should be to give the user a chance to explain the conflict
resolution or the reason for reverting in the commit message. If
there is no terminal though, the process is likely automated and
launching an editor might fail the operation for no good reason.&lt;/p&gt;

    &lt;p&gt;Elijah then thanked Junio, sent a proper
&lt;a href=&quot;https://lore.kernel.org/git/pull.988.git.git.1616742969145.gitgitgadget@gmail.com/&quot;&gt;patch&lt;/a&gt;
to the mailing list fixing the issue and asked Renato to give it a
try. Renato replied that the patch worked indeed and thanked Elijah.&lt;/p&gt;

    &lt;p&gt;Philip Oakley and Phillip Wood first replied to Elijah’s patch,
which was quite complex, with only minor comments. Elijah and Junio
both replied to their comments. Then Elijah sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.988.v2.git.git.1617070174458.gitgitgadget@gmail.com/&quot;&gt;version 2 of his patch&lt;/a&gt;
that only included typo fixes and comment clarifications to address
Philip’s and Phillip’s suggestions.&lt;/p&gt;

    &lt;p&gt;Johannes Schindelin, alias Dscho, replied to this new version of the
patch. He first said, as a tangent, that we should move away from
the “Unix shell script heritage”, especially what he called “the
awful &lt;em&gt;let’s write out one file per setting&lt;/em&gt; strategy”. He would
like the project to use the JSON or the INI (like Git’s own config
files) format instead. He recognized that it might not be an easy
switch though, as some users might unfortunately rely too much on
such implementation details.&lt;/p&gt;

    &lt;p&gt;Dscho also made a number of small code suggestions. One was about
how the variable encoding of the edit related options is
checked. Another one was to get rid of an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;assert()&lt;/code&gt; statement that
Elijah’s patch introduced. While Elijah agreed with the first one,
he disagreed about the second, which started a small discussion
about the value of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;assert()&lt;/code&gt; between Elijah, Junio and Dscho, with
Ævar Arnfjörð Bjarmason chiming in. Elijah eventually suggested
replacing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;assert()&lt;/code&gt; statements using a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BUG_ON()&lt;/code&gt; macro.&lt;/p&gt;

    &lt;p&gt;About Dscho’s tangent that we should stop writing one file per
setting and use a standard format instead, Elijah said he was glad
talking about this because it generates a number of issues. Some of
these issues are related to the different control structures and
code duplication for different operations (like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;) because of the differences in writing the
settings.&lt;/p&gt;

    &lt;p&gt;Another issue is some wasted time in the sequencer (which is used by
both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;). There is unnecessary
process forking and a lot of useless disk writing (to update the
index and the working directory but also to write all the individual
control files). This started a sub-thread where Dscho, Phillip Wood,
Junio and Elijah discussed if it was actually necessary to often
write many small files to disk. The conclusion seemed to be that we
would need to check if some hooks are configured or not, so that if
they are not, we can avoid writing a lot between each commit which
is processed. Dscho said that “for example, if no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pre-commit&lt;/code&gt; hook
was installed that needs to be run, there was no need to update the
worktree nor HEAD until the rebase is done”.&lt;/p&gt;

    &lt;p&gt;Meanwhile Elijah sent a
&lt;a href=&quot;https://lore.kernel.org/git/pull.988.v3.git.git.1617173541301.gitgitgadget@gmail.com/&quot;&gt;version 3 of his patch&lt;/a&gt;
that took into account all the suggestions Dscho had made, including the
removal of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;assert()&lt;/code&gt; statement. Dscho gave his “Reviewed-by:” and
the patch has since been merged into the ‘master’ branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-yann-dirson&quot;&gt;Developer Spotlight: Yann Dirson&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m Yann, and for the last few years I’ve been working on the Blade/Shadow
“stream a Gaming PC” service, and currently looking for the next adventure.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I can’t say that one particular thing stands out by itself.  In volume
I certainly contributed more to “third-party” tools: &lt;a href=&quot;https://en.wikipedia.org/wiki/Cogito_(software)&quot;&gt;Cogito&lt;/a&gt;
initially, then &lt;a href=&quot;https://stacked-git.github.io/&quot;&gt;StGit&lt;/a&gt; (which I’m happy to see has recently received
more activity and a 1.0 release), then more recently
&lt;a href=&quot;https://github.com/felipec/git-reintegrate&quot;&gt;git-reintegrate&lt;/a&gt;.  In git.git, I’ve mostly contributed small patches
here and there when it itched too much, and a number of bug reports and
suggestions.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I’ve been mostly dormant there lately, and I’ve been a happy user all
that time, both in dayjob and in personal projects.  To me that tells
a lot on the maturity of the project.&lt;/p&gt;

    &lt;p&gt;I’ve started to feel a new itch regarding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase -i&lt;/code&gt;, when iterative work
requires to go back-and-forth between patches before finishing the rebase
(something StGit did quite well, and possibly something most users don’t need).
I only posted a PoC and some ideas a &lt;a href=&quot;https://lore.kernel.org/git/139173043.431119331.1615653441685.JavaMail.root@zimbra39-e7/&quot;&gt;couple of weeks ago&lt;/a&gt;, and that’s
likely to be my next venture into Git if time allows.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;On my first contact with Git shortly after Linus published his first
version, one thing stood out for me as non-intuitive after using all
those former tools: the “record only the content and not by which
operation we got there” motto, which leaves to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; the work of
reconstructing the “which operation” part.  Yet, soon after it struck
me as probably the most brilliant aspect in Git’s design.&lt;/p&gt;

    &lt;p&gt;Today there are a handful of such operations that Git can detect, and
then use when merging to make things easier: essentially renames and
copies.  Yet, so many other high-level operations can be made on code,
and are not easy enough to merge: code restructuring inducing
reindents (think Python) and symbol renaming are the first that come
to mind.&lt;/p&gt;

    &lt;p&gt;This probably should be done as language-specific diff/merge tools,
but those tools would likely want to share a common core.  Providing
such support would likely help many projects, and enable smoother
workflows.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;The current &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; syntax, which feels so counter-intuitive today.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

    &lt;p&gt;Recently the tool that has helped me most is &lt;a href=&quot;https://github.com/felipec/git-reintegrate&quot;&gt;git-reintegrate&lt;/a&gt;, it
simplifies so much the iterative integration process with WiP
branches.  It still has a couple of rough edges, but as long as
you don’t use submodules and don’t have to hand over the integration
task to others too often, it runs really smoothly.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://lore.kernel.org/git/xmqq1rc1sf2z.fsf@gitster.g/&quot;&gt;2.31.1&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.31.1.windows.1&quot;&gt;2.31.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.5&quot;&gt;3.0.5&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.11&quot;&gt;2.22.11&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.21/admin/release-notes#2.21.19&quot;&gt;2.21.19&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.4&quot;&gt;3.0.4&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.10&quot;&gt;2.22.10&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.21/admin/release-notes#2.21.18&quot;&gt;2.21.18&lt;/a&gt;,
&lt;a href=&quot;https://docs.github.com/en/enterprise-server@3.0/admin/release-notes#3.0.3&quot;&gt;3.0.3&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.9&quot;&gt;2.22.9&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.21/admin/release-notes#2.21.17&quot;&gt;2.21.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/04/23/gitlab-13-11-1-released/&quot;&gt;13.11.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/04/22/gitlab-13-11-released/&quot;&gt;13.11&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/04/14/security-release-gitlab-13-10-3-released/&quot;&gt;13.10.3, 13.9.6, and 13.8.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/04/01/gitlab-13-10-2-released/&quot;&gt;13.10.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/03/31/security-release-gitlab-13-10-1-released/&quot;&gt;13.10.1, 13.9.5, and 13.8.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.12&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.3.html#333&quot;&gt;3.3.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#328&quot;&gt;3.2.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#3113&quot;&gt;3.1.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.5.5&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.5.4&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.5.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.7.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.7.1&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.7.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;TortoiseGit &lt;a href=&quot;https://tortoisegit.org/docs/releasenotes/#Release_2.12.0.0&quot;&gt;2.12.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2021-04-06-announcing-the-global-maintainer-summit/&quot;&gt;GitHub is announcing the Global Maintainer Summit&lt;/a&gt;
on June 8–9th.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2021/04/15/outreachy-sponsorship-winter-2020/&quot;&gt;Technology internships meet open source in Outreachy&lt;/a&gt;
on GitLab’s blog is about recent Outreachy interns working on Git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/enhanced-productivity-with-git-in-visual-studio/&quot;&gt;Enhanced Productivity with Git in Visual Studio&lt;/a&gt;
(in upcoming version 16.10).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.palantir.com/optimizing-gits-merge-machinery-3-2dc7c7436978&quot;&gt;Optimizing git’s merge machinery, #3&lt;/a&gt;
by Elijah Newren on Palantir Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2021/04/05/a-look-under-the-hood-how-branches-work-in-git/&quot;&gt;A look under the hood: how branches work in Git&lt;/a&gt;
by Tobias Günther on The Overflow – the Stack Overflow blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/21/4/git-worktree&quot;&gt;Experiment on your code freely with Git worktree&lt;/a&gt;
by Seth Kenlon (Red Hat) on Opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/21/4/git-commands&quot;&gt;5 commands to level-up your Git game&lt;/a&gt;:
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git whatchanged&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt; and
&lt;a href=&quot;https://opensource.com/article/21/4/git-home&quot;&gt;managing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$HOME&lt;/code&gt; with Git&lt;/a&gt;,
by Seth Kenlon (Red Hat) on Opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/21/4/git-stash&quot;&gt;A practical guide to using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; command&lt;/a&gt;
by Ramakrishna Pattnaik on Opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/851670/&quot;&gt;Scanning for secrets&lt;/a&gt; in Git repositories
automatically, by Jake Edge on LWN.net.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2021-04-27-ship-code-faster-safer-feature-flags/&quot;&gt;How we ship code faster and safer with feature flags&lt;/a&gt;
by Alberto Gimeno on GitHub Blog.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://featureflags.io/&quot;&gt;Feature flags&lt;/a&gt; were one of solutions to hiding partial features
in &lt;a href=&quot;https://trunkbaseddevelopment.com/&quot;&gt;trunk based development&lt;/a&gt;, one of the
&lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html#continuous-integration&quot;&gt;patterns for managing source code branches&lt;/a&gt;
in Martin Fowler’s article of the same name, covered in
&lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;
and mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2021/03/27/edition-73/&quot;&gt;#73&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-set-up-continuous-integration-for-monorepo-using-buildkite/&quot;&gt;How to Set Up Continuous Integration for a Monorepo Using Buildkite&lt;/a&gt;
by Subash Adhikari on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/practical-git-and-git-workflows/&quot;&gt;How to Use Git and Git Workflows – a Practical Guide&lt;/a&gt;
by John Mosesman on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://seb.jambor.dev/posts/improving-shell-workflows-with-fzf/&quot;&gt;Improving shell workflows with fzf&lt;/a&gt;
by Sebastian Jambor.  The &lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;fzf&lt;/a&gt; tool was mentioned
alongside &lt;a href=&quot;https://github.com/bigH/git-fuzzy&quot;&gt;git-fuzzy&lt;/a&gt; (that uses it) in
&lt;a href=&quot;https://git.github.io/rev_news/2020/06/25/edition-64/&quot;&gt;Git Rev News Edition #64&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.brixit.nl/git-email-flow-versus-github-flow/&quot;&gt;Git email flow vs GitHub flow&lt;/a&gt;:
Comparing the GitHub and GitLab pull request workflow to the Git built-in email workflow,
by Martijn Braam (2020).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://dahlbyk.github.io/posh-git/&quot;&gt;posh-git&lt;/a&gt; is a PowerShell module
which provides Git/PowerShell integration.  It also provides tab completion
support for common Git commands, branch names, paths, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Yann Dirson, Elijah Newren and Sven Strickroth.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 73 (March 27th, 2021)</title>
      <link>https://git.github.io/rev_news/2021/03/27/edition-73/</link>
      <pubDate>Sat, 27 Mar 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/03/27/edition-73/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-73-march-27th-2021&quot;&gt;Git Rev News: Edition 73 (March 27th, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 73rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of February 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CAGgn8PdU1GE_CZdGUpJWKzygd0O+Yn2BnAFGmPfKAxFpoVoqUA@mail.gmail.com/&quot;&gt;[QUESTION] Tracking HEAD changes?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Yaron Wittenstein asked on the mailing list if there is “any
possible way to track changes to HEAD using hooks”. He said he would
like to listen to events such as “pre-head-checkout” and
“post-head-checkout”, but thought that it was only possible using a
file watch over the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/refs&lt;/code&gt; directory.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, first replied that he thought there was no
better way, and that it was also required to watch &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/HEAD&lt;/code&gt;. He
also showed some code for
Linux/&lt;a href=&quot;https://en.wikipedia.org/wiki/Inotify&quot;&gt;inotify&lt;/a&gt; he uses to
automatically run tests against the current commit:&lt;/p&gt;

    &lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;gitdir&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;git rev-parse &lt;span class=&quot;nt&quot;&gt;--git-dir&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# We need delete_self to pick up changes to HEAD (since it gets renamed&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# over), and &quot;move&quot; to pick up changes in the refs directories.&lt;/span&gt;
inotifywait &lt;span class=&quot;nt&quot;&gt;-qq&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-t&lt;/span&gt; 60 &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; delete_self &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; move &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$gitdir&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/HEAD&quot;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$gitdir&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/refs&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Peff also recommended using Michael Haggerty’s
&lt;a href=&quot;https://github.com/mhagger/git-test&quot;&gt;git-test tool&lt;/a&gt; for avoiding
re-running tests against the same commits repeatedly.&lt;/p&gt;

    &lt;p&gt;Then Peff replied to his previous email that Patrick Steinhardt also
recently (since Git v2.28.0) implemented a new
&lt;a href=&quot;https://www.git-scm.com/docs/githooks#_reference_transaction&quot;&gt;ref-transaction hook&lt;/a&gt;
that can get triggered by updates to the ref that HEAD is pointing at.&lt;/p&gt;

    &lt;p&gt;Yaron replied that this seems to do the trick, except the hook
doesn’t execute when switching branches. He found a work-around
though by using the post-checkout hook in addition.&lt;/p&gt;

    &lt;p&gt;Peff said that he thought the hook would be triggered when HEAD is
updated by a branch switch, and wondered if that was a bug, a
missing feature, or something intentional in the ref-transaction
hook design.&lt;/p&gt;

    &lt;p&gt;Patrick replied that the reason is that
&lt;a href=&quot;https://git-scm.com/docs/git-symbolic-ref&quot;&gt;symrefs&lt;/a&gt; are not covered
by the reference transaction mechanism itself, which existed before
he implemented the new hook, and which the hook is using
underneath. He also said that he should update the documentation to
make it clearer what is covered by the hook and what’s not.&lt;/p&gt;

    &lt;p&gt;Yaron thanked Patrick for the clarification and asked if there were
plans for the hook to be called when symrefs are updated. He also
said it didn’t seem intuitive to him that the index and working dirs
are being updated, which calls the “post-index-change” hook, before
the transaction is approved, which in turn calls the “ref-transaction” hook.&lt;/p&gt;

    &lt;p&gt;Patrick replied that he didn’t have plan for the hook to support
symrefs, but wouldn’t oppose such effort. About the order in which
things were happening, he said that it is the way Git currently
works and that the goal of the ref-transaction hook, which he worked
on as part of his work for GitLab, was “to catch &lt;em&gt;all&lt;/em&gt; reference
updates such that one can coordinate across multiple git nodes the
same action to assert they’re moving from the same state to the same
state, regardless of whether they’re doing a
&lt;a href=&quot;https://git-scm.com/docs/git-push&quot;&gt;git-push&lt;/a&gt;,
&lt;a href=&quot;https://git-scm.com/docs/git-merge&quot;&gt;git-merge&lt;/a&gt; or
&lt;a href=&quot;https://git-scm.com/docs/git-update-ref&quot;&gt;git-update-ref&lt;/a&gt;”.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, further explained that “ref
transaction is only about changes to the refs” and that “there is no
such ‘transaction’ that treats a series of operations like object
creation and index manipulation that may happen before a group of
refs are updated as a single unit and make it atomic.”&lt;/p&gt;

    &lt;p&gt;Meanwhile Peff replied to Patrick’s first explanation about why
symrefs are not covered by the hook saying that it might be
something that could be fixed. He also said that GitHub’s custom
repository replication mechanism does track symref updates, but uses
a simple lock mechanism to get the state of the symrefs, while it
uses a 3-phase commit based on custom code similar to the
ref-transaction hook for normal refs.&lt;/p&gt;

    &lt;p&gt;Yaron then &lt;a href=&quot;https://lore.kernel.org/git/CAGgn8PdYsfbSE2vRunOXO1JqXoM8LxoD+5Zn74jmb9vpqDXh+Q@mail.gmail.com/&quot;&gt;summarized his understanding&lt;/a&gt;
of how things work and asked
if he was right. Peff replied that it matched his understanding.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqwnu8z03c.fsf@gitster.g/&quot;&gt;2.31.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqblbs19uf.fsf@gitster.c.googlers.com/&quot;&gt;2.31.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqim6019yd.fsf@gitster.c.googlers.com/&quot;&gt;2.30.2 and below for CVE-2021-21300&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqr1kwk0h9.fsf@gitster.c.googlers.com/&quot;&gt;2.31.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqlfbbshza.fsf@gitster.g/&quot;&gt;2.31.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.31.0.windows.1&quot;&gt;2.31.0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.31.0-rc2.windows.1&quot;&gt;2.31.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.31.0-rc1.windows.1&quot;&gt;2.31.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.31.0-rc0.windows.1&quot;&gt;2.31.0-rc0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.30.2.windows.1&quot;&gt;2.30.2(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.2&quot;&gt;3.0.2&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.8&quot;&gt;2.22.8&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.21/admin/release-notes#2.21.16&quot;&gt;2.21.16&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.1&quot;&gt;3.0.1&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.22/admin/release-notes#2.22.7&quot;&gt;2.22.7&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.21/admin/release-notes#2.21.15&quot;&gt;2.21.15&lt;/a&gt;,
&lt;a href=&quot;https://help.github.com/enterprise-server@2.20/admin/release-notes#2.20.24&quot;&gt;2.20.24&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/03/22/gitlab-13-10-released/&quot;&gt;13.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/03/17/security-release-gitlab-13-9-4-released/&quot;&gt;13.9.4, 13.8.6, and 13.7.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/03/08/gitlab-13-9-3-released/&quot;&gt;13.9.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/03/04/security-release-gitlab-13-9-2-released/&quot;&gt;13.9.2, 13.8.5 and 13.7.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/02/23/gitlab-13-9-1-released/&quot;&gt;13.9.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.5.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.6.6&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.6.5&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.6.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2021-03-09-git-clone-vulnerability-announced/&quot;&gt;Git clone vulnerability announced&lt;/a&gt;
by Taylor Blau on GitHub Blog, and
&lt;a href=&quot;https://lwn.net/Articles/848935/&quot;&gt;A vulnerability in Git&lt;/a&gt;
by Jake Edge on LWN.net.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2021-03-15-highlights-from-git-2-31/&quot;&gt;Highlights from Git 2.31&lt;/a&gt;
by Taylor Blau on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;Congratulations to &lt;a href=&quot;https://jsal.home.blog/&quot;&gt;Joey Salazar&lt;/a&gt; and
&lt;a href=&quot;https://charvi-077.github.io/&quot;&gt;Charvi Mendiratta&lt;/a&gt; who successfully completed their
&lt;a href=&quot;https://www.outreachy.org/alums/&quot;&gt;Outreachy internship&lt;/a&gt; working on Git!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.palantir.com/optimizing-gits-merge-machinery-1-127ceb0ef2a1&quot;&gt;Optimizing git’s merge machinery, #1&lt;/a&gt;
and &lt;a href=&quot;https://blog.palantir.com/optimizing-gits-merge-machinery-2-d81391b97878&quot;&gt;#2&lt;/a&gt;
by Elijah Newren on Palantir Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.honeybadger.io/blog/how-does-git-work/&quot;&gt;How Does Git Work?&lt;/a&gt;
by Julie Kent.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mikkel.ca/blog/git-is-my-buddy-effective-solo-developer/&quot;&gt;Git is my buddy: Effective Git as a solo developer&lt;/a&gt;
by Mikkel Paulson.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.bitsrc.io/how-to-utilize-submodules-within-git-repos-5dfdd1c62d09&quot;&gt;How to Utilize Submodules within Git Repos&lt;/a&gt;:
One Solution When the Primary Code Can be Open Source, but Specific Content Needs to be Private,
by Paige Niedringhaus on Bits and Pieces blog (a Medium site).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lukasmestan.com/using-mailmap-in-git-repository/&quot;&gt;How to use .mailmap file in git repository&lt;/a&gt;
by Lukáš Mešťan (2020).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/what-is-trunk-based-development/&quot;&gt;What is Trunk Based Development? A Different Approach to the Software Development Lifecycle&lt;/a&gt;
by Kealan Parr on freeCodeCamp.  This approach was also one of those described
in &lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
by Martin Fowler, which was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/&quot;&gt;Git Rev News Edition #63&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2021-03-16-improving-large-monorepo-performance-on-github/&quot;&gt;Improving large monorepo performance on GitHub&lt;/a&gt;
by Scott Arbeit on GitHub Blog, in the Engineering section.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.plover.com/prog/git-prompt-hook-hack.html&quot;&gt;Hacking the git shell prompt&lt;/a&gt;
by Mark Dominus describes a hack creating a generic mechanism for abbreviating
or transforming the branch name in the prompt.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/boost-programming-skills-read-git-code/&quot;&gt;Boost Your Programming Skills by Reading Git’s Code&lt;/a&gt;
by Jacob Stopak on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.lambdatest.com/blog/how-to-setup-continuous-integration-with-git-jenkins/&quot;&gt;How To Set Up Continuous Integration With Git and Jenkins&lt;/a&gt;
by Suparna Khamaru on LambdaTest Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/stack-labs/store-your-kubernetes-secrets-in-git-thanks-to-kubeseal-hello-sealedsecret-2i6h&quot;&gt;Store your Kubernetes Secrets in Git thanks to Kubeseal. Hello SealedSecret!&lt;/a&gt;
by Aurélie Vache on Dev.to.  More generic solutions for storing secrets in Git repository
were described in Git Rev News editions &lt;a href=&quot;https://git.github.io/rev_news/2018/05/16/edition-39/&quot;&gt;#39&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2019/11/20/edition-57/&quot;&gt;#57&lt;/a&gt;, among others.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://gitenberg.github.io/&quot;&gt;Project GITenberg&lt;/a&gt; is a Free and Open,
Collaborative, Trackable and Scriptable digital library.  It leverages the
power of the Git version control system and the collaborative potential of
GitHub to make books more open.  The books in this project originate from
the work of &lt;a href=&quot;http://www.gutenberg.org/&quot;&gt;Project Gutenberg&lt;/a&gt;, a volunteer effort
to digitize and archive cultural works, mostly the full texts of
public domain books.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/FredrikNoren/ungit&quot;&gt;ungit&lt;/a&gt; is a Git command-line UI 
with text editor integrations,
that utilizes your web browser as graphical interface.  It is intended to make
Git easier to use.  In this it is somewhat similar to no longer actively developed
&lt;a href=&quot;https://people.gnome.org/~newren/eg/&quot;&gt;Easy Git&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Ævar Arnfjörð Bjarmason and Matheus
Tavares Bernardino.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 72 (February 27th, 2021)</title>
      <link>https://git.github.io/rev_news/2021/02/27/edition-72/</link>
      <pubDate>Sat, 27 Feb 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/02/27/edition-72/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-72-february-27th-2021&quot;&gt;Git Rev News: Edition 72 (February 27th, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 72nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of January 2021.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20210111003740.1319996-1-sandals@crustytoothpaste.net/&quot;&gt;[PATCH 0/5] Support for commits signed by multiple algorithms&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;brian m. carlson sent a patch series to allow verifying signed
commits and tags when using multiple hash algorithms. This is a
follow up from brian’s multi-year work on supporting the SHA-256
hash algorithm in Git, to deal with the fact that the original SHA-1
algorithm is becoming more and more outdated and insecure.&lt;/p&gt;

    &lt;p&gt;One of the trickiest part in supporting a new hash algorithm is that
when Git objects (except blobs) are converted to the new hash, their
contents changes, because the hashes they contain (to reference
other Git objects) are converted too. So old signatures they contain
become invalid.&lt;/p&gt;

    &lt;p&gt;A way to overcome this issue is to add a new signature, that signs
the converted object, to each signed object that is converted. This
way such object would have 2 signatures, and can always be verified
using one of them, even if it gets converted back and forth.&lt;/p&gt;

    &lt;p&gt;brian’s patch series addressed the issue that for SHA-256 tags it
was initially planned to have the signature in a Git object header
(which is called a header signature) instead of at the end of the
tag message (which is called a trailing signature), but
unfortunately the patch implementing that got lost. So we use
trailing signatures.&lt;/p&gt;

    &lt;p&gt;brian then explained “We can’t change this now, because otherwise it
would be ambiguous whether the trailing signature on a SHA-256
object was for the SHA-256 contents or whether the contents were a
rewritten SHA-1 object with no SHA-256 signature at all.” So the
solution he implemented was to “use the trailing signature for the
preferred hash algorithm and use a header for the other variant”.&lt;/p&gt;

    &lt;p&gt;brian thinks this solution is the best we can do in the current
situation, as it still allows converting back and forth between
hashes, and verifying signatures created with older versions of Git,
though tags signed with multiple algorithms can’t be verified with
older versions of Git.&lt;/p&gt;

    &lt;p&gt;For commits, brian’s patch series fixes the bug that old header
signatures weren’t stripped off before verifying new signatures, so
verification always failed.&lt;/p&gt;

    &lt;p&gt;The result of his series is then that signing both commits and tags
can now be round-tripped through both SHA-1 and SHA-256 conversions.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to a patch in the series
suggesting using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;size_t&lt;/code&gt; type for byte lengths, instead of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsigned long&lt;/code&gt;, as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsigned long&lt;/code&gt; was breaking 32-bit builds.&lt;/p&gt;

    &lt;p&gt;brian agreed and sent a
&lt;a href=&quot;https://lore.kernel.org/git/20210111035840.2437737-1-sandals@crustytoothpaste.net/&quot;&gt;version 2&lt;/a&gt;
of the series with Junio’s fix.&lt;/p&gt;

    &lt;p&gt;Junio replied to the cover letter of this series asking “How widely
are SHA-256 tags in use in the real world, though?”, and if it was really
too late to use a header signature for tags, as was originally
planned.&lt;/p&gt;

    &lt;p&gt;brian replied:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;I don’t know. I don’t know of any major hosting platform that
  supports them, but of course many people may be using them
  independently on self-hosted instances.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;He also explained why he thought the solution didn’t matter much,
because he’d just noticed that old Git versions don’t properly strip
header signatures, so wouldn’t anyway be able to verify tags or
commits with multiple signatures.&lt;/p&gt;

    &lt;p&gt;He ended his reply saying “there’s a lot more prep work (surprise)
before we get to anything interesting.” To which Junio replied:
“Uncomfortably excited to hear this ;-)”.&lt;/p&gt;

    &lt;p&gt;brian &lt;a href=&quot;https://lore.kernel.org/git/X%2F0IaVkxqbYxKJBf@camp.crustytoothpaste.net/&quot;&gt;replied with an interesting summary of his in progress work&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Gábor Szeder then reported a Clang warning, while Junio suggested
more &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsigned long&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;size_t&lt;/code&gt; changes.&lt;/p&gt;

    &lt;p&gt;brian then sent a
&lt;a href=&quot;https://lore.kernel.org/git/20210118234915.2036197-1-sandals@crustytoothpaste.net/&quot;&gt;version 3&lt;/a&gt;
of his patch series with fixes for the issues reported by Gábor and
Junio, and then a few weeks later
&lt;a href=&quot;https://lore.kernel.org/git/20210211020806.288523-1-sandals@crustytoothpaste.net/&quot;&gt;version 4&lt;/a&gt;
to fix another small issue.&lt;/p&gt;

    &lt;p&gt;This patch series is scheduled to be merged in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; branch
soon.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-taylor-blau&quot;&gt;Developer Spotlight: Taylor Blau&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I am Taylor. I work at GitHub, where I spend most of my time
contributing to the Git project.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I’m still submitting many of the patches, but I think
&lt;a href=&quot;https://lore.kernel.org/git/e64504bad6e181522946a8f234e12f569bede89e.1612998106.git.me@ttaylorr.com/&quot;&gt;multi-pack reachability bitmaps&lt;/a&gt;
will be my most important contribution to Git so far.&lt;/p&gt;

    &lt;p&gt;If they work, they’ll allow hosting providers who rely on reachability
bitmaps more flexibility to control when and how they repack their
repository. If you want to use bitmaps, you have no choice but to
repack your repository into one enormous pack. Multi-pack reachability
bitmaps mean that you won’t have to, and can instead repack your
repository however you want.&lt;/p&gt;

    &lt;p&gt;If I’m limited to things that I have finished, I would say that the
&lt;a href=&quot;https://lore.kernel.org/git/cover.1610129989.git.me@ttaylorr.com&quot;&gt;on-disk reverse index&lt;/a&gt;
is another good one. But that’s kind of cheating, since it’s related
to multi-pack bitmaps ;).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Most of my time is spent working on multi-pack bitmaps. There are a lot
of different topics in &lt;a href=&quot;https://github.com/ttaylorr/git&quot;&gt;my fork&lt;/a&gt; that
all need to get merged in order to  make this feature work. So, I’m
spending my time in all of the usual ways: submitting patches, responding
to review, submitting more patches, and so on.&lt;/p&gt;

    &lt;p&gt;When I’m not doing that, I enjoy to read and review patches from other
folks on the list. I feel like there is a lot of exciting work going on
recently, and so I’m always interested.&lt;/p&gt;

    &lt;p&gt;Every release or so I have the pleasure of writing a
&lt;a href=&quot;https://github.blog/author/ttaylorr/&quot;&gt;“release highlights” blog post&lt;/a&gt;
that GitHub publishes. We’re still a few weeks away from a release
(at the time of writing), so it’s not something that I’m working on yet,
but it will come up soon enough.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I’m not sure :). I care a lot about performance on large repositories,
so I think that if I were in charge of such a team, that I would just
set them loose to explore the boundaries of what’s possible, and push
them further.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Gosh, I would love to get rid of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.keep&lt;/code&gt; packs, or at least the
distinction between in-core and on-disk ones. They’re incredibly useful,
but they are subtly different, in ways that are sort of hard to reason
about.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I use &lt;a href=&quot;https://jonas.github.io/tig/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt;&lt;/a&gt; often, particularly its
blame and log view. Michael Haggerty’s &lt;a href=&quot;https://github.com/mhagger/git-when-merged&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git when-merged&lt;/code&gt;&lt;/a&gt;
is another indispensable tool in my workflow.&lt;/p&gt;

    &lt;p&gt;I’m curious to try Stephen Jung’s &lt;a href=&quot;https://github.com/tummychow/git-absorb&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git absorb&lt;/code&gt;&lt;/a&gt;
tool, but I haven’t gotten to it yet.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqsg662k8p.fsf@gitster.c.googlers.com/&quot;&gt;2.30.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.30.1.windows.1&quot;&gt;2.30.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/02/22/gitlab-13-9-released/&quot;&gt;13.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/02/11/security-release-gitlab-13-8-4-released/&quot;&gt;13.8.4, 13.7.7 and 13.6.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/02/05/gitlab-13-8-3-released/&quot;&gt;13.8.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/02/01/security-release-gitlab-13-8-2-released/&quot;&gt;13.8.2, 13.7.6 and 13.6.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/01/26/gitlab-13-8-1-released/&quot;&gt;13.8.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/01/25/gitlab-13-7-5-released/&quot;&gt;13.7.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.3.html#332&quot;&gt;3.3.2&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#327&quot;&gt;3.2.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#3112&quot;&gt;3.1.12&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#3016&quot;&gt;3.0.16&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21627&quot;&gt;2.16.27&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21522&quot;&gt;2.15.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.5.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.6.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;At FOSDEM 2021 (this year the event happened in a virtual format)
there was a lightning talk &lt;a href=&quot;https://fosdem.org/2021/schedule/event/git_learning_game/&quot;&gt;Building a Git learning game: A playful approach to version control&lt;/a&gt; (video available)
initiated by two students who wanted to understand Git themselves…
This &lt;a href=&quot;https://ohmygit.org/&quot;&gt;Oh My Git!&lt;/a&gt; game
&lt;a href=&quot;https://github.com/git-learning-game/oh-my-git&quot;&gt;is Open Source&lt;/a&gt; and
written using the &lt;a href=&quot;https://godotengine.org/&quot;&gt;Godot game engine&lt;/a&gt;.
There are binaries for Linux, macOS, and Windows, but currently no web
version, as the game uses real Git as a part of its backend (with some
sandboxing).&lt;/p&gt;

    &lt;p&gt;The similar interactive online &lt;a href=&quot;http://learngitbranching.js.org/&quot;&gt;Learn Git Branching&lt;/a&gt;
game was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;Git Rev News Edition #30&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;In &lt;a href=&quot;https://www.smashingmagazine.com/2021/02/getting-the-most-out-of-git/&quot;&gt;Getting The Most Out Of Git&lt;/a&gt;
article in Smashing Magazine, the author Tobias Günther explores some of
the less known but very useful features in Git: how to recover deleted commits,
clean up your commit history, use submodules to manage third-party code
and compose commits with precision.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-use-branches-in-git/&quot;&gt;How to Use Branches in Git – the Ultimate Cheatsheet&lt;/a&gt;
by Tobias Günther on freeCodeCamp describes how to create, rename, switch,
publish, track, delete, merge, rebase and compare branches.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/collaborate-on-data-science-projects-with-dagshub/&quot;&gt;How to Collaborate on Data Science Projects with DAGsHub&lt;/a&gt;
(and &lt;a href=&quot;https://dvc.org&quot;&gt;DVC&lt;/a&gt; (Data Version Control)), by Linda Ikechukwu
on freeCodeCamp.  DVC was first mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://martinfowler.com/bliki/RefinementCodeReview.html&quot;&gt;RefinementCodeReview&lt;/a&gt;
post by Martin Fowler describes an alternative to the &lt;a href=&quot;https://martinfowler.com/bliki/PullRequest.html&quot;&gt;PullRequest&lt;/a&gt;
mechanism for code review, namely one that is triggered each time
the code is looked at rather than when the code is added to the codebase.&lt;/li&gt;
  &lt;li&gt;In &lt;a href=&quot;https://css-tricks.com/monorepo/&quot;&gt;Monorepos&lt;/a&gt; Chris Coyier explains the reasoning,
pros and cons for them, moving back toward a monorepo at &lt;a href=&quot;https://codepen.io/&quot;&gt;CodePen&lt;/a&gt;.
You can find links to articles advocating for and against monorepos,
among others, in &lt;a href=&quot;https://git.github.io/rev_news/2019/01/23/edition-47/&quot;&gt;Git Rev News Edition #47&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gitguardian.com/rewriting-git-history-cheatsheet/&quot;&gt;Rewriting your git history, removing files permanently - cheatsheet &amp;amp; guide&lt;/a&gt;
by Don Goodman-Wilson on GitGuardian blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://learn.gitlab.com/version-control/version-control-best-practice&quot;&gt;2020 Version control best practices: Five easy ways to enhance team collaboration&lt;/a&gt;
(PDF) – a booklet by GitLab.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dagshub.com/docs/reference/dagshub_storage/&quot;&gt;DAGsHub Storage&lt;/a&gt;
is an alternative (and free-to-use) &lt;a href=&quot;https://dvc.org&quot;&gt;DVC&lt;/a&gt; remote
that requires zero configuration.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://commitizen.github.io/cz-cli/&quot;&gt;Commitizen&lt;/a&gt; is an Open Source project
that helps contributors be good Open Source citizens. It accomplishes this
by prompting them to follow commit message conventions at commit time,
asking the user fill in any required fields and automatically formatting
the commit message according to selected convention.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/benthayer/git-gud&quot;&gt;Git Gud&lt;/a&gt; by Ben Thayer
is a &lt;em&gt;command line&lt;/em&gt; game designed to help you learn how to use Git.
Note that there was a pretty barebone visual web-based Git simulator
&lt;a href=&quot;https://nic-hartley.github.io/git-gud/&quot;&gt;with the same name&lt;/a&gt; by Nic Hartley, which
got mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Git Rev News Edition #48&lt;/a&gt;,
but it is no longer available.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Taylor Blau.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 71 (January 28th, 2021)</title>
      <link>https://git.github.io/rev_news/2021/01/28/edition-71/</link>
      <pubDate>Thu, 28 Jan 2021 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2021/01/28/edition-71/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-71-january-28th-2021&quot;&gt;Git Rev News: Edition 71 (January 28th, 2021)&lt;/h2&gt;

&lt;p&gt;Welcome to the 71st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of December 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20201101193330.24775-1-sorganov@gmail.com/&quot;&gt;[PATCH 00/26] git-log: implement new –diff-merge options&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Last November Sergey Organov sent a 26 patch long series to the
mailing list. This series added a number of new modes to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --diff-merges=&amp;lt;mode&amp;gt;&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Before this patch series, there would be no diff for merge commits
unless one of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-m&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-c&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cc&lt;/code&gt; was given. And in case one of
these options was given, then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges=off&lt;/code&gt;, or its
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-diff-merges&lt;/code&gt; synonym, could be used to remove that diff output
for merge commits. This was the only possible use of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges=&amp;lt;mode&amp;gt;&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Sergey’s patch series introduced four new modes. Three of them,
“separate”, “combined” and “dense-combined” do not generate new diff
output. They are just synonyms of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-m&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-c&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cc&lt;/code&gt;
respectively.&lt;/p&gt;

    &lt;p&gt;The fourth new mode, called “first-parent”, though allows to get the
same output as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-p --first-parent&lt;/code&gt;, but “without the changes in
history traversal that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--first-parent&lt;/code&gt; option causes”.&lt;/p&gt;

    &lt;p&gt;Sergey’s patch series also refactored some code and fixed a small
issue. In a follow up email Sergey asked questions related to
further possible issues related to how &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-m&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-c&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cc&lt;/code&gt;
interact with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--oneline&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Elijah Newren replied to Sergey’s questions, and a long discussion
involving Junio Hamano, the Git maintainer, started about different
technical topics, especially the interactions between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-p&lt;/code&gt; and the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-m&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-c&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cc&lt;/code&gt; options.&lt;/p&gt;

    &lt;p&gt;Elijah and Philip Oakley also commented on small issues in a few
patches.&lt;/p&gt;

    &lt;p&gt;Sergey then sent a new version, that he named v1, of his patch
series with 27 patches, so one more than in the original series. The
changes were mostly typo and documentation fixes.&lt;/p&gt;

    &lt;p&gt;Elijah and Junio commented on the patch series. Elijah and Sergey
discussed some new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--remerge-diff&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--remerge-diff-only&lt;/code&gt;
options Elijah had been working on, and how there could also be a
related &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges=remerge&lt;/code&gt; mode.&lt;/p&gt;

    &lt;p&gt;Junio found a few issues and suggested some renaming and test
improvements.&lt;/p&gt;

    &lt;p&gt;Sergey sent a new v2 version of his patch series with 33 patches, so
6 more than in v1. One change compared to the previous version was
that the diff output for the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges&lt;/code&gt; options didn’t affect
non-merge commits. Another change was that short mnemonics
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges=(1|m|c|cc)&lt;/code&gt; were provided on top of long mode
names. A lot of smaller changes addressed Elijah’s and Junio’s
reviews.&lt;/p&gt;

    &lt;p&gt;Elijah and Sergey then discussed further improvements especially to
the documentation. Felipe Contreras and Junio sometimes also chimed
in with further explanations or suggestions.&lt;/p&gt;

    &lt;p&gt;Sergey sent a new v3 version, with 32 patches, one less than in v2.
The changes were mostly following reviewers’ suggestions. Felipe
commented positively on one patch, and Junio said he didn’t spot
anything objectionable in the series and was OK to start merging it
to the next branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-sergey-organov&quot;&gt;Developer Spotlight: Sergey Organov&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a software engineer and system architect at JAVAD GNSS, working in their
Moscow Research Center, in Russia. We design (and manufacture) high-end
GNSS receivers, both hardware and software. Design and implementation of
receiver firmware is my primary job for about 25 years already. I’m
also responsible for the development tools our team is using, and that’s
where GNU/Linux and then Git come to the picture.&lt;/p&gt;

    &lt;p&gt;Graduated from “Moscow Engineering Physics Institute” back in 1989 and
qualified in “Experimental Methods in Nuclear Physics”, I was always
interested in computing. I then worked for about 10 years in “Kurchatov
Institute” in the field of computer modeling of nuclear radiation and
detectors, as well as in advanced processing of experimental results.
Then, a few years later, I started to work for JAVAD as well, in parallel.
A few more years later, I left Kurchatov and entirely focused on
working for JAVAD full-time, which is my current job.&lt;/p&gt;

    &lt;p&gt;Real-time embedded applications, also using Linux on the targets, is my
primary field of expertise nowadays.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I didn’t contribute much. I’d name the method of rebasing of merge
commits, that has been &lt;a href=&quot;https://git.github.io/rev_news/2018/04/18/edition-38#general&quot;&gt;covered in the Git Rev News&lt;/a&gt;
some time ago, as the most important one.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Right now I’m working on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges&lt;/code&gt; options for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;. The
original stimulus was very surprising output of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -p -m&lt;/code&gt; that
made me mad the first time I encountered it. After finishing initial
implementation of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--diff-merges&lt;/code&gt; options, I now aim at finally giving
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -m&lt;/code&gt; natural meaning of printing the diff for merge commits with
respect to the first parent only.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Actually, I have 2 favorites:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;Designing support for explicit commits grouping, somewhat similar to
grouping objects in graphical editors, likely implemented as a container
commit capturing a particular part of the DAG. It’d be then seen as a
single commit by default, unless the user specifically asks to look inside.
If we had it, our typical history would be more linear, feature branches
essentially becoming single (group) commits, that’d make history simpler
to traverse and to reason about.&lt;/p&gt;

        &lt;p&gt;Right now the only poor-man approximation for that is a branch that is merged
back to its origin (the true-non-evil merge, as I call it), which results in a
history that looks like a sequence of bubbles, but it lacks direct
support which the specific grouping feature would have.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Designing a new history editor that will aim at being the ultimate
replacement for both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt;, which are
essentially the same thing at fundamental level. As useful as these
existing features are, they have wide opportunities for improvements
that apparently don’t fit into the current design, and their history of
incremental adaptations to different needs made quite a mess of them.&lt;/p&gt;

        &lt;p&gt;Covering all the functionality of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cherry-pick&lt;/code&gt;, the two most
important new features I’d like to see are:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;Ensuring, by design, one of the primary features of any reasonable
editing tool: carefully preserve the content if no actual editing has
been made or requested. This should be ensured even if the tool is
forced to do the full job of re-creating the history according to the
instructions. I.e., the cycle: load/mark-as-modified/save should result in
the original result by default.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Better replacement for to-do lists. Carefully designed format for
describing the DAG in a text form convenient for humans and for editing with
a text editor, with simple yet strictly defined syntax and semantics,
preferably supporting generic programming language features. For
example, it could be based on some existing language, say, Tcl. Yet it
should take the best features of the current format and look familiar
enough to be immediately useful without a significant learning cycle.&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;[That said, do we need two teams of expert developers for that, or one
would suffice, I wonder?]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Support for octopus merges. Multiple (back) references could then be
reused for more useful things, like keeping history of rebasing, and/or
for commits grouping (see above).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could add something to Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I’d add a simple model behind the Git command-line options, so that their
design came from the model rather than entirely from the use cases, as
it happens to be now. It’d play a similar positive role in UI design as
the Git core data model plays in the features design.&lt;/p&gt;

    &lt;p&gt;Then, I sometimes think about the addition of a single NULL-commit, the
ultimate parent of all the Git commits all over the world. I’m not sure
it has enough value in simplifying corner cases in Git’s implementation,
but it fits so nice into the elegant Git data model!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

    &lt;p&gt;Emacs and the Magit, its interface to Git, in particular, as well as a
few parts of Emacs generic VC interface that features Git among others.
The Magit got to the point already where I rarely find myself using the Git
command-line directly, and then mostly for some batch-processing, or on
hosts where Emacs is not readily available.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqk0t1g326.fsf@gitster.c.googlers.com/&quot;&gt;2.30.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.30.0.windows.2&quot;&gt;2.30.0(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.30.0.windows.1&quot;&gt;2.30.0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://help.github.com/enterprise-server@3.0/admin/release-notes#3.0.0.rc1&quot;&gt;3.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2021/01/22/gitlab-13-8-released/&quot;&gt;13.8&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2021/01/14/critical-security-release-gitlab-13-7-4-released/&quot;&gt;13.7.4, 13.6.5 and 13.5.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/01/08/gitlab-13-7-3-released/&quot;&gt;13.7.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2021/01/07/security-release-gitlab-13-7-2-released/&quot;&gt;13.7.2, 13.6.4, and 13.5.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.3.html#331&quot;&gt;3.3.1&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#326&quot;&gt;3.2.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#3111&quot;&gt;3.1.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.5.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.6.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2021/01/21/high-availability-git-storage-with-praefect/&quot;&gt;Meet Praefect: The traffic manager making your Git data highly available&lt;/a&gt;:
How GitLab scales Git and makes it highly available.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devclass.com/2021/01/04/git-2_30-version-control/&quot;&gt;Git your updates now: Version control system hits 2.30, preps for main switch&lt;/a&gt;
by Julia Schmidt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-12-22-git-clone-a-data-driven-study-on-cloning-behaviors/&quot;&gt;Git clone: a data-driven study on cloning behaviors&lt;/a&gt;
by Solmaz Abbaspoursani on GitHub blog continues where 
&lt;a href=&quot;https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/&quot;&gt;Derrick Stolee’s article on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; options&lt;/a&gt;,
mentioned in the &lt;a href=&quot;https://git.github.io/rev_news/2020/12/26/edition-70/&quot;&gt;previous edition&lt;/a&gt;, left off.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.alchemists.io/articles/git_metadata_cloning&quot;&gt;Git Metadata Cloning&lt;/a&gt; - Learn about the
performance impacts of cloning repository metadata.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/842415/&quot;&gt;MAINTAINERS truth and fiction&lt;/a&gt;
article by Jonathan Corbet on LWN.net
describes how one can analyze Git history of the Linux kernel
for insights to be gleaned from comparing MAINTAINERS entries
against activity in the real world.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-handle-multiple-git-configurations-in-one-machine/&quot;&gt;How to Use Multiple Git Configs on One Computer&lt;/a&gt;
with the help of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;includeIf&lt;/code&gt; directive,
by Dhruv Barochiya on freeCodeCamp.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/timmybytes/keeping-git-commit-messages-consistent-with-a-custom-template-1jkm&quot;&gt;Keeping Git Commit Messages Consistent with a Custom Template&lt;/a&gt;
by Timothy Merritt on DEV.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.eseth.org/2020/mergetools.html&quot;&gt;Conflict resolution in various mergetools&lt;/a&gt;
by Seth House was &lt;a href=&quot;https://github.com/whiteinge/eseth/blob/e993b4b9c5f7e5d2c83890bcb7cd218abe867afd/2020/mergetools.md&quot;&gt;previously an appeal to mergetools authors to stop doing three-way merges from scratch&lt;/a&gt;,
but now describes the effect of &lt;a href=&quot;https://lore.kernel.org/git/5fe4bec2da21a_19c92085f@natae.notmuch/T/#t&quot;&gt;patches by Felipe Contreras and several other people&lt;/a&gt;
that changed the default behaviour of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git mergetool&lt;/code&gt; (this can be controlled
with the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mergetool.autoMerge&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mergetool.&amp;lt;tool&amp;gt;.autoMerge&lt;/code&gt; config options).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/12/git&quot;&gt;10 things to love about Git&lt;/a&gt; by Joshua Allen Holm
lists OpenSource.com readers’ favorite Git articles of the year 2020.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ag91/code-compass&quot;&gt;code-compass&lt;/a&gt; is a package that is intended
to guide you in your software development within Emacs.  For example, you can
&lt;a href=&quot;https://ag91.github.io/blog/2021/01/12/emacs-as-your-code-compass-let-history-show-you-which-files-to-edit-next/&quot;&gt;let history show you which files to edit next&lt;/a&gt; or
&lt;a href=&quot;https://ag91.github.io/blog/2021/01/07/emacs-as-your-code-compass-how-related-are-these-modules/&quot;&gt;examine how files are historically related to each other&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/crev-dev/crev&quot;&gt;Crev&lt;/a&gt; is a Scalable, social,
Code REView and recommendation system (rather than &lt;em&gt;change&lt;/em&gt; review system);
currently &lt;a href=&quot;https://github.com/crev-dev/cargo-crev&quot;&gt;Crev for Rust/cargo&lt;/a&gt;
is ready and working.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Sergey Organov and Brooke Kuhlmann.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 70 (December 26th, 2020)</title>
      <link>https://git.github.io/rev_news/2020/12/26/edition-70/</link>
      <pubDate>Sat, 26 Dec 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/12/26/edition-70/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-70-december-26th-2020&quot;&gt;Git Rev News: Edition 70 (December 26th, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 70th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of November 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Three &lt;a href=&quot;https://www.outreachy.org/alums/&quot;&gt;Outreachy interns&lt;/a&gt; have
been accepted to work on Git this winter:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Sangeeta from India will be mentored by Kaartic Sivaraam and
Christian Couder to work on the ‘&lt;em&gt;Accelerate rename detection and
the “range-diff” command in Git&lt;/em&gt;’ project. Sangeeta started
&lt;a href=&quot;https://sangu09.github.io/&quot;&gt;blogging about her internship&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Joey Salazar from Costa Rica will be mentored by Emily Shaffer and
Jonathan Nieder to work on the ‘&lt;em&gt;Add Git protocol support to
Wireshark&lt;/em&gt;’ project. Joey also started
&lt;a href=&quot;https://jsal.home.blog/blog/&quot;&gt;blogging&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Charvi Mendiratta from Faridabad, Haryana, India will be mentored
by Phillip Wood and Christian Couder to work on on the ‘&lt;em&gt;Improve
dropping and rewording commits in Git interactive rebase&lt;/em&gt;’
project. Charvi also started
&lt;a href=&quot;https://charvi-077.github.io/&quot;&gt;blogging&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/cover.1604006121.git.steadmon@google.com/&quot;&gt;[PATCH 00/10] Advertise trace2 SID in protocol capabilities&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Last October Josh Steadmon sent a patch series to the mailing
list. The goal of the patch series was to allow a Git client and a
Git server, that are communicating to perform a Git operation like a
push, a fetch or a clone, to share each other’s trace2 session ID
(SID).&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://git-scm.com/docs/api-trace2&quot;&gt;Trace2&lt;/a&gt; is a relatively new
tracing mechanism that was developed primarily by Jeff Hostetler to
improve on the previous &lt;a href=&quot;https://git-scm.com/docs/api-trace&quot;&gt;trace mechanism&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;These tracing mechanisms let users print debug, performance, and
telemetry logs to a file or a file descriptor, so that they can
better understand what’s going on inside Git processes.&lt;/p&gt;

    &lt;p&gt;Josh’s patch series allows a Git client to record the server’s
trace2 session ID in its logs, and vice versa, by advertising the
session ID in a new “trace2-sid” protocol capability.&lt;/p&gt;

    &lt;p&gt;Josh asked 2 questions in the cover letter of his patch series
though. He first asked if the code in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2/&lt;/code&gt; directory was
supposed to contain only implementation details hidden from the rest
of Git and accessible only through the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2.h&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2.c&lt;/code&gt;
files. The reason for this question is that Josh’s code needed to
access the trace2 session ID which was previously managed only in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2/tr2_sid.h&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2/tr2_sid.c&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Josh’s second question was if it was OK to add a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2.announceSID&lt;/code&gt; configuration option for the feature his patch
series implemented. The reason is that some Git processes on
servers, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git upload-pack&lt;/code&gt;, have previously been prevented to
read some potentially malicious config options from local
repositories for security reasons.&lt;/p&gt;

    &lt;p&gt;Jeff Hostetler was very happy with Josh’s patch series saying “Very
nice! This should be very helpful when matching up client and server
commands.”&lt;/p&gt;

    &lt;p&gt;He also replied that he indeed intended the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2/&lt;/code&gt; directory to
be opaque, so “that just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2.h&lt;/code&gt; contains the official API”. And he
suggested adding a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2_session_id()&lt;/code&gt; function to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2.h&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2.c&lt;/code&gt;, that would just call the existing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tr2_sid_get()&lt;/code&gt;
function from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2/tr2_sid.h&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2/tr2_sid.c&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Jeff also pointed to the fact that the session ID of a process was
built up based on the session IDs of its parent processes. For
example a Git process spawned from another Git process will have a
session ID of the form &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;sid1&amp;gt;/&amp;lt;sid2&amp;gt;&lt;/code&gt;, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;sid1&amp;gt;&lt;/code&gt; is the
session ID of its parent. And if it spawns another Git process, the
session ID of this new process will be of the form
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;sid1&amp;gt;/&amp;lt;sid2&amp;gt;/&amp;lt;sid3&amp;gt;&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Jeff also mentioned that if the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_TRACE2_PARENT_SID&lt;/code&gt; environment
variable, which is used to communicate the session ID of the parent
process, already contains something, for example ‘hello’, when the
initial Git process is launched, then the session IDs will
accumulate after this existing content, like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hello/&amp;lt;sid1&amp;gt;/&amp;lt;sid2&amp;gt;/&amp;lt;sid3&amp;gt;&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Jeff wondered if clients and servers should share only the last
session ID component, for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;sid3&amp;gt;&lt;/code&gt;, instead of the full
session ID.&lt;/p&gt;

    &lt;p&gt;While Jeff couldn’t answer Josh’s second question about possible
security issues with using a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2.announceSID&lt;/code&gt; configuration
option, Junio Hamano, the Git maintainer, replied that it was
probably OK, given the fact that Git processes, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
upload-pack&lt;/code&gt;, already take into account at least some boolean config
options, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uploadpack.allowrefinwant&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Josh thanked Jeff for his review, and said that in the
&lt;a href=&quot;https://lore.kernel.org/git/cover.1604355792.git.steadmon@google.com/&quot;&gt;version 2&lt;/a&gt;
of his patch series he had implemented the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2_session_id()&lt;/code&gt;
function in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2.h&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2.c&lt;/code&gt; Jeff had suggested, and that
it was probably OK for clients and servers to share their full
session ID rather than the last component.&lt;/p&gt;

    &lt;p&gt;Junio asked Josh to document this design decision to share the full
session ID. Josh replied to Junio that he did that in the
&lt;a href=&quot;https://lore.kernel.org/git/cover.1605136908.git.steadmon@google.com/&quot;&gt;version 3&lt;/a&gt;
of his patch series.&lt;/p&gt;

    &lt;p&gt;In reply to version 2 of the patch series though, Junio had also
requested that session IDs, how they look like, and what special
characters they can contain, should be better documented to help
third parties writing their own implementation of the protocol.&lt;/p&gt;

    &lt;p&gt;This spawned a small discussion thread where Jeff, Ævar Arnfjörð
Bjarmason, Junio and Josh eventually agreed on limiting the content
of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_TRACE2_PARENT_SID&lt;/code&gt; environment variable and session ID to
printable, non-whitespace characters that fit into a Git protocol
line.&lt;/p&gt;

    &lt;p&gt;Another discussion following version 2 between Josh, Junio and
Johannes Schindelin, alias Dscho, was about Junio’s suggestion to
separate the concept of “session” from the trace2 mechanism. This
led to the decision to use just “session ID”, instead of “trace2
session ID”, in the documentation, and to call the new configuration
option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;transport.advertiseSID&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trace2.announceSID&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Other smaller discussions over details of the implementation and the
documentation followed version 2, but version 3 got merged into the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next&lt;/code&gt; and then the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; branch. So this new feature will be
released in soon upcoming Git v2.30.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-felipe-contreras&quot;&gt;Developer Spotlight: Felipe Contreras&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a software engineer who has worked in all areas of software
development. These days they use the term “full stack developer” for a
developer that works on all areas of web development, which I have
done, but I’ve also worked on Linux kernel development, middleware,
UI; you name it.&lt;/p&gt;

    &lt;p&gt;Right now I’m a freelancer offering services to local companies doing
mostly web development, but not quite.&lt;/p&gt;

    &lt;p&gt;It’s hard to pigeonhole me because I not only do software development,
I also write a blog (which is not only about software), I’ve moderated
online communities, and I read a lot from intellectuals regarding the
ongoing culture war, and so on.&lt;/p&gt;

    &lt;p&gt;I guess you could say I’m a jack of all trades (but I’ve actually
mastered a few).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;That’s very hard to tell because I’ve worked all over the place, so
most of my changes are minor improvements. But I guess the one with
the biggest impact to users would have to be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-remote-hg&lt;/code&gt;; a
bidirectional bridge between Git and Mercurial.&lt;/p&gt;

    &lt;p&gt;Ironically I’ve never had to use Mercurial, nor worked on a project
that uses Mercurial. However, I did work on projects that used
Subversion and CVS back in 2005, when Git started, and I found it
useful that there existed tools to use Git while working with other
version control systems.&lt;/p&gt;

    &lt;p&gt;I used to contribute to Pidgin (the MSN protocol parts), which used
Monotone, and I refused to work on such a horrendous VCS, so I started
to work on scripts to convert Monotone repositories to Git, and I
contributed my patches back through Bugzilla (like all other
contributors).&lt;/p&gt;

    &lt;p&gt;This gave me insight into the inner workings of Git, and eventually
when the Pidgin project decided to move to Mercurial (an obvious
mistake in my opinion), I started surveying the tools to convert from
Git to Mercurial, and I found lots of areas of improvement.&lt;/p&gt;

    &lt;p&gt;Regarding these tools I would be remiss if I didn’t give attribution
to Rocco Rutte, who created the first &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fast-export&lt;/code&gt; script, which I used
as inspiration for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-remote-hg&lt;/code&gt;, but unfortunately died of cancer in 2009.
Without his work I might not have started this particular journey.&lt;/p&gt;

    &lt;p&gt;Using Rocco Rutte’s program, I had the idea to take that approach, but
hide it inside Git’s remote-helper infrastructure, which was
surprisingly easy. Everything else that came after was fine-tuning,
adding features, and improving Git’s infrastructure to make such
features possible.&lt;/p&gt;

    &lt;p&gt;In response to some pushback that I received from more established Git
developers – who claimed that some of these changes were specific to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-remote-hg&lt;/code&gt; – I decided to create &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-remote-bzr&lt;/code&gt; as a proof of
concept to interact with Bazaar (again, I never personally had to use
Bazaar), but it turned out there was a huge demand for such a tool, so
I kept working on it.&lt;/p&gt;

    &lt;p&gt;Some GNU Emacs developers loved &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-remote-bzr&lt;/code&gt;, and it probably helped
in the eventual move to Git, even though Richard Stallman initially
pushed back hard against it.&lt;/p&gt;

    &lt;p&gt;So, even though I never really used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-remote-hg&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-remote-bzr&lt;/code&gt;, I
kept working at them because clearly other people did. I understand
all too well the frustration of working on a VCS that is foreign and
suboptimal, especially when you know Git has everything you need; it’s
like being stranded.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;A lot of things. I stopped working on the Git project for many years,
but right now I have motivation to work on it again, and there’s
literally dozens of features I’m working on. Unfortunately my patches
have a tendency to not be accepted, so many of these will not end up
helping the end users, but I’m thinking of ways to make these
available outside of Git.&lt;/p&gt;

    &lt;p&gt;The main one is improvements to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt;. Initially there was a
&lt;a href=&quot;https://lore.kernel.org/git/742df4c2-2bc5-8a4b-8de1-cd5e48718398@redhat.com/&quot;&gt;complaint from a Red Hat employee&lt;/a&gt;
about an annoying warning added
recently, which prompted me to look back at work I did in 2013 which
solves all this, but was never merged. Back then the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; code
was written in shell script, now it’s in C, so I had to rewrite all
this functionality.&lt;/p&gt;

    &lt;p&gt;It’s a lot of work because there are many different workflows,
configurations, and options that affect the way &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; works. I
think the bulk of the code is mostly done, but there’s a few options I
would like to explore that I haven’t mentioned yet in the mailing
list, since the current patch series is controversial as it is.&lt;/p&gt;

    &lt;p&gt;Part of the work is reading back old mail threads which go back to 2008.
A lot of problems and suggestions have been mentioned throughout
the years, and my patch series tries to compile all of those, in
addition to the comments from 2020.&lt;/p&gt;

    &lt;p&gt;The story of these changes is interesting enough that I have been
writing a blog post about it, which is going to be enormous, but a lot
more work is needed to finish it properly. Hopefully it will be ready
for the next edition of Git Rev News.&lt;/p&gt;

    &lt;p&gt;In another irony; I don’t even use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; (I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt; +
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git merge&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time
on something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I would split Git into a library and a command line interface.&lt;/p&gt;

    &lt;p&gt;Clearly there’s a need for a stand-alone library, since there is
libgit2, but Git doesn’t use libgit2, so one has to always catch up
with the other.&lt;/p&gt;

    &lt;p&gt;Recently Ævar Arnfjörð Bjarmason mentioned a thought about somehow
splitting the porcelain and plumbing of Git; the part that is for
typical end users, and the part that is for advanced users or scripts.
Splitting the command line from the library would allow us to more
easily see what part belongs where. Plus, I would split the command
line into two; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-tool&lt;/code&gt;. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; command should be
for typical end users, and the documentation about those commands
should not include any implementation details, or plumbing.&lt;/p&gt;

    &lt;p&gt;I believe having a clean command line, which hides implementation
details and plumbing, would be of great benefit to the average Git
user, and in addition would help developers visualize what changes are
more likely to affect the end user, plus where the focus of improving
documentation should be.&lt;/p&gt;

    &lt;p&gt;Oh, and one person on the team should be not a developer, but a copy
editor, and his job would be to rewrite &lt;em&gt;all&lt;/em&gt; the documentation. It’s
probably incontrovertible that Git’s documentation can be improved a
lot.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I don’t think I would remove anything from Git.&lt;/p&gt;

    &lt;p&gt;Plus, I don’t believe any good developer should stop worrying about
backwards compatibility, ever. I’m of the opinion that there’s always
a way to implement changes that are incompatible with previous
versions, but there’s a series of steps. First you add the new
functionality, then you add a deprecation period, then you make the
new functionality the default, but always allowing the user to access
the old functionality.&lt;/p&gt;

    &lt;p&gt;It’s a lot more work, and takes a lot more time, which is why many bad
projects don’t do it, but I think you always need to worry about
backwards compatibility, and it’s a good thing Git developers do worry
about that.&lt;/p&gt;

    &lt;p&gt;OK, maybe &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge.defaultToUpstream&lt;/code&gt;, nobody uses that.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I don’t really use anything outside of Git.&lt;/p&gt;

    &lt;p&gt;I find Git vanilla to be mostly good enough to do everything I need;
and when I don’t, I try to introduce that directly into Git itself.&lt;/p&gt;

    &lt;p&gt;I created a fork of Git called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-fc&lt;/code&gt; with all the features I didn’t
manage to land into Git upstream, but I have not updated it in some
years (it’s in my endless to-do list), and even though I miss those
features a lot, I can manage.&lt;/p&gt;

    &lt;p&gt;I also have a bunch of projects that add other functionality, like
&lt;a href=&quot;https://github.com/felipec/git-related&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-related&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&quot;https://github.com/felipec/git-reintegrate&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-reintegrate&lt;/code&gt;&lt;/a&gt;,
and &lt;a href=&quot;https://github.com/felipec/git-send-series&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-send-series&lt;/code&gt;&lt;/a&gt;,
but I could live fine without those.&lt;/p&gt;

    &lt;p&gt;I think the only tool I would find very hard to live without is
&lt;a href=&quot;https://github.com/felipec/git-smartlist&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-smartlist&lt;/code&gt;&lt;/a&gt;. Since
I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gitk&lt;/code&gt; a lot to visualize commit history, very often I just want
to see the history from the master branch to the current branch I’m
at, and while usually you can do that with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master..@&lt;/code&gt;, that’s not
always the case and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git smartlist&lt;/code&gt; helps a lot in telling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gitk&lt;/code&gt;
exactly what I want to see.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Outside of code, is there anything you would like to change about
the Git project?&lt;/p&gt;

    &lt;p&gt;I think there’s a disconnection between users and developers. Recently
I’ve been talking about the curse of knowledge; the better you know
something, the less you remember about how hard it was to learn. It’s
very typical for experts to underestimate how hard it is to understand
something, because they’ve had many years of experience with it.&lt;/p&gt;

    &lt;p&gt;One example is rebasing. Basically all Git developers are very
familiar with rebasing, so they can’t imagine what it must be like for
a user to not know how to rebase, or worse; to not know what a rebase
is. But feedback from people whose job is to train users tells us the
vast majority of new users have no idea what a rebase is.&lt;/p&gt;

    &lt;p&gt;Of course the Git developers care about the users, but many times we
have to imagine hypothetical users and their needs, and it’s not rare
that these don’t match the needs of real users.&lt;/p&gt;

    &lt;p&gt;That’s why &lt;a href=&quot;https://public-inbox.org/git/577E6F32.7020007%40gmail.com/&quot;&gt;Git Users’ Surveys&lt;/a&gt;
are so important. Unfortunately they haven’t been made in many years,
and to be honest I don’t see much point in them if the developers
are not going to trust the results and use them to guide the project.&lt;/p&gt;

    &lt;p&gt;In all the users’ surveys the number one and two areas of improvement
without fail are: user-interface, and documentation, and I believe
those are the two areas that are neglected the most.&lt;/p&gt;

    &lt;p&gt;I would take this feedback seriously, and as a project make a real
effort to try to improve in these areas.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqtusc5djv.fsf@gitster.c.googlers.com/&quot;&gt;2.30.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqsg82qur4.fsf@gitster.c.googlers.com/&quot;&gt;2.30.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq7dpkdup6.fsf@gitster.c.googlers.com/&quot;&gt;2.30.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.30.0-rc2.windows.1&quot;&gt;2.30.0-rc2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.30.0-rc1.windows.1&quot;&gt;2.30.0-rc1(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.30.0-rc0.windows.1&quot;&gt;2.30.0-rc0(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.29.2.windows.3&quot;&gt;2.29.2(3)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.3.html&quot;&gt;3.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.22.6/notes&quot;&gt;2.22.6&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.21.14/notes&quot;&gt;2.21.14&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.23/notes&quot;&gt;2.20.23&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.22.5/notes&quot;&gt;2.22.5&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.21.13/notes&quot;&gt;2.21.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.22/notes&quot;&gt;2.20.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/12/23/gitlab-13-7-1-released/&quot;&gt;13.7.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/12/22/gitlab-13-7-released/&quot;&gt;13.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/12/10/gitlab-13-6-3-released/&quot;&gt;13.6.3&lt;/a&gt;
&lt;a href=&quot;https://about.gitlab.com/releases/2020/12/07/security-release-gitlab-13-6-2-released/&quot;&gt;13.6.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.4.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.6.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Felipe Contreras shared his &lt;a href=&quot;https://lore.kernel.org/git/CAMP44s1D-Zp3KDS+Hi74a=Lkc7Nc_0qiEzQEF0Pmj=bD8i+=JQ@mail.gmail.com/&quot;&gt;sharness/test Vim syntax file to the list&lt;/a&gt;.
It enables syntax highlighting for the body of test_success, test_failure etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://preslav.me/2020/03/01/use-the-git-history/&quot;&gt;Use the Git History to Identify Pain Points in Any Project&lt;/a&gt;
“basic idea - files that change often (with some exceptions) tend to be the ones where most issues occur” - let’s go find them with this useful command. Includes a useful follow on reading about your code crimes.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-12-17-commits-are-snapshots-not-diffs/&quot;&gt;Commits are snapshots, not diffs&lt;/a&gt;
by Derrick Stolee on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/&quot;&gt;Get up to speed with partial clone and shallow clone&lt;/a&gt;
by Derrick Stolee on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RcqLV1lU408&quot;&gt;Optimize your monorepo experience - GitHub Universe 2020&lt;/a&gt;:
video of presentation by Derrick Stolee, Staff Software Engineer, GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/scalar/blob/main/docs/philosophy.md&quot;&gt;The Philosophy of Scalar&lt;/a&gt;,
a part of &lt;a href=&quot;https://github.com/microsoft/scalar/&quot;&gt;Scalar&lt;/a&gt; docs; the tool itself,
intended to provide  settings and extensions for Git to help manage large Git repositories,
was introduced in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News #60&lt;/a&gt;
and further mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/03/25/edition-61/&quot;&gt;Git Rev News #61&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mtlynch.io/code-review-love/&quot;&gt;How to Make Your Code Reviewer Fall in Love with You&lt;/a&gt;
by Michael Lynch; a good counterpart to &lt;a href=&quot;https://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/&quot;&gt;The Gentle Art Of Patch Review&lt;/a&gt;
by Sage Sharp from 2014.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/11/git-aliases&quot;&gt;8 Git aliases that make me more efficient&lt;/a&gt;
by Ricardo Gerardi on Opensource.com.  Use aliases to create shortcuts
for your most-used or complex Git commands.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://speakerdeck.com/lemiorhan/10-git-anti-patterns-you-should-be-aware-of&quot;&gt;10 Git Anti Patterns You Should be Aware of&lt;/a&gt;,
slide deck presented by Lemi Orhan Ergin at ITAKE UnConf 2018;
though one should take it and especially the proposed solutions with a critical eye.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://swtch.com/~rsc/regexp/regexp4.html&quot;&gt;Regular Expression Matching with a Trigram Index, or How Google Code Search Worked&lt;/a&gt;
by Russ Cox (2012).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt; intends to be a peer-to-peer stack for building software together,
based on Git and Radicle Link peer-to-peer protocol.&lt;br /&gt;
Compare with &lt;a href=&quot;https://notabug.org/peers/forgefed&quot;&gt;ForgeFed&lt;/a&gt; (formerly GitPub),
a federation protocol for software forges, mentioned in 
&lt;a href=&quot;https://git.github.io/rev_news/2020/11/27/edition-69/&quot;&gt;previous Git Rev News&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/felipec/git-smartlist&quot;&gt;git-smartlist&lt;/a&gt; by Felipe Contreras;
a tool to help create typical revisions (e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master..@&lt;/code&gt;) by generic name,
so that you don’t have to.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Felipe Contreras and Philip Oakley.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 69 (November 27th, 2020)</title>
      <link>https://git.github.io/rev_news/2020/11/27/edition-69/</link>
      <pubDate>Fri, 27 Nov 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/11/27/edition-69/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-69-november-27th-2020&quot;&gt;Git Rev News: Edition 69 (November 27th, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 69th edition of &lt;a href=&quot;https://git.github.io/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see the &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;About Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of October 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/373640ea4d95f3b279b9d460d9a8889b4030b4e9.camel@engmark.name/&quot;&gt;[PATCH] userdiff: support Bash&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Victor Engmark sent a patch to add support for Bash and POSIX shell
to the userdiff mechanism. This mechanism is used by the diff code
to make diffs more informative and better suited to the content,
in this case Bash or POSIX shell programs.&lt;/p&gt;

    &lt;p&gt;As explained in &lt;a href=&quot;https://git-scm.com/docs/gitattributes#_defining_a_custom_hunk_header&quot;&gt;the documentation&lt;/a&gt;,
diffs contain sections called hunks that look like:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;@@ -k,l +n,m @@ TEXT
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;k&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;l&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;m&lt;/code&gt; are numbers indicating the lines that
are concerned, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TEXT&lt;/code&gt;, which is called the “hunk-header”, is a
part of a line of the file to further help identify the related
context of the diff in the file.&lt;/p&gt;

    &lt;p&gt;The best thing for programs is often to have the name of the
enclosing function, or method, in the hunk-header. As detecting
functions is programming language specific, it’s the role of the
userdiff mechanism to provide a regex (regular expression) that can
be used to do that.&lt;/p&gt;

    &lt;p&gt;Another role of the userdiff mechanism is to provide a regex to
&lt;a href=&quot;https://git-scm.com/docs/gitattributes#_customizing_word_diff&quot;&gt;customize word diffs&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Victor’s patch then mainly consisted in adding regexes for Bash and
POSIX shells to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;userdiff.c&lt;/code&gt;, along with some documentation and a
lot of tests.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Victor, by commenting a
bit on the tests and a lot on the complex regex to detect a
function. He wondered if it correctly accepts white spaces
where they are allowed, and suggested for more clarity to break it down like this:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;^[ \t]*&quot;                    /* (op) leading indent */
&quot;(&quot;                          /* here comes the whole thing */
&quot;(function[ \t]+)?&quot;          /* (op) noiseword &quot;function&quot; */
&quot;[a-zA-Z_][a-zA-Z0-9_]*&quot;     /* identifier - function name */
&quot;[ \t]*(\\([ \t]*\\))?&quot;      /* (op) start of func () */
&quot;[ \t]*(\\{|\\(\\(?|\\[\\[)&quot; /* various &quot;opening&quot; of body */
&quot;)&quot;,
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Victor then sent a &lt;a href=&quot;https://lore.kernel.org/git/1442e85cfbe70665890a79a5054ee07c9c16b7c6.camel@engmark.name/&quot;&gt;version 2&lt;/a&gt;
of his patch implementing Junio’s suggestions and answering his
comments.&lt;/p&gt;

    &lt;p&gt;Johannes Sixt then suggested a number of improvements especially
about the tests, and about the regex to customize word diffs. Victor
replied about the latter asking for pointers to look at, as it
seemed that there were no tests for that.&lt;/p&gt;

    &lt;p&gt;Victor nevertheless sent a &lt;a href=&quot;https://lore.kernel.org/git/6c6b5ed2166ec2c308c53bf87c78b422fdc5084f.camel@engmark.name/&quot;&gt;version 3&lt;/a&gt;
implementing Johannes’ suggestions, and Johannes indeed replied that
he was happy with the result. Junio was also happy with the result
after fixing a typo in the commit message.&lt;/p&gt;

    &lt;p&gt;The patch was later merged to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next&lt;/code&gt; and then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; branches,
so Git should soon support shell scripts in a better way, while it
itself has been developed for a long time using shell scripts.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-philippe-blain&quot;&gt;Developer Spotlight: Philippe Blain&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a scientist at the Canadian Center for Meteorological and
Environmental Prediction, in Montréal, Québec, Canada. I’m part of the
development team for the numerical model we use to predict the movement,
growth and melt of sea-ice, the frozen parts of the Arctic and Antarctic
oceans. Like most computer models in the field of weather forecasting,
this software is written in good old Fortran, and runs on our
supercomputers. We use Git extensively to track changes across all
layers of our technological stack, and I quickly developed an interest
in Git’s inner workings.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;Since I started contributing to the project a little more than one year
ago, I’ve mostly been trying to fix the bugs I encounter in the course
of my daily work. So I’m not sure which one of my topics has had the
biggest impact on other users. However, I can say that the contribution
I’m most proud of is &lt;a href=&quot;https://github.com/git/git/compare/d0654dc308b0ba76dd8ed7bbb33c8d8f7aacd783...846f34d3514b81764dea7c2a4851f6187ab31aad&quot;&gt;fixing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout --recurse-submodules&lt;/code&gt;&lt;/a&gt;
to correctly switch between branches when one branch has nested
submodules and the other branch has no submodules at all. I learned
enormously during the process of developing this fix, not only about how
Git &lt;a href=&quot;https://github.com/git/git/blob/master/unpack-trees.c&quot;&gt;“unpack trees”&lt;/a&gt;
to keep the index, working directory and HEAD consistent, but also how
&lt;a href=&quot;https://en.wikipedia.org/wiki/Fork%E2%80%93exec&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fork&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exec&lt;/code&gt;&lt;/a&gt;
calls work and especially how to debug such spawned processes using GDB
and LLDB.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Right now I’m working on a fix to prevent &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout
--recurse-submodules&lt;/code&gt; from losing uncommitted work in submodules.
Although the documentation says this shouldn’t happen, I’ve found a few
cases where it does, and since it’s never a nice experience to lose
work, I’d like to fix that.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Apart from rewriting the whole thing in C++, you mean? Jokes aside, I
would like for more work to be put towards better submodule support.
There was a colossal effort a couple of years ago to add
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--recurse-submodules&lt;/code&gt; flags to several Git commands, so that submodules
worktrees stay up to date when switching between superproject commits.
Unfortunately this effort has died off due to core contributors to the
submodule code changing jobs, and some porcelain commands still lack
that capability.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I think it’s unfortunate that the dot-dot vs. dot-dot-dot syntax mean
different things in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; than in the rest of Git commands. It’s
another one of those tricky things that users have to remember. The fact
that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;checkout&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset&lt;/code&gt; have so many different modes of operation
also make them confusing for beginners. The introduction of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt; should help with that, though.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;Since I’ve heard of it I’ve been using
&lt;a href=&quot;https://github.com/so-fancy/diff-so-fancy#readme&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff-so-fancy&lt;/code&gt;&lt;/a&gt; as a
way to make Git diffs more easily readable. Apart from that I mostly
stick to the Git command line. Recently I discovered
&lt;a href=&quot;https://github.com/andrewshadura/git-crecord#readme&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-crecord&lt;/code&gt;&lt;/a&gt;, an
ncurses interface for, among other features, interactive line-by-line
staging.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqlffo4qjw.fsf@gitster.c.googlers.com/&quot;&gt;2.29.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.29.2.windows.2&quot;&gt;2.29.2(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.29.2.windows.1&quot;&gt;2.29.2(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.22.4/notes&quot;&gt;2.22.4&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.21.12/notes&quot;&gt;2.21.12&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.21/notes&quot;&gt;2.20.21&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.22.3/notes&quot;&gt;2.22.3&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.21.11/notes&quot;&gt;2.21.11&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.20/notes&quot;&gt;2.20.20&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.26/notes&quot;&gt;2.19.26&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#3251&quot;&gt;3.2.5.1&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#325&quot;&gt;3.2.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#3110&quot;&gt;3.1.10&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#3015&quot;&gt;3.0.15&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21625&quot;&gt;2.16.25&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21521&quot;&gt;2.15.21&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.14.html#21422&quot;&gt;2.14.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/11/23/gitlab-13-6-1-released/&quot;&gt;13.6.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/11/22/gitlab-13-6-released/&quot;&gt;13.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/11/13/gitlab-13-5-4-released/&quot;&gt;13.5.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/11/03/gitlab-13-5-3-released/&quot;&gt;13.5.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/11/02/security-release-gitlab-13-5-2-released/&quot;&gt;13.5.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.4.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.6.0&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.5.7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/announcing-the-release-of-the-git-experience-in-visual-studio/&quot;&gt;Announcing the Release of the Git Experience in Visual Studio&lt;/a&gt;;
the new Git tooling is now the default source control experience
in Visual Studio 2019, beginning with
&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/visual-studio-2019-v16-8/#git-productivity&quot;&gt;version 16.8&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Kernel.org manager Konstantin Ryabitsev announced that
&lt;a href=&quot;https://people.kernel.org/monsieuricon/signed-git-pushes&quot;&gt;signed git pushes&lt;/a&gt;
are now supported by the kernel.org system. Among other things, push signatures
can be preserved in a commit transparency log,
&lt;a href=&quot;https://people.kernel.org/monsieuricon/introducing-the-kernel-org-git-transparency-log&quot;&gt;which is also now provided&lt;/a&gt;
by kernel.org.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://tarunbatra.com/blog/x/git-before-github/&quot;&gt;Git before GitHub&lt;/a&gt;
by Tarun Batra is a beginner-friendly article explaining how to submit
patches using git’s built-in tools without using a platform like GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2020/11/23/keep-git-history-clean-with-interactive-rebase/&quot;&gt;How to keep your Git history clean with interactive rebase&lt;/a&gt;
by Tobias Günther on GitLab Blog. Interactive rebase is one of Git’s
most versatile tools. Here’s how to use it to correct commit messages,
fix mistakes, and more.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://aurelio.me/blog/How-I-remember-everything-I-learn/&quot;&gt;How I remember everything I learn&lt;/a&gt; by Aurelio Ogliari; he uses &lt;a href=&quot;https://github.com/nobitagit/knowledge&quot;&gt;his personal wiki&lt;/a&gt;,
which is nothing more than a Git repo (on GitHub), divided in folders
with a bunch of READMEs in each of them.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/davorg/github-actions-for-semi-static-web-sites-597g&quot;&gt;GitHub Actions for semi-static web sites&lt;/a&gt;
by Dave Cross on Dev.To explains how to keep a site up-to-date where
there are only a few ways that it can change, like &lt;a href=&quot;https://cpandashboard.com/&quot;&gt;CPAN Dashboard&lt;/a&gt;.
(&lt;a href=&quot;https://github.com/features/actions&quot;&gt;GitHub Actions&lt;/a&gt;, then beta,
were covered in &lt;a href=&quot;https://git.github.io/rev_news/2018/10/24/edition-44/&quot;&gt;Git Rev News #44&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/szabgab/what-adding-ci-to-30-projects-revealed-3d4k&quot;&gt;What adding CI to 30 projects revealed&lt;/a&gt;
by Gabor Szabo on Dev.To. Among others it found developer forgetting to add
file to Git repository, or pushing some changes, or that build script depends
on unreleased code or local configuration, or that not all dependencies were
declared.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-11-20-nbdev-a-literate-programming-environment-that-democratizes-software-engineering-best-practices/&quot;&gt;Nbdev: A literate programming environment that democratizes software engineering best practices&lt;/a&gt;
by Hamel Husain on GitHub Blog. (See also nbdev’s mention in the ‘Git
tools and sites’ section below.) &lt;a href=&quot;https://nbdev.fast.ai/&quot;&gt;nbdev&lt;/a&gt;
builds on top of Jupyter notebooks to encompass the entire software
development life cycle: automated generation of docs, Continuous
Integration (CI), writing tests directly in notebooks, etc. Many of
those features are integrated with GitHub (GitHub Actions, GitHub
Pages, GitHub Codespaces).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://changelog.com/posts/git-is-simply-too-hard&quot;&gt;Git is simply too hard&lt;/a&gt;:
a fancified excerpt of Mislav Marohnić’s unpopular opinion on &lt;a href=&quot;https://changelog.com/gotime/153&quot;&gt;Go Time #153&lt;/a&gt;
podcast. See also &lt;a href=&quot;https://gitless.com/&quot;&gt;Gitless&lt;/a&gt;, the experimental reworking of Git,
based on &lt;a href=&quot;https://gitless.com/#research&quot;&gt;research on difficulties in Git&lt;/a&gt;,
mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News #20&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review fixes two important security vulnerabilities,
&lt;a href=&quot;https://bugs.chromium.org/p/gerrit/issues/detail?id=13621&quot;&gt;Issue 13621&lt;/a&gt; and
&lt;a href=&quot;https://bugs.chromium.org/p/gerrit/issues/detail?id=13514&quot;&gt;Issue 13514&lt;/a&gt;.
They have been found during the test migrations of the
&lt;a href=&quot;https://review.opendev.org/&quot;&gt;OpenDev Code Review service&lt;/a&gt; to the latest version v3.2.
The issue was particularly sensitive for all those setups hosted in
Europe, because of the potential exposure to other people’s personal
information, such as e-mail and external ids, and was impacting only
those very old setups that had recently migrated to v2.14 or later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kirnosenko/Repositorch&quot;&gt;repositorch&lt;/a&gt; is a VCS repository analysis 
engine written in C#, which supports Git. It allows to get some basic and advanced 
statistics including LOCs, Burndown, Code ownership, Defect density and more.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/githru/githru&quot;&gt;Githru&lt;/a&gt; is an interactive visual analytics system
that enables developers to effectively understand the context of development history
through the &lt;a href=&quot;https://githru.github.io/demo/&quot;&gt;interactive exploration of Git metadata&lt;/a&gt;.
It uses &lt;a href=&quot;https://arxiv.org/abs/2009.03115&quot;&gt;novel techniques&lt;/a&gt; (graph reconstruction,
clustering, and Context-Preserving Squash Merge (CSM) methods) to abstract
a large-scale Git commit graph.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nbdev.fast.ai/&quot;&gt;nbdev&lt;/a&gt; is a library that allows you to
develop a Python library in Jupyter Notebooks, putting all your
code, tests and documentation in one place. (See also nbdev’s
mention in the ‘Light reading’ section above.) Among other features
it provides a robust, two-way sync between notebooks and source
code, and tools for merge/conflict resolution with notebooks in a
human readable format. It is set-up out of the box for integration
with GitHub Pages and GitHub Actions.  Compare with
&lt;a href=&quot;http://nbdime.readthedocs.io/en/latest/&quot;&gt;nbdime&lt;/a&gt; – a tool for
diffing and merging of Jupyter Notebooks, mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2018/03/21/edition-37/&quot;&gt;Git Rev News #37&lt;/a&gt;,
and &lt;a href=&quot;https://github.com/mwouts/jupytext&quot;&gt;jupytext&lt;/a&gt; – a plugin for
Jupyter that can save Jupyter notebooks as Markdown documents, or
Julia, Python or R scripts, or
&lt;a href=&quot;https://github.com/marketplace/review-notebook-app&quot;&gt;Review Notebook GitHub App&lt;/a&gt;
(free for Open Source and Education).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.flagsmith.com/&quot;&gt;Flagsmith&lt;/a&gt; (formerly Bullet Train) is an open source
service to help release features with confidence by managing
&lt;a href=&quot;https://martinfowler.com/articles/feature-toggles.html&quot;&gt;feature flags&lt;/a&gt;
across web, mobile and server side applications. Hosted service is free
for smaller projects.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tara.ai/&quot;&gt;Tara.AI&lt;/a&gt; is a product development service that helps provide
clarity around the release cycle by connecting Git to tasks and sprints
(with GitHub integration). Base tier free forever plan has unlimited tasks,
sprints and workspaces, with no user limits; paid for features are
planned.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/Git-Credential-Manager-Core&quot;&gt;Git Credential Manager Core&lt;/a&gt; (GCM Core)
is a secure Git credential helper built on .NET Core that runs on Windows and macOS
(Linux support is in an early preview). It replaces the .NET Framework-based
&lt;a href=&quot;https://github.com/microsoft/Git-Credential-Manager-for-Windows&quot;&gt;Git Credential Manager for Windows&lt;/a&gt; (GCM),
and the Java-based &lt;a href=&quot;https://github.com/microsoft/Git-Credential-Manager-for-Mac-and-Linux&quot;&gt;Git Credential Manager for Mac and Linux&lt;/a&gt; (Java GCM).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/felipec/git-completion/wiki/Zsh&quot;&gt;Git-completion&lt;/a&gt;
is a friendly fork of the official Git completion and prompt scripts
for Zsh and Bash.
It’s a sister project of the &lt;a href=&quot;https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/gitfast&quot;&gt;Oh My Zsh gitfast plugin&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/andrewshadura/git-crecord&quot;&gt;git-crecord&lt;/a&gt;
is a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; subcommand (written in Python), which allows users to interactively select
changes to commit or stage using a ncurses-based text user interface.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://notabug.org/peers/forgefed&quot;&gt;ForgeFed&lt;/a&gt; - Federation Protocol for Forge Services.
ForgeFed (formerly GitPub) is an &lt;em&gt;upcoming&lt;/em&gt; decentralized federation protocol based on
the W3C’s &lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt;, which extends
&lt;a href=&quot;https://www.w3.org/TR/activitystreams-core/&quot;&gt;ActivityStream 2.0&lt;/a&gt;. It provides
a server to server API for pull request, forking and subscription of repositories
provided by Git web services (services like GitLab, Gogs, Gitea or SourceHut).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://onlywei.github.io/explain-git-with-d3/&quot;&gt;Visualizing Git Concepts with D3&lt;/a&gt;
is a website designed to help you understand some basic Git concepts visually,
with sandboxes split by specific Git commands and a few specific real-world scenarios;
adding/staging your files for commit is not covered.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Philippe Blain, Semyon Kirnosenko,
Tarun Batra, Philip Oakley and Luca Milanesio.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 68 (October 30th, 2020)</title>
      <link>https://git.github.io/rev_news/2020/10/30/edition-68/</link>
      <pubDate>Fri, 30 Oct 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/10/30/edition-68/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-68-october-30th-2020&quot;&gt;Git Rev News: Edition 68 (October 30th, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 68th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of September 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CAHpGcMJqmUmCR_u3fxSVppzwBo8_6RJG5-WLrXAWXm+OQ6_3bA@mail.gmail.com/&quot;&gt;Apply Git bundle to source tree?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Andreas Grünbacher asked the mailing list if there was “a way to
apply a particular head in a bundle to a source tree”. Using the
Linux kernel as an example, he said he would like to create
&lt;a href=&quot;https://git-scm.com/docs/git-bundle&quot;&gt;a bundle&lt;/a&gt; containing Git
objects from version 5.8 to version 5.9-rc1:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git bundle create v5.9-rc1.bundle v5.8..v5.9-rc1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;and then be able to “apply” this bundle either to an existing
repository or only a source tree that would already contain code for
version 5.8.&lt;/p&gt;

    &lt;p&gt;Taylor Blau replied to Andreas that there is no such thing as
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bundle apply&lt;/code&gt;, but that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; can be used
to update an existing repo from a bundle, for example:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git pull /path/to/bundle &apos;refs/tags/v5.9-rc1&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Andreas replied to Taylor that he was looking for a way to apply a
bundle to an actual source tree, not a Git repository, but Taylor
didn’t think it was possible.&lt;/p&gt;

    &lt;p&gt;Then another Andreas, Andreas Schwab, chimed in to discuss with
Andreas Grünbacher what basis was needed to “apply” a bundle.&lt;/p&gt;

    &lt;p&gt;In the meantime Junio Hamano, the Git maintainer, replied to the
original email from Andreas G. saying that a bundle created with
“v5.8..v5.9-rc1” was not like a patch but rather “an equivalent of a
(shallow) repository” that required having v5.8 for the bundle to be
usable. Junio suggested ways to use such a bundle to update and then
work in an existing repo that has v5.8, and asked for ideas to
improve the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bundle&lt;/code&gt; documentation.&lt;/p&gt;

    &lt;p&gt;Andreas G. replied to Junio that the documentation was fine, and
that he then saw that there’s simply not enough information in a
bundle for what he wants to achieve on a source tree.&lt;/p&gt;

    &lt;p&gt;Konstantin Ryabitsev, a maintainer of kernel.org, also replied to
Andreas G.’s initial email suggesting the following command:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl --header &apos;Accept-Encoding: gzip&apos; -L https://git.kernel.org/torvalds/p/v5.9-rc1/v5.8 |
  gunzip - | git apply
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Andreas G. liked it, but said that the use case he was thinking
about was to replace the patches that are, along with a baseline
release, in source packages provided by Linux distributions. As
bundles would provide actual Git history, they would be nicer than
patches, if they could replace them.&lt;/p&gt;

    &lt;p&gt;Thomas Guyot-Sionnest replied that bundles could do that and that
it was a “neat idea”. He said “bundles could be used for both the base
release &lt;em&gt;and&lt;/em&gt; patches”. The source packages would be “bigger
initially than a single release”, but old bundles could help
downloading just the additional bits needed for the next
versions. That would help packagers as patches are “best maintained
in Git” already.&lt;/p&gt;

    &lt;p&gt;Thomas also mentioned that he has been using bundles “since the very
beginning” for backups as it’s “an efficient way to archive an entire
bare repo into a single file and ship it offsite”.&lt;/p&gt;

    &lt;p&gt;Brian M. Carlson also replied to Andreas G. saying that “Debian
considered using Git as part of the 3.0 (git) format”, but that
there were issues with upstream having “non-free or undistributable
material in their repositories”. “Tarballs can be repacked, but it’s
harder to rewrite Git history to exclude objects.”&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-matheus-tavares-bernardino&quot;&gt;Developer Spotlight: Matheus Tavares Bernardino&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a software developer and MSc student, living in São Paulo, Brazil. I
started contributing to Git just over a year ago, through Google Summer of Code
(GSoC). During the program, I was fascinated with the internal mechanics of Git
and with Git features that I had not known until then. So, at the end of GSoC, I
definitely wanted to stick around and learn more. Today, I’m working as a
contract developer for Amazon, seeking to parallelize checkout and other Git
operations.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;The improvements in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt;’s parallelism, during GSoC. With
these changes, we’ve got &lt;a href=&quot;https://matheustavares.gitlab.io/posts/git-2.26-faster-git-grep&quot;&gt;up to 3.3x faster&lt;/a&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt; searches in the object store, using threads.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I’m currently working on parallelizing checkout. The parallel version has shown
to be particularly effective for repositories located on SSDs or over network
file systems (&lt;a href=&quot;https://lore.kernel.org/git/cover.1597093021.git.matheus.bernardino@usp.br/&quot;&gt;here are some benchmark numbers&lt;/a&gt;).
The idea is to make it available to all commands that perform checkout: from
the plumbing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git read-tree&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git sparse-checkout&lt;/code&gt;, and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt; itself.&lt;/p&gt;

    &lt;p&gt;It’s been an exciting and challenging project! And containing patches
and ideas from two previous parallel checkout approaches (by
&lt;a href=&quot;https://lore.kernel.org/git/CACsJy8Ab=q0mbdcXn9O7=dKHaOuhUCNk4g6BU5kZHdPM+z7yng@mail.gmail.com/&quot;&gt;Duy&lt;/a&gt;
and &lt;a href=&quot;https://github.com/gitgitgadget/git/pull/628&quot;&gt;Jeff Hostetler&lt;/a&gt;), I think it
really goes to show the power of collaboration and open-source.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
 something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Hmm, it would be nice to try to minimize the global states in the codebase. We
have a fair amount of thread-unsafe operations, due to reads and writes to
global variables or function-scoped static variables. Such variables do offer
quite practical mechanics, but they can also hinder the process of adding
multi-thread support. Furthermore, they are sometimes hard to locate, which can
potentially lead to race conditions. The alternative approach, using
multi-processes, usually requires writing more code for communication and
synchronization (besides having an extra cost for subprocess spawning).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Hmm, nothing comes to mind right now.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I rarely use Git-related tools besides Git itself. But I’ve always wanted to
try and incorporate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig blame&lt;/code&gt; more in my daily life. I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt; quite
a lot, to dig through the code’s history and find answers regarding specific
designs or implementations. In that sense, what I find most attractive about
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt; interface, is that it allows to interactively load blame for parent
commits, which is quite handy. I guess I still tend to go with the plain
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt; out of habit.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq4kmlj9q9.fsf@gitster.c.googlers.com/&quot;&gt;2.29.1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqy2k2t77l.fsf@gitster.c.googlers.com/&quot;&gt;2.29.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqk0vrdxid.fsf@gitster.c.googlers.com/&quot;&gt;2.29.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq7drzv1bn.fsf@gitster.c.googlers.com/&quot;&gt;2.29.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqa6x070tn.fsf@gitster.c.googlers.com/&quot;&gt;2.29.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.29.1.windows.1&quot;&gt;2.29.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.29.0.windows.1&quot;&gt;2.29.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-filter-repo &lt;a href=&quot;https://public-inbox.org/git/CABPp-BG+uP2-t62AfgBauvoRtXfF4pU-xXKq3+YEEhjDdiHR_w@mail.gmail.com/&quot;&gt;2.29.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-assembler &lt;a href=&quot;https://public-inbox.org/git/87mu1f2rc0.fsf@wavexx.thregr.org&quot;&gt;1.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.1.0&quot;&gt;1.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/10/23/gitlab-13-3-8-released/&quot;&gt;13.3.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/10/22/gitlab-13-5-released/&quot;&gt;13.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/10/22/gitlab-13-5-1-released/&quot;&gt;13.5.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/10/15/gitlab-13-4-4-released/&quot;&gt;13.4.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/10/05/gitlab-13-4-3-released/&quot;&gt;13.4.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/10/01/security-release-13-4-2-release/&quot;&gt;13.4.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.22.2/notes&quot;&gt;2.22.2&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.21.10/notes&quot;&gt;2.21.10&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.19/notes&quot;&gt;2.20.19&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.25/notes&quot;&gt;2.19.25&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.22.1/notes&quot;&gt;2.22.1&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.21.9/notes&quot;&gt;2.21.9&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.18/notes&quot;&gt;2.20.18&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.24/notes&quot;&gt;2.19.24&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.5.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;TortoiseGit &lt;a href=&quot;https://tortoisegit.org/download/&quot;&gt;2.11.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/changelog/2020-10-01-the-default-branch-for-newly-created-repositories-is-now-main/&quot;&gt;The default branch for newly-created repositories (on GitHub) is now ‘main’&lt;/a&gt;.&lt;br /&gt;
The history of the term &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; in Git was covered in &lt;a href=&quot;https://git.github.io/rev_news/2020/07/29/edition-65/#discussions&quot;&gt;Git Rev News Edition #65&lt;/a&gt;,
if one is interested.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/832111/&quot;&gt;Mercurial planning to transition away from SHA-1 [LWN.net]&lt;/a&gt;;
discovering the problem with SHA-1 was discussed in &lt;a href=&quot;https://git.github.io/rev_news/2017/03/15/edition-25/&quot;&gt;Git Rev News Edition #25&lt;/a&gt;,
and the state of SHA-1 transition in Git (in 2018) in &lt;a href=&quot;https://git.github.io/rev_news/2018/07/18/edition-41/&quot;&gt;Edition #41&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://sourcehut.org/blog/2020-09-15-whats-cooking-september-2020/&quot;&gt;What’s cooking on Sourcehut? September 2020&lt;/a&gt; and &lt;a href=&quot;https://sourcehut.org/blog/2020-10-15-whats-cooking-october-2020/&quot;&gt;October 2020&lt;/a&gt;;
Sourcehut, or &lt;a href=&quot;https://sr.ht/&quot;&gt;sr.ht&lt;/a&gt;, is a software forge which was covered in
&lt;a href=&quot;https://git.github.io/rev_news/2018/12/19/edition-46/#other-news&quot;&gt;Git Rev News Edition #46&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://opensource.googleblog.com/2020/10/google-summer-of-code-2021-is-bringing.html&quot;&gt;Google Summer of Code 2021&lt;/a&gt;
has been announced with significant changes compared to previous
editions. Notably coding hours and period will be reduced from 350
hours and 12 weeks to 175 hours and 10 weeks; there would be 2 evaluations
(instead of 3). Additionally, eligibility requirements will be relaxed,
among others allowing people participating in a variety of different
licensed academic programs, not just students of accredited university programs.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.programmableweb.com/news/how-gitlab-puts-grpc-real-world/analysis/2020/10/28&quot;&gt;How Gitlab puts gRPC in the Real World&lt;/a&gt;
talks about GitLab internals, especially access and management of
Git repos through gRPC and a software layer written in Go called
Gitaly.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2020/10/sourcegraph-devs-are-managing-100x-more-code-now-than-they-did-in-2010/&quot;&gt;Sourcegraph: Devs are managing 100x more code now than they did in 2010&lt;/a&gt;
by Jim Salter on ArsTechnica.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2020/Oct/9/git-scraping/&quot;&gt;Git scraping: track changes over time by scraping to a Git repository&lt;/a&gt;
by Simon Willison on his weblog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-10-15-pachyderm-and-the-power-of-github-actions-mlops-meets-devops/&quot;&gt;Pachyderm and the power of GitHub Actions: MLOps meets DevOps&lt;/a&gt;
by Kathryn Hsu on GitHub Blog; &lt;a href=&quot;https://www.pachyderm.com/&quot;&gt;Pachyderm&lt;/a&gt;,
a data version control tool, was covered in &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/#other-news&quot;&gt;Git Rev News Edition #49&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.inkandswitch.com/cambria.html&quot;&gt;Project Cambria: Translate your data with lenses&lt;/a&gt;,
about the &lt;a href=&quot;https://github.com/inkandswitch/cambria&quot;&gt;Cambria&lt;/a&gt; tool to help
translate between data schemas while maintaining compatibility between
different versions, APIs and components.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.polettix.it/ETOOBUSY/2020/10/07/stockpiling-posts/&quot;&gt;Stockpiling blog posts&lt;/a&gt;
for publishing when out of time with Git, a short article by Flavio Poletti.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/camilaleniss/the-code-review-guide-4gfo&quot;&gt;The Code Review Guide&lt;/a&gt;
by Camila Lenis on Dev.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/williamotieno/beginner-s-guide-to-git-and-open-source-contribution-34h&quot;&gt;Beginner’s guide to Git and Open-Source Contribution&lt;/a&gt;
by William Otieno on Dev.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cloudsavvyit.com/852/what-is-git-rebase-and-how-is-it-different-than-merging/&quot;&gt;What is Git Rebase and How Is it Different from Merging?&lt;/a&gt;
by Anthony Heddings.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docable.cloud/chrisparnin/examples/tutorials/Git.md&quot;&gt;How Git works inside&lt;/a&gt;:
an interactive &lt;a href=&quot;https://github.com/ottomatica/docable&quot;&gt;Docable&lt;/a&gt; notebook,
rendered as static HTML with animated GIFs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/chriswalz/bit&quot;&gt;bit&lt;/a&gt; is an experimental modernized Git CLI,
written in Go, built on top of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, that provides happy defaults and other
niceties, with some commands taken from &lt;a href=&quot;https://github.com/tj/git-extras&quot;&gt;git-extras&lt;/a&gt;.&lt;br /&gt;
It takes some inspiration from &lt;a href=&quot;https://gitless.com/&quot;&gt;Gitless&lt;/a&gt;, which was
covered in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/#other-news&quot;&gt;Git Rev News Edition #20&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/xwmx/nb&quot;&gt;nb&lt;/a&gt; is a command line note-taking, bookmarking,
archiving, and knowledge base application with plain-text data storage,
encryption, and Git-backed versioning and syncing, written in Bash.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/inkandswitch/cambria&quot;&gt;Cambria&lt;/a&gt; is a Javascript/Typescript
library for converting JSON or YAML data between related schemas, via &lt;em&gt;lenses&lt;/em&gt;
(bidirectionally specifying a transformation).  This helps version-control
data exchange formats.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://codeberg.org/&quot;&gt;Codeberg&lt;/a&gt; is a collaboration platform and git hosting
for free and open source software, content, projects.  It is hosted in EU.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://gitexercises.fracz.com/&quot;&gt;Git exercises&lt;/a&gt; is an open-source platform
and service where one can learn and practice Git and discover its features,
with the help of 23 exercises.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://git-send-email.io/&quot;&gt;git-send-email.io&lt;/a&gt; by &lt;a href=&quot;https://sourcehut.org/&quot;&gt;Sourcehut&lt;/a&gt;
is a step-by-step tutorial on how to contribute to email-driven projects
like the Linux kernel, PostgreSQL, or Git.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Matheus Tavares Bernardino.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 67 (September 24rd, 2020)</title>
      <link>https://git.github.io/rev_news/2020/09/24/edition-67/</link>
      <pubDate>Thu, 24 Sep 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/09/24/edition-67/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-67-september-24rd-2020&quot;&gt;Git Rev News: Edition 67 (September 24rd, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 67th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of August 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/organizations/4722049416691712/#projects&quot;&gt;GSoC 2020 End&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The Google Summer of Code 2020 officially ended on September 8, 2020.
Congratulations to the three students who were mentored by the
Git community, as they successfully passed all the
evaluations! Their final reports and code submissions are available:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Hariom Verma, who was mentored by Heba Waly and Christian Couder,
worked on &lt;a href=&quot;https://harry-hov.github.io/blogs/posts/the-final-report&quot;&gt;“Unify ref-filter formats with other --pretty formats”&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Abhishek Kumar, who was mentored by Jakub Narębski and D. Stolee,
worked on &lt;a href=&quot;https://github.com/abhishekkumar2718/GSoC20/blob/master/README.md&quot;&gt;“Implement Generation Number v2”&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Shourya Shukla, who was mentored by Kaartic Sivaraam and Christian Couder,
worked on &lt;a href=&quot;https://shouryashukla.blogspot.com/2020/08/the-final-report.html&quot;&gt;“Convert submodule to builtin”&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/cover.1596887883.git.congdanhqx@gmail.com/&quot;&gt;[RFC PATCH 0/2]extend --abbrev support to diff-patch format&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Đoàn Trần Công Danh sent a small RFC patch series that makes the diff
machinery, which is used by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; and similar commands, support
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--abbrev&lt;/code&gt; option when it shows a patch.&lt;/p&gt;

    &lt;p&gt;In addition to the familiar &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--patch&lt;/code&gt; format, which is used when
showing regular diffs in a way similar to the
&lt;a href=&quot;https://en.wikipedia.org/wiki/Diff#Unified_format&quot;&gt;unified format of the Unix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt; command&lt;/a&gt;,
the diff machinery can produce the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--raw&lt;/code&gt; format output to show object
names before and after the change for each path like this:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;:100644 100644 86e5411f39 f1b1bc8aa0 M  Makefile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;In the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--patch&lt;/code&gt; format, object names before and after the change
appear on the index line, which looks like this:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;index 4adb9ce124..67d9801da3 100644
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--abbrev&lt;/code&gt; option used to control the abbreviation of the
object names in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--raw&lt;/code&gt; format but did not affect those shown
on the index line in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--patch&lt;/code&gt; format. Đoàn’s patch series
makes the option control both.&lt;/p&gt;

    &lt;p&gt;In the cover letter of his RFC patch series, Đoàn explained
how the changes would improve his workflow when dealing with
patches. But Junio Hamano and Jeff King, alias Peff, replied saying
that they had trouble understanding the purpose of the series from
the explanations in the cover letter.&lt;/p&gt;

    &lt;p&gt;After a discussion with Peff and Junio, it turns out that using
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--full-index&lt;/code&gt; option is a better approach to help Đoàn’s workflow
(the option was specifically designed to ensure that the index
line in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--patch&lt;/code&gt; format can be used to exactly identify the
objects involved in the change to help the users, which was what
Đoàn’s workflow wanted). However, a consensus was reached that
Đoàn’s patch series was worth moving forward, because it improved
consistency between the diff formats.&lt;/p&gt;

    &lt;p&gt;So Đoàn sent a
&lt;a href=&quot;https://lore.kernel.org/git/cover.1597146478.git.congdanhqx@gmail.com/&quot;&gt;version 2&lt;/a&gt;
of his patch series with only changes in the cover letter and in the
commit message of the second patch.&lt;/p&gt;

    &lt;p&gt;Junio replied to the first patch of the series though. This patch
changed how &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-abbrev&lt;/code&gt; was dealt with. Junio asked for
clarifications in the commit message, especially about why the patch
was necessary.&lt;/p&gt;

    &lt;p&gt;So Đoàn sent a
&lt;a href=&quot;https://lore.kernel.org/git/cover.1597364493.git.congdanhqx@gmail.com/&quot;&gt;version 3&lt;/a&gt;
of his patch series with only changes in the commit message of the
first patch. After further discussion with Junio, it appears that
the patch was not actually necessary.&lt;/p&gt;

    &lt;p&gt;In the meantime though Gábor Szeder found that the tests in the
second patch were failing when run with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_TEST_DEFAULT_HASH=sha256&lt;/code&gt;. This setting makes Git use the
&lt;a href=&quot;https://en.wikipedia.org/wiki/SHA-2&quot;&gt;SHA-256 hash algorithm&lt;/a&gt;
instead of the usual
&lt;a href=&quot;https://en.wikipedia.org/wiki/SHA-1&quot;&gt;SHA-1 hash algorithm&lt;/a&gt;
for object names.&lt;/p&gt;

    &lt;p&gt;A discussion about the best approach to fix this then followed
between Đoàn, Junio and Brian M. Carlson, who has been working for a
long time on implementing support for SHA-256 in Git.&lt;/p&gt;

    &lt;p&gt;Đoàn eventually sent a
&lt;a href=&quot;https://lore.kernel.org/git/cover.1597926783.git.congdanhqx@gmail.com/&quot;&gt;version 4&lt;/a&gt;
of his patch series, where the first patch of his version 3 had been
discarded, but a new patch to improve handling of SHA-256 object
names in the tests replaced it.&lt;/p&gt;

    &lt;p&gt;Junio and Đoàn discussed further improvements to the commit messages
of both patches. Then Đoàn sent a
&lt;a href=&quot;https://lore.kernel.org/git/cover.1598010556.git.congdanhqx@gmail.com/&quot;&gt;version 5&lt;/a&gt;
taking these improvements into account.&lt;/p&gt;

    &lt;p&gt;The patch series has since been merged into the ‘master’ branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-đoàn-trần-công-danh&quot;&gt;Developer Spotlight: Đoàn Trần Công Danh&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m just another average developer addicted to an exotic environment.
Outside of my $dayjobs, I maintain Git and some other packages for
VoidLinux.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I would consider fixing remaining problems with musl libc my most
important contributions to Git,  since I mostly stay inside my musl
box these days.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I mostly watch for sideline these days, since I’m busy with other
things. Occasionally, I jump in one or two discussion since that topic
looks relevant to me. Sometimes, I write a patch or two to support my
own jobs.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I don’t have anything specific in mind, except the transition into the
new hash algorithm, brian m. carlson has done a very good job, and
I understand the transition would require a long transition period,
testing, a lot of testing.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;The diff to merge-base notation (upstream…fork) of the diff family.
This has been floating in the mailing list for a while, and I won’t
waste this opportunity to not mention it again.&lt;/p&gt;

    &lt;p&gt;There’s an on-going change from Denton Liu to &lt;a href=&quot;https://public-inbox.org/git/cover.1600600823.git.liu.denton@gmail.com/&quot;&gt;support &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--merge-base&lt;/code&gt;&lt;/a&gt;
into the diff family. Hopefully, people can retrain their brain-muscles to
use this new option instead.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.22.0/notes&quot;&gt;2.22.0&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.21.7/notes&quot;&gt;2.21.7&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.16/notes&quot;&gt;2.20.16&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.22/notes&quot;&gt;2.19.22&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.21.6/notes&quot;&gt;2.21.6&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.15/notes&quot;&gt;2.20.15&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.21/notes&quot;&gt;2.19.21&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/09/22/gitlab-13-4-released/&quot;&gt;13.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/09/14/gitlab-13-3-6-released/&quot;&gt;13.3.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/09/04/gitlab-13-3-5-released/&quot;&gt;13.3.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/09/02/security-release-gitlab-13-3-3-released/&quot;&gt;13.3.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/08/28/gitlab-13-3-2-released/&quot;&gt;13.3.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/08/25/gitlab-13-3-1-released/&quot;&gt;13.3.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.3.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.3.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.5.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The first &lt;a href=&quot;https://code.googlesource.com/git/summit/2020/+/main/index.md&quot;&gt;Git Contributors’ Inclusion Summit&lt;/a&gt;
happened on Monday, September 14th, and Tuesday, September 15th. It
was attended by around 30 people. Some notes were taken but it’s not
clear if they are going to be publicly available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/changelog/2020-08-26-set-the-default-branch-for-newly-created-repositories/&quot;&gt;Set the default branch for newly-created GitHub repositories&lt;/a&gt;
on GitHub Blog.&lt;br /&gt;
On &lt;strong&gt;October 1, 2020&lt;/strong&gt;, if you haven’t changed the default branch
for new repositories for your user, organization, or enterprise on
GitHub, it will automatically change from &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;&lt;/strong&gt; to
&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;main&lt;/code&gt;&lt;/strong&gt;.  You can opt out of this change at any time.  Existing
repositories will continue to have the same default branch they have
now.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.theregister.com/2020/08/25/gitpod_open_sources_cloud_development_platform/&quot;&gt;‘There is no way we can keep coding local’: GitPod’s cloud
development platform released into sunlight of open source&lt;/a&gt; –
&lt;em&gt;The Register&lt;/em&gt; chats with co-founder Sven Efftinge.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20200828065609.GA2105118@coredump.intra.peff.net/&quot;&gt;Discussions&lt;/a&gt;
have been going on about the Git project participating in the next
&lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt; round. So far
&lt;a href=&quot;https://www.outreachy.org/apply/project-selection/#git&quot;&gt;3 projects&lt;/a&gt;
have been proposed.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Arista Networks, a Fortune 500 company, has rolled out mandatory
commit signing across their Git repositories. Read about their
journey at
&lt;a href=&quot;https://eos.arista.com/commit-signing-with-git-at-enterprise-scale/&quot;&gt;https://eos.arista.com/commit-signing-with-git-at-enterprise-scale/&lt;/a&gt;
and learn about how they:
    &lt;ul&gt;
      &lt;li&gt;Manage code signing keys across a large company&lt;/li&gt;
      &lt;li&gt;Enforce that all commits are signed&lt;/li&gt;
      &lt;li&gt;Audit Git repositories to ensure that no unsigned commits are added.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Guillaume Papin in his development notes &lt;a href=&quot;https://sarcasm.github.io/notes/dev/compilation-database.html&quot;&gt;on a compilation database&lt;/a&gt;
(a concept that includes, but is not limited to a &lt;a href=&quot;http://clang.llvm.org/docs/JSONCompilationDatabase.html&quot;&gt;JSON Compilation Database&lt;/a&gt;)
includes &lt;a href=&quot;https://sarcasm.github.io/notes/dev/compilation-database.html#git&quot;&gt;section on Git&lt;/a&gt;
as one of (and at this time the only) case studies on open source projects.&lt;/p&gt;

    &lt;p&gt;There is a patch by Philippe Blain to &lt;a href=&quot;https://lore.kernel.org/git/pull.714.git.1598815707540.gitgitgadget@gmail.com/t/#u&quot;&gt;add support for generating a JSON compilation database&lt;/a&gt;
to Git’s Makefile.  It is currently &lt;a href=&quot;https://github.com/git/git/commit/4f4cb66b091c1d87cd42e8a7905b479f3560b28b&quot;&gt;merged into ‘next’&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Keith Peters writes how to create your own &lt;a href=&quot;https://www.bit-101.com/blog/2020/09/git-based-wiki/&quot;&gt;Git-based Wiki&lt;/a&gt;
to save information that one might need later.  The idea is to make
use of the fact that many Git hosting sites render Markdown on-line,
by storing the data in interlinked Markdown files – the article
proposes the template to use.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/helderburato/patterns-for-writing-better-git-commit-messages-4ba0&quot;&gt;Patterns for writing better git commit messages&lt;/a&gt;
by Helder Burato Berto, with references to other articles, and
a &lt;a href=&quot;https://github.com/helderburato/dotfiles/blob/master/git/.gittemplates/commit&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt; template&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/davorg/learn-enough-git-and-github-to-take-part-in-the-perl-weekly-challenge-gpm&quot;&gt;Learn Enough Git and Github to take part in the Weekly Challenge&lt;/a&gt;
by Dave Cross (&lt;strong&gt;not&lt;/strong&gt; intended as “beginners guide to Git and Github”).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://livecodestream.dev/post/2020-08-21-git-concepts-and-workflow-for-beginners/&quot;&gt;Git Concepts and Workflow for Beginners&lt;/a&gt;
by Juan Cruz Martinez on Live Code Stream.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.leshenko.net/p/ugit/#&quot;&gt;ugit: DIY Git in Python&lt;/a&gt; is a
tutorial to help learn about Git internals by building an
implementation of Git in Python.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/Byron/gitoxide&quot;&gt;gitoxide&lt;/a&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gix&lt;/code&gt;) is a
command-line interface (CLI) to access Git repositories. It’s
written to optimize the &lt;em&gt;user-experience&lt;/em&gt;, and perform as &lt;em&gt;good or
better than the canonical implementation&lt;/em&gt;.&lt;/p&gt;

    &lt;p&gt;It provides an idiomatic, lean, fast and safe pure Rust
implementation of Git, and it also provides an easy and safe to use
API in the form of various small crates for implementing your own
tools.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20200921170651.aszbydzvnj7l4y2w@chatter.i7.local/&quot;&gt;grokmirror-2.0&lt;/a&gt;
is a Git mirroring software announced by Konstantin Ryabitsev on the
Git mailing list. It was developed by kernel.org for their own use.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/francescmm/GitQlient&quot;&gt;GitQlient&lt;/a&gt;, pronounced as
git+client (&lt;em&gt;/gɪtˈklaɪənt/&lt;/em&gt;), is a multi-platform Git client written
with Qt, originally forked from &lt;a href=&quot;https://github.com/tibirna/qgit&quot;&gt;QGit&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Related project is &lt;a href=&quot;https://github.com/francescmm/GitQlientPlugin&quot;&gt;GitQlientPlugin&lt;/a&gt;,
the project to build an integrated QtCreator plugin of GitQlient.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://blog.trailofbits.com/2020/08/28/graphtage/&quot;&gt;Graphtage: A New Semantic Diffing Tool&lt;/a&gt;
is a command line utility and underlying library for semantically
comparing and merging tree-like structures such as JSON, JSON5, XML,
HTML, YAML, and TOML files.  You can even compare files that are in
two different formats.  When paired with the &lt;a href=&quot;https://blog.trailofbits.com/2019/11/01/two-new-tools-that-tame-the-treachery-of-files/&quot;&gt;PolyFile tool&lt;/a&gt;
you can semantically diff arbitrary file formats.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.sourcetrail.com/&quot;&gt;Sourcetrail&lt;/a&gt; is a free and
&lt;a href=&quot;https://github.com/CoatiSoftware/Sourcetrail&quot;&gt;open-source&lt;/a&gt;
cross-platform interactive source explorer, that helps you get
productive on unfamiliar source code.  It currently supports
C, C++, Java and Python.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://gist.github.com/phil-blain/d350e91959efa6e7afce60e74bf7e4a8&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-in&lt;/code&gt;&lt;/a&gt; is 
a small Python script to import a message or an entire thread from a mailing list 
to an IMAP mailbox. Very useful when you are &lt;strong&gt;not&lt;/strong&gt; subscribed to the list but want to answer 
an email from the list, while being be able to quote parts of the message.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Ethan Rahn, Philippe Blain and Junio Hamano.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 66 (August 27th, 2020)</title>
      <link>https://git.github.io/rev_news/2020/08/27/edition-66/</link>
      <pubDate>Thu, 27 Aug 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/08/27/edition-66/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-66-august-27th-2020&quot;&gt;Git Rev News: Edition 66 (August 27th, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 66th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of July 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.678.git.1595028293855.gitgitgadget@gmail.com/&quot;&gt;git-mv: improve error message for conflicted file&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Chris Torek sent a patch to change the error message from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git mv&lt;/code&gt;
when it’s used on a file that has unresolved conflicts. Previously,
in this special case &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git mv&lt;/code&gt; would error out with the same error
message as if the file was not managed by Git, that is:&lt;/p&gt;

    &lt;p&gt;“fatal: not under version control, src=…”&lt;/p&gt;

    &lt;p&gt;This was of course misleading, so Chris’ patch implemented detecting this
case and then using the new “must resolve merge conflict first”
error message if applicable.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine first reviewed the patch suggesting a small code
improvement in the detection of this case, and a more succinct new
error message, “conflicted”. Eric also commented on the test case
that Chris’ patch added, suggesting a number of small changes that
would make the test look more modern.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, commented on the code detecting
this case. He suggested a less wasteful way to do that.&lt;/p&gt;

    &lt;p&gt;Chris then replied to Eric’s review saying he will use Junio’s
suggestion for the detection code and Eric’s suggestions for the
error message and the test.&lt;/p&gt;

    &lt;p&gt;Chris also asked if he should clean up and modernize other tests in
the test script that could benefit from Eric’s suggestions, but Eric
replied that the test script, “t7001-mv.sh”, had so many old style
issues that such improvements should happen in a dedicated patch
series.&lt;/p&gt;

    &lt;p&gt;Interestingly Eric listed 17 different old style issues, and for
each one he described what should be done to fix them, so that
&lt;a href=&quot;https://lore.kernel.org/git/CAPig+cQpUu2UO-+jWn1nTaDykWnxwuEitzVB7PnW2SS_b7V8Hg@mail.gmail.com/&quot;&gt;his email&lt;/a&gt;
can be read as a guide to modernizing test scripts.&lt;/p&gt;

    &lt;p&gt;Elijah Newren replied to Junio’s suggestion, pointing to
&lt;a href=&quot;https://lore.kernel.org/git/xmqqk1ozb6qy.fsf@gitster-ct.c.googlers.com/&quot;&gt;an email from two years ago&lt;/a&gt;,
where the same issue was already discussed and where Junio suggested
that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git mv&lt;/code&gt; on a conflicting file could just move the file and
remove its conflicting status, in the same way as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rm&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add&lt;/code&gt; already work on such a file.&lt;/p&gt;

    &lt;p&gt;Elijah said that he was still planning to implement what Junio had
suggested in that email, but that in the meantime fixing the error
message was perfectly fine.&lt;/p&gt;

    &lt;p&gt;Junio replied to Elijah saying that he was not convinced any more
that what he had suggested two years ago was actually the right
thing to do, and then describing in details some issues with his old
suggestion. Junio agreed though that fixing the error message as in
Chris’ patch was a “strict improvement”.&lt;/p&gt;

    &lt;p&gt;Elijah and Junio then discussed a bit more technical issues related
to Junio’s old proposal.&lt;/p&gt;

    &lt;p&gt;Chris sent a version 2 of his patch implementing Junio’s and Eric’s
suggestions, including the shortened “conflicted” error message that
Eric had suggested.&lt;/p&gt;

    &lt;p&gt;Junio replied to Chris and discussed a bit the “conflicted” error
message, but Chris’ version 2 patch got merged to the master branch
as is.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CAAvDm6Z2HcQkyinCD4hKTnqGR3gcXodhoo0YKSnbB-vDJcn3MQ@mail.gmail.com/t/#u&quot;&gt;How can I search git log with certain keyword but without the other keyword?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;孙世龙 sunshilong asked how to search for commits in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; that include
certain keyword A, but at the same time do not have another keyword B in them.
The example provided was a branch with three commits:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;b90b03f b12&lt;br /&gt;
27f7577 b1&lt;br /&gt;
7268b40 t123&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;The original poster wanted to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --grep&lt;/code&gt; to find commits that match
“12” but not “t123”. In this example it should return only “b90b03f b12” as
search result.&lt;/p&gt;

    &lt;p&gt;Carlo Arenas proposed using features of &lt;a href=&quot;https://perldoc.perl.org/perlre.html&quot;&gt;PCRE syntax&lt;/a&gt;
(Perl Compatible Regular Expressions) with a negative lookahead assertion and
word boundary to generate expression that matches one but not the other:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -P --all-match --grep &apos;12&apos; --grep &apos;\b(?!t123\b)\w+&apos;&lt;/code&gt;&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;The syntax was explained by Jeff King, alias Peff, who also said that the
short option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-P&lt;/code&gt; had to be spelled &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--perl-regexp&lt;/code&gt; before Git version
v2.14.0. He also reminded that for this to work one also needs a version of Git
built with libpcre support.&lt;/p&gt;

    &lt;p&gt;It turned out however that it &lt;a href=&quot;https://public-inbox.org/git/CAAvDm6Z6SA8rYYHaFT=APBSx0tM+5rHseP+fRLufgDxvEthsww@mail.gmail.com/&quot;&gt;didn’t resolve&lt;/a&gt;
the [more] real issue that sunshilong had:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;I wonder why this command doesn’t work well.&lt;/p&gt;

      &lt;p&gt;I intend to find the comment with the keyword “12” but without “comments”
whereas the output is something like this:&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git log --perl-regexp --all-match --grep=12 --grep &apos;\b(?!comments\b)\w+&apos;
commit f5b6c3e33bd2559d6976b1d589071a5928992601
Author: sunshilong &amp;lt;sunshilong369@gmail.com&amp;gt;
Date:   2020-04-12 23:00:29 +0800

    comments 2020.04.12 ng
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Peff responded that he can’t think of a way to achieve that just using a regex,
and that currently &lt;a href=&quot;https://public-inbox.org/git/20200717063324.GB1179001@coredump.intra.peff.net/&quot;&gt;Git supports similar feature only in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;The natural thing to me would be the equivalent of:&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  git grep -e 12 --and --not -e comments
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;

      &lt;p&gt;The underlying grep machinery in Git understands how to compose multiple
patterns like this, and the command above really does work (though of
course it is searching for lines in a file and not commit messages).&lt;/p&gt;

      &lt;p&gt;But none of that is exposed via the command-line of “git log”. I think
it would be possible to do so, but I’m not sure how tricky it would be
(certainly one complication is that “--not” already means something else
there, but presumably we could have “--grep-and”, “--grep-not”, etc).&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;The idea of introducing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--grep-and&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--grep-not&lt;/code&gt; to disambiguate from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--not&lt;/code&gt; (which
means something completely different for the log family) is
&lt;a href=&quot;https://lore.kernel.org/git/7vr4q45y65.fsf@alter.siamese.dyndns.org/&quot;&gt;as old as 2012&lt;/a&gt;,
as Junio C Hamano reminded.  He then went to &lt;a href=&quot;https://public-inbox.org/git/xmqq7dv2fnpb.fsf@gitster.c.googlers.com/&quot;&gt;explain the problem&lt;/a&gt;
with properly implementing such feature:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;Having said that, I do not think our underlying grep machinery is
equipped to answer “find every commit whose log message has X but
not Y”, even if we exposed the interface that is equivalent to that
of “git grep” to “git log”.&lt;/p&gt;

      &lt;p&gt;There are two levels of boolean combination involved in running our
“grep” machinery.  The lower level is used to determine if each line
matches the criteria.  The main consumer of the “grep” machinery is
of course “git grep” and because it is line oriented, we have quite
a rich set of operations and combinations to say things like “if a
line has X and Y on it in any order, but not Z on it, then the line
is a match.”  That is what “--not”, “--and”, “--or” (not exposed to
the “git log” interface) express and we even take “(“ and “)” for
grouping, e.g. “( X --or Y ) --and --not Z”.&lt;/p&gt;

      &lt;p&gt;Another level of combination is to determine if the entire document
matches.  It often happens that you want to find a document with
both X and Y in it, and “grep -e X --and -e Y” is *NOT* a way to do
so — the “--and” is a line-level combinator and tells the machinery
to find lines that have both X and Y on them.&lt;/p&gt;

      &lt;p&gt;We have a fairly ad-hoc single mechanism for boolean combination at
this level and that is the “--all-match” option, which says “Look at
the boolean expression you used to find each matching line, and
separate them at the OR operator at the top level.  Now, apply the
matching logic to all lines in a document and see if &lt;em&gt;all&lt;/em&gt; the
clauses joined by the top-level OR operators matched at least once.
If yes, then the document matches.”&lt;/p&gt;

      &lt;p&gt;That is how “git grep --all-match -e X -e Y” finds documents that
refer to both X and Y but not necessarily on the same line.&lt;/p&gt;

      &lt;p&gt;There is not much room for the line-level “--not” operator to
participate in this picture.  “git grep -e X --not -e Y” would mean
“find lines that has X, or that does not have Y”, so as long as a
document has one line with X on it and one line (which can be but
does not have to be the same line) that does not have Y on it, the
variant of that search with “--all-match” in it would say “yup the
doc matches”.  But that is definitely not what the user who wants to
say “if a doc has X in it, I want to see it, but I do not want to
see it if it also has Y” wants to see.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Then the discussion petered out, without much further help. It remains to be
seen if somebody would take up the challenge of improving Git search
capabilities by adding support for boolean combinations of line-level and
document-level match operations.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#323&quot;&gt;3.2.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.21.5/notes&quot;&gt;2.21.5&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.14/notes&quot;&gt;2.20.14&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.20/notes&quot;&gt;2.19.20&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.25/notes&quot;&gt;2.18.25&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.21.4/notes&quot;&gt;2.21.4&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.13/notes&quot;&gt;2.20.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.19/notes&quot;&gt;2.19.19&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.24/notes&quot;&gt;2.18.24&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/08/22/gitlab-13-3-released/&quot;&gt;13.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/08/18/critical-security-release-gitlab-13-2-6-released/&quot;&gt;13.2.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/08/18/critical-security-release-gitlab-13-2-5-released/&quot;&gt;13.2.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/08/11/gitlab-13-2-4-released/&quot;&gt;13.2.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/08/05/gitlab-13-2-3-released/&quot;&gt;13.2.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/07/30/gitlab-13-2-2-released/&quot;&gt;13.2.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.5.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;GitLab is looking for a Backend Engineer with Git experience to join
their Gitaly team. See
&lt;a href=&quot;https://about.gitlab.com/job-families/engineering/backend-engineer/#gitaly&quot;&gt;the job description&lt;/a&gt;
and &lt;a href=&quot;https://about.gitlab.com/jobs/careers/&quot;&gt;apply through the GitLab Talent Community&lt;/a&gt;
if you are interested.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://techcrunch.com/2020/08/21/china-is-building-its-github-alternative-gitee/&quot;&gt;China is building a GitHub alternative called Gitee&lt;/a&gt; (on TechCrunch).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bitbucket.org/blog/conditional-steps-and-improvements-to-logs-in-bitbucket-pipelines&quot;&gt;Conditional steps and improvements to logs in Bitbucket Pipelines&lt;/a&gt;
by Peter Plewa.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://charliegerard.dev/blog/github-action-toxic-comments&quot;&gt;Creating a GitHub Action to detect toxic comments using TensorFlow.js&lt;/a&gt;
by Charlie Gerard (also on &lt;a href=&quot;https://dev.to/devdevcharlie/creating-a-github-action-to-detect-toxic-comments-using-tensorflow-js-13bo&quot;&gt;Dev.to&lt;/a&gt;),
using TensorFlow’s toxicity pre-trained model.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.edureka.co/blog/what-is-git/&quot;&gt;What Is Git ? – Explore A Distributed Version Control Tool&lt;/a&gt;
by Reshma Ahmed on the Edureka! blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2sjqTHE0zok&quot;&gt;Lecture 6: Version Control (git) (2020)&lt;/a&gt;,
part of lecture videos from the class offered during MIT’s Independent Activities Period in 2020,
from the &lt;a href=&quot;https://missing.csail.mit.edu/about/&quot;&gt;“Missing Semester” course&lt;/a&gt;
providing hands-on introduction to tools and techniques in Computer Science.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/8/dont-ignore-gitignore&quot;&gt;Don’t ignore .gitignore&lt;/a&gt;
by Rajeev Bera on opensource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/chrissiemhrk/git-commit-message-5e21&quot;&gt;How to write a good commit message&lt;/a&gt;
by Chrissie on Dev.to; one of many such articles.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/828748/&quot;&gt;Searching code with Sourcegraph [LWN.net]&lt;/a&gt;
by Ben Hoyt.  Open-sourcing &lt;a href=&quot;https://about.sourcegraph.com/&quot;&gt;Sourcegraph&lt;/a&gt; was covered in
&lt;a href=&quot;https://git.github.io/rev_news/2018/10/24/edition-44/&quot;&gt;Git Rev News #44 (October 24th, 2018)&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/git-wordpress-1/&quot;&gt;Using Git with WordPress — Part 1&lt;/a&gt;
by Kristian Lumme.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codeburst.io/a-resource-for-all-things-git-b63d6626beca&quot;&gt;A Resource for all Things Git&lt;/a&gt;
by Lea Cohen on codeburst.io is a list of articles about Git, with descriptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://sourcegraph.com/search&quot;&gt;Sourcegraph Cloud&lt;/a&gt;
allows to search “top” public repositories from various code hosting sites,
while self-hosted instances can be used to also search private and local repositories;
there are also &lt;a href=&quot;https://docs.sourcegraph.com/integration/browser_extension&quot;&gt;browser extensions&lt;/a&gt; for Chrome and Firefox
that enable its features to be used when browsing on hosts like GitHub and GitLab.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Autohook/Autohook&quot;&gt;Autohook&lt;/a&gt;
is a very, &lt;em&gt;very&lt;/em&gt; small Git hook manager in bash with focus on automation.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/awaescher/RepoZ&quot;&gt;RepoZ&lt;/a&gt;
is a zero-conf git repository hub for Windows and macOS,
providing a navigation widget allowing for quick overview of your repositories,
with a sidekick command line app called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grr&lt;/code&gt; and Windows Explorer enhancements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 65 (July 29th, 2020)</title>
      <link>https://git.github.io/rev_news/2020/07/29/edition-65/</link>
      <pubDate>Wed, 29 Jul 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/07/29/edition-65/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-65-july-29th-2020&quot;&gt;Git Rev News: Edition 65 (July 29th, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 65th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of June 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The history of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; in Git (&lt;em&gt;written by Andrew Ardill&lt;/em&gt;)&lt;/p&gt;

    &lt;p&gt;Amidst &lt;a href=&quot;https://lore.kernel.org/git/CAOAHyQwyXC1Z3v7BZAC+Bq6JBaM7FvBenA-1fcqeDV==apdWDg@mail.gmail.com/&quot;&gt;all the discussion&lt;/a&gt;
around changing the default branch from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; to something else,
many people have asked why &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; was chosen in the first place.
As &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; has a few different meanings in English, just which
meaning was intended?&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20200504174548.r3zaftqcq52yhd2u@chatter.i7.local/&quot;&gt;Konstantin Ryabitsev&lt;/a&gt;
was the first to discuss the meaning of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;, saying&lt;/p&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Git doesn’t use “master-slave” terminology – the “master” comes
from the concept of having a “master” from which copies (branches) are made&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;&lt;a href=&quot;https://mail.gnome.org/archives/desktop-devel-list/2019-May/msg00066.html&quot;&gt;This post from the GNOME mailing list&lt;/a&gt;
was then &lt;a href=&quot;https://lore.kernel.org/git/CAOAHyQx=+fM1FpAv+g3M+j7j4MgLJA03=MGFmXLvZcfJKAEpGg@mail.gmail.com/&quot;&gt;linked by Simon Pieters&lt;/a&gt;
with the claim that&lt;/p&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Git’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; is in fact a reference to master/slave&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;That post points out that the first use of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; was in
&lt;a href=&quot;https://github.com/git/git/commit/3e91311ae750af9bf2e3517b1e701288ac3066b9&quot;&gt;a CVS helper script&lt;/a&gt;,
links that to BitKeeper (the version control system used to manage
Linux development when Linus Torvalds first wrote Git), and claims
BitKeeper used the “master and slave” meaning of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Many people considered &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; to mean a “master copy”, so this
connection to slavery was very surprising.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/a34e4244-835e-976a-8fb4-7fc766d100bd@gmail.com/T/#m9589009ba3b6663ca38c2ef19c18c933e46c253a&quot;&gt;Andrew Ardill investigated the BitKeeper source code&lt;/a&gt;
and came to the conclusion that “the overwhelming majority of
[the usages of master in BitKeeper] are of the “Master Copy”
variant”, or as &lt;a href=&quot;https://lore.kernel.org/git/20200616085004.GB21462@kitsune.suse.cz/&quot;&gt;Michal Suchánek said&lt;/a&gt;
“even in BitKeeper the use of master/slave is the exception rather
than the norm.”&lt;/p&gt;

    &lt;p&gt;Off the list discussions were ongoing, and
&lt;a href=&quot;https://twitter.com/xpasky/status/1271477451756056577&quot;&gt;Petr Baudis wrote on Twitter about naming the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; branch in Git&lt;/a&gt;&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;I picked the names “master” (and “origin”) in the early Git tooling back in 2005.&lt;/p&gt;

      &lt;p&gt;(this probably means you shouldn’t give much weight to my name preferences :) )&lt;/p&gt;

      &lt;p&gt;I have wished many times I would have named them “main” (and “upstream”) instead.&lt;/p&gt;

      &lt;p&gt;Glad it’s happening @natfriedman&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;When asked for which meaning of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; was intended,
&lt;a href=&quot;https://twitter.com/xpasky/status/1272280760280637441&quot;&gt;Petr replied&lt;/a&gt;&lt;/p&gt;
    &lt;blockquote&gt;
      &lt;p&gt;“master” as in e.g. “master recording”. Perhaps you could say the
original, but viewed from the production process perspective.&lt;/p&gt;

      &lt;p&gt;A clueless Central European youngster whose command of English
was mostly illusory came up with the term, which is why it isn’t
very obvious…&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;In &lt;a href=&quot;https://mail.gnome.org/archives/desktop-devel-list/2020-June/msg00023.html&quot;&gt;a follow-up to that original GNOME mailing list post&lt;/a&gt;,
Bastien Nocera retracted their claims from the original post, saying&lt;/p&gt;
    &lt;blockquote&gt;
      &lt;p&gt;I emailed Linus Torvalds recently… and he told me that it was
unlikely that the “Git master” branch name was influenced by
BitKeeper, and that “master” was “fairly standard naming” for this
sort of thing and “more likely to be influenced by the
CVS master repository”&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Going on, Bastien discusses Petr Baudis’ tweets and then concludes
“it doesn’t matter where the name comes from… The fact that it has
bad connotations, or inspires dread for individuals and whole
communities, is reason enough to change it.”&lt;/p&gt;

    &lt;p&gt;This is something that
&lt;a href=&quot;https://lore.kernel.org/git/20200505231641.GH6530@camp.crustytoothpaste.net/&quot;&gt;Brian M. Carlson had also pointed out on the Git mailing list&lt;/a&gt;,
saying&lt;/p&gt;
    &lt;blockquote&gt;
      &lt;p&gt;“master”, even though from a different origin, brings the idea of
human bondage and suffering to mind for a non-trivial number of
people, which of course was not the intention and is undesirable.
I suspect if we were making the decision today, we’d pick another
name, since that’s not what we want people to think of when they use Git.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Brian goes on to lay out changes required in Git to rename &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;
as the default, suggesting that there is a decent amount of work and
that due to compatibility concerns “we’d probably want to make it in
a [Git version] 3.0”.&lt;/p&gt;

    &lt;p&gt;Around the web the discussion about renaming &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; continues.
The incorrect claims around the history of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt; persist, even in
our own &lt;a href=&quot;https://git.github.io/rev_news/2020/06/25/edition-64/#other-news&quot;&gt;Git Rev News: Edition 64&lt;/a&gt;,
but seem to be quickly corrected where possible such as on
&lt;a href=&quot;https://gitlab.com/gitlab-org/gitlab/-/issues/221164#note_372560473&quot;&gt;GitLab’s discussion on the topic&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/pull.659.git.1592252093.gitgitgadget@gmail.com/&quot;&gt;More commit-graph/Bloom filter improvements&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Derrick Stolee, who prefers to be called Stolee, sent a patch series
to the mailing list, based on a
&lt;a href=&quot;https://lore.kernel.org/git/20200529085038.26008-1-szeder.dev@gmail.com/&quot;&gt;previous experimental patch series&lt;/a&gt;
sent a few weeks earlier by Gábor Szeder.&lt;/p&gt;

    &lt;p&gt;When he sent his patch series, Gábor said that his work was a proof
of concept started more than a year ago, that he had no time to
finish yet. He was motivated to send it as-is with changes to commit
messages, when he recently took a look at the current changed-path Bloom filter
implementation. This implementation was developed for a long time
mainly by Garima Singh and was merged at the beginning of May. He
saw that it had some of the same issues that he had stumbled upon,
and that it missed some optimization opportunities.&lt;/p&gt;

    &lt;p&gt;Gábor listed a lot of very interesting benefits from his work, but
also a lot of drawbacks that would prevent it from being merged as
is. Many of the benefits are linked to a new format used to store
the changed-path Bloom filter. This new format was justified by
&lt;a href=&quot;https://public-inbox.org/git/20200529085038.26008-16-szeder.dev@gmail.com/&quot;&gt;an impressive commit message&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Stolee, Taylor Blau, Johannes Schindelin and Junio Hamano, when
reviewing Gábor’s work, were disappointed that Gábor was not trying
to contribute to the current implementation. It appeared though that
a number of Gábor’s 34 patches and ideas could be applied on top of
the current implementation.&lt;/p&gt;

    &lt;p&gt;That’s what Stolee did by first sending
&lt;a href=&quot;https://lore.kernel.org/git/pull.650.git.1591362032.gitgitgadget@gmail.com/&quot;&gt;10 patches from Gábor’s series&lt;/a&gt;
at the beginning of June. This patches series required a bit of
work, but Stolee left out what would have been more difficult to
apply to the current code. René Scharfe, Stolee, Gábor and Junio
commented a bit on it, but didn’t find anything that would require
a new version of this patch series. So it is now “cooking” in the
‘next’ branch.&lt;/p&gt;

    &lt;p&gt;Stolee’s next patch series called
&lt;a href=&quot;https://lore.kernel.org/git/pull.659.git.1592252093.gitgitgadget@gmail.com/&quot;&gt;“More commit-graph/Bloom filter improvements”&lt;/a&gt;
was about adding a few extra improvements, several of which are
rooted in Gábor’s original series. Even though Gábor’s patches did
not apply or cherry-pick at all, Stolee still credited Gábor as the
author of 4 patches out of 8.&lt;/p&gt;

    &lt;p&gt;Anyway this new series contained 2 changes that improve the
false-positive rate which increases performance, and
one change that improves usability. René and Taylor
suggested improvements and bug fixes. Taylor even sent a patch.&lt;/p&gt;

    &lt;p&gt;Stolee then sent &lt;a href=&quot;https://lore.kernel.org/git/pull.659.v2.git.1592934430.gitgitgadget@gmail.com/&quot;&gt;a version 2&lt;/a&gt;
of the series, taking into account the feedback and adding the patch
from Taylor to the series. René, Gábor, Junio and Stolee discussed a
few more points.&lt;/p&gt;

    &lt;p&gt;That led to Stolee sending
&lt;a href=&quot;https://lore.kernel.org/git/pull.659.v3.git.1593174636.gitgitgadget@gmail.com/&quot;&gt;a version 3&lt;/a&gt;
in which Gábor reported a bug that Stolee subsequently fixed.&lt;/p&gt;

    &lt;p&gt;So Stolee sent
&lt;a href=&quot;https://lore.kernel.org/git/pull.659.v4.git.1593610050.gitgitgadget@gmail.com/&quot;&gt;a version 4&lt;/a&gt;
which is now cooking in the ‘next’ branch, along with the first
series that has 10 patches from Gábor.&lt;/p&gt;

    &lt;p&gt;In the meantime though Gábor &lt;a href=&quot;https://public-inbox.org/git/20200710211342.GE11341@szeder.dev/&quot;&gt;commented on this first series&lt;/a&gt;
saying that it has a number of issues. Hopefully these issues will
be addressed soon, and these 2 patch series will be merged in the
near future.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-jonathan-tan&quot;&gt;Developer Spotlight: Jonathan Tan&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a Software Engineer at Google who works on Git. I also contribute
to &lt;a href=&quot;https://www.eclipse.org/jgit/&quot;&gt;JGit&lt;/a&gt; (a Java implementation of Git) as one of its committers.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I would say “&lt;a href=&quot;https://git-scm.com/docs/partial-clone&quot;&gt;partial clone&lt;/a&gt;” - the
ability to clone a repository, but not necessarily have all of
that repository’s objects (accumulated throughout its history) in
your clone. Quite a few articles have been written about it, but in
summary, it improves Git performance especially for large repositories.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;The thing that immediately comes to mind is “partial clone”.  The
fundamentals are there, but some Git commands still operate under the
assumption that objects are only a disk read away (instead of a
network fetch - in a partial clone, if an object is needed but
missing, it is automatically fetched). I’m improving those commands to
be more cognizant of this fact - typically, this means batching the
fetch of all the objects it will need once it realizes that it does
not have some of them, instead of “I need this object, so go fetch it;
OK let me process it; oops I need another one, so go fetch that”.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Along the lines of “partial clone” and large repositories, I would
like them to investigate the feasibility of having Git servers be able
to serve results of computations (thus, not just objects). One case is
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git blame&lt;/code&gt; - if a Git client could ask a Git server to send the
results of such a command, it could offload most of the computation to
the server, only needing to build upon the server’s results with the
locally-created objects that the server does not know about. This is
especially useful with partial clone, because the client does not even
have most of the objects needed and would have to fetch them
otherwise.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;One small thing that I can think of: remove the ability of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt;
to update the working tree and the objects staged in the index. The
&lt;a href=&quot;https://git-scm.com/docs/git-restore&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt;&lt;/a&gt; command,
relatively recently introduced, does this with more beginner-friendly
parameter names (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--worktree&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--staged&lt;/code&gt;, respectively, instead of
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--hard&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--mixed&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--soft&lt;/code&gt; of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt;). This change
would make it easier, for example, to read scripts written by other
people - I would no longer need to think so much about what that
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset&lt;/code&gt; in the script would do.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq5za8hpir.fsf@gitster.c.googlers.com&quot;&gt;2.28.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqblk75uel.fsf@gitster.c.googlers.com&quot;&gt;2.28.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqv9ildh46.fsf@gitster.c.googlers.com&quot;&gt;2.28.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqh7ugwen6.fsf@gitster.c.googlers.com&quot;&gt;2.28.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://lore.kernel.org/git/20200728103216.7378-1-johannes.schindelin@gmx.de&quot;&gt;2.28.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/20200722195905.6540-1-johannes.schindelin@gmx.de&quot;&gt;2.28.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/20200718011007.6808-1-johannes.schindelin@gmx.de&quot;&gt;2.28.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/20200710135935.6416-1-johannes.schindelin@gmx.de&quot;&gt;2.28.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-filter-repo &lt;a href=&quot;https://lore.kernel.org/git/CABPp-BGVFKKm+n8wTN9dqbA6=HJSZ5m3bnG7fLZ5DGevXSXBAA@mail.gmail.com&quot;&gt;2.28.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#318&quot;&gt;3.1.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#3012&quot;&gt;3.0.12&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21622&quot;&gt;2.16.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.21.3/notes&quot;&gt;2.21.3&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.12/notes&quot;&gt;2.20.12&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.18/notes&quot;&gt;2.19.18&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.23/notes&quot;&gt;2.18.23&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.21.2/notes&quot;&gt;2.21.2&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.11/notes&quot;&gt;2.20.11&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.17/notes&quot;&gt;2.19.17&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.22/notes&quot;&gt;2.18.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/07/24/gitlab-13-1-5-released/&quot;&gt;13.1.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/07/24/gitlab-13-2-1-released/&quot;&gt;13.2.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/07/22/gitlab-13-2-released/&quot;&gt;13.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/07/09/gitlab-13-0-10-released/&quot;&gt;13.0.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/07/09/gitlab-13-1-4-released/&quot;&gt;13.1.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/07/06/critical-security-release-gitlab-13-1-3-released/&quot;&gt;13.1.3, 13.0.9 and 12.10.14&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/07/01/security-release-13-1-2-release/&quot;&gt;13.1.2, 13.0.8 and 12.10.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.5.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Carmen Andoh, who works for Google, and Jonathan Nieder’s team at
Google have volunteered to organize a
&lt;a href=&quot;https://lore.kernel.org/git/CA+TwhoKBYwUKmtQTyiocPWJD=KeZQryS+6Q8JKxKgLEy0qJwAw@mail.gmail.com/&quot;&gt;Git Inclusion Summit&lt;/a&gt;.
It would be a virtual contributor summit with the purpose of
engaging core Git contributors as active participants in diversity
and inclusion initiatives for the Git project. Interested Git
contributors can vote on their preferred summit duration and times
on &lt;a href=&quot;http://whenisgood.net/9z2diyy&quot;&gt;a whenisgood poll&lt;/a&gt; by Thursday,
July 30th.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Junio Hamano, the Git maintainer, has renamed the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pu&lt;/code&gt; branch of
git.git to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;seen&lt;/code&gt;. This has been done to use a more meaningful name
and make room for topics from those contributors whose two-letter
name abbreviation needs to be ‘pu’. This was announced in
“&lt;a href=&quot;https://public-inbox.org/git/xmqqimfid2l1.fsf@gitster.c.googlers.com&quot;&gt;What’s cooking in git.git (Jun 2020, #04; Mon, 22)&lt;/a&gt;”&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The Git Project Leadership Committee has been briefly interviewed via
email by &lt;a href=&quot;https://en.wikipedia.org/wiki/Elizabeth_Landau&quot;&gt;Elizabeth Landau&lt;/a&gt;
for an &lt;a href=&quot;https://www.wired.com/story/tech-confronts-use-labels-master-slave/&quot;&gt;article&lt;/a&gt;
in &lt;a href=&quot;https://www.wired.com/&quot;&gt;Wired&lt;/a&gt; about current changes to Git’s
default name for the initial branch.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/2020-07-27-highlights-from-git-2-28/&quot;&gt;Highlights from Git 2.28&lt;/a&gt;
by Taylor Blau on GitHub Blog, mentioning among others &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init.defaultBranch&lt;/code&gt;,
changed-path Bloom filters, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bugreport&lt;/code&gt; command and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;’s new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--show-pulls&lt;/code&gt; option.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The &lt;a href=&quot;https://www.git-tower.com/&quot;&gt;Tower&lt;/a&gt; Git client for Windows and MacOS now supports
&lt;a href=&quot;https://css-tricks.com/cmdz-for-git-is-here/&quot;&gt;CMD+Z for Git&lt;/a&gt; (a universal undo).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/exciting-new-updates-to-the-git-experience-in-visual-studio/&quot;&gt;Exciting new updates to the Git experience in Microsoft Visual Studio 2019&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/2020-07-16-github-archive-program-the-journey-of-the-worlds-open-source-code-to-the-arctic/&quot;&gt;GitHub Archive Program: the journey of the world’s open source code to the Arctic&lt;/a&gt;
by Julia Metcalf on GitHub Blog.  The GitHub Archive Program along with the
GitHub Arctic Code Vault were introduced at GitHub Universe 2019, and mentioned
in &lt;a href=&quot;https://git.github.io/rev_news/2019/11/20/edition-57/&quot;&gt;Git Rev News #57 (November 20th, 2019)&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/823352/&quot;&gt;Updating the Git protocol for SHA-256 [LWN.net]&lt;/a&gt;
by John Coggeshall.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.alchemists.io/articles/git_rebase&quot;&gt;Git Rebase - A Complete Guide&lt;/a&gt; by Brooke Kuhlmann at Alchemists.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://humanwhocodes.com/blog/2020/07/safely-use-github-actions-in-organizations/&quot;&gt;How to safely use GitHub Actions in organizations&lt;/a&gt;
by Nicholas C. Zakas, mainly about handling credentials and other secrets.
Various tools for checking the repository for secrets and/or safely storing secrets
were mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/03/15/edition-25/&quot;&gt;Git Rev News Edition #25&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2017/06/14/edition-28/&quot;&gt;#28&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2018/02/21/edition-36/&quot;&gt;#36&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/rev_news/2018/05/16/edition-39/&quot;&gt;#39&lt;/a&gt; and
&lt;a href=&quot;https://git.github.io/rev_news/2019/11/20/edition-57/&quot;&gt;#57&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fedoramagazine.org/fedora-classroom-session-git-101-with-pagure/&quot;&gt;Fedora Classroom: Git 101 with Pagure&lt;/a&gt;
session was &lt;a href=&quot;https://www.youtube.com/watch?v=HfsKvRecniI&quot;&gt;streamed on YouTube&lt;/a&gt;
on the Fedora Project channel.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/m0nica/how-to-create-a-github-profile-readme-1paj&quot;&gt;How To Create A GitHub Profile README&lt;/a&gt;
by Monica Powell on Dev.to.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dzone.com/articles/top-13-github-alternatives-in-2020-free-and-paid&quot;&gt;Top 13 GitHub Alternatives in 2020 [Free and Paid]&lt;/a&gt;
by Momchil Koychev on DevOps Zone.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dzone.com/articles/git-best-practices-after-technique-1&quot;&gt;Git Best Practices – AFTER Technique&lt;/a&gt;
by Rajeev Bera on DevOps Zone.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/7/git-best-practices&quot;&gt;6 best practices for teams using Git&lt;/a&gt;
by Ravi Chandran on OpenSource.com.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dystroy.org/blog/gg/&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;broot&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meld&lt;/code&gt; to diff before commit&lt;/a&gt; by Denys Séguret
(author of &lt;a href=&quot;https://dystroy.org/broot/&quot;&gt;broot&lt;/a&gt;, which is a tool to navigate file trees).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@thesagarsehgal/basic-git-analogy-for-contributing-to-open-source-project-8c314789326e&quot;&gt;Basic Git Analogy for Contributing to Open Source Project&lt;/a&gt;
by Sagar Seghal on Medium.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.hackernoon.com/can-you-restore-a-deleted-commit-on-git-yr1x3ygx&quot;&gt;Can You Restore A Deleted Commit on Git?&lt;/a&gt;
by Dmytro Khmelenko on Hacker Noon (the answer is yes, with the help of the reflog).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/g_abud/advanced-git-reference-1o9j&quot;&gt;Git Concepts I Wish I Knew Years Ago&lt;/a&gt;
by Gabriel Abud on Dev.to.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.alchemists.io/projects/git-lint&quot;&gt;Git Lint&lt;/a&gt; - A command line interface for analyzing Git commit quality and consistency for yourself and/or team. Can be used as a Git Hook and/or wired into your continuous integration build system.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.thregr.org/~wavexx/software/git-assembler/&quot;&gt;git-assembler: update git branches using high-level instructions&lt;/a&gt;;
it can perform automatic merge and rebase operations following a simple declarative script
(like “make”, for branches).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jnavila/git-manpages-l10n&quot;&gt;git-manpages-l10n&lt;/a&gt; is repository
for translating Git manpages (the Git documentation).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.jefftk.com/icdiff&quot;&gt;icdiff&lt;/a&gt; is &lt;b&gt;i&lt;/b&gt;mproved &lt;b&gt;c&lt;/b&gt;olored &lt;b&gt;diff&lt;/b&gt;.
Instead of trying to be a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt; replacement for all circumstances,
the goal of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;icdiff&lt;/code&gt; is to be a tool you can reach for to get a better picture
of what changed when it’s not immediately obvious from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt;.
Docs include examples on how to integrate it with Git, Mercurial and Subversion.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/soramimi/Guitar&quot;&gt;Guitar&lt;/a&gt; is a multi-platform graphical Git client
under development, written in C++ and powered by Qt.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://madebynathan.com/2011/10/19/git-shortcuts-like-youve-never-seen-before/&quot;&gt;SCM Breeze&lt;/a&gt;
is a set of shell scripts (for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bash&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zsh&lt;/code&gt;) that make it easier to use Git.
It integrates with your shell to give you numbered file shortcuts, a repository index
with tab completion, and a community driven collection of useful SCM functions.
SCM Breeze lives on GitHub at &lt;a href=&quot;https://github.com/ndbroadbent/scm_breeze&quot;&gt;https://github.com/ndbroadbent/scm_breeze&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gitpod.io/&quot;&gt;Gitpod&lt;/a&gt; - Prebuilt Dev Environments for GitLab, GitHub and Bitbucket;
on the cloud or self-hosted, with a free tier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Andrew Ardill, Jonathan Tan,
Brooke Kuhlmann, Eric Sunshine, Carlo Marcelo
Arenas Belón and Gábor Szeder.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 64 (June 25th, 2020)</title>
      <link>https://git.github.io/rev_news/2020/06/25/edition-64/</link>
      <pubDate>Thu, 25 Jun 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/06/25/edition-64/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-64-june-25th-2020&quot;&gt;Git Rev News: Edition 64 (June 25th, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 64th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of May 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20200513200040.68968-1-delphij@google.com/&quot;&gt;fetch: allow adding a filter after initial clone&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Xin Li sent a patch to allow using a partial clone filter when
fetching even if the original clone didn’t use one.&lt;/p&gt;

    &lt;p&gt;As the patch was lacking a proper commit message, Junio Hamano, the
Git maintainer, asked Xin to add one. So Xin sent an explanation of
what the commit does taking as an example a shallow clone, with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone --depth=1 ...&lt;/code&gt;, that is transformed into a partial clone
with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch --unshallow --filter=blob:none ...&lt;/code&gt;. Xin wrote that
being able to do so is easier for the user than having to manually
set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.repositoryFormatVersion&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.partialClone&lt;/code&gt;
config options.&lt;/p&gt;

    &lt;p&gt;Junio replied asking how we could be sure that the server actually
supports the protocol extensions required for partial clone, as
setting up the config options manually or automatically shouldn’t be
done without verifying that.&lt;/p&gt;

    &lt;p&gt;Brian Carlson also replied to Xin’s initial patch wondering if it
was safe to set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.repositoryFormatVersion&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt; as it would
make Git fail if any already configured &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.*&lt;/code&gt; config
option, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.tomatoSalad&lt;/code&gt;, was not recognized.&lt;/p&gt;

    &lt;p&gt;Xin then sent a version 2 of his patch. This time there was a commit
message in the patch and a cover letter along with the patch that
explained the changes. The patch itself added tests and checked that
the existing configuration had no unsupported &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.*&lt;/code&gt;
configuration before upgrading the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.repositoryFormatVersion&lt;/code&gt;
config option to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Jonathan Nieder reviewed the patch suggesting a number of small
changes and moving some content from the cover letter to the commit
message. Xin then sent a version 3 of his patch applying Jonathan’s
suggestions and without a cover letter.&lt;/p&gt;

    &lt;p&gt;Junio in the meantime commented on the version 2 that it was not
enough to check that the existing configuration had no unsupported
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.*&lt;/code&gt; configuration variable, but that instead the code
should check that there is no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.*&lt;/code&gt; configuration variable
at all, as any such configuration variable could have an unsupported
value. Jonathan then agreed with Junio.&lt;/p&gt;

    &lt;p&gt;Xin replied to them that the current code doesn’t actually check
repositoryFormatVersion, so setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.partialclone&lt;/code&gt; is
enough to make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch --filter=...&lt;/code&gt; work. He then asked what we
want to do about this situation.&lt;/p&gt;

    &lt;p&gt;Jonathan replied that this should be fixed even though it was a
separate concern from the patch.&lt;/p&gt;

    &lt;p&gt;Xin then sent a version 4 of his patch taking into account Junio’s
comments. Junio reviewed it and suggested other improvements. He
further elaborated on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.repositoryFormatVersion&lt;/code&gt; upgrade by
suggesting the following criteria:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;(1) if upgrading from v0, there must be no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.*&lt;/code&gt; and&lt;/p&gt;

      &lt;p&gt;(2) if upgrading from other versions, there must be no
    &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.*&lt;/code&gt; we do not recognize.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Jonathan also reviewed version 4 of Xin’s patch focusing on the
changes made in tests.&lt;/p&gt;

    &lt;p&gt;Xin sent a version 5 of the patch addressing the comments. He also
replied to Jonathan’s review. Junio also replied to Jonathan’s
review agreeing with him that some changes in the patch actually
belong to another patch.&lt;/p&gt;

    &lt;p&gt;Xin then sent a version 6 with 4 patches instead of 1. Junio
reviewed the patches and found that only the last one could be
controversial as it could perhaps break an existing set-up.&lt;/p&gt;

    &lt;p&gt;The last patch indeed contained the changes about checking
repositoryFormatVersion that Jonathan and Junio wanted to see
separately. With that patch the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.*&lt;/code&gt; config options don’t
take effect unless &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.repositoryFormatVersion&lt;/code&gt; has been upgraded
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt; or higher.&lt;/p&gt;

    &lt;p&gt;So for example if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.worktreeConfig&lt;/code&gt; is set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; but
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.repositoryFormatVersion&lt;/code&gt; isn’t set, then with the patch Git
will behave as if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.worktreeConfig&lt;/code&gt; wasn’t set.&lt;/p&gt;

    &lt;p&gt;Junio thinks that this change is the right thing to do in the longer
term though. He asked for comments about that but no-one
answered. So the patch series has been merged to ‘pu’ and then
‘next’ and according to the last “What’s cooking in git.git” email from Junio,
the plan is to merge to ‘master’.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqzh9mu4my.fsf@gitster.c.googlers.com/&quot;&gt;2.27.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.27.0.windows.1&quot;&gt;2.27.0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-filter-repo &lt;a href=&quot;https://lore.kernel.org/git/CABPp-BFo=SRkMezdD_FvM92-bgdeBzfExpjtjYiEvg0UM1rWQQ@mail.gmail.com/&quot;&gt;2.27.1&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/CABPp-BF+xvzroi5QU8zPp-7KoSS16v1CsM43vWx1WO5NjyU0BQ@mail.gmail.com/&quot;&gt;2.27.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.0.1&quot;&gt;1.0.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/06/10/critical-security-release-13-0-6-released/&quot;&gt;13.0.6, 12.10.11, 12.9.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/06/04/gitlab-12-10-10-released/&quot;&gt;12.10.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/06/04/gitlab-13-0-5-released/&quot;&gt;13.0.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/06/03/critical-security-release-13-0-4-released/&quot;&gt;13.0.4, 12.10.9, 12.9.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/05/29/gitlab-12-10-8-released/&quot;&gt;12.10.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/05/29/gitlab-13-0-3-released/&quot;&gt;13.0.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/05/27/security-release-13-0-1-released/&quot;&gt;13.0.1, 12.10.7, 12.9.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#322&quot;&gt;3.2.2&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#317&quot;&gt;3.1.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#3011&quot;&gt;3.0.11&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html#321&quot;&gt;3.2.1&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#316&quot;&gt;3.1.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#3010&quot;&gt;3.0.10&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21621&quot;&gt;2.16.21&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21519&quot;&gt;2.15.19&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.14.html#21421&quot;&gt;2.14.21&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.2.html&quot;&gt;3.2.0&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21620&quot;&gt;2.16.20&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#315&quot;&gt;3.1.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#309&quot;&gt;3.0.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.21.0/notes&quot;&gt;2.21.0&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.9/notes&quot;&gt;2.20.9&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.15/notes&quot;&gt;2.19.15&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.20/notes&quot;&gt;2.18.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.0.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.5.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.5.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The Git PLC (Project Leadership Committee) &lt;a href=&quot;https://lore.kernel.org/git/CAP8UFD1KfEps4hS8eadBK-E4e5WyWSh93XivRabZAVhiCuQimQ@mail.gmail.com/&quot;&gt;announced&lt;/a&gt;
that it drafted a statement “regarding Git and branch naming” with
the &lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Software Freedom Conservancy&lt;/a&gt; that
has been &lt;a href=&quot;https://sfconservancy.org/news/2020/jun/23/gitbranchname/&quot;&gt;posted at Conservancy’s site&lt;/a&gt;.
Articles related to this issue include:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://wptavern.com/proposal-to-rename-the-master-branch-from-wordpress-owned-git-repositories&quot;&gt;Proposal to Rename the ‘Master’ Branch of WordPress-Owned Git Repositories&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/823224/&quot;&gt;Loaded terms in free software [LWN.net]&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://dev.to/damcosset/replacing-master-in-git-2jim&quot;&gt;Replacing master in git&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.b12.io/migrating-your-default-git-branch-to-main-a0fb706e3668&quot;&gt;Migrating your default git branch to ‘main’&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.zdnet.com/article/github-to-replace-master-with-alternative-term-to-avoid-slavery-references/&quot;&gt;GitHub to replace “master” with alternative term to avoid slavery references&lt;/a&gt;;
note that while BitKeeper used master/slave terminology for repositories, ‘master’ branch in Git is about being ‘master copy’&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Eric Wong, the developer of &lt;a href=&quot;https://public-inbox.org/README.html&quot;&gt;public-inbox.org&lt;/a&gt;,
&lt;a href=&quot;https://lore.kernel.org/git/20200610184147.GA1887@dcvr/&quot;&gt;implemented a read-only IMAP/IMAPS server&lt;/a&gt;,
so that a Git mailing list archive can now be accessed through
initially 8, and now 9, IMAP mailboxes sliced into ~50k messages to
not overload clients.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Matheus Tavares, who was a &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;GSoC&lt;/a&gt;
student &lt;a href=&quot;https://matheustavares.gitlab.io/gsoc/&quot;&gt;last year&lt;/a&gt;, has been
hired as a freelancer by Amazon to improve Git
performance. Congratulations to him!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A new &lt;a href=&quot;https://git.github.io/Hacking-Git/&quot;&gt;Hacking Git&lt;/a&gt; page lists
documents helpful to develop Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/2020-06-18-introducing-github-super-linter-one-linter-to-rule-them-all/&quot;&gt;Introducing GitHub Super Linter: one linter to rule them all&lt;/a&gt; by Lucas Gravley on GitHub Blog.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dvc.org/blog/dvc-1-0-release&quot;&gt;DVC 1.0 release: new features for MLOps&lt;/a&gt;; the
&lt;a href=&quot;https://dvc.org/blog/dvc-3-years-and-1-0-release&quot;&gt;1.0 Pre-release&lt;/a&gt; was mentioned
in a &lt;a href=&quot;https://git.github.io/rev_news/2020/05/28/edition-63/#other-news&quot;&gt;previous edition of Git Rev News&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-06-17-using-github-actions-for-mlops-data-science/&quot;&gt;Using GitHub Actions for MLOps (Machine Learning Operations) &amp;amp; Data Science&lt;/a&gt; by Hamel Husain on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://levelup.gitconnected.com/how-to-squash-git-commits-9a095c1bc1fc&quot;&gt;How to squash git commits&lt;/a&gt; by Srebalaji Thirumalai.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.polettix.it/ETOOBUSY/2020/06/11/rebase-retag/&quot;&gt;Rebase and retag&lt;/a&gt; and &lt;a href=&quot;https://github.polettix.it/ETOOBUSY/2020/06/12/rebase-auto-retag/&quot;&gt;Rebase and retag, but manually&lt;/a&gt; is a series of short articles by Flavio Poletti on how to use tagging to schedule blog article publication and how to use rebase to change planned publishing date.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.plover.com/prog/git-reorder-3.html&quot;&gt;Reordering git commits (not patches) with interactive rebase&lt;/a&gt; by Mark Dominus (a very specific use-case).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dropbox.tech/application/speeding-up-a-git-monorepo-at-dropbox-with--200-lines-of-code&quot;&gt;Speeding up a Git monorepo at Dropbox with &amp;lt;200 lines of code&lt;/a&gt; by Utsav Shah on Dropbox.Tech .&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://chrismorgan.info/blog/make-and-git-diff-test-harness/&quot;&gt;Using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; for a simple and powerful test harness&lt;/a&gt; by Chris Morgan&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/milu_franz/git-explained-proper-team-etiquette-1od&quot;&gt;Git Explained: Proper Team Etiquette&lt;/a&gt; by Milu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/uber/piranha/&quot;&gt;Piranha&lt;/a&gt; by Uber is an Open Source tool for automated clean up of stale code caused by &lt;a href=&quot;https://www.martinfowler.com/articles/feature-toggles.html&quot;&gt;feature flags&lt;/a&gt; that are no longer required. It currently supports Java, Swift, and Objective-C.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bigH/git-fuzzy&quot;&gt;git-fuzzy&lt;/a&gt; is a CLI interface to Git that relies heavily on the &lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;fzf&lt;/a&gt; general-purpose command-line fuzzy finder (version 0.21.0 or higher).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 63 (May 28th, 2020)</title>
      <link>https://git.github.io/rev_news/2020/05/28/edition-63/</link>
      <pubDate>Thu, 28 May 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/05/28/edition-63/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-63-may-28th-2020&quot;&gt;Git Rev News: Edition 63 (May 28th, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 63rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of April 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/CAP8UFD1iBxiOZ_OA4DbMF9Kx2UHL15TPygoX6x-JrDGuReG1Vw@mail.gmail.com/&quot;&gt;GSoC 2020 Students and Projects&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The following three students have been officially accepted to work on Git
as part of the &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;GSoC (Google Summer of Code) 2020&lt;/a&gt;:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Abhishek Kumar will work on
&lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#6140278689234944&quot;&gt;Implement Generation Number v2&lt;/a&gt;.
He will be co-mentored by Jakub Narebski and Derrick Stolee.
More information is available on his
&lt;a href=&quot;https://lore.kernel.org/git/20200326101520.GA19326@Abhishek-Arch/&quot;&gt;proposal&lt;/a&gt;
and &lt;a href=&quot;https://abhishekkumar2718.github.io/blog&quot;&gt;blog&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Hariom Verma  will work on
&lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#4593212745842688&quot;&gt;Unify ref-filter formats with other --pretty formats&lt;/a&gt;.
He  will be co-mentored by Heba Waly and Christian Couder.
More information is available on his
&lt;a href=&quot;https://lore.kernel.org/git/CA+CkUQ966swTrR7D2vxgQ2ZA3E=Le=u8yvEAopOsphoCWGgDeg@mail.gmail.com/&quot;&gt;proposal&lt;/a&gt;
and &lt;a href=&quot;https://harry-hov.github.io/blogs/posts/&quot;&gt;blog&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Shourya Shukla will work on
&lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#6451304047575040&quot;&gt;Convert submodule to builtin&lt;/a&gt;.
He will be co-mentored by Kaartic Sivaraam and Christian Couder.
More information is available on his
&lt;a href=&quot;https://lore.kernel.org/git/20200325185053.10274-1-shouryashukla.oo@gmail.com/&quot;&gt;proposal&lt;/a&gt;
and &lt;a href=&quot;https://shouryashukla.blogspot.com/&quot;&gt;blog&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;It will be the 13th Summer that the Git project will mentor students
as part of the GSoC. Shourya, Hariom and Abhishek will be the 30th,
31st and 32nd students mentored since 2007 when Git started
participating in the GSoC.&lt;/p&gt;

    &lt;p&gt;It will be the 16th year of the GSoC, but unfortunately because of
the current sanitary situation in the world, there will be no GSoC
Mentor Summit, and no swag will be sent to participants this year.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/20200228172455.1734888-1-damien.olivier.robert+git@gmail.com/&quot;&gt;remote.c: fix handling of push:remote_ref&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Last February Damien Robert sent a patch to change how
‘ref-filter.c’ interprets &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%(push:remoteref)&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Damien had already sent &lt;a href=&quot;https://lore.kernel.org/git/20190417081754.bd27mjxjx7qdxhty@doriath/&quot;&gt;a patch&lt;/a&gt;
in April 2019 to fix another bug in ‘ref-filter.c’
related to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%(push:track)&lt;/code&gt;. This patch was incorporated in Git 2.22.&lt;/p&gt;

    &lt;p&gt;‘ref-filter.c’ is some internal API that formats information about
Git refs or Git objects. It’s used by commands like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git for-each-ref&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;The issue Damien wanted to fix was that ‘ref-filter.c’ didn’t take
into account the &lt;a href=&quot;https://git-scm.com/docs/git-config#Documentation/git-config.txt-pushdefault&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push.default&lt;/code&gt; config option&lt;/a&gt;
which is used when no refspec is specified for the push.&lt;/p&gt;

    &lt;p&gt;Peff, alias Jeff King, replied to Damien, and made it clear that it
was about taking &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push.default&lt;/code&gt; into account. He also found that
Damien’s patch wouldn’t work in the case where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push.default&lt;/code&gt; was set
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;upstream&lt;/code&gt; and a branch has been set to track a specific branch
different than the default one.&lt;/p&gt;

    &lt;p&gt;Peff then commented on the code and asked for some tests, saying
that the current tests were not covering this case and that they
would wrongly fail if Damien’s patch was applied.&lt;/p&gt;

    &lt;p&gt;Damien replied to Peff agreeing about the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;upstream&lt;/code&gt; case and to add
more tests. He found that his initial code also wouldn’t work when
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push.default&lt;/code&gt; was set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nothing&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Peff and Damien discussed a bit more some details of the possible
changes in the code, while Peff proposed a preparatory patch to
clean up the current code before Damien’s changes. Then Damien sent
a &lt;a href=&quot;https://lore.kernel.org/git/20200303161223.1870298-1-damien.olivier.robert+git@gmail.com/&quot;&gt;version 2&lt;/a&gt;
of his patch along with Peff’s preparatory patch.&lt;/p&gt;

    &lt;p&gt;The version 2 handled all &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push.default&lt;/code&gt; cases and added tests for
them, but Junio Hamano, the Git maintainer, suggested improvements
in the commit message of the preparatory patch. Peff suggested
improvements of his own but agreed with Junio’s suggestion too.&lt;/p&gt;

    &lt;p&gt;Meanwhile Damien found issues in version 2 of his own patch, and
separately Junio commented on it and suggested some
improvements. Damien and Junio soon agreed, and then Damien sent a
&lt;a href=&quot;https://lore.kernel.org/git/20200312164558.2388589-1-damien.olivier.robert+git@gmail.com/&quot;&gt;version 3&lt;/a&gt;
of his patch. This version contained only Damien’s patch, as Peff’s
patch was merged separately.&lt;/p&gt;

    &lt;p&gt;Peff found a memory leak around Damien’s patch, but the leak had
already been there before the patch. Peff also suggested small
improvements to the tests, and eventually sent
&lt;a href=&quot;https://public-inbox.org/git/20200328133134.GA1196665@coredump.intra.peff.net/&quot;&gt;his own version&lt;/a&gt;
of Damien’s patch for him to “to try it out or hack on it further”.&lt;/p&gt;

    &lt;p&gt;Damien found &lt;a href=&quot;https://public-inbox.org/git/20200416151213.xbo5x6jt477ezwvo@feanor/&quot;&gt;an issue&lt;/a&gt;
in Peff’s patch though, and, after improving the tests in his patch,
more existing issues in the current code in case of a
&lt;a href=&quot;https://public-inbox.org/git/20200406160439.gg5uu6kepnyxpvuc@feanor/&quot;&gt;triangular workflow&lt;/a&gt;.
Peff commented that these issues could be left for a separate fix
though.&lt;/p&gt;

    &lt;p&gt;Damien then sent a
&lt;a href=&quot;https://lore.kernel.org/git/20200406175648.25737-1-damien.olivier.robert+git@gmail.com/&quot;&gt;version 6&lt;/a&gt;
of his patch, though the title in the cover letter mistakenly
contains “v4”, saying version 4 and version 5 were intermediate
versions he made but did not send to the mailing list.&lt;/p&gt;

    &lt;p&gt;This version contained a preparatory patch to fix the triangular workflow
issues Damien had found, as well as his updated patch with tests for
both his fixes in this patch and the triangular workflow fixes. However,
this patch series was marked as RFC, since its first patch was not very
polished and did not fix all
&lt;a href=&quot;https://lore.kernel.org/git/20200418173651.djzriazxj5kbo6ax@doriath/&quot;&gt;corner triangular workflow cases&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;This led to some &lt;a href=&quot;https://lore.kernel.org/git/20200416211208.xqnnrkvcl2jw3ejr@doriath/&quot;&gt;release confusion&lt;/a&gt;
as Junio then had merged the 2 patches to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next&lt;/code&gt; branch, while
Damien had sent a
&lt;a href=&quot;https://lore.kernel.org/git/20200416150355.635436-1-damien.olivier.robert+git@gmail.com/&quot;&gt;version 8&lt;/a&gt;
that contained only his patch without the triangular workflow fixes
and test cases.&lt;/p&gt;

    &lt;p&gt;This last version is now merged in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pu&lt;/code&gt; branch, and is
likely to find its way to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;, while hopefully the fixes
related to triangular workflows will be re-sent separately.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://lore.kernel.org/git/xmqqtv02mt2m.fsf@gitster.c.googlers.com/&quot;&gt;2.27.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqsgfuv2ko.fsf@gitster.c.googlers.com/&quot;&gt;2.27.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqy2punll7.fsf@gitster.c.googlers.com/&quot;&gt;2.27.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.27.0-rc2.windows.1&quot;&gt;2.27.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.27.0-rc1.windows.1&quot;&gt;2.27.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.27.0-rc0.windows.1&quot;&gt;2.27.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.20.8/notes&quot;&gt;2.20.8&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.14/notes&quot;&gt;2.19.14&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.19/notes&quot;&gt;2.18.19&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.25/notes&quot;&gt;2.17.25&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.7/notes&quot;&gt;2.20.7&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.13/notes&quot;&gt;2.19.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.18/notes&quot;&gt;2.18.18&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.24/notes&quot;&gt;2.17.24&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/05/06/gitlab-com-13-0-breaking-changes/&quot;&gt;13.0&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/05/15/gitlab-12-10-6-released/&quot;&gt;12.10.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/05/13/gitlab-12-10-5-released/&quot;&gt;12.10.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/05/04/gitlab-12-10-3-released/&quot;&gt;12.10.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/04/30/security-release-12-10-2-released/&quot;&gt;12.10.2, 12.9.5, 12.8.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21619&quot;&gt;2.16.19&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21618&quot;&gt;2.16.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;7.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.5.0&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.4.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;isomorphic-git &lt;a href=&quot;https://isomorphic-git.org/blog/2020/02/25/version-1-0-0&quot;&gt;1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;New &lt;a href=&quot;https://github.com/newren/git-filter-repo&quot;&gt;git-filter-repo&lt;/a&gt; resources:
a &lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/master/Documentation/converting-from-filter-branch.md#cheat-sheet-conversion-of-examples-from-the-filter-branch-manpage&quot;&gt;cheat sheet for converting filter-branch commands&lt;/a&gt;
which shows equivalents for all examples from the filter-branch manpage, and a similar
&lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/master/Documentation/converting-from-bfg-repo-cleaner.md#cheat-sheet-conversion-of-examples-from-bfg&quot;&gt;cheat sheet for converting BFG repo cleaner commands&lt;/a&gt;
which shows equivalents for all the examples from the BFG web page.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jaxenter.com/java-16-migration-to-git-and-github-jdk-172076.html&quot;&gt;Java 16: Migration to Git and GitHub gets closer&lt;/a&gt;
(from Mercurial).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2020/04/27/appsflyer-moves-to-gitlab/&quot;&gt;Why AppsFlyer moved from Bitbucket to [self-hosted] GitLab&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thenextweb.com/dd/2020/05/06/github-codespace-lets-you-code-in-your-browser-without-any-setup/&quot;&gt;GitHub Codespaces lets you code in your browser without any setup&lt;/a&gt;;
see also &lt;a href=&quot;https://github.blog/2020-05-06-new-from-satellite-2020-github-codespaces-github-discussions-securing-code-in-private-repositories-and-more/#codespaces&quot;&gt;New from Satellite 2020: Start coding in seconds on GitHub with Codespaces&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dvc.org/blog/dvc-3-years-and-1-0-release&quot;&gt;DVC 3 Years 🎉 and 1.0 Pre-release 🚀&lt;/a&gt;;
&lt;a href=&quot;https://dvc.org&quot;&gt;DVC&lt;/a&gt; (Data Version Control), an open-source version control
system for Data Science projects was first mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News #42&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://martinfowler.com/articles/branching-patterns.html&quot;&gt;Patterns for Managing Source Code Branches&lt;/a&gt;
by Martin Fowler (author of the &lt;a href=&quot;https://martinfowler.com/books/refactoring.html&quot;&gt;Refactoring: Improving the Design of Existing Code&lt;/a&gt; book);
&lt;em&gt;note&lt;/em&gt; that this article is being released in installments,
and at the time of publishing this edition it finished describing all the patterns but was not yet complete.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://engineering.linkedin.com/blog/2020/continuous-integration&quot;&gt;How LinkedIn handles merging code in high-velocity repositories&lt;/a&gt;
by Niket Parikh.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://thenewstack.io/how-to-set-up-the-http-git-server-for-private-projects/&quot;&gt;How to Set up the HTTP Git Server for Private Projects&lt;/a&gt;
on Ubuntu 18.04 with nginx, by Jack Wallen.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://code-maven.com/git-on-windows&quot;&gt;Git on Windows&lt;/a&gt; by Gabor Szabo,
a video series where you can learn how to use Git on MS Windows
(half of links to videos are behind a Code Maven paywall).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/milu_franz/git-explained-the-basics-igc&quot;&gt;Git Explained: The Basics&lt;/a&gt;
by Milu Franz.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/milu_franz/git-explained-an-in-depth-comparison-18mk&quot;&gt;Git Explained: An In-Depth Comparison&lt;/a&gt;
of the commands &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;revert&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;checkout&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reset&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase&lt;/code&gt;
by Milu Franz.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/4/git-rebase-i&quot;&gt;The life-changing magic of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase -i&lt;/code&gt;&lt;/a&gt;
by Dave Neary.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/4/git-merge-conflict&quot;&gt;How to resolve a git merge conflict&lt;/a&gt;
by Brian Breniser.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/5/git-submodules-subtrees&quot;&gt;Managing Git projects with submodules and subtrees&lt;/a&gt;
by Manaswini Das.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.afoolishmanifesto.com/posts/improve-git-diffs-structured-data/&quot;&gt;Improve Git Diffs for Structured Data&lt;/a&gt;
by fREW Schmidt.  The solution uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitattributes&lt;/code&gt; and a custom shell script
for wrapping the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; command, using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jq&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sponge&lt;/code&gt; to process JSON files.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.urth.org/2020/05/08/comparing-code-quality-meta-tools/&quot;&gt;Comparing Code Quality Meta Tools&lt;/a&gt;,
that is linters and beautifiers operating on the whole project
(many of those tools being systems for managing Git hooks):
&lt;a href=&quot;https://metacpan.org/pod/distribution/Code-TidyAll/bin/tidyall&quot;&gt;tidyall&lt;/a&gt;, &lt;a href=&quot;https://pre-commit.com/&quot;&gt;pre-commit&lt;/a&gt;, &lt;a href=&quot;https://github.com/Arkweid/lefthook&quot;&gt;lefthook&lt;/a&gt;, &lt;a href=&quot;https://github.com/typicode/husky&quot;&gt;husky&lt;/a&gt;, &lt;a href=&quot;https://github.com/sds/overcommit&quot;&gt;overcommit&lt;/a&gt;, and &lt;a href=&quot;https://github.com/houseabsolute/precious&quot;&gt;precious&lt;/a&gt;;
article by Dave Rolsky.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://fork.dev/&quot;&gt;Fork&lt;/a&gt;, a fast and friendly proprietary git client for Mac and Windows
(with free evaluation).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitstats.me/&quot;&gt;Git-Stats&lt;/a&gt; is an open-source GitHub contribution analyzer
service written in Node.js.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gitinsights.io/&quot;&gt;Git Insights&lt;/a&gt; is an open-source analytics tool
to give you insights on your software projects and teams, currently supporting
only GitHub (as GitHub App); support for Bitbucket, GitLab and self-hosted
repositories is planned.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/timbrel/GitSavvy&quot;&gt;GitSavvy&lt;/a&gt; is an open-source
Sublime Text 3 plugin providing full Git and GitHub integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Johannes Schindelin, Elijah Newren and
Damien Robert.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 62 (April 23rd, 2020)</title>
      <link>https://git.github.io/rev_news/2020/04/23/edition-62/</link>
      <pubDate>Thu, 23 Apr 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/04/23/edition-62/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-62-april-23rd-2020&quot;&gt;Git Rev News: Edition 62 (April 23rd, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 62nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of March 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/xmqqzhbmpyh6.fsf@gitster.c.googlers.com/&quot;&gt;Happy birthday to all of us ;-)&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;On April 7, Junio Hamano, the Git maintainer, sent a happy birthday
message to the mailing list to celebrate that “it was today 15 years
ago that Linus announced the availability of the first tarball of
Git”.&lt;/p&gt;

    &lt;p&gt;Junio thanked the contributors and everyone in the ecosystem,
including people from the &lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Software Freedom Conservancy&lt;/a&gt;
and employers of contributors.&lt;/p&gt;

    &lt;p&gt;His email ended with “Thanks all, and let’s look forward to see the
next 15 years be as wonderful years for Git as the past 15 years
;-)”&lt;/p&gt;

    &lt;p&gt;A number of people replied especially thanking Junio for his work as
the maintainer of the project. Edward Thomson, who is a maintainer
of &lt;a href=&quot;https://libgit2.org/&quot;&gt;libgit2&lt;/a&gt;, also thanked everyone, on behalf
of libgit2.&lt;/p&gt;

    &lt;p&gt;Let’s all also thank Junio, Linus and every contributor in the Git
ecosystem!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/3091652.KAqcNXvZJ4@cayenne/&quot;&gt;Regression in v2.26.0-rc0 and Magit&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Jean-Noël Avila reported to the mailing list that git version
2.26.0-rc0 segfaulted under Magit with auto-revert enabled.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt; is a popular Emacs interface to Git, and
the &lt;a href=&quot;https://magit.vc/manual/magit/Automatic-Reverting-of-File_002dVisiting-Buffers.html&quot;&gt;auto-revert mode&lt;/a&gt;
lets Emacs revert files that have changed on disk when a Git command
has been run outside of Emacs.&lt;/p&gt;

    &lt;p&gt;Jean-Noël had bisected the issue to a commit that was improving the
error message which Git issues when it dies due to processing a path 
outside the repository. This commit though didn’t consider the
case of a bare repo which triggered the segfault.&lt;/p&gt;

    &lt;p&gt;Jonathan Nieder replied that the bug was fixed by another commit by
Emily Shaffer that had not yet made it to the master branch. He
asked Junio Hamano, the Git maintainer, if the commit could be
fast-tracked, and Emily if she could add a test to her commit.&lt;/p&gt;

    &lt;p&gt;Junio replied suggesting that a few tests should be added, and that
there were a few days left before v2.26.0-rc2 to add them. The next
day though Junio replied to himself with a patch adding the tests
and asking for comments.&lt;/p&gt;

    &lt;p&gt;Jonathan Nieder reviewed Junio’s tests adding his “Reviewed-by:”,
and said that Emily was out of office so they were well timed.&lt;/p&gt;

    &lt;p&gt;Junio replied to himself again discussing one test he wrote that
tested that both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log -- ..&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git ls-files -- ..&lt;/code&gt; fail when
the current working directory is the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; directory.&lt;/p&gt;

    &lt;p&gt;He wondered why, if “.” instead of “..” is used in the above
commands, Git should behave as if the current working directory was
the top-level of the working tree instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt;, and why Magit
is expecting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd .git &amp;amp;&amp;amp; git ls-files ..&lt;/code&gt; to show the entire working
tree.&lt;/p&gt;

    &lt;p&gt;Kyle Meyer replied to Junio that internally Magit’s call which
triggered the bug is running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git ls-files&lt;/code&gt; from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; to ask
whether the file used to edit a commit message is actually tracked,
as it makes no distinction between files in .git and in the working
tree. He said that he would propose a change in Magit to improve
this.&lt;/p&gt;

    &lt;p&gt;Gábor Szeder also replied to Junio’s patch suggesting a small
improvement in the tests which Junio accepted sending an improved
patch.&lt;/p&gt;

    &lt;p&gt;The fix with Emily’s code and Junio’s tests was then merged into
v2.26.0-rc2.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-eric-s-raymond&quot;&gt;Developer Spotlight: Eric S. Raymond&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’ve been an open-source hacker since long before that term was coined.
Back around the turn of the century I wrote “The Cathedral and the
Bazaar”, which helped reinvent the movement and gained it mainstream
acceptance.  I’m also the author of “The Art of Unix
Programming”.  More recently I’ve headed the
&lt;a href=&quot;https://gpsd.gitlab.io/gpsd/index.html&quot;&gt;GPSD&lt;/a&gt; and
&lt;a href=&quot;https://www.ntpsec.org/&quot;&gt;NTPsec&lt;/a&gt; projects.  My most Git-relevant work
is &lt;a href=&quot;http://www.catb.org/esr/reposurgeon/&quot;&gt;reposugeon&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;You’ve recently gifted us with an &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/#the-pros-and-cons-of-reposurgeon-written-by-eric-s-raymond&quot;&gt;article about reposurgeon on Git
Rev News edition 60&lt;/a&gt;,
is there something you would like to add about reposurgeon,
its history, or the article?&lt;/p&gt;

    &lt;p&gt;Probably the most interesting additional thing I can say is that I
discovered a fundamental strategy for designing good DSLs
(Domain-Specific Languages) while working on reposurgeon.&lt;/p&gt;

    &lt;p&gt;Here it is: Whatever domain you’re trying to capture, first develop
a way to do that capture in a declarative markup.  Then write an
editor for that markup, and you will implicitly have a DSL that
spans the domain.  It’s rather like the mathematical concept
of a functor.&lt;/p&gt;

    &lt;p&gt;In reposurgeon’s case, the domain is Git repositories and the
declarative markup is fast-import streams.  Reposurgeon is all
about exploiting that equivalence.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;You used reposurgeon to migrate the GCC repository, which has about
280K commits, from SVN to Git. Can you tell us a bit more about the
context in which such migrations happen. Like what are the timelines,
goals, tools, people, etc involved in such migrations?&lt;/p&gt;

    &lt;p&gt;I’ve already written about this in some detail
&lt;a href=&quot;http://www.catb.org/~esr/reposurgeon/dvcs-migration-guide.html&quot;&gt;here&lt;/a&gt;.
I’m going to be reworking that over the next couple of weeks based in
part on the GCC experience and in part to reflect the unfortunate
fact that Mercurial isn’t really a contender any more.&lt;/p&gt;

    &lt;p&gt;One thing that has been on my mind recently is the importance of
having a “Mr. Inside”.  The ideal team to do a major conversion pairs
a reposurgeon expert (Mr. Outside) with a project member who knows the
history of the repository intimately, can make policy decisions, and
is willing to learn enough about reposurgeon to edit the recipe.&lt;/p&gt;

    &lt;p&gt;On GCC we had the ideal situation - the project lead chose to be
Mr. Inside.  And a good thing, too - this conversion was &lt;em&gt;difficult&lt;/em&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Can you describe how Git is related to reposurgeon, other software you
have been working on and your work in general?&lt;/p&gt;

    &lt;p&gt;Reposurgeon depends on the leverage offered by git fast-import streams.
It uses them as an interchange format between different version-control
streams.  Conversely, Reposurgeon (and a front-end I also maintain,
cvs-fast-export) enables higher-quality migrations from older VCSes
than anyone has ever been able to do before.&lt;/p&gt;

    &lt;p&gt;As for how it relates to my other work, there is
&lt;a href=&quot;http://www.catb.org/esr/cvs-fast-export/&quot;&gt;cvs-fast-export&lt;/a&gt;.  I didn’t
write the crucial analysis parts of cvs-fast-export myself; Keith
Packard of X fame did that, it used to be called cvsparse.  I did
rescue it and give it the ability to emit a fast-import stream,
because reposurgeon needed a better CVS importer than I could find
elsewhere.&lt;/p&gt;

    &lt;p&gt;More generally, I love writing DSLs and will take pretty much any
opportunity to do that. I have especially enjoyed inventing and
working on reposurgeon because - well, I used to be a mathematician.
I &lt;em&gt;like&lt;/em&gt; working on things where graph theory and abstract algebra are
important.  Reposurgeon scratches that itch.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is something about Git or its ecosystem that you admire?&lt;/p&gt;

    &lt;p&gt;How freaking &lt;em&gt;comprehensive&lt;/em&gt; it is.  Pretty much anything you can
imagine wanting to do with a version-control history there is tool
support for somewhere.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;That’s easy. I’d port it to Go and toss out the C code. C still has
its uses, but for anything without hard latency requirements C is now
obsolete.  Not something I would have said even three years ago, but
times change.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;There’s a weird feature I’ve forgotten the name of where you can pass
around binary pack files rather than MRs or patches.  Ah, git bundles,
that’s it.  Having worked with it once, I hate the lack of
transparency, that you can’t easily eyeball a bundle before you apply
it.  I’d shoot that feature through the head in a heartbeat.&lt;/p&gt;

    &lt;p&gt;If I pick one thing to &lt;em&gt;fix&lt;/em&gt; rather than remove without worrying about
backwards compatibility, it would be git-cvsimport.  That thing is
very badly broken; the engine it uses misplaces branch joins.  The Git
devs know it’s broken but have stuck to it because of an
incremental-conversion feature that I think is effectively
useless. They should scrap it and rewrite the CVS import procedure to
use cvs-fast-export instead.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;You mean other than the ones I’ve written myself?  I don’t think I
have one, sorry.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq4kterq5s.fsf@gitster.c.googlers.com/&quot;&gt;2.26.2 and others&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqy2qy7xn8.fsf@gitster.c.googlers.com/&quot;&gt;2.26.1 and others&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.26.2.windows.1&quot;&gt;2.26.2(1)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.26.1.windows.1&quot;&gt;2.26.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v1.0.0&quot;&gt;1.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#314&quot;&gt;3.1.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#308&quot;&gt;3.0.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.20.5/notes&quot;&gt;2.20.5&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.11/notes&quot;&gt;2.19.11&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.16/notes&quot;&gt;2.18.16&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.22/notes&quot;&gt;2.17.22&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.4/notes&quot;&gt;2.20.4&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.10/notes&quot;&gt;2.19.10&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.15/notes&quot;&gt;2.18.15&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.21/notes&quot;&gt;2.17.21&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/04/22/gitlab-12-10-released/&quot;&gt;12.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/04/20/gitlab-12-9-4-released/&quot;&gt;12.9.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/04/14/critical-security-release-gitlab-12-dot-9-dot-3-released/&quot;&gt;12.9.3, 12.8.9, and 12.7.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/03/31/gitlab-12-9-2-released/&quot;&gt;12.9.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/03/26/security-release-12-dot-9-dot-1-released/&quot;&gt;12.9.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.4.1&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.4.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.6.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-04-07-celebrating-15-years-of-git-an-interview-with-git-maintainer-junio-hamano/&quot;&gt;Peff interviewed Junio&lt;/a&gt;
on the GitHub Blog to celebrate Git’s 15th anniversary.&lt;br /&gt;
An interview with Git creator Linus Torvalds on Git’s 10th anniversary &lt;a href=&quot;https://www.linux.com/news/10-years-git-interview-git-creator-linus-torvalds/&quot;&gt;can be found&lt;/a&gt;
in &lt;a href=&quot;https://git.github.io/rev_news/2015/04/05/edition-2/&quot;&gt;Git Rev News #2 (April 15th, 2015)&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-04-14-git-credential-helper-vulnerability-announced/&quot;&gt;Git credential helper vulnerability announced&lt;/a&gt;
by Taylor Blau on GitHub Blog – please upgrade to &lt;a href=&quot;https://public-inbox.org/git/xmqq4kterq5s.fsf@gitster.c.googlers.com/&quot;&gt;2.26.2&lt;/a&gt; which fixes the mentioned vulnerability and yet another related vulnerability.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2020/04/github-sharply-slashes-plan-pricing-offers-core-features-for-free-to-all/&quot;&gt;GitHub sharply slashes plan pricing, offers core features for free to all&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2020/03/30/new-features-to-core/&quot;&gt;GitLab moves 18 features to open source&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2020/04/20/ultimate-git-guide/&quot;&gt;GitLab: Our ultimate guide to Git&lt;/a&gt;.
Tagline: “Open source pioneer Git is 15 years old. Here is our guide to making the most of it.”&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/4/get-started-git&quot;&gt;15 years of Git: How to get started or learn something new&lt;/a&gt;
by Seth Kenlon (Red Hat) on &lt;a href=&quot;https://opensource.com&quot;&gt;Opensource.com&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/4/git-extras&quot;&gt;4 Git scripts I can’t live without&lt;/a&gt;
by Vince Power on Opensource.com.  The scripts can be found in the &lt;a href=&quot;https://github.com/tj/git-extras&quot;&gt;git-extras&lt;/a&gt; project.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.keydb.dev/blog/2020/04/08/blog-post/&quot;&gt;Optimizing Git For Ryzen CPUs (1.5x Faster)&lt;/a&gt;,
utilizing Intel’s SHA-NI instruction set to speed up SHA-1, by John Sully.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/4/create-web-tutorial-git&quot;&gt;Create web tutorials with Reveal.js and Git&lt;/a&gt; by Eric D. Schabell (Red Hat).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2020/Apr/20/self-rewriting-readme/&quot;&gt;Using a self-rewriting README powered by GitHub Actions to track TILs (Today I Learneds)&lt;/a&gt;
by Simon Willison.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/alcide/gitops-a-security-perspective-part-1-16ci&quot;&gt;GitOps - A Security Perspective (Part 1)&lt;/a&gt;
by Gadi Naor of Alcide.  &lt;a href=&quot;https://www.gitops.tech/&quot;&gt;GitOps&lt;/a&gt; is a paradigm that puts Git
at the heart of building and operating cloud native applications
by using Git as the single source of truth.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1&quot;&gt;Computer Science Visualized: Useful Git Commands&lt;/a&gt;
by Lydia Hallie.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/make-life-easier-when-using-git/&quot;&gt;How To Make Life Easier When Using Git&lt;/a&gt;
by Shane Hudson.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/a-beginners-guide-to-git-what-is-a-changelog-and-how-to-generate-it/&quot;&gt;A Beginner’s Guide to Git — What is a Changelog and How to Generate it&lt;/a&gt;
by Gaël Thomas.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.micah.soy/posts/setting-up-git-identities/&quot;&gt;Setting Up Git Identities&lt;/a&gt; by Micah Henning,
with use of a Git alias to switch identities.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/maxlmator/maintaining-different-git-identities&quot;&gt;Maintaining Different Git Identities&lt;/a&gt;
by Max Kleucker (2018), with help of Git’s “&lt;a href=&quot;https://git-scm.com/docs/git-config#_conditional_includes&quot;&gt;conditional includes&lt;/a&gt;”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/company/culture/all-remote/phases-of-remote-adaptation/&quot;&gt;The phases of remote adaptation&lt;/a&gt;
is a list of phases for teams switching from a colocated environment to a remote one put together by GitLab.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tj/git-extras&quot;&gt;Git Extras&lt;/a&gt;: shell Git utilities for repo summary, repl, changelog population, author commit percentages and more, by TJ Holowaychuk.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Ovid/git-workflow&quot;&gt;Ovid / git-workflow&lt;/a&gt; contains a simplified subset of the git tools used by &lt;a href=&quot;https://allaroundtheworld.fr/&quot;&gt;All Around the World&lt;/a&gt; organization.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/liquidata-inc/dolt&quot;&gt;Dolt&lt;/a&gt; is Git for data, versioning tables: a database with branches.&lt;br /&gt;
&lt;a href=&quot;https://www.dolthub.com/&quot;&gt;DoltHub&lt;/a&gt; is a place on the internet to share Dolt repositories.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitfiend.com/&quot;&gt;GitFiend&lt;/a&gt; by Toby Suggate is a new Git client for Windows, Mac and Linux,
deliberately not trying to follow in the footsteps of other Git clients.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Eric S. Raymond, Junio Hamano and Philip Oakley.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 61 (March 25th, 2020)</title>
      <link>https://git.github.io/rev_news/2020/03/25/edition-61/</link>
      <pubDate>Wed, 25 Mar 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/03/25/edition-61/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-61-march-25th-2020&quot;&gt;Git Rev News: Edition 61 (March 25th, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 61st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of February 2020.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge 2020 conference&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The Git Merge conference happened on March 4, 2020 in Los
Angeles. It was organized by GitHub and sponsored by GitHub, GitLab
and the &lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Software Freedom Conservancy&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Over 300 people attended. Some people didn’t attend, and some talks
had to be changed at the last minute due to coronavirus related
reasons.&lt;/p&gt;

    &lt;p&gt;On the wall &lt;a href=&quot;/images/git_merge_2020_timeline.jpg&quot;&gt;a big timeline&lt;/a&gt;
mentioned some important events in Git history.&lt;/p&gt;

    &lt;p&gt;There was a party in the evening with
&lt;a href=&quot;/images/git_merge_2020_cake.jpg&quot;&gt;a big cake dedicated to Git’s 15th anniversary&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/AC2EB721-2979-43FD-922D-C5076A57F24B@jramsay.com.au/&quot;&gt;Git Contributor Summit&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The Git Contributor Summit happened on March 5, 2020 in Los Angeles,
the day after the Git Merge conference. The event was also organized
by GitHub.&lt;/p&gt;

    &lt;p&gt;There were 26 people attending physically and 5 people attending
remotely.&lt;/p&gt;

    &lt;p&gt;As usual it was an unconference where people wrote topics on a
whiteboard during the breakfast and then voted on them by putting a
tick-mark on the board. The topics were then discussed during the
day roughly from the most voted on to the less voted on.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/AC2EB721-2979-43FD-922D-C5076A57F24B@jramsay.com.au/&quot;&gt;Notes&lt;/a&gt;
have been taken collaboratively and sent to the mailing list
afterwards.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://git-repo.info/en/2020/03/agit-flow-and-git-repo/&quot;&gt;AGit-Flow and git-repo&lt;/a&gt; (&lt;em&gt;written by Jiang Xin&lt;/em&gt;)&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://git-repo.info/en/2020/03/agit-flow-and-git-repo/&quot;&gt;AGit-Flow and git-repo&lt;/a&gt;
is a blog post on a missing speech from Git
Merge 2020. Jiang Xin, a developer at Alibaba China, had planned to
speak at the Git Merge 2020 conference, but canceled his flight due
to a coronavirus outbreak in China. He wrote this blog post about the
topic he wanted to present at the conference.&lt;/p&gt;

    &lt;p&gt;In this blog post, he introduces a centralized workflow (named AGit-Flow)
implemented at Alibaba, and an Open Source command-line tool “git-repo”,
which is hosted on GitHub:
&lt;a href=&quot;https://github.com/alibaba/git-repo-go&quot;&gt;https://github.com/alibaba/git-repo-go&lt;/a&gt;.
The tool is not bound to a single protocol or a single server. It is
extensible and can run on Gerrit, AGit-Flow or other compatible protocols.&lt;/p&gt;

    &lt;p&gt;The implementation of AGit-Flow has been contributed to
&lt;a href=&quot;https://public-inbox.org/git/20200304113312.34229-1-zhiyou.jx@alibaba-inc.com/&quot;&gt;the Git mailing list&lt;/a&gt;,
and this feature is under code review. Junio stated that the proposed name of
the new hook was inappropriate. Therefore, after a code review of these
patches, expect some updates on the blog post.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-christian-couder&quot;&gt;Developer Spotlight: Christian Couder&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;In the Git community I am a contributor since 2006, a member of the
PLC (the “Project Leadership Committee” which represents Git in the
&lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Conservancy&lt;/a&gt;) since a few years ago and a
Git Rev News editor since exactly 5 years ago when it started! I also
regularly mentor or co-mentor GSoC students or Outreachy interns, and
sometimes give presentations about Git at conferences.&lt;/p&gt;

    &lt;p&gt;My current job title is Senior Backend Engineer in the Gitaly team at
GitLab. I have been working full time for GitLab since October last
year. Previously since October 2015 I was freelancing for GitLab,
Booking.com and Protocol Labs.&lt;/p&gt;

    &lt;p&gt;I am very happy that GitLab supports my involvement in Git and the Git
community. At GitLab I am involved in development activities, and a
bit in support, marketing, community relations and sometimes even
sales, around Git.&lt;/p&gt;

    &lt;p&gt;As a hobby I am singing in a choir and with a teacher. I also enjoy
time with my 3 teenager kids.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I think the improvements I contributed to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt; around
2007-2008 helped the Linux kernel community and gave Git an additional
edge. At that time it was not clear that Git was going to overcome
other version control systems.&lt;/p&gt;

    &lt;p&gt;Also around 2008 I co-mentored for the first time a GSoC student
working on the sequencer which has become more and more useful as it’s
now the default underlying engine behind &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;More recently I am happy that my patches to make it possible to have
more than one promisor remote have been merged. I think it’s an
interesting way to improve performance and to broaden usage.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git ecosystem these days, and why?&lt;/p&gt;

    &lt;p&gt;My time is spent on probably too many different things, like GSoC or
Outreachy, Git Rev News, PLC, GitLab activities, improving partial
clone, helping with getting GitHub patches merged upstream.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Right now I think it would be a good time to work on specialized
drivers/helpers for additional promisor remotes, and on improving
partial clone. I am glad though that the main companies contributing
to Git have already asked their developers to focus on improving
partial clone.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I think I would streamline as much as possible what’s in the Git repo.
That is I would remove git-gui, gitk, gitweb, git-svn, git-p4,
contrib/ and even the Git test framework, which could perhaps be
merged with &lt;a href=&quot;https://github.com/chriscool/sharness/&quot;&gt;Sharness&lt;/a&gt;. These
related tools could live in their own repo but still be discussed on
the mailing list and automatically be released at the same time as
Git. It would be a significant amount of work to set this up properly,
but then new Git related tools, like git-filter-repo or git-subtrac,
and perhaps old tools too could probably better find their place in
the ecosystem.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;In 2016 I became the maintainer of
&lt;a href=&quot;https://github.com/chriscool/sharness/&quot;&gt;Sharness&lt;/a&gt; which was extracted
from the Git test framework in 2011. I have thought for a long time
that the Git test framework has helped tremendously in keeping the
amount of regressions and bugs in Git very low. I don’t have much time
to take care of Sharness, but I think it can still help a lot.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqa7477u6j.fsf@gitster.c.googlers.com/&quot;&gt;2.26.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqeetqh6fp.fsf@gitster.c.googlers.com/&quot;&gt;2.25.2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqa74fj30p.fsf@gitster.c.googlers.com/&quot;&gt;2.26.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqo8t4z29k.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.26.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq5zfi4g0p.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.26.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.26.0.windows.1&quot;&gt;2.26.0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;7.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21617&quot;&gt;2.16.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.20.3/notes&quot;&gt;2.20.3&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.2/notes&quot;&gt;2.20.2&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.9/notes&quot;&gt;2.19.9&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.14/notes&quot;&gt;2.18.14&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.20/notes&quot;&gt;2.17.20&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.20.1/notes&quot;&gt;2.20.1&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.8/notes&quot;&gt;2.19.8&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.13/notes&quot;&gt;2.18.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.19/notes&quot;&gt;2.17.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/03/22/gitlab-12-9-released/&quot;&gt;12.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/03/16/gitlab-12-8-7-released/&quot;&gt;12.8.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/03/11/critical-security-release-gitlab-12-dot-8-dot-6-released/&quot;&gt;12.8.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/03/09/gitlab-12-8-5-released/&quot;&gt;12.8.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/03/04/gitlab-12-dot-8-dot-2-released/&quot;&gt;12.8.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/02/24/gitlab-12-8-1-released/&quot;&gt;12.8.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/02/22/gitlab-12-8-released/&quot;&gt;12.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.5.4&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.5.3&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.5.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt; winter internships
finished. Both Heba Waly and Miriam Rubio successfully finished
their Outreachy internships. Miriam posted
&lt;a href=&quot;https://mirucam.gitlab.io/outreachy_blog/post/week13/&quot;&gt;a final blog post&lt;/a&gt;
about it.&lt;/li&gt;
  &lt;li&gt;Git has been selected as a
&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code 2020&lt;/a&gt;
mentor organization. Students willing to participate need to apply
online until March 31.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/education/&quot;&gt;Tower for Teachers &amp;amp; Universities&lt;/a&gt;:
Teachers and universities get free access to Tower “Pro” Git GUI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Derrick Stolee’s slides for his “Git at Scale for Everyone” talk
during the Git Merge 2020 conference are &lt;a href=&quot;https://stolee.dev/docs/git-merge-2020.pdf&quot;&gt;available&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Elijah Newren’s slides for his “Scaling the Merge Machinery” talk
during the Git Merge 2020 conference are &lt;a href=&quot;https://github.com/newren/presentations/blob/pdfs/merge-performance/merge-performance-slides.pdf&quot;&gt;available&lt;/a&gt;
in his personal notes and presentations repository.
Steps to reproduce the speedups he got can be found &lt;a href=&quot;https://github.com/newren/git/blob/git-merge-2020-demo/README.md&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://speakerdeck.com/jnareb/graph-operations-in-git-and-how-to-make-them-faster&quot;&gt;Graph operations in Git, and how to make them faster&lt;/a&gt; presentation slides by Jakub Narębski on SpeakerDeck; also available on &lt;a href=&quot;https://www.slideshare.net/JakubNarbski/graph-operations-in-git-version-control-system-how-the-performance-was-improved-for-large-repositories-how-can-it-be-further-improved&quot;&gt;SlideShare&lt;/a&gt; and as &lt;a href=&quot;https://drive.google.com/open?id=1psMBVfcRHcZeJ7AewGpdoymrEfFVdXoK&quot;&gt;PDF file&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-03-22-highlights-from-git-2-26/&quot;&gt;Highlights from Git 2.26&lt;/a&gt; by Taylor Blau on GitHub Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devclass.com/2020/03/23/git-moves-to-new-defaults-in-2-26-release/&quot;&gt;Git moves to new defaults in 2.26 release&lt;/a&gt; by Julia Schmidt, about version 2 of the transport protocol, backend used by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;, etc.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2020/03/13/partial-clone-for-massive-repositories/&quot;&gt;How Git Partial Clone lets you fetch only the large file you need&lt;/a&gt; by James Ramsay on GitLab Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/3/lazygit&quot;&gt;Make advanced Git tasks simple with Lazygit: 5 ways to harness the power of git with the Lazygit terminal UI&lt;/a&gt; by Jesse Duffield.
&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;Lazygit&lt;/a&gt; was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42 (August 22nd, 2018)&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://people.kernel.org/monsieuricon/introducing-b4-and-patch-attestation&quot;&gt;Introducing b4 and patch attestation&lt;/a&gt; by Konstantin Ryabitsev.
The &lt;a href=&quot;https://git.kernel.org/pub/scm/utils/b4/b4.git&quot;&gt;b4 tool&lt;/a&gt; started out as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get-lore-mbox&lt;/code&gt;;
the latter was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/#other-news&quot;&gt;Git Rev News Edition #60 (February 19th, 2020)&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/813646/&quot;&gt;Attestation for kernel patches [LWN.net]&lt;/a&gt; by Jonathan Corbet.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://georgestocker.com/2020/03/04/please-stop-recommending-git-flow/&quot;&gt;Please stop recommending Git Flow!&lt;/a&gt; by George Stocker (Git Flow branching model was popularized by blog post entitled &lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;A Successful Git branching model&lt;/a&gt;).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/blog/2020/03/05/what-is-gitlab-flow/&quot;&gt;The problem with Git flow: Learn why Git flow complicates the lifecycle and discover an alternative to streamline development&lt;/a&gt; by Suri Patel on GitLab Blog.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/a-beginners-guide-to-git-how-to-write-a-good-commit-message/&quot;&gt;A Beginner’s Guide to Git – How to Write a Good Commit Message&lt;/a&gt; by Gaël Thomas.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.sitepoint.com/git-techniques-to-know-before-you-join-a-team/&quot;&gt;10 Git Techniques You Need to Know Before You Join a Team&lt;/a&gt; by Shaumik Daityari on Sitepoint.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/cloudbees/feature-flags-and-gitops-5-use-cases-to-help-you-git-r-done-45ga&quot;&gt;Feature Flags and GitOps. 5 Use Cases to Help You ‘Git’r Done.&lt;/a&gt; by Kristin Baskett of CloudBees.
The idea of &lt;a href=&quot;https://www.cloudbees.com/blog/gitops-dev-dash-ops&quot;&gt;GitOps&lt;/a&gt; was mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42 (August 22nd, 2018)&lt;/a&gt; and &lt;a href=&quot;https://git.github.io/rev_news/2018/09/19/edition-43/&quot;&gt;#43&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoworld.com/article/3528008/microsofts-scalar-speeds-up-git.html&quot;&gt;Microsoft’s Scalar speeds up Git&lt;/a&gt; by Paul Krill in InfoWorld.
&lt;a href=&quot;https://github.com/microsoft/scalar/&quot;&gt;Scalar&lt;/a&gt; was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2020/02/19/edition-60/&quot;&gt;Git Rev News Edition #60 (February 19th, 2020)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/scalar/&quot;&gt;Scalar&lt;/a&gt; by Microsoft is a set of tools, settings and extensions for Git to help manage large Git repositories.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/magicmonty/bash-git-prompt&quot;&gt;bash-git-prompt&lt;/a&gt;: an informative and fancy bash prompt for Git users, a port of the “&lt;a href=&quot;https://github.com/olivierverdier/zsh-git-prompt&quot;&gt;Informative git prompt for zsh&lt;/a&gt;”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://showthedocs.com/&quot;&gt;showthedocs&lt;/a&gt; is a both a syntax highlighter and a documentation browser that finds the relevant docs for your code. Given code, it parses and highlights it, and makes it possible to jump directly to the place in the docs where an item is explained. Includes support for the &lt;a href=&quot;https://git-scm.com/docs/git-config&quot;&gt;gitconfig&lt;/a&gt; “language”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://grep.app/&quot;&gt;//grep.app&lt;/a&gt;: Search across a half million git repos, currently public repositories on GitHub; you can search by regular expression, using the RE2 syntax.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Jiang Xin and Nuritzi Sanchez.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 60 (February 19th, 2020)</title>
      <link>https://git.github.io/rev_news/2020/02/19/edition-60/</link>
      <pubDate>Wed, 19 Feb 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/02/19/edition-60/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-60-february-19th-2020&quot;&gt;Git Rev News: Edition 60 (February 19th, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 60th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of January 2020.&lt;/p&gt;

&lt;h2 id=&quot;the-pros-and-cons-of-reposurgeon-written-by-eric-s-raymond&quot;&gt;The Pros and Cons of Reposurgeon (&lt;em&gt;written by &lt;a href=&quot;http://www.catb.org/~esr/&quot;&gt;Eric S. Raymond&lt;/a&gt;&lt;/em&gt;)&lt;/h2&gt;

&lt;p&gt;On January 12th 2020, the history of the GNU Compiler Collection was
lifted from Subversion to Git. At 280K commits, with a history
containing traces of two previous version-control systems (CVS and
RCS) this was the largest and most complex repository conversion of an
open-source project ever. It swamped the previous record-holder –
Emacs’s move from Bazaar to Git back in 2011 – by an order of magnitude.&lt;/p&gt;

&lt;p&gt;Both those conversions were done by &lt;a href=&quot;https://gitlab.com/esr/reposurgeon&quot;&gt;reposurgeon&lt;/a&gt;.
Neither of them could practically have been performed by any other
conversion tool available. This article will explain why that is, and
under what circumstances you might consider using reposurgeon
yourself.&lt;/p&gt;

&lt;p&gt;Let’s start with a brief description of what reposurgeon actually
does. When you use it, you start by reading in a version-control
repository… but actually, that’s not quite right. What reposurgeon
actually does is read in a git fast-import stream. It looks like it
reads repositories because it knows how to call front ends that use
exporters such as git-fast-export and cvs-fast-export to serialize a
repository for it.&lt;/p&gt;

&lt;p&gt;Actually, that’s not quite right either. Subversion doesn’t have an
exporter – there is no svn-fast-export (well, not one that works for
more than trivial cases, anyway). Instead, reposurgeon reads the
native serialization produced by Subversion’s svnadmin dump
tool. Internally, this is massaged into the equivalent of a git
fast-import stream and represented as one inside reposurgeon.&lt;/p&gt;

&lt;p&gt;There are reposurgeon-compatible exporters for RCS, CVS, bzr, hg, SRC,
bk, and of course git itself. With a little extra work using sccs2rcs
it’s possible to reach all the way back to collections of SCCS files.&lt;/p&gt;

&lt;p&gt;Now that you’ve caught your repository, what can you do with it?&lt;/p&gt;

&lt;p&gt;I observed earlier that what you have, internally, is a deserialized
version of a git fast-input stream. A productive way to think about
what reposurgeon does is to remember that this is basically just a DAG
(directed acyclic graph) with text attached to the nodes. Now think of
reposurgeon as an editor for this graph and its nodes. Then, think of
it as a DSL (domain-specific language) designed to be &lt;em&gt;scripted&lt;/em&gt; –
that is, designed to reproducibly apply editing procedures to this
graph.&lt;/p&gt;

&lt;p&gt;So the general answer to “what can you do with it” is “anything you
want to”. I enjoy thinking about and implementing DSLs, and once I had
the basic design idea it was pretty much inevitable that I was going
to write the most general set of primitives I could imagine – and I
have a very fertile imagination.&lt;/p&gt;

&lt;p&gt;Elijah Newren’s aside on reposurgeon in &lt;a href=&quot;https://git.github.io/rev_news/2019/08/21/edition-54/&quot;&gt;Git Rev News 54&lt;/a&gt;
described it as “GDB for history rewriting”. That’s a pretty good
analogy, actually. Better than even I knew until recently, because it
turns out the Python Cmd library I originally used to write its
command interpreter was designed to emulate the interface style of gdb
and earlier symbolic debuggers.&lt;/p&gt;

&lt;p&gt;Accordingly, you can immediately use reposurgeon for a lot of
relatively simple tasks like (1) removing extremely bulky content that
shouldn’t have been checked in, (2) partitioning and merging
repositories, (3) transcoding Latin-1 metadata to UTF-8, (4)
debubbling an unnecessary complex history to make reading it easier.&lt;/p&gt;

&lt;p&gt;Often, though, those things can be done with other tools like his
git-filter-repo. It’s repository conversions for which you are likely
to actually &lt;em&gt;need&lt;/em&gt; the full power of a domain-specific language
designed for repository surgery.&lt;/p&gt;

&lt;p&gt;Which brings us to how you write out your graph as a live
repository. Reposurgeon doesn’t do that directly either. When it needs
to write out a repository, it hands a git fast-import stream to an
importer back end. That could be git fast-import itself, or the
corresponding importers for hg, bzr, darcs, bk, RCS, or SRC.&lt;/p&gt;

&lt;p&gt;Here’s what reading in and immediately converting a small Subversion
dump would look like:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;reposurgeon
reposurgeon% &lt;span class=&quot;nb&quot;&gt;read&lt;/span&gt; &amp;lt;foo.svn
23 svn revisions &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;0K/s&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; foo
reposurgeon% prefer git
git is the preferred type.
reposurgeon% rebuild bar
reposurgeon: rebuild is complete.
reposurgeon: no preservations.
reposurgeon% 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In theory you now have a Git repository named “bar” in your current
directory that is a perfect translation of foo. In practice, for any
nontrivial repository, you probably have a bit of a mess on your
hands.&lt;/p&gt;

&lt;p&gt;If you had read in any Git repository and written it out again, you’d
get a perfect copy. But when you’re moving histories between
&lt;em&gt;different&lt;/em&gt; version-control systems, you have to deal with the
mismatch between the source system’s model of version control and the
target’s.&lt;/p&gt;

&lt;p&gt;A good example of this is the fact that Subversion doesn’t have
anything directly corresponding to a Git tag. A Subversion tag is
actually a directory copy operation with a target under the tags/
directory. The copy operation leaves a commit in place which, if moved
literally to gitspace, would just be junk. What you want is to move
the metadata of that commit to an annotated tag.&lt;/p&gt;

&lt;p&gt;Many attempts at importers silently botch this in practice, but it can
be handled automatically in theory – and reposurgeon does that. The
mess you’re likely to have on your hands anyway is due to Subversion
operator errors, scar tissue for a previous conversion out of CVS, and
use of git-svn as a live gateway to the repository.&lt;/p&gt;

&lt;p&gt;The most common symptom of all these error sources is misplaced branch
joins; in extreme cases you may even have disconnected
branches. Reposurgeon enables you audit for and repair this kind of
defect. Here are a few examples of that kind of repair done on the GCC
repository:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# /branches/GC_5_0_ALPHA_1
&amp;lt;27855&amp;gt;|&amp;lt;27860&amp;gt; reparent --use-order
# /branches/apple-200511-release-branch
&amp;lt;105446&amp;gt;|&amp;lt;105574&amp;gt; reparent --use-order
# /branches/apple-gcc_os_35-branch
&amp;lt;90334&amp;gt;|&amp;lt;90607&amp;gt; reparent --use-order
# /branches/apple-tiger-release-branch
&amp;lt;96593&amp;gt;|&amp;lt;96595&amp;gt; reparent --use-order
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The GCC conversion was pretty hairy – 343 lines of DSL scripting – but
there are whole new levels of complexity when, as still sometimes
happens, you need to recover history from pre-version-controlled
sources to stitch the repository together.&lt;/p&gt;

&lt;p&gt;In &lt;a href=&quot;http://esr.ibiblio.org/?p=2491&quot;&gt;one extreme case&lt;/a&gt;, I ended up
stitching together material from 18 different release tarballs, 11
unreleased snapshot tarballs, one release tarball I could reconstruct,
one release tarball mined out of an obsolete Red Hat source RPM, two
shar archives, a pax archive, five published patches, two zip files, a
darcs archive, and a partial RCS history,&lt;/p&gt;

&lt;p&gt;But reposurgeon can handle this, because it make conversion
experiments easy. The workflow it’s designed for is carefully building
a script that assembles your source repository and other data into a
simulacrum of what a Git repository tracking your project from the
beginning of time would have looked like.&lt;/p&gt;

&lt;p&gt;Almost never will you get this right the first time. It takes testing,
polishing, tripping over assumptions you didn’t know you and your
tools were making, and correcting for those assumptions. In the GCC
case it took many hours of work to locate and develop fixes for the
misplaced branch joins.&lt;/p&gt;

&lt;p&gt;A subtle but important point is that I didn’t do that work
myself. That kind of thing is not a job for reposurgeon’s maintainer,
it’s a job for a “Mr. Inside” who knows the project’s history
intimately – in this case it was actually the GCC project lead, Joseph
Myers. One of reposurgeon’s requirements is that it has to be a tool
that a “Mr. Inside” can learn to use with minimum friction.&lt;/p&gt;

&lt;p&gt;And generally it is, if you’re being driven to it by the kind of
problem it was designed to solve – it’s like gdb that way. I’ve been
taken to task about the tool having no intro documentation; this is
not because I’m lazy, it’s because there’s
&lt;a href=&quot;http://esr.ibiblio.org/?p=8551&quot;&gt;no plausible way to write any&lt;/a&gt;, any
more than there is for gdb. You’re ready to learn reposurgeon, as
Joseph Myers did, when you’re stuck into a conversion or editing
problem so deep that the &lt;em&gt;very&lt;/em&gt; complete
&lt;a href=&quot;http://www.catb.org/~esr/reposurgeon/reposurgeon.html&quot;&gt;reposurgeon command reference&lt;/a&gt;
starts to make sense to you.&lt;/p&gt;

&lt;p&gt;You can find more about conversions with reposurgeon
&lt;a href=&quot;http://www.catb.org/~esr/reposurgeon/dvcs-migration-guide.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/git/07c84224bb0b093ab3770be9b5ab2ec23ce2d31a.camel@gmail.com/&quot;&gt;Broken branch after git commit&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Torsten Krah wrote that after using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore --staged $my-files&lt;/code&gt;
to remove some files from the index, but not the working tree, and
then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt; to commit other changes, he found that the files
were marked as deleted in the index though they are still in the
working tree.&lt;/p&gt;

    &lt;p&gt;He didn’t understand what happened and didn’t know how to fix the
situation. He later added that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt; he had done had
actually committed the files even though &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; told him that
the files wouldn’t go into the commit. And he also sent instructions
to help reproduce the issue.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, replied to Torsten saying that he couldn’t
reproduce the issue and asking for more details and examples.&lt;/p&gt;

    &lt;p&gt;Torsten then sent an example with a lot more details which enabled
Peff to reproduce the issue. Peff confirmed that there was a bug in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore&lt;/code&gt; and also found that the index-reading code could
segfault when it processes bogus cache-trees.&lt;/p&gt;

    &lt;p&gt;Peff also mentioned that Emily Shaffer had recently found a similar
segfault and that she had provided &lt;a href=&quot;https://lore.kernel.org/git/20200108023127.219429-1-emilyshaffer@google.com/&quot;&gt;a fix&lt;/a&gt;,
and then came up with &lt;a href=&quot;https://lore.kernel.org/git/20200108114344.GA3380580@coredump.intra.peff.net/&quot;&gt;a patch&lt;/a&gt;
to fix the bug in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore --staged&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, reviewed the patch and praised Peff,
while Dennis Kaarsemaker reported just being bitten by seemingly the
same bug.&lt;/p&gt;

    &lt;p&gt;In the meantime Torsten also thanked Peff for investigating the
issue and asked for a way to fix his current index. Peff suggested
using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset --hard &amp;lt;original-commit&amp;gt;&lt;/code&gt; after finding the
original commit in the reflog. Torsten replied that he actually had
to remove the index using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rm .git/index&lt;/code&gt; first to get back to a
working state.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-chris-webster&quot;&gt;Developer Spotlight: Chris Webster&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I am a retired software developer. After 25+ years in commercial
software development I wanted to contribute to open source.
Having used GNU Make and Perl extensively in a build system
I wanted to give back. GitGitGadget caught my attention when
I was contributing a fix to diff-highlight.pm in Git.
Dscho guided me through my many errors to get the change
approved. I decided to help with GitGitGadget to say thanks.
Fun/scary facts: Primary language – IBM mainframe assembler,
Secondary language: C++.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;My contributions are mainly to GitGitGadget and I think adding
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/preview&lt;/code&gt; command was really helpful. It only gets used
once by most new contributors to Git but it gives them a chance
to see what their change requests would look like. I hope seeing
the email gives these contributors the confidence to submit their
changes to the general Git community. It wasn’t a big change but
it appears to get used by a lot of first time contributors.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git ecosystem these days, and why?&lt;/p&gt;

    &lt;p&gt;I am still very much in learning mode. Working on GitGitGadget
provides an opportunity to work with modern TypeScript and
JavaScript features. There are some issues I would still like
to help with. Contributing more to Git is a next step.
Helping to make tools easier and more reliable is my motivation.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Can you briefly explain your user experience with Git so far?&lt;/p&gt;

    &lt;p&gt;So far I have been mostly using Git from the command line and
only recently started to look at Git-GUI and gitk. This is a
stark contrast to my previous use of CM/Synergy and PVCS
where the GUI was used almost exclusively. Working on GitGitGadget
requires getting to know some of the plumbing of Git and GitHub,
which is interesting. For personal projects, most use is pretty basic.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Have you ever felt that something that you’ve used in other version
control software is missing from Git?&lt;/p&gt;

    &lt;p&gt;VS Code shows a side-by-side diff for working objects. CM/Synergy
allowed a side-by-side diff for any versions of the objects. I have
not seen a way to do that. Sometimes it is easier to debug when you
have the complete source to see changes.&lt;/p&gt;

    &lt;p&gt;&lt;em&gt;&lt;strong&gt;Note&lt;/strong&gt;: Chris was told that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git difftool&lt;/code&gt; might help him with getting
side-by-side diff in Git. He acknowledged the same stating “Difftool looks
like what I am looking for”.&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;My answer should be GitGitGadget but I’m not really a user these
days – need to be more of a contributor to Git to appreciate GitGitGadget.
VS Code is providing more Git specific tooling (i.e. Timeline view) that
looks really interesting along with the GitLens extension.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://lore.kernel.org/git/xmqq36b9n2da.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.25.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/02/13/critical-security-release-gitlab-12-dot-7-dot-6-released/&quot;&gt;12.7.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/01/31/gitlab-12-7-5-released/&quot;&gt;12.7.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/01/30/security-release-gitlab-12-7-4-released/&quot;&gt;12.7.4, 12.6.6, and 12.5.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/01/24/gitlab-12-7-2-released/&quot;&gt;12.7.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/01/22/gitlab-12-7-released/&quot;&gt;12.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-6-10-release-notes-987140367.html&quot;&gt;6.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#313&quot;&gt;3.1.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#307&quot;&gt;3.0.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21616&quot;&gt;2.16.16&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.20.0/notes&quot;&gt;2.20.0&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.7/notes&quot;&gt;2.19.7&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.12/notes&quot;&gt;2.18.12&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.18/notes&quot;&gt;2.17.18&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.6/notes&quot;&gt;2.19.6&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.11/notes&quot;&gt;2.18.11&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.17/notes&quot;&gt;2.17.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.5.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.5.0&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.3.1&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-cinnabar &lt;a href=&quot;https://github.com/glandium/git-cinnabar/releases/tag/0.5.4&quot;&gt;0.5.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Heads-up for SSH users: as mentioned in &lt;a href=&quot;https://www.openssh.com/txt/release-8.2&quot;&gt;the release notes of OpenSSH v8.2&lt;/a&gt;, the prevalent &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh-rsa&lt;/code&gt; keys will be disabled. If you use SSH with private keys depending on SHA-1, you will want to regenerate them soon.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rebase-book.com/&quot;&gt;REBASE: A complete Guide on Rebasing in Git&lt;/a&gt;
is a new less than 200 pages book from Pascal Precht (with a free sample).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.welcometothejungle.com/en/articles/btc-history-git&quot;&gt;The History of Git: The Road to Domination in Software Version Control&lt;/a&gt;
was made using interviews and material from members of this
community, especially Linus Torvalds, Johannes Schindelin and Jeff King.&lt;/li&gt;
  &lt;li&gt;Transitioning Git to SHA-256:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/811068/&quot;&gt;A new hash algorithm for Git [LWN.net]&lt;/a&gt; by Jonathan Corbet.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.theregister.co.uk/2020/02/05/git_sha_256_work/&quot;&gt;Git takes baby steps towards swapping out vulnerable SHA-1 hashing algo for SHA-256&lt;/a&gt; by Tim Anderson in The Register.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qHERDFUSa14&quot;&gt;Bridging the gap: transitioning Git to SHA-256 - Git Merge 2019&lt;/a&gt;
video of Brian M. Carlson presentation at Git Merge 2019
(event which was covered in &lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/#discussions&quot;&gt;Git Rev News Edition #48&lt;/a&gt; and &lt;a href=&quot;https://git.github.io/rev_news/2019/03/20/edition-49/#other-news&quot;&gt;#49&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-02-14-automating-mysql-schema-migrations-with-github-actions-and-more/&quot;&gt;Automating MySQL schema migrations with GitHub Actions and more&lt;/a&gt;
by Shlomi Noach on GitHub Blog, using GitHub-developed &lt;a href=&quot;https://githubengineering.com/gh-ost-github-s-online-migration-tool-for-mysql&quot;&gt;gh-ost&lt;/a&gt;,
an online table migration solution, and &lt;a href=&quot;https://www.skeema.io/&quot;&gt;skeema&lt;/a&gt; by Evan Elias,
an open source schema management utility.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/811528/&quot;&gt;Better tools for kernel developers [LWN.net]&lt;/a&gt;
by Jonathan Corbet, about &lt;a href=&quot;https://lwn.net/ml/workflows/20200201030105.k6akvbjpmlpcuiky@chatter.i7.local/&quot;&gt;posting of  a simple tool called get-lore-mbox&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;In &lt;a href=&quot;https://lwn.net/ml/linux-fsdevel/20200202214620.GA20628@dread.disaster.area/&quot;&gt;Re: [Lsf-pc] [LSF/MM/BPF TOPIC] FS Maintainers Don’t Scale&lt;/a&gt;
Dave Chinner writes on the need and usefulness of doing code review,
without being experienced in the area that the patch series cover.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/810776/&quot;&gt;Fedora gathering requirements for a Git forge [LWN.net]&lt;/a&gt;
by Jake Edge, with three possibilities: GitHub, GitLab CE, and &lt;a href=&quot;https://pagure.io/pagure&quot;&gt;Pagure&lt;/a&gt;
(the last one was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/#other-news&quot;&gt;Git Rev News Edition #24 (February 22nd, 2017)&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/terminusdb/terminus-server/blob/dev/docs/whitepaper/terminusdb.pdf&quot;&gt;‘Succinct Data Structure for Delta Encoding for Modern Databases’&lt;/a&gt; [PDF]
or How we built a Git for Data (and Learned to Stop Worrying and Love the Bomb) -
whitepaper about TerminusDB.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://missing.csail.mit.edu/2020/version-control/&quot;&gt;Lecture 6: Version Control (Git)&lt;/a&gt;
is a part of “The Missing Semester of Your CS Education” class at MIT.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.afoolishmanifesto.com/posts/weird-hobby-scraped-git-histories/&quot;&gt;Weird Hobby: Scraped Git Histories&lt;/a&gt; by fREW Schmidt.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.perlmonks.org/?node_id=11110663&quot;&gt;How to Bisect Perl&lt;/a&gt; on PerlMonks.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://sethrobertson.github.io/GitBestPractices/&quot;&gt;Commit Often, Perfect Later, Publish Once: Git Best Practices&lt;/a&gt;
by Seth Robertson (2012).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/deadlybyte/please-add-gitattributes-to-your-git-repository-1jld&quot;&gt;🙏 Please Add .gitattributes To Your Git Repository - DEV Community&lt;/a&gt; by deadlybyte.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/yvonnickfrin/a-guide-on-commit-messages-d8n&quot;&gt;A guide on commit messages - DEV Community&lt;/a&gt; by Yvonnick Frin.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/erikaheidi/pick-squash-drop-rebase-comic-607&quot;&gt;Stage. Commit. Push. A Git Story (Comic) - DEV Community&lt;/a&gt; by Erika Heidi.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/10-important-git-commands-that-every-developer-should-know/&quot;&gt;Git Commands – 10 Terminal Tricks Every Developer Should Know&lt;/a&gt; by Cem Eygi.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aliyun/git-repo-go&quot;&gt;git-repo&lt;/a&gt; is a
reimplementation in Golang by &lt;a href=&quot;https://github.com/aliyun&quot;&gt;Alibaba Cloud&lt;/a&gt; of the
&lt;a href=&quot;https://source.android.com/setup/develop/repo&quot;&gt;Android repo tool&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/theonedev/onedev&quot;&gt;OneDev&lt;/a&gt; is an all-in-one DevOps platform,
with issue tracking, Git management, pull requests, and build farm;
written in Java.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/devops/introducing-scalar/&quot;&gt;Introducing Scalar: Git at scale for everyone&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dandavison/chronologer&quot;&gt;chronologer&lt;/a&gt;:
visualize changes in program timing (performance) over git commit history;
uses &lt;a href=&quot;https://github.com/sharkdp/hyperfine&quot;&gt;hyperfine&lt;/a&gt; for the benchmarking.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.skeema.io/&quot;&gt;skeema&lt;/a&gt; is an open source pure-SQL database
schema management system, with which you can diff, push, and pull
schemas.&lt;br /&gt;
There are various other tools to help version-control database schemas,
including:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://sqitch.org/&quot;&gt;Sqitch&lt;/a&gt; is database-native change management
for framework-free development and dependable deployment.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://alembic.sqlalchemy.org/&quot;&gt;Alembic&lt;/a&gt; is a lightweight database migration tool
for usage with the &lt;a href=&quot;https://www.sqlalchemy.org/&quot;&gt;SQLAlchemy&lt;/a&gt; Database Toolkit for Python.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://flywaydb.org/&quot;&gt;Flyway&lt;/a&gt; by Redgate,
with Apache v2 licensed Community Edition version.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.liquibase.org/&quot;&gt;Liquibase&lt;/a&gt; by Datical,
with free Liquibase Community edition.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/mricon/korg-helpers.git/tree/get-lore-mbox.py&quot;&gt;get-lore-mbox&lt;/a&gt;
by Konstantin Ryabitsev is a Python script that given the message ID
for any email in a thread of interest; it will download the entire
thread from the &lt;a href=&quot;https://lore.kernel.org/&quot;&gt;lore.kernel.org&lt;/a&gt; archive
into a local mbox file, for an easy applying to git repository.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://government.github.com/&quot;&gt;GitHub and Government&lt;/a&gt; is a site to
gather, curate, and feature stories of public servants and civic hackers
using GitHub as part of their open government innovations.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cgwalters/git-evtag&quot;&gt;git-evtag&lt;/a&gt;: Extended verification for git tags,
that can be used as a replacement for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-tag -s&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.sr.ht/~sircmpwn/shit&quot;&gt;shit&lt;/a&gt; (shit == Shell Git) is an implementation
of Git [plumbing] using (almost) entirely POSIX shell; more proof-of-concept
than a practical tool.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-tfs.com/&quot;&gt;git-tfs&lt;/a&gt; is a two-way bridge between TFS and git,
similar to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-svn&lt;/code&gt;; no more actively maintained because the authors
are no longer users of TFS:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.continuousimprover.com/2015/06/why-you-should-abandon-tfs-source.html&quot;&gt;Why you should abandon TFS and adopt Git&lt;/a&gt;
by Dennis Doomen (2015).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Eric S. Raymond, Josh Steadmon and
Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 59 (January 22nd, 2020)</title>
      <link>https://git.github.io/rev_news/2020/01/22/edition-59/</link>
      <pubDate>Wed, 22 Jan 2020 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2020/01/22/edition-59/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-59-january-22nd-2020&quot;&gt;Git Rev News: Edition 59 (January 22nd, 2020)&lt;/h2&gt;

&lt;p&gt;Welcome to the 59th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened around the month of December 2019.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CH2PR11MB429411CA1288526D21C7AF26CF4C0@CH2PR11MB4294.namprd11.prod.outlook.com/&quot;&gt;Push a ref to a remote with many refs&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Patrick Marlier sent an email about performance issues when pushing
from a local repository with a few refs to a remote repository with
a lot more refs (1000+) and Git objects.&lt;/p&gt;

    &lt;p&gt;The local Git client receives the entire list of refs on the remote,
and then checks in its repository if the objects exist for all the
remote refs, but in Patrick’s case most of the objects are unknown.&lt;/p&gt;

    &lt;p&gt;As the local repository is using many &lt;a href=&quot;https://git-scm.com/docs/gitrepository-layout/#Documentation/gitrepository-layout.txt-objectsinfoalternates&quot;&gt;alternates&lt;/a&gt;,
Git will try to find each unknown object in all the alternates which
amplifies the problem. To work around this Patrick showed a patch
that skips the refs that are not part of the push when looking for
objects.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, replied to Patrick that the behavior is
expected and that not looking at the refs which are not part of the
push could miss objects that are already in the remote repo, and
therefore result in pushing more objects than needed.&lt;/p&gt;

    &lt;p&gt;Peff proposed an alternative patch that uses an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OBJECT_INFO_QUICK&lt;/code&gt;
flag when checking if objects exist. That flag makes the check
faster but less thorough, which is ok in this case.&lt;/p&gt;

    &lt;p&gt;Patrick then thanked Peff for the patch saying that he would try it,
and later replied with some numbers showing a median time decreasing
from 7 minutes and 38 seconds to 5 minutes and 40 seconds. Peff
replied to those numbers suggesting applying the patch to Git 2.21
or higher, instead of Git 2.19, as a memory cache was introduced in
2.21 that would further speed up the checks.&lt;/p&gt;

    &lt;p&gt;In general it’s a good idea to always use the most recent Git version
for maximum performance as improvements are regularly merged into
each new version.&lt;/p&gt;

    &lt;p&gt;Meanwhile Junio Hamano, the Git maintainer wondered if improvements
could be made regarding the different flags that can be used when
checking objects. Peff replied that these flags have been coming up
in discussions “about once a month lately” and pointed to
&lt;a href=&quot;https://public-inbox.org/git/20191011220822.154063-1-jonathantanmy@google.com/&quot;&gt;a previous analysis made by Jonathan Tan&lt;/a&gt;.
He also suggested some small changes in the flags according to the analysis.&lt;/p&gt;

    &lt;p&gt;Jonathan Tan then chimed in to give his opinion about the flag issue
and mostly agreed with Peff’s suggestion. Junio then also agreed
with Peff’s and Jonathan’s findings.&lt;/p&gt;

    &lt;p&gt;Jonathan Nieder reviewed Peff’s patch asking a few questions to make
sure he understood it properly. Peff then answered those questions
explaining a few more details.&lt;/p&gt;

    &lt;p&gt;Peff’s patch eventually got merged into the master branch and is
included in the recent Git 2.25 release.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqtv4zjgv5.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.25.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq8smh1t3m.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.25.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqpng1cu2c.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.25.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqblrwm65l.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.25.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.25.0.windows.1&quot;&gt;2.25.0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.19.5/notes&quot;&gt;2.19.5&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.10/notes&quot;&gt;2.18.10&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.16/notes&quot;&gt;2.17.16&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.25/notes&quot;&gt;2.16.25&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/releases/2020/01/13/critical-security-release-gitlab-12-dot-6-dot-4-released/&quot;&gt;12.6.4, 12.5.7, and 12.4.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/01/09/gitlab-12-6-3-released/&quot;&gt;12.6.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2020/01/02/security-release-gitlab-12-6-2-released/&quot;&gt;12.6.2, 12.5.6, and 12.4.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/releases/2019/12/27/gitlab-12-6-1-released/&quot;&gt;12.6.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.10&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Registration for the Git Contributor Summit, on March 5, 2020, at
Los Angeles is now &lt;a href=&quot;https://public-inbox.org/git/20200115200532.GA4101552@coredump.intra.peff.net/&quot;&gt;open&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-01-13-highlights-from-git-2-25/&quot;&gt;Highlights from Git 2.25&lt;/a&gt;
by Taylor Blau on GitHub Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devclass.com/2020/01/14/git-team-releases-2-25-takes-step-towards-perl-freedom/&quot;&gt;Git team releases 2.25, takes step towards Perl freedom&lt;/a&gt;
by Julia Schmidt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/&quot;&gt;Bring your monorepo down to size with sparse-checkout&lt;/a&gt;
by Derrick Stolee on GitHub Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/erikaheidi/stage-commit-push-a-git-story-comic-a37&quot;&gt;Stage. Commit. Push. A Git Story (Comic)&lt;/a&gt;
by Erika Heidi&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/20/1/bash-scripts-git&quot;&gt;6 handy Bash scripts for Git&lt;/a&gt;
by Bob Peterson: gitlog, gitlog.id, gitlog.grep, gitbranchcmp, gitlog.find,…&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bluecast.tech/blog/git-switch-branch/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch &amp;lt;branch&amp;gt;&lt;/code&gt; – Easily checkout git branches with this new command&lt;/a&gt;
by Irshad Bluecast&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/alediaferia/git-tips-for-trunk-based-development-1i1g&quot;&gt;Git tips for trunk-based development&lt;/a&gt;
by Alessandro Diaferia&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/devops/understanding-delta-file-changes-and-merge-conflicts-in-git-pull-requests/&quot;&gt;Understanding delta file changes and merge conflicts in Git pull requests&lt;/a&gt;
by Aram on Azure DevOps Blog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/newren/git-filter-repo&quot;&gt;git-filter-repo&lt;/a&gt; v2.25.0
has been &lt;a href=&quot;https://public-inbox.org/git/CABPp-BFP38okGPTmyUJ-vVqq4=T0CypuyD05e6ArEfwhq2mdpg@mail.gmail.com/&quot;&gt;announced&lt;/a&gt;
on the mailing list.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/glandium/git-cinnabar&quot;&gt;git-cinnabar&lt;/a&gt; 0.5.3
has also been &lt;a href=&quot;https://public-inbox.org/git/20200118024728.4dugot7nmj3tdkhx@glandium.org/&quot;&gt;announced&lt;/a&gt;
on the mailing list.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://insanesharpness.gitlab.io/GitVine/&quot;&gt;GitVine&lt;/a&gt; by Insane Sharpness:
A simpler visualisation of Git Commits, inspired by Clearcase Version Tree.
&lt;em&gt;Not open-source&lt;/em&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://gitahead.github.io/gitahead.com/&quot;&gt;GitAhead&lt;/a&gt; is a graphical Git client
for Windows, Linux and macOS designed to help you understand and manage
your source code history, by &lt;a href=&quot;https://scitools.com/&quot;&gt;SciTools™&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 58 (December 25th, 2019)</title>
      <link>https://git.github.io/rev_news/2019/12/25/edition-58/</link>
      <pubDate>Wed, 25 Dec 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/12/25/edition-58/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-58-december-25th-2019&quot;&gt;Git Rev News: Edition 58 (December 25th, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 58th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of November 2019.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Two &lt;a href=&quot;https://www.outreachy.org/alums/&quot;&gt;Outreachy interns&lt;/a&gt; have been accepted to work on Git this winter&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Heba W. from New Zealand will be mentored by Emily Shaffer and
Jonathan Tan to work on the ‘&lt;em&gt;Add “Did you mean?” hints&lt;/em&gt;’
project. Heba started &lt;a href=&quot;https://medium.com/@heba.waly&quot;&gt;blogging about her
internship&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Miriam Rubio from Barcelona, Spain will be mentored by Christian
Couder to work on the ‘&lt;em&gt;Finish converting “git bisect” from shell to
C&lt;/em&gt;’ project. Miriam also started &lt;a href=&quot;https://mirucam.gitlab.io/outreachy_blog/&quot;&gt;blogging about her internship&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20191029003023.122196-1-matvore@google.com/&quot;&gt;[RFC] xl command for visualizing recent history&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Matthew DeVore sent an RFC patch implementing a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git xl&lt;/code&gt; command
that would show “a graph of recent history, including all existing
branches (unless flagged with a config option) and their upstream
counterparts”.&lt;/p&gt;

    &lt;p&gt;In practice the command would show graph like this one, where the
XXXXXXXX would be the beginning of a commit hash:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;XXXXXXXX  *  1   committer@example.com  [HEAD branch3]
          | baz
          |
XXXXXXXX  | *  2   committer@example.com  [branch2]
          |/  bar
          |
XXXXXXXX  *  3   committer@example.com
            foo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The command would also associate refs with all visible
commits. These refs would have names in the form of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;h/#&lt;/code&gt; where # is
an incrementing count.&lt;/p&gt;

    &lt;p&gt;It would by default show only what has not been pushed upstream yet,
and the branches with their commits would be shown as a graph.&lt;/p&gt;

    &lt;p&gt;Emily Shaffer first replied to Matthew, making suggestions to
improve the name of the command as well as the commit subject and
the commit message.&lt;/p&gt;

    &lt;p&gt;Johannes Schindelin, alias Dscho, replied to Emily’s reply. He
agreed with her that the name of the command was not a good one and
suggested instead to make this functionality a mode of an existing
command, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show-branch --unpushed&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch --show-unpushed&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;About the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;h/#&lt;/code&gt; refs, that he called “ephemeral refs”, Dscho
suggested implementing them in a separate patch, using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^&amp;lt;counter&amp;gt;&lt;/code&gt;
instead of “h/#” for their syntax, and making them only available for
a “reasonably short time” by default, and then offering a config
setting to change this time.&lt;/p&gt;

    &lt;p&gt;He also suggested implementing an option to show those “ephemeral
refs” in other commands too.&lt;/p&gt;

    &lt;p&gt;Phillip Wood agreed with Dscho about the “ephemeral refs”, especially 
“having them as a feature of the rev listing machinery rather than
specific to a particular command”.
He also suggested to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getsid()&lt;/code&gt; rather than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getppid()&lt;/code&gt; to tie them
to a terminal, and expressed his uncertainty how this should be done
on Windows and whether a split was also necessary/wanted per worktree.&lt;/p&gt;

    &lt;p&gt;Dscho also commented on Matthew’s initial RFC patch. He suggested
commit message improvements. He reiterated some of the suggestions
he made in his reply to Emily, and reviewed the code suggesting many
changes there too. He wrote though that he loved the main ideas
proposed by Matthew.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqr21cqcn9.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.24.1 and others&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.24.1.windows.2&quot;&gt;2.24.1(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.28.4&quot;&gt;0.28.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2sharp &lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.26.2&quot;&gt;0.26.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#312&quot;&gt;3.1.2&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#306&quot;&gt;3.0.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21615&quot;&gt;2.16.15&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.1.html#311&quot;&gt;3.1.1&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#305&quot;&gt;3.0.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21614&quot;&gt;2.16.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.19.4/notes&quot;&gt;2.19.4&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.9/notes&quot;&gt;2.18.9&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.15/notes&quot;&gt;2.17.15&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.24/notes&quot;&gt;2.16.24&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.3/notes&quot;&gt;2.19.3&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.8/notes&quot;&gt;2.18.8&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.14/notes&quot;&gt;2.17.14&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.23/notes&quot;&gt;2.16.23&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.2/notes&quot;&gt;2.19.2&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.7/notes&quot;&gt;2.18.7&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.13/notes&quot;&gt;2.17.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.22/notes&quot;&gt;2.16.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/blog/2019/12/22/gitlab-12-6-released/&quot;&gt;12.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/12/17/gitlab-12-5-5-released/&quot;&gt;12.5.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/12/16/gitlab-12-2-12-release/&quot;&gt;12.0.12, 12.1.17, and 12.2.12&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/12/10/critical-security-release-gitlab-12-5-4-released/&quot;&gt;12.5.4, 12.4.6, and 12.3.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/12/03/gitlab-12-5-3-released/&quot;&gt;12.5.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/11/27/security-release-gitlab-12-5-1-released/&quot;&gt;12.5.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/11/27/security-release-gitlab-12-5-2-released/&quot;&gt;12.5.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/11/22/gitlab-12-5-released/&quot;&gt;12.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/11/18/gitlab-12-4-3-released/&quot;&gt;12.4.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.4.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.4.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.2.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The latest &lt;a href=&quot;https://lore.kernel.org/git/xmqqr21cqcn9.fsf@gitster-ct.c.googlers.com/&quot;&gt;Git releases&lt;/a&gt; and
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.24.1.windows.2&quot;&gt;Git for Windows releases&lt;/a&gt;
are security releases. They fix a significant number of serious
security issues. Upgrading to one of these new versions is highly
recommended.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The &lt;a href=&quot;https://lore.kernel.org/git/20191213050038.GA75792@coredump.intra.peff.net/&quot;&gt;Git Merge Contributor’s Summit&lt;/a&gt;
has been announced. It will happen on March 5, 2020, in Los Angeles,
the day after the &lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://blog.alexlai.xyz/what-are-git-objects-under-the-hood/&quot;&gt;What are git objects under the hood&lt;/a&gt;
is a blog post about Git objects.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://itnext.io/git-repository-transfer-keeping-all-history-670fe04cd5e4&quot;&gt;Git Repository Transfer Keeping All History&lt;/a&gt;
by Nassos Michas explains “how to replicate your Git repo and keep
all previous commits, branches, and tags”.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://insanesharpness.gitlab.io/GitVine/&quot;&gt;GitVine&lt;/a&gt;,
an application to better visualise git commits has been
&lt;a href=&quot;https://public-inbox.org/git/CAMNO-Ba0-Me67qEEfHoJyBoWg0X_x7=qmmZ1D8ZK9S_0Tk=J5Q@mail.gmail.com/&quot;&gt;announced on the mailing list&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20191203201233.661696-1-mst@redhat.com/&quot;&gt;git-cpcover&lt;/a&gt;,
a script to copy cover letters, has been announced on the mailing list.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Emily Shaffer, Pratyush Yadav and Phillip Wood.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 57 (November 20th, 2019)</title>
      <link>https://git.github.io/rev_news/2019/11/20/edition-57/</link>
      <pubDate>Wed, 20 Nov 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/11/20/edition-57/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-57-november-20th-2019&quot;&gt;Git Rev News: Edition 57 (November 20th, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 57th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of October 2019.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20191023201310.thzpxyoeb3ta55dc@yadavpratyush.com/t/#u&quot;&gt;RFC: Moving git-gui development to GitHub&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Pratyush Yadav, a new maintainer for git-gui, asked about whether it
is a better idea to use GitHub for development instead of email
(after &lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.1910061054470.46@tvgsbejvaqbjf.bet/&quot;&gt;discussion with Dscho&lt;/a&gt;),
stating arguments in favor and against of moving to GitHub.  There
were some voices for the idea, and some against, describing
additional advantages and disadvantages.  One idea was to use
GitHub Issues as a centralized issue / bug tracker
regardless of where development would take place, which
&lt;a href=&quot;https://github.com/prati0100/git-gui/issues&quot;&gt;Yadav did&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;An interesting vote against the idea was that of Elijah Newren, who wrote
that he had been pondering asking the opposite question for
&lt;a href=&quot;https://github.com/newren/git-filter-repo/&quot;&gt;filter-repo&lt;/a&gt;, i.e.
moving its development to git mailing list.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/6b461ad3-164d-46ff-4a68-99f8e6562a72@gmail.com&quot;&gt;[PATCH 0/9] [RFC] New sparse-checkout builtin and “cone” mode&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Last August, Derrick Stolee, who prefers to be called just “Stolee”,
sent to the mailing list an RFC patch series to “make the
sparse-checkout more user-friendly” and to increase performance in
very large repositories.&lt;/p&gt;

    &lt;p&gt;The patch series achieves that by introducing a new
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git sparse-checkout&lt;/code&gt; command with 4 subcommands: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;list&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;disable&lt;/code&gt;. The series also introduces the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--sparse&lt;/code&gt; option to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;This helps users manipulate how a sparse-checkout is performed
compared to &lt;a href=&quot;https://git-scm.com/docs/git-read-tree#_sparse_checkout&quot;&gt;the current way&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;The performance boost is achieved through a new mode called “cone
mode” where all the patterns in the sparse-checkout file are “based
on prefix matches at a directory level”. In this mode it can be
faster to match the patterns to the files and directories that
should or should not be checked out, because a hashset (a set
implemented using a hash table) can be used.&lt;/p&gt;

    &lt;p&gt;Elijah Newren reviewed Stolee’s patches. As Stolee had mentioned
that some people have created
&lt;a href=&quot;http://www.marcoyuen.com/articles/2016/06/07/git-sparse.html&quot;&gt;their own helper tools&lt;/a&gt;,
Elijah first revealed that he also created a “sparsify” script
specific to his company’s internal repository.&lt;/p&gt;

    &lt;p&gt;Elijah then was concerned about how the feature worked along with
&lt;a href=&quot;https://git-scm.com/docs/git-worktree&quot;&gt;worktrees&lt;/a&gt; and how the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add&lt;/code&gt;
subcommand and the cone mode worked. He suggested that the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.sparseCheckout&lt;/code&gt; config option could be tri-state to make it
explicit how the sparse-checkout file should be parsed.&lt;/p&gt;

    &lt;p&gt;Eric Sunshine also chimed into the discussion.&lt;/p&gt;

    &lt;p&gt;Stolee replied to Elijah that he hadn’t considered worktrees and was
going to take a look at them. He accepted the suggestions about how
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add&lt;/code&gt; should work and about making &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.sparseCheckout&lt;/code&gt; a tri-state
and then sent a
&lt;a href=&quot;https://public-inbox.org/git/pull.316.v2.git.gitgitgadget@gmail.com/&quot;&gt;V2 version of the patch series&lt;/a&gt;
with those changes and a few other improvements.&lt;/p&gt;

    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add&lt;/code&gt; subcommand was also replaced with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set&lt;/code&gt;
subcommand, and the tri-state was actually implemented by adding a
new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.sparseCheckoutCone&lt;/code&gt; config option.&lt;/p&gt;

    &lt;p&gt;The discussion continued between Stolee and Elijah, mostly about the
documentation and commit messages. Then Stolee sent a
&lt;a href=&quot;https://public-inbox.org/git/pull.316.v3.git.gitgitgadget@gmail.com/&quot;&gt;V3 version of the patch series&lt;/a&gt;
with small bug fixes and various improvements, especially in the
documentation and commit messages according to Elijah’s suggestions.&lt;/p&gt;

    &lt;p&gt;After another round of review from Elijah, Stolee sent a
&lt;a href=&quot;https://public-inbox.org/git/pull.316.v4.git.1571147764.gitgitgadget@gmail.com/&quot;&gt;V4 version of the patch series&lt;/a&gt;
with only a few small changes.&lt;/p&gt;

    &lt;p&gt;Then Gábor Szeder commented on few bugs and small things he had
found; Jon Simons and Elijah also made a few comments. So Stolee sent a
&lt;a href=&quot;https://public-inbox.org/git/pull.316.v5.git.1571666186.gitgitgadget@gmail.com/&quot;&gt;V5 version of the patch series&lt;/a&gt;
on October 21st addressing the comments.&lt;/p&gt;

    &lt;p&gt;Phillip Wood, Stolee and Junio Hamano then discussed another small
issue. It seems though that the patch series will be merged into the
next branch soon.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-phillip-wood&quot;&gt;Developer Spotlight: Phillip Wood&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a physicist by training, unfortunately I had to stop working
some years ago due to a chronic health condition. Since then I’ve
spent some time coding and I got into contributing to Git after
using it on another open source project.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;That’s hard to say. Personally it was getting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase -i&lt;/code&gt; to create
commits without forking &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt;. I think it was my first big
contribution, it gave a noticeable performance improvement and
meant learning the API around commit creation as well as getting to
grips with the sequencer code that drives cherry-picks and
interactive rebases.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I’m still mostly working around the code in the
sequencer. Interactive rebases are one of the features I like best
about Git. Being able to rewrite commits in order to polish a
feature before merging it or posting patches helps make it easier to
understand and review. I’ve also contributed to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add -p&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff --color-moved-ws&lt;/code&gt; as I find those really useful as well.&lt;/p&gt;

    &lt;p&gt;I also try to spend some time reviewing patches in the areas I’m
interested in. One of the great things about contributing to Git is
the reviews one receives when posting patches, they’re always
friendly and constructive and I try to do the same for others. It’s
also interesting to see what problems other people who use Git are
facing and how they’re solving them.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Gosh that would be fantastic. I’d probably concentrate on the
UI. Firstly I’m interested in being able to amend commits more
easily by providing a simpler interface to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase -i&lt;/code&gt; that does not
involve editing a todo file. I’m currently working on a script that
lets you amend the commit that created the current line directly
from an editor and lets you walk backwards and forwards through
history rewriting it as you go. Being able to say “amend the commit
responsible for this line” with a single key stroke is really
convenient.&lt;/p&gt;

    &lt;p&gt;There are a number of other UI related projects I’m interested in. I
use diff-highlight but wish it would work on hunks with different
numbers of additions and deletions. Adapting it to diff the diff in
order to highlight the changes would be useful but would need some
careful heuristics to distinguish between when highlighting the
changes is useful and when it is just confusing. Another diff
improvement I’d like to see is implementing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--color=porcelain&lt;/code&gt; for
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; that would allow apps like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;magit&lt;/code&gt; to show
moved lines.&lt;/p&gt;

    &lt;p&gt;I’d also like to improve &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; to extend the idea of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--force-with-lease&lt;/code&gt; to support synchronizing between a laptop,
desktop and remote server by allowing forced updates of the local
branch when it has not changed since it was last pushed and improve
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push --force-with-lease&lt;/code&gt; to default to using the hash of the last
pushed commit.&lt;/p&gt;

    &lt;p&gt;If there’s still some time left then working on the documentation to
make it more approachable for new users would be great. At the
moment the man pages detail the individual commands but there’s not
much documentation introducing high level concepts and ideas. There
are some other things such as adding a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--reword&lt;/code&gt; option to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit&lt;/code&gt;
and improving &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add -p&lt;/code&gt; to allow the selection of groups of lines but
that’s probably enough for now.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying backwards
compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Personally I’d like to change the way ignored files are handled so
that Git never overwrites them (we could add a new category for
files that are expendable). The relative priority of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/info/excludes&lt;/code&gt; could also be tweaked.&lt;/p&gt;

    &lt;p&gt;Standardizing option names across the commands would also help users
I think.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt; for inspecting history with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;log&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;blame&lt;/code&gt;. I also
use &lt;a href=&quot;https://public-inbox.org/git&quot;&gt;Public Inbox&lt;/a&gt; a lot for searching
the mailing list.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq7e4gyzgt.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.24.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqblty3dtx.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.24.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqeez2fzsy.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.24.0-rc1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.24.0.windows.2&quot;&gt;2.24.0(2)&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.24.0.windows.1&quot;&gt;2.24.0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/blog/2019/11/04/gitlab-12-4-2-released/&quot;&gt;12.4.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/10/30/security-release-gitlab-12-dot-4-dot-1-released/&quot;&gt;12.4.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.1.html&quot;&gt;3.1.0&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#304&quot;&gt;3.0.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21613&quot;&gt;2.16.13&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21518&quot;&gt;2.15.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.19.1/notes&quot;&gt;2.19.1&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.19.0/notes&quot;&gt;2.19.0&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.6/notes&quot;&gt;2.18.6&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.12/notes&quot;&gt;2.17.12&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.21/notes&quot;&gt;2.16.21&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.5/notes&quot;&gt;2.18.5&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.11/notes&quot;&gt;2.17.11&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.20/notes&quot;&gt;2.16.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;TortoiseGit &lt;a href=&quot;https://tortoisegit.org/download/&quot;&gt;2.9.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.3.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.2.3&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.2.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Welcome to Kaartic Sivaraam to the Git Rev News edition team! And
thanks to Gabriel Alcaras, who leaves the team after contributing to
the interviews and as the author of the script that scrapes some
websites to help prepare the “Releases” section.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Emily Shaffer &lt;a href=&quot;https://public-inbox.org/git/20191114194708.GD60198@google.com/&quot;&gt;announced&lt;/a&gt;
the new &lt;a href=&quot;https://groups.google.com/forum/#!forum/git-mentoring&quot;&gt;git-mentoring@googlegroups.com mailing list&lt;/a&gt; as “a great place
for those who are new to Git and interested in learning how to
contribute to ask questions and expect kind, thorough answers out of
the spotlight of the main Git mailing list”.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;GitHub announced &lt;a href=&quot;https://archiveprogram.github.com/&quot;&gt;GitHub Archive Program&lt;/a&gt;,
intended to preserve open source software for future generations
in partership with Long Now Foundation, the Internet Archive,
the Software Heritage Foundation, Arctic World Archive, Microsoft Research,
the Bodleian Library, and Stanford Libraries.  On &lt;strong&gt;February 2, 2020&lt;/strong&gt;,
GitHub will capture a snapshot of every active public repository,
to be preserved in the &lt;a href=&quot;https://archiveprogram.github.com/#arctic-code-vault&quot;&gt;GitHub Arctic Code Vault&lt;/a&gt;.
This data will be stored on 3,500-foot film reels.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;It &lt;a href=&quot;https://public-inbox.org/git/CAP8UFD0WXrG=XbZj9fyo1v0zy8p7yNnGZGVH8bHDqPOLThGD-w@mail.gmail.com/t/#u&quot;&gt;looks like&lt;/a&gt;
the &lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge&lt;/a&gt; 2020 conference
will be in Los Angeles on March 4 2020.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/2019-11-03-highlights-from-git-2-24/&quot;&gt;Highlights from Git 2.24&lt;/a&gt;
on GitHub Blog by Taylor Blau: feature macros, commit graph by default,
adopting the Contributor Covenant (see &lt;a href=&quot;https://git.github.io/rev_news/2019/10/26/edition-56/&quot;&gt;previous Git Rev News&lt;/a&gt;),
recommending new history-rewriting tool: &lt;a href=&quot;https://github.com/newren/git-filter-repo/&quot;&gt;git-filter-repo&lt;/a&gt;
(more about which can be found in &lt;a href=&quot;https://git.github.io/rev_news/2019/08/21/edition-54/&quot;&gt;Git Rev News #54&lt;/a&gt;),
and other.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/devops/updates-to-the-git-commit-graph-feature/&quot;&gt;Updates to the Git Commit Graph Feature&lt;/a&gt; by Derrick Stolee
describes new commit-graph related changes in Git version 2.24.0:
new faster algorithm for topological sorting (e.g. for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --graph&lt;/code&gt;),
namely an iterative version of Kahn’s algorithm (making use of generation numbers),
incremental commit-graph format with adaptive merging,
new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fetch.writeCommitGraph&lt;/code&gt; setting to update commit-graph after every &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt;,
and having &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.commitGraph&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gc.writeCommitGraph&lt;/code&gt; on by default.
See also &lt;a href=&quot;https://twitter.com/stolee/status/1194242763413438465&quot;&gt;this Twitter thread&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Previous blog posts in the series about commit-graph were linked to
in &lt;a href=&quot;https://git.github.io/rev_news/2018/07/18/edition-41/&quot;&gt;Git Rev News Edition #41&lt;/a&gt;, &lt;a href=&quot;https://git.github.io/rev_news/2018/11/21/edition-45/&quot;&gt;#45&lt;/a&gt; and &lt;a href=&quot;https://git.github.io/rev_news/2019/05/22/edition-51/&quot;&gt;#51&lt;/a&gt;.
Developing incremental commit-graph was covered in detail in
&lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.
At the time of writing link to mentioned article was not yet posted
to &lt;a href=&quot;https://stolee.dev/&quot;&gt;Derrick Stolee developer homepage&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/803619/&quot;&gt;[LWN.net] Next steps for kernel workflow improvement&lt;/a&gt;
by Jonathan Corbet: fix attestation with minisig, add base-tree information,
and going beyond email.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/804511/&quot;&gt;[LWN.net] Analyzing kernel email&lt;/a&gt;
by Jake Edge, about research which goal is “formalizing and assessing
the Linux kernel development process”.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://flaviocopes.com/git-secrets/&quot;&gt;I posted my password / API key on GitHub.  Now what?&lt;/a&gt;
by Flavio Copes.  There are various tools to detect such situation,
and/or to safely store secrets in Git repository; some links
can be found for example in &lt;a href=&quot;https://git.github.io/rev_news/2018/05/16/edition-39/&quot;&gt;Git Rev News #39&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://engineering.udacity.com/three-simple-rules-for-putting-secrets-into-git-d47b207852b9&quot;&gt;Three Simple Rules for Putting Secrets into Git&lt;/a&gt;
by Jesse Swidler (2018), author of &lt;a href=&quot;https://github.com/jswidler/lockgit&quot;&gt;LockGit&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“Stupid git commit-tree tricks” series of blog posts by Raymond Chen, starting with
&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20190506-00/?p=102478&quot;&gt;Part 1: Building a commit manually out of a tree&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://fatbusinessman.com/2019/my-favourite-git-commit&quot;&gt;My favourite Git commit&lt;/a&gt;
by David Thompson.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/scottydocs/how-to-write-a-kickass-readme-5af9&quot;&gt;How to write a kickass README&lt;/a&gt;
by James.Scott (@scottydocs).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.divio.com/blog/documentation/&quot;&gt;What nobody tells you about documentation&lt;/a&gt;,
namely that it needs to include and be structured around its four different functions:
&lt;em&gt;tutorials&lt;/em&gt;, &lt;em&gt;how-to guides&lt;/em&gt;, &lt;em&gt;explanation&lt;/em&gt; and &lt;em&gt;technical reference&lt;/em&gt;,
each of which requires a distinct mode of writing.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph&quot;&gt;Git Graph&lt;/a&gt;
extension for Visual Studio Code – view a commit graph of your repository,
and easily perform Git actions from the graph.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/apenwarr/git-subtrac&quot;&gt;git-subtrac&lt;/a&gt; is a helper tool
that makes it easier to keep track of your git submodule contents.
It collects the entire contents of the entire history of all your submodules
(recursively) into a separate git branch, which can be pushed, pulled,
forked, and merged however you want.
&lt;a href=&quot;https://public-inbox.org/git/CAHqTa-15fKjH-3Z-vHhgNpfx6c1OQXbDXwKJHT9JX6G+7tjGBA@mail.gmail.com/T/#u&quot;&gt;Announced as a sequel to git-subtree&lt;/a&gt;
by Avery Pennarun, creator of git-subtree.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://myrepos.branchable.com/&quot;&gt;myrepos&lt;/a&gt; is a tool to manage
all your version control repositories, for example
to update them all at once, or push out all your local changes
(similar to &lt;a href=&quot;https://gerrit.googlesource.com/git-repo/&quot;&gt;git-repo&lt;/a&gt;
or &lt;a href=&quot;http://gitslave.sourceforge.net/&quot;&gt;gitslave&lt;/a&gt; tools).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jswidler/lockgit&quot;&gt;LockGit&lt;/a&gt; is a CLI tool
for storing encrypted secrets in a git repo.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/o2sh/onefetch&quot;&gt;Onefetch&lt;/a&gt; is a command line tool
that displays summary information about your Git repository
directly on your terminal.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/JesseKPhillips/USA-Constitution&quot;&gt;USA-Constitution&lt;/a&gt;
repository, with a history of edits to the US Constitution
as it has been amended.  Written in Markdown to match original formatting.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitter.im/&quot;&gt;Gitter&lt;/a&gt; is an open-source instant messaging
and chat room system for developers and users of GitHub repositories,
similar to Slack.  Gitter is provided as software-as-a-service.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=piotrpalarz.vscode-gitignore-generator&quot;&gt;.gitignore Generator&lt;/a&gt;
extension for Visual Studio Code -  easily and quickly generate .gitignore
file for your project. It uses the &lt;a href=&quot;https://gitignore.io/&quot;&gt;gitignore.io&lt;/a&gt; API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Kaartic Sivaraam &amp;lt;&lt;a href=&quot;mailto:kaartic.sivaraam@gmail.com&quot;&gt;kaartic.sivaraam@gmail.com&lt;/a&gt;&amp;gt;
with help from Phillip Wood and Andrew Ardill.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 56 (October 26th, 2019)</title>
      <link>https://git.github.io/rev_news/2019/10/26/edition-56/</link>
      <pubDate>Sat, 26 Oct 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/10/26/edition-56/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-56-october-26th-2019&quot;&gt;Git Rev News: Edition 56 (October 26th, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 56th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of September 2019.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/b6835484-62a4-6f89-b6b1-f43afe794272@iee.email/&quot;&gt;Growing the Git community&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Derrick Stolee, who prefers to be called Stolee, emailed the mailing
list after the Virtual Contributor Summit (see &lt;a href=&quot;/rev_news/2019/09/25/edition-55/#general&quot;&gt;previous edition&lt;/a&gt;)
saying he wanted to further discuss some ideas, that had been shared
during the Summit, about “Inclusion &amp;amp; Diversity” with the goal of
making the community more welcoming to new contributors of all
kinds.&lt;/p&gt;

    &lt;p&gt;He listed some possible problems that could prevent new contributors
entering the community:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;Discovering how to contribute to Git is non-obvious.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Submitting to a mailing list is a new experience for most
developers. This includes the full review and discussion
process.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;The high standards for patch quality are intimidating to new
contributors.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Some people do not feel comfortable engaging in a community
without a clear Code of Conduct. This discomfort is significant
and based on real experiences throughout society.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Since Git development happens in a different place than where
users acquire the end product, some are not aware that they can
contribute.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;Then Stolee proposed actions to address the problems:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;Improve the documentation for contributing to Git.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Add more pointers to GitGitGadget.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Introduce a new “mentors” mailing list.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Add an official Code of Conduct.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Advertise that Git wants new contributors.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;Each action was explained and justified, sometimes pointing to interesting research like the recent paper
&lt;a href=&quot;http://www.chrisparnin.me/pdf/chi18.pdf&quot;&gt;&quot;”We Don’t Do That Here”: How Collaborative Editing With Mentors Improves Engagement in Social Q&amp;amp;A Communities”&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Stolee also proposed some metrics to be measured between releases to
monitor how the community are doing:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;How many first-time contributors sent a patch?&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;How many contributors had their first commit accepted into
the release?&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;How many contributors started reviewing?&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;How many total patches/reviews did the list receive?&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;His email was very detailed with many suggestions about how to
implement the actions, and he asked interesting questions to gather
peoples’ opinion.&lt;/p&gt;

    &lt;p&gt;Denton Liu replied to Stolee sharing some thoughts as a “relatively
new contributor (just less than a year)”. He said that from his
experience to get more contributors, we should try to answer the
“how do we make it more fun to contribute to Git?” question.&lt;/p&gt;

    &lt;p&gt;He recalled that most of his time learning to contribute to Git
“stemmed from the fact that there’s a lot of tribal knowledge that’s
not really written down anywhere”.&lt;/p&gt;

    &lt;p&gt;As Stolee had mentioned
&lt;a href=&quot;https://git-scm.com/docs/MyFirstContribution&quot;&gt;the “My First Contribution” document&lt;/a&gt;,
which was recently contributed by Emily Shaffer, Denton said that it
would have really helped him get started.&lt;/p&gt;

    &lt;p&gt;Denton also suggested improving transparency about what happens to
patches sent to the mailing list.&lt;/p&gt;

    &lt;p&gt;Mike Hommey replied to Stolee suggesting an additional problem which
is that newcomers don’t really have any idea what they could
contribute.&lt;/p&gt;

    &lt;p&gt;Johannes Schindelin, alias Dscho, replied to Mike that newcomers
need experienced developers to validate the ideas they would like
to implement in Git, before they can be confident enough to work on
them. And they also need to be shown ideas they could
implement. Dscho then talked about
&lt;a href=&quot;https://github.com/gitgitgadget/git/issues&quot;&gt;the GitGitGadget issue list&lt;/a&gt; which is open and
“intended to accumulate possible project ideas”. Dscho also
acknowledged &lt;a href=&quot;https://crbug.com/git&quot;&gt;the Chromium Git issue list&lt;/a&gt; which is another issue tracker
with a similar purpose.&lt;/p&gt;

    &lt;p&gt;Replying to Stolee, Jeff King, alias Peff, who is responsible for
&lt;a href=&quot;https://git-scm.com&quot;&gt;the main Git web site&lt;/a&gt;, suggested improving
&lt;a href=&quot;https://git-scm.com/community&quot;&gt;the community page&lt;/a&gt; to add more
information for beginners. He said he was open to accepting patches
or &lt;a href=&quot;https://github.com/git/git-scm.com&quot;&gt;pull requests&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Elijah Newren mostly agreed with Stolee’s email, but suggested a
less strongly worded tone when talking about goals and existing
problems.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Stolee about the goal
of the project and the metrics that we could use with the following:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;We first should make sure that we serve existing users and
existing community members well. So well that other people who
are not yet our “existing” users and members would want to become
part of us, in order to join the fun and share the benefit. If we
cannot serve even the existing members well, we shouldn’t be
talking about acquiring new members.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;He then proposed to measure “community-member happiness” with metrics
like “This many percent of total community member population have
been active this month”.&lt;/p&gt;

    &lt;p&gt;The discussion involved a number of other Git developers like Jakub
Narębski, Emily Shaffer, Garima Singh, Pierre Tardy, Philip Oakley
and Randall S. Becker.&lt;/p&gt;

    &lt;p&gt;A number of people commented especially on the subject of adding an
official Code of Conduct, which will be reported on in a separate
article below.&lt;/p&gt;

    &lt;p&gt;Otherwise it remains to be seen if many actions will be taken to
make the project more welcoming to new contributors.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20190924064454.GA30419@sigill.intra.peff.net/&quot;&gt;[PATCH] add a Code of Conduct document&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Following the Virtual Contributor Summit (see &lt;a href=&quot;/rev_news/2019/09/25/edition-55/#general&quot;&gt;previous edition&lt;/a&gt;) and
the discussions about growing the Git community (see the article
above), Jeff King, alias Peff, decided to send a patch to add a code
of conduct.&lt;/p&gt;

    &lt;p&gt;In his patch he says that “it may be a good time to cement our
expectations when things are quiet, since it gives everybody some
distance rather than focusing on a current contentious issue”. Many
people indeed agreed in the previous discussions with that point of
view, and the idea of a Code of Conduct in the first place.&lt;/p&gt;

    &lt;p&gt;Peff says that his patch adapts the Contributor Covenant Code of
Conduct from
&lt;a href=&quot;https://www.contributor-covenant.org/version/1/4/code-of-conduct.html&quot;&gt;https://www.contributor-covenant.org/version/1/4/code-of-conduct.html&lt;/a&gt;
and that “it’s also the same document used by the Git for Windows
project”.&lt;/p&gt;

    &lt;p&gt;One of the changes is that for dealing with community issues, the
document spreads the responsibility to the Project Leadership
Committee (git@sfconservancy.org) instead of the only maintainer,
Junio C Hamano.&lt;/p&gt;

    &lt;p&gt;Peff also mentioned &lt;a href=&quot;https://github.com/mhagger/git/commit/c6e6196be8fab3d48b12c4e42eceae6937538dee&quot;&gt;a commit&lt;/a&gt;
by Michael Haggerty from June 2013 that he found in a previous
discussion and that has nice set of guidelines about how to review
code.&lt;/p&gt;

    &lt;p&gt;A number of the replies were about the Project Leadership Committee
as it’s not easy to know who is part of it. This was acknowledged by
Peff who sent
&lt;a href=&quot;https://public-inbox.org/git/20190926072046.GB20653@sigill.intra.peff.net/&quot;&gt;a follow-up patch&lt;/a&gt;
to address the issue by listing the Project Leadership Committee
members with their email addresses and by saying that they can also
be contacted individually.&lt;/p&gt;

    &lt;p&gt;Even though there was some disagreement, in general most of the people
taking part in the discussion agreed with Peff’s patches. Junio
later sent a
&lt;a href=&quot;https://public-inbox.org/git/xmqqd0f6n5a4.fsf_-_@gitster-ct.c.googlers.com/&quot;&gt;follow-up email&lt;/a&gt;
with the subject “Raise your hand to Ack jk/code-of-conduct if your
Ack fell thru cracks” to get more developers to formally agree with the
final patch, which then several did.&lt;/p&gt;

    &lt;p&gt;The commit adding the Code of Conduct has since been merged into the
master branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq4l065zx5.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.24.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.1910220004190.46@tvgsbejvaqbjf.bet/&quot;&gt;2.24.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.18.4/notes&quot;&gt;2.18.4&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.10/notes&quot;&gt;2.17.10&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.19/notes&quot;&gt;2.16.19&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.24/notes&quot;&gt;2.15.24&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.3/notes&quot;&gt;2.18.3&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.9/notes&quot;&gt;2.17.9&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.18/notes&quot;&gt;2.16.18&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.23/notes&quot;&gt;2.15.23&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/blog/2019/10/22/gitlab-12-4-released/&quot;&gt;12.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/10/07/security-release-gitlab-12-dot-3-dot-5-released/&quot;&gt;12.3.5, 12.2.8, and 12.1.14&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/10/03/gitlab-12-dot-3-dot-4-released/&quot;&gt;12.3.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/10/02/security-release-gitlab-12-dot-3-dot-3-released/&quot;&gt;12.3.3, 12.2.7, and 12.1.13&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/09/30/security-release-gitlab-12-dot-3-dot-2-released/&quot;&gt;12.3.2, 12.2.6, and 12.1.12&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/09/24/gitlab-12-3-1-released/&quot;&gt;12.3.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/blog/2019/09/22/gitlab-12-3-released/&quot;&gt;12.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#303&quot;&gt;3.0.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.3.0&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.2.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.2.1&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.2.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A new maintainer for Git-Gui, Pratyush Yadav (@prati0100),
&lt;a href=&quot;https://public-inbox.org/git/xmqq7e655ryx.fsf@gitster-ct.c.googlers.com/&quot;&gt;came forward&lt;/a&gt;.
Let’s praise and thank him for volunteering.&lt;/li&gt;
  &lt;li&gt;The Gerrit User Summit 2019 is going to be &lt;a href=&quot;https://live.gerritforge.com&quot;&gt;broadcasted on live.gerritforge.com&lt;/a&gt; and will
include talks about JGit and Gerrit Code Review, including major members of the Git Community, like Jonathan Nieder and Terry Parker.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://pvigier.github.io/2019/05/06/commit-graph-drawing-algorithms.html&quot;&gt;Commit graph drawing algorithms&lt;/a&gt;
by pvigier (Pierre Vigier), describes algorithms used by various
tools including one in pvigier’s prototype git client called &lt;a href=&quot;https://github.com/pvigier/gitamine&quot;&gt;gitamine&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://css-tricks.com/git-pathspecs-and-how-to-use-them/&quot;&gt;Git Pathspecs and How to Use Them&lt;/a&gt;
by Adam Giese.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://skypjack.github.io/2019-10-23-gh-greets-qt/&quot;&gt;GitHub Actions, the missing notes: CMake, Qt and IFW&lt;/a&gt;
by Michele ‘skypjack’ Caini, shows how he uses &lt;a href=&quot;https://github.com/features/actions&quot;&gt;GitHub Actions&lt;/a&gt;
in his project.  (GitHub Actions, still in public beta, were first
covered in &lt;a href=&quot;https://git.github.io/rev_news/2018/10/24/edition-44/&quot;&gt;Git Rev News #44&lt;/a&gt;)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/bnb/an-unintentionally-comprehensive-introduction-to-github-actions-ci-blm&quot;&gt;An Unintentionally Comprehensive Introduction to GitHub Actions CI&lt;/a&gt;
by Tierney Cyren – with example of an application build on top of
Node.js.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://humanwhocodes.com/blog/2019/10/scheduling-jekyll-posts-netlify-github-actions/&quot;&gt;Scheduling Jekyll posts with Netlify and GitHub Actions&lt;/a&gt;
by Nicholas C. Zakas on his Human Who Codes blog: using a GitHub
Action cron job to schedule Netlify builds for static site generated
blog posts (which was previously done &lt;a href=&quot;https://humanwhocodes.com/blog/2018/03/scheduling-jekyll-posts-netlify/&quot;&gt;using Netlify and AWS Lambda&lt;/a&gt;).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/802797/&quot;&gt;“git request-pull” and confusing diffstats [LWN.net]&lt;/a&gt;
by Jonathan Corbet talks about what to do if the history to be
pulled includes merges from outside (e.g. to obtain the dependencies
for a fix), and why it happens.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://tuzz.tech/blog/how-bash-completion-works&quot;&gt;How Bash completion works&lt;/a&gt; and
&lt;a href=&quot;https://tuzz.tech/blog/adding-bash-completion&quot;&gt;Adding Bash completion to my tool&lt;/a&gt;
by Chris Patuzzo; Git’s Bash completion can be found in
&lt;a href=&quot;https://github.com/git/git/blob/master/contrib/completion/git-completion.bash&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contrib/completion/git-completion.bash&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gollum/gollum&quot;&gt;Gollum&lt;/a&gt; is a simple, Git-powered
wiki written in Ruby with a sweet API and local frontend.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bitbucket.org/BitPusher16/dotfiles/raw/49a01d929dcaebcca68bbb1859b4ac1aea93b073/refs/git/git_examples.sh&quot;&gt;git_examples.sh&lt;/a&gt;
– 99% of the Git commands you’ll need at work,
demonstrated in a single script.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Emily Shaffer, Luca Milanesio and George Espinoza.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 55 (September 25th, 2019)</title>
      <link>https://git.github.io/rev_news/2019/09/25/edition-55/</link>
      <pubDate>Wed, 25 Sep 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/09/25/edition-55/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-55-september-25th-2019&quot;&gt;Git Rev News: Edition 55 (September 25th, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 55th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of August 2019.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Google Summer of Code 2019 is over.&lt;/p&gt;

    &lt;p&gt;Both students, Rohit Ashiwal and Matheus Tavares, passed their final evaluation
and posted a final report on their blog. See:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href=&quot;https://rashiwal.me/2019/final-report/&quot;&gt;Rohit’s report about improving the consistency of sequencer commands&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href=&quot;https://matheustavares.gitlab.io/posts/gsoc-final-report&quot;&gt;Matheus’ report about making pack access code thread-safe&lt;/a&gt;&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.1907031429420.44@tvgsbejvaqbjf.bet/&quot;&gt;Virtual Git Contributor Summit&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Johannes Schindelin, alias Dscho, organized the first Virtual Git
Contributor Summit which happened on Thursday September 12 and
Friday September 13 over a Zoom call.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://docs.google.com/document/d/1Yp6tz_JgUYjoofTDogtosLsdykwiAyYu9yM42yTuFA4/edit&quot;&gt;Notes&lt;/a&gt;
(&lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.1909261253400.15067@tvgsbejvaqbjf.bet/&quot;&gt;plain text&lt;/a&gt;)
have been taken and are used to organize follow up actions.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20190806014935.GA26909@google.com/&quot;&gt;RFC - Git Developer Blog&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Emily Shaffer asked on the mailing list if people would be
interested in creating a “Git-project-blessed blog written by Git
contributors”. The goal was “to make Git better understood in the
rest of the world”, in a not very formal setting.&lt;/p&gt;

    &lt;p&gt;A number of people replied to Emily saying that they thought it was
a good idea, and sometimes agreeing to submit articles for the new
blog or to review other people’s submissions.&lt;/p&gt;

    &lt;p&gt;Jeff King, who manages the git-scm.com web site, suggested hosting it
at the same place using blog.git-scm.com, which Emily accepted.&lt;/p&gt;

    &lt;p&gt;Following the Virtual Git Contributor Summit
&lt;a href=&quot;https://gitlab.com/git-scm/blog/&quot;&gt;a repository&lt;/a&gt;
has been created for the blog by James Ramsay.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CAHd499BT35jvPtsuD9gfJB0HJ=NxtzyQOaiD7-=sHJbFYhphpg@mail.gmail.com/&quot;&gt;diff.renames not working?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Robert Dailey wondered if the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff.renames&lt;/code&gt; config option worked
correctly when it’s set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;copies&lt;/code&gt;, as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff --name-status&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff --follow&lt;/code&gt; (which is not documented) showed that one file
was copied from another when they were passed a path to a file as
argument, but &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff -M&lt;/code&gt; didn’t.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, replied to Robert explaining how rename
detection works and what are the current limitations. He also
suggested some possible improvements.&lt;/p&gt;

    &lt;p&gt;Bryan Turner and Peff also noticed that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-M&lt;/code&gt; detects renames, not
copies.&lt;/p&gt;

    &lt;p&gt;Junio agreed with Peff and gave extra historical information and
also discussed possible improvements.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-emily-shaffer&quot;&gt;Developer Spotlight: Emily Shaffer&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a California resident, dog mom, maker, and software engineer at
Google contributing to Git as my day job!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://git-scm.com/docs/MyFirstContribution.html&quot;&gt;The My First Contribution tutorial&lt;/a&gt; -
it’s helping folks who are interested in committing to Git full-time
figure out how to write and send patches, and more importantly (to
me), it has launched a conversation about better internal
documentation for Git contributors, which I’m really excited about.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Lately, I’ve been making it easier for the Git team at Google to
distribute Git to Googlers (gee). For the benefit of the broader
community, I have started working on a tool to help users generate
helpful, actionable bug reports. Soon I hope to be doing some work
with hook management.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Submodules! I think they’re such a cool idea but they have a long
way to go right now. It’s a little personal for me; I also
contribute to &lt;a href=&quot;https://openbmc.org&quot;&gt;OpenBMC&lt;/a&gt; which I think could benefit a
lot from using submodules as well, but it hasn’t been feasible yet.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;That’s a good question! There are lots of depths of Git that I
haven’t been subjected to yet, so I think I have to do some more
homework before I can decide what I’d do away with.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;Probably the high number of tiny &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bashrc&lt;/code&gt; aliases I’ve got for the
Git CLI. My work would be much slower without quick aliases for
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt;, and so on. Or, I suppose related to the
Git project (but not the Git tool), I learned to use mutt for
interacting with the Git mailing list and am still thrilled to be
able to email in Vim.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21612&quot;&gt;2.16.12&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21517&quot;&gt;2.15.17&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#302&quot;&gt;3.0.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.18.2/notes&quot;&gt;2.18.2&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.8/notes&quot;&gt;2.17.8&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.17/notes&quot;&gt;2.16.17&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.22/notes&quot;&gt;2.15.22&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.18.1/notes&quot;&gt;2.18.1&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.7/notes&quot;&gt;2.17.7&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.16/notes&quot;&gt;2.16.16&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.21/notes&quot;&gt;2.15.21&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2019/09/22/gitlab-12-3-released/&quot;&gt;12.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/09/19/gitlab-12-1-11-released/&quot;&gt;12.1.11&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/09/10/critical-security-release-gitlab-12-dot-2-dot-5-released/&quot;&gt;12.2.5, 12.1.9, and 12.0.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/09/02/gitlab-12-2-4-released/&quot;&gt;12.2.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/08/29/security-release-gitlab-12-dot-2-dot-3-released/&quot;&gt;12.2.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/08/23/gitlab-12-2-1-released/&quot;&gt;12.2.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.2.0&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.1.4&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.1.3&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.1.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.1.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.1.0&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.0.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.1.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2019-08-16-highlights-from-git-2-23/&quot;&gt;Highlights from Git 2.23&lt;/a&gt;
on GitHub blog by Taylor Blau.&lt;/li&gt;
  &lt;li&gt;There is an informal &lt;a href=&quot;https://public-inbox.org/git/20180713170018.GA139708@aiede.svl.corp.google.com/t/#u&quot;&gt;Git standup on IRC&lt;/a&gt;
on #git-devel on irc.freenode.net every two weeks;
you can find dates in &lt;a href=&quot;https://calendar.google.com/calendar/embed?src=nk8ph2kh4p5tgfcctb8i7dm6d4%40group.calendar.google.com&quot;&gt;Git Events&lt;/a&gt; calendar (&lt;a href=&quot;https://calendar.google.com/calendar/ical/nk8ph2kh4p5tgfcctb8i7dm6d4%40group.calendar.google.com/public/basic.ics&quot;&gt;.ics&lt;/a&gt;);
logs are at &lt;a href=&quot;https://j.mp/gitdevlog&quot;&gt;https://j.mp/gitdevlog&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket&quot;&gt;Sunsetting Mercurial support in Bitbucket&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2019/09/05/they-didnt-teach-us-this-a-crash-course-for-your-first-job-in-software/&quot;&gt;“They Didn’t Teach Us This”: A Crash Course for Your First Job in Software&lt;/a&gt; by Max Pekarsky,
which includes Git Workflow section.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://matheustavares.gitlab.io/posts/first-steps-contributing-to-git&quot;&gt;First Steps Contributing to Git&lt;/a&gt; by Matheus Tavares, GSoC 2019 student.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/798230/&quot;&gt;Maintaining the kernel’s web of trust [LWN.net]&lt;/a&gt; by Jonathan Corbet;
one of the proposed solutions is to use &lt;a href=&quot;https://git.kernel.org/pub/scm/docs/kernel/pgpkeys.git&quot;&gt;pgpkeys.git&lt;/a&gt; repository to hold GPG keys for kernel developers.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/799134/&quot;&gt;Defragmenting the kernel development process [LWN.net]&lt;/a&gt;
article by Jonathan Corbet, including section about version control
and Git.  It mentions and references &lt;a href=&quot;https://lwn.net/Articles/797613/&quot;&gt;Change IDs for kernel patches [LWN.net]&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/glsolaria/gitlens-where-have-you-been-all-my-life-1c2d&quot;&gt;GitLens: where have you been all my life!&lt;/a&gt; by G.L Solaria,
told using animated screenshots GIFs.
&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&quot;&gt;GitLens&lt;/a&gt;
add-on for Visual Studio Code was mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2019/02/27/edition-48/&quot;&gt;Git Rev News Edition #48&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/1xbzgdj_gnUSEvpTedoyJXVvREwOxBi1amm7A_FdMFCc/edit?usp=sharing&quot;&gt;Git Can Do That?&lt;/a&gt; Git presentation given at &lt;a href=&quot;https://2019.wwktm.co/speakers/pratik-karki/&quot;&gt;Web Weekend Kathmandu, 2019&lt;/a&gt; by Pratik Karki.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/patchew-project/patchew&quot;&gt;patchew&lt;/a&gt;
is a patch email tracking and testing system,
very similar to &lt;a href=&quot;http://jk.ozlabs.org/projects/patchwork/&quot;&gt;patchwork&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News Edition #20&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/slefevre/gitin2it&quot;&gt;gitin2it&lt;/a&gt;,
set of [git] aliases to make git actions more intuitive.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Emily Shaffer, James Ramsay, Pratik Karki and Thomas Ferris.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 54 (August 21st, 2019)</title>
      <link>https://git.github.io/rev_news/2019/08/21/edition-54/</link>
      <pubDate>Wed, 21 Aug 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/08/21/edition-54/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-54-august-21st-2019&quot;&gt;Git Rev News: Edition 54 (August 21st, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 54th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of July 2019.&lt;/p&gt;

&lt;h2 id=&quot;an-introduction-to-git-filter-repo--written-by-elijah-newren&quot;&gt;An Introduction to git-filter-repo  (&lt;em&gt;written by Elijah Newren&lt;/em&gt;)&lt;/h2&gt;

&lt;p&gt;There is a new tool available for surgery on git repositories:
&lt;a href=&quot;https://github.com/newren/git-filter-repo&quot;&gt;git-filter-repo&lt;/a&gt;.  It
claims to have &lt;a href=&quot;https://github.com/newren/git-filter-repo#design-rationale-behind-filter-repo-why-create-a-new-tool&quot;&gt;many new unique
features&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/CABPp-BGOz8nks0+Tdw5GyGqxeYR-3FF6FT5JcgVqZDYVRQ6qog@mail.gmail.com/&quot;&gt;good
performance&lt;/a&gt;,
and an ability to scale – from making simple history rewrites
trivial, to facilitating the creation of entirely new tools which
leverage existing capabilities to handle more complex cases.&lt;/p&gt;

&lt;p&gt;You can read more about &lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/Documentation/git-filter-repo.txt#L17-L55&quot;&gt;common use cases and base capabilities of
filter-repo&lt;/a&gt;,
but in this article, I’d like to focus on two things: providing a simple
example to give a very brief flavor for git-filter-repo usage, and answer a
few likely questions about its purpose and rationale (including a short
comparison to other tools).  I will provide several links along the way for
curious folks to learn more.&lt;/p&gt;

&lt;h3 id=&quot;a-simple-example&quot;&gt;A simple example&lt;/h3&gt;

&lt;p&gt;Let’s start with a simple example that has come up a lot for me:
extracting a piece of an existing repository and preparing it to be
merged into some larger monorepository.  So, we want to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;extract the history of a single directory, src/.  This means that only
paths under src/ remain in the repo, and any commits that only touched
paths outside this directory will be removed.&lt;/li&gt;
  &lt;li&gt;rename all files to have a new leading directory, my-module/ (e.g. so that
src/foo.c becomes my-module/src/foo.c)&lt;/li&gt;
  &lt;li&gt;rename any tags in the extracted repository to have a ‘my-module-‘
prefix (to avoid any conflicts when we later merge this repo into
something else)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing this with filter-repo is as simple as the following command:&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  git filter-repo &lt;span class=&quot;nt&quot;&gt;--path&lt;/span&gt; src/ &lt;span class=&quot;nt&quot;&gt;--to-subdirectory-filter&lt;/span&gt; my-module &lt;span class=&quot;nt&quot;&gt;--tag-rename&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;:&lt;span class=&quot;s1&quot;&gt;&apos;my-module-&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;(The single quotes are unnecessary, but make it clearer to a human that we
are replacing the empty string as a prefix with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my-module-&lt;/code&gt;.)&lt;/p&gt;

&lt;p&gt;By contrast, filter-branch comes with a pile of caveats even once you
figure out the necessary (OS-dependent) invocation(s):&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  git filter-branch &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;--index-filter&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;git ls-files \
			  | grep -v ^src/ \
			  | xargs git rm -q --cached; \
		      git ls-files -s \
			  | sed &quot;s%$(printf \\t)%&amp;amp;my-module/%&quot; \
			  | git update-index --index-info; \
		      git ls-files \
			  | grep -v ^my-module/ \
			  | xargs git rm -q --cached&apos;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;--tag-name-filter&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;echo &quot;my-module-$(cat)&quot;&apos;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--prune-empty&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--all&lt;/span&gt;
  git clone file://&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt; newcopy
  &lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;newcopy
  git &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-each-ref&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;delete %(refname)&quot;&lt;/span&gt; refs/tags/ &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      | &lt;span class=&quot;nb&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; refs/tags/my-module- &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      | git update-ref &lt;span class=&quot;nt&quot;&gt;--stdin&lt;/span&gt;
  git gc &lt;span class=&quot;nt&quot;&gt;--prune&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;now
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;BFG is not capable of this type of rewrite, and this type of rewrite is
difficult to perform safely using fast-export and fast-import directly.&lt;/p&gt;

&lt;p&gt;You can find a lot more examples in &lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/Documentation/git-filter-repo.txt#L434&quot;&gt;filter-repo’s
manpage&lt;/a&gt;.
(If you are curious about the “pile of caveats” mentioned above or the
reasons for the extra steps for filter-branch, you can &lt;a href=&quot;https://github.com/newren/git-filter-repo#example-usage-comparing-to-filter-branch&quot;&gt;read more
details about this
example&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&quot;why-a-new-tool-instead-of-contributing-to-other-tools&quot;&gt;Why a new tool instead of contributing to other tools?&lt;/h3&gt;

&lt;p&gt;There are two well known tools in the repository rewriting space:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-scm.com/docs/git-filter-branch&quot;&gt;git-filter-branch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rtyley.github.io/bfg-repo-cleaner/&quot;&gt;BFG Repo Cleaner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and two lesser-known tools:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.catb.org/~esr/reposurgeon/reposurgeon.html&quot;&gt;reposurgeon&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-scm.com/docs/git-fast-export&quot;&gt;git-fast-export&lt;/a&gt; and
&lt;a href=&quot;https://git-scm.com/docs/git-fast-import&quot;&gt;git-fast-import&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(While fast-export and fast-import themselves are well known, they are
usually thought of as export-to-another-VCS or import-from-another-VCS
tools, though they also work for git-&amp;gt;git transitions.)&lt;/p&gt;

&lt;p&gt;I will briefly discuss each.&lt;/p&gt;

&lt;h4 id=&quot;filter-branch-and-bfg&quot;&gt;filter-branch and BFG&lt;/h4&gt;

&lt;p&gt;It’s natural to ask why, if these well-known tools lacked features I
wanted, they could not have been extended instead of creating a new tool.
In short, they were philosophically the wrong starting point for extension
and they also had the wrong architecture or design to support such an
effort.&lt;/p&gt;

&lt;p&gt;From the philosophical angle:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;BFG: easy to use flags for some common cases, but not extensible&lt;/li&gt;
  &lt;li&gt;filter-branch: relatively versatile capability via user-specified
shell commands, but rapidly becomes very difficult to use beyond
trivial cases especially as usability defaults increasingly
conflict and cause problems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted something that made the easy cases simple like BFG, but which
would scale up to more difficult cases and have versatility beyond that
which filter-branch provides.&lt;/p&gt;

&lt;p&gt;From the technical architecture/design angle:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;BFG: works on packfiles and packed-refs, directly rewriting tree and
blob objects; Roberto proved you can get a lot done with this design
with his work on the BFG (as many people who have used his tool can
attest), but this design does not permit things like differentiating
paths in different directories with the same basename nor could it be
used to allow renaming of paths (except within the same directory).
Further, this design even sadly runs into a
&lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/contrib/filter-repo-demos/bfg-ish#L32-L39&quot;&gt;lot&lt;/a&gt;
&lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/contrib/filter-repo-demos/bfg-ish#L29-L31&quot;&gt;of&lt;/a&gt;
&lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/contrib/filter-repo-demos/bfg-ish#L23-L26&quot;&gt;roadblocks&lt;/a&gt;
&lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/contrib/filter-repo-demos/bfg-ish#L66-L68&quot;&gt;and&lt;/a&gt;
&lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/contrib/filter-repo-demos/bfg-ish#L27-L28&quot;&gt;limitations&lt;/a&gt;
even within its intended use case of removing big or sensitive content.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;filter-branch: performance really shouldn’t matter for a one shot
usage tool, but filter-branch can turn a few hour rewrite
(allowing an overnight downtime) into an intractable three-month
wait.  Further, its design architecture leaks through every level
of the interface, making it nearly impossible to change anything
about the slow design without having backward compatibility
issues.  These issues are well known, but what is less well known
is that even ignoring performance, &lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/contrib/filter-repo-demos/filter-lamely#L9-L61&quot;&gt;the usability choices in
filter-branch rapidly become increasingly conflicting and
problematic&lt;/a&gt;
for users with larger repos and more involved rewrites,
difficulties that again cannot be ameliorated without breaking
backward compatibility.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;reposurgeon&quot;&gt;reposurgeon&lt;/h4&gt;

&lt;p&gt;Some brief impressions about reposurgeon:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Appears to be
&lt;a href=&quot;http://www.catb.org/~esr/reposurgeon/features.html&quot;&gt;almost&lt;/a&gt;
&lt;a href=&quot;http://www.catb.org/~esr/reposurgeon/dvcs-migration-guide.html&quot;&gt;exclusively&lt;/a&gt;
focused on transitioning between different version control systems
(CVS, SVN, Hg, Bazaar, Git, etc.), and in particular handling the myriad
edge and corner cases that arise in transitioning from CVS or SVN to a
DVCS.&lt;/li&gt;
  &lt;li&gt;Provides very thorough reference-style documentation; if you read all
reposurgeon documentation, you will likely feel as though you can take
an existing example and modify it in many ways.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAA01Csq0eX2L5cKpjjySs+4e0Sm+vp=10C_SAkE6CLpCHBWZ8g@mail.gmail.com/&quot;&gt;Absolutely no full-fledged
examples&lt;/a&gt;
&lt;a href=&quot;https://public-inbox.org/git/CAA01Csp+RpCXO4noewBOMY6qJiBy=Gshv3rUh83ZY2RJ5Th3Ww@mail.gmail.com/&quot;&gt;or user-guide style
documentation&lt;/a&gt;
are provided for getting started.&lt;/li&gt;
  &lt;li&gt;Appears to not have any facilities for quick (in terms of time spent by
the user) conversions similar to filter-branch, BFG, or filter-repo.
Users who want such capabilities are likely to be frustrated by
reposurgeon and give up.&lt;/li&gt;
  &lt;li&gt;Strikes me as “GDB for history rewriting”; it has lots of facilities
for manually inspecting and editing, but is not intended for the
first-time or casual history spelunker.  Only those who view history
spelunking as a frequent hobby or job are likely to dive in.  And it’s
not quite clear whether it is only useful to those transitioning from
CVS/SVN or whether the facilities would also be useful to others.&lt;/li&gt;
  &lt;li&gt;Built on top of fast-export and fast-import, which I contend is the
right architecture for a history filtering tool (see below).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have read the reposurgeon documentation multiple times over the years,
and am almost at a point where I feel like I know how to get started with
it.  I haven’t had a need to convert a CVS or SVN repo in over a decade; if
I had such a need, perhaps I’d persevere and learn more about it.  I
suspect it has some good ideas I could apply to filter-repo.  But I haven’t
managed to get started with reposurgeon, so clearly my impressions of it
should be taken with a grain of salt.&lt;/p&gt;

&lt;h4 id=&quot;fast-export-and-fast-import&quot;&gt;fast-export and fast-import&lt;/h4&gt;

&lt;p&gt;Finally, fast-export and fast-import can be used with a little editing of
the fast-export output to handle a number of history rewriting cases.  I
have done this many times, but it has some
&lt;a href=&quot;https://public-inbox.org/git/CABPp-BGL-3_nhZSpt0Bz0EVY-6-mcbgZMmx4YcXEfA_ZrTqFUw@mail.gmail.com/&quot;&gt;drawbacks&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Dangerous for programmatic edits: It’s tempting to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;perl&lt;/code&gt;
one-liners to e.g. try to modify filenames, but you risk accidentally
also munging unrelated data such as commit messages, file contents, and
branch and tag names.&lt;/li&gt;
  &lt;li&gt;Easy to miss corner cases: for example, fast-export only quotes
filenames when necessary; as such, your attempt to rename a directory
might leave files with spaces or UTF-8 characters in their original
location.&lt;/li&gt;
  &lt;li&gt;Difficult to directly provide higher level facilities: for example,
rewriting (possibly abbreviated) commit hashes in commit messages to
refer to the new commit hashes, or stripping of non-merge commits which
become empty or merge commits which become degenerate and empty.&lt;/li&gt;
  &lt;li&gt;Misses a lot of pieces needed to round things out into a usable
tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, fast-export and fast-import are the right architecture for
building a repository filtering tool on top of; they are fast, provide
access to almost all aspects of a repository in a very machine-parseable
format, and will continue to gain features and capabilities over time
(e.g. when replace refs were added, fast-export and fast-import immediately
gained support).  To create a full repository surgery tool, you “just” need
to &lt;a href=&quot;https://github.com/newren/git-filter-repo#how-filter-repo-works&quot;&gt;combine fast-export and fast-import together with a whole lot of
parsing and
glue&lt;/a&gt;,
which, in a nutshell, is what filter-repo is.&lt;/p&gt;

&lt;h4 id=&quot;upstream-improvements&quot;&gt;Upstream improvements&lt;/h4&gt;

&lt;p&gt;But to circle back to the question of improving existing tools, during the
development of filter-repo and its predecessor, lots of &lt;a href=&quot;https://github.com/newren/git-filter-repo/tree/develop#upstream-improvements&quot;&gt;improvements to
both fast-export and
fast-import&lt;/a&gt;
were submitted and included in git.git.&lt;/p&gt;

&lt;p&gt;(Also, &lt;a href=&quot;https://public-inbox.org/git/51419b2c0904072035u1182b507o836a67ac308d32b9@mail.gmail.com/&quot;&gt;filter-repo started in early 2009 as
git_fast_filter.py&lt;/a&gt;
and therefore technically predates both BFG and reposurgeon.)&lt;/p&gt;

&lt;h3 id=&quot;why-not-a-builtin-command&quot;&gt;Why not a builtin command?&lt;/h3&gt;

&lt;p&gt;One could ask why this new command is not written in C like most of Git.
While that would have several advantages, it doesn’t meet the necessary
design requirements.  See the &lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/Documentation/git-filter-repo.txt#L306-L326&quot;&gt;“VERSATILITY” section of the
manpage&lt;/a&gt;
or see the “Versatility” section under the &lt;a href=&quot;https://github.com/newren/git-filter-repo#design-rationale-behind-filter-repo-why-create-a-new-tool&quot;&gt;Design Rationale of the
README&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Technically, we could perhaps provide a mechanism for people to write
and compile plugins that a builtin command could load, but having users
write filtering functions in C sounds suboptimal, and requiring gcc for
filter-repo sounds more onerous than using python.&lt;/p&gt;

&lt;h3 id=&quot;where-to-from-here&quot;&gt;Where to from here?&lt;/h3&gt;

&lt;p&gt;This was just a quick intro to filter-repo, and I’ve provided a lot of
links above if you want to learn more.  Just a few more that might be of
interest:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/Documentation/git-filter-repo.txt#L340-L350&quot;&gt;Ramifications of repository
rewrites&lt;/a&gt;;
including
&lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/Documentation/git-filter-repo.txt#L376-L410&quot;&gt;some&lt;/a&gt;
&lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/Documentation/git-filter-repo.txt#L426-L431&quot;&gt;tips&lt;/a&gt;
(not specific to filter-repo)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/newren/git-filter-repo/blob/a6a6a1b0f62d365bbe2e76f823e1621857ec4dbd/Documentation/git-filter-repo.txt#L356-L361&quot;&gt;Finding big objects/directories/extensions (and renames) in your
repo&lt;/a&gt;
(can be used together with tools other than filter-repo too)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/newren/git-filter-repo/tree/master/contrib/filter-repo-demos&quot;&gt;Creating new history rewriting tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqq4l3l520f.fsf_-_@gitster-ct.c.googlers.com/&quot;&gt;[RFC/PATCH] CodingGuidelines: spell out post-C89 rules&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Carlo Arenas recently &lt;a href=&quot;https://public-inbox.org/git/CAPUEspgjSAqHUP2vsCCjqG8b0QkWdgoAByh4XdqsThQMt=V38w@mail.gmail.com/&quot;&gt;commented on a patch by Emily Shaffer&lt;/a&gt;
that moving a declaration out of a “for” loop would allow building on
a CentOS 6 box.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Carlo that we indeed
“still reject variable definition in for loop control” even if “for
past several years we’ve been experimenting with a bit more modern
features”.&lt;/p&gt;

    &lt;p&gt;Junio then sent a patch to update the Documentation/CodingGuidelines
file. This file describes which coding conventions are, and should
be, used by developers working on the Git codebase.&lt;/p&gt;

    &lt;p&gt;One very important part of these conventions are the C language
features that the developers are allowed or disallowed to use.&lt;/p&gt;

    &lt;p&gt;For a very long time, to be compatible with as many systems as
possible, only features part of the
&lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_C&quot;&gt;C89 standard&lt;/a&gt; were
allowed. Since 2012 though features part of the C99 standard have
been very slowly introduced.&lt;/p&gt;

    &lt;p&gt;When these new features were introduced, they were introduced in
“weather balloons” patches, which are very limited changes that are
easy to undo in case someone complains.&lt;/p&gt;

    &lt;p&gt;Fortunately in most cases, though not in the “for” loop case, since
the patches have been merged, no one has complained that they
couldn’t compile Git’s code due to these patches, which means that
code using these new features can now be more widely accepted.&lt;/p&gt;

    &lt;p&gt;The goal of Junio’s patch was to document that fact and these new
features at the same time.&lt;/p&gt;

    &lt;p&gt;One of the new features is allowing an enum definition whose last
element is followed by a comma. Jonathan Nieder replied to Junio
that someone complained about that in &lt;a href=&quot;https://public-inbox.org/git/20100311163235.GC7877@thor.il.thewrittenword.com/&quot;&gt;2010&lt;/a&gt;,
but, as it has not happened since 2012 when the feature was
reintroduced in the code base, it is ok.&lt;/p&gt;

    &lt;p&gt;Jonathan even suggested that we “say that the last element should
always be followed by a comma, for ease of later patching”, and
Junio found this idea interesting.&lt;/p&gt;

    &lt;p&gt;A few more comments were made by Jonathan and Bryan Turner about
small possible improvements to Junio’s patch. Junio then sent an
updated version of the patch which has since been merged to the
master branch.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-jean-noël-avila&quot;&gt;Developer Spotlight: Jean-Noël Avila&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My name is Jean-Noël Avila, father of three daughters and husband of
an incredibly understanding wife. I graduated a long time ago from a
french engineering school, with a speciality in signal processing,
not really in computer science.&lt;/p&gt;

    &lt;p&gt;Professionally, I work in the R&amp;amp;D team of a
&lt;a href=&quot;https://www.scantech.com&quot;&gt;small company&lt;/a&gt; that makes industrial
online measurement systems, and guess what, we’re using Git as an
ubiquitous revision control system (software, documentation); my
colleagues know who they should call for any issue. Sadly though, I
don’t work on Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;For the Git project itself, my most important and only contribution
has been to deliver the french localization of the software
since… 2013 (gasp!) and occasionally propose some patches to fix
internationalization issues.&lt;/p&gt;

    &lt;p&gt;At the beginning, I proposed some patches to fix glob-pattern
matching in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt; file, but even if it fixed the issue,
it turned out later that the patch had introduced a performance
regression. So I chose to stick to a less harmful activity in the
community (although bad translation can be quite harmful).&lt;/p&gt;

    &lt;p&gt;In the Git ecosystem more generally, I’ve been working on
translating the Pro Git book &lt;a href=&quot;https://git-scm.com/book/fr/v2&quot;&gt;to French&lt;/a&gt; and managing with Peff and
Pedro (@pedrorijo91) the publishing of the translations of the book
on &lt;a href=&quot;http://git-scm.com&quot;&gt;http://git-scm.com&lt;/a&gt;. So, to sum it up, not working on the core,
but on the public interfaces of the project.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Following the path of localization, what is a localized application
worth if the documentation is still an impediment? In this idea, at
the beginning of this year, I’ve started an effort to translate the
manual pages in French and to propose the translation framework put
in place for this purpose to other languages.&lt;/p&gt;

    &lt;p&gt;So far, only two languages have translated content, but I expect to
have some more soon. The pages are already available at
&lt;a href=&quot;http://git-scm.com/docs/&quot;&gt;http://git-scm.com/docs/&lt;/a&gt;. What is still missing is the packaging
for other distributions of Git. Maybe when we have more content to
provide.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Functionally, we’ve been bitten by some wrong merges of concurrent
branches, and I wish Git could have some knowledge in patch algebra
to better handle these corner cases. I know that it would be quite
orthogonal to the present design, but even just detecting and
showing warnings that something nasty is happening would prevent
surprises (to say the least) of the users in complex histories.&lt;/p&gt;

    &lt;p&gt;From a translator’s stand point, a project that would not require a
big expertise while still being useful would be to introduce rules
and factorize internationalization. This part of Git is still the
wild west by some aspects with a lot of freedom left to developers
to choose their own formatting. A sizeable part of these strings are
almost identical: with or without an ending period, with quoted or
unquoted &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%s&lt;/code&gt;, with uppercase or not. Some strings are very similar:
“foo and bar are mutually exclusive”, and so on. In the end, the
number of segments to translate in Git amounts to 4674 for v2.23.0,
which basically bars the entry to new translations.&lt;/p&gt;

    &lt;p&gt;As an aside, providing a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;po&lt;/code&gt; file for core strings and another one
for less used strings would also help kickstart translations by
focusing on more productive work for translators of new languages. I
understand this kind of task would be Sisyphos’ work, but that would
really help the community grow by giving access to Git to users less
educated in computer science.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Translating Git and the manpages gives a good overview of what’s
available and what is being introduced. So far, I haven’t
experienced anything strikingly bad about a particular feature. At
the limit, I would make rebasing require a more advanced knowledge
of Git’s internals by not providing such an easy way to shoot in
one’s foot.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;In fact, in my daily work with Git, I don’t use the command line
that much. I’m an Emacs fan, and &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt; is really a miraculous tool
when it comes to interacting with a Git repository from my favorite
editor.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqy2zszuz7.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.23.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqh86m9npi.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.22.1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqk1bmcf3q.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.23.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq36ijjk8i.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.23.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqh874tssp.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.23.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.23.0.windows.1&quot;&gt;2.23.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.28.3&quot;&gt;0.28.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2sharp &lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.26.1&quot;&gt;0.26.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21515&quot;&gt;2.15.15&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21611&quot;&gt;2.16.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.17.6/notes&quot;&gt;2.17.6&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.15/notes&quot;&gt;2.16.15&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.20/notes&quot;&gt;2.15.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2019/08/12/critical-security-release-gitlab-12-dot-1-dot-6-released/&quot;&gt;12.1.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/08/06/gitlab-12-1-4-released/&quot;&gt;12.1.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/07/31/gitlab-12-1-3-released/&quot;&gt;12.1.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/07/29/security-release-gitlab-12-dot-1-dot-2-released/&quot;&gt;12.1.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/07/24/gitlab-12-1-1-released/&quot;&gt;12.1.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current/#version-613&quot;&gt;6.1.3&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current/#version-612&quot;&gt;6.1.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current/#version-611&quot;&gt;6.1.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current/#version-610&quot;&gt;6.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.1.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The first translations of manpages are finally hitting git-scm.com. The project was kicked off and &lt;a href=&quot;https://public-inbox.org/git/1992944.NOdEsaAZKb@cayenne/&quot;&gt;announced&lt;/a&gt; in January 2019. It was decided to hold the translation outside the main git repository and use a converter from the original asciidoc format to gettext po. After some more work on tooling and &lt;a href=&quot;https://public-inbox.org/git/CAHtYWY4g4BYDr_z7pfS-p=aX_YkVo4HzGR1Dsytn4RkzBo0GjA@mail.gmail.com/&quot;&gt;more people&lt;/a&gt; joining the project, the toolchain to allow publishing on git-scm.com is in place and you can already see &lt;a href=&quot;https://git-scm.com/docs/git-add/pt_BR&quot;&gt;some results&lt;/a&gt;. There are presently 9 languages of which 2 have several complete translated manpages. The upcoming tasks are to direct priority-oriented translators to most viewed content and generate packages for distribution along Git itself.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2019-08-08-github-actions-now-supports-ci-cd/&quot;&gt;GitHub Actions now supports CI/CD, free for public repositories&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/devops/a-deep-dive-into-git-performance-using-trace2/&quot;&gt;A Deep Dive into Git Performance using Trace2&lt;/a&gt;
by Jeff Hostetler explains everything about the Trace2 logging framework which was released in Git 2.22.0.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.linuxjournal.com/content/documenting-proper-git-usage&quot;&gt;Documenting Proper Git Usage&lt;/a&gt;
by Zack Brown in Linux Journal, mainly about the
&lt;a href=&quot;https://lwn.net/Articles/791284/&quot;&gt;Rebasing and merging in kernel repositories&lt;/a&gt;
article by Jonathan Corbet in LWN.net, mentioned in
&lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://kroah.com/log/blog/2019/08/14/patch-workflow-with-mutt-2019/&quot;&gt;Patch Workflow With Mutt - 2019&lt;/a&gt;
by Greg Kroah-Hartman.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dzone.com/articles/using-conventional-commit-in-project&quot;&gt;Using Conventional Commit in Projects&lt;/a&gt;
by Sathyabodh Mudhol on DZone. &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; specification
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2019/06/28/edition-52/&quot;&gt;Git Rev News Edition #52&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gameoftrees.org/index.html&quot;&gt;Game of Trees (Got)&lt;/a&gt; is a
version control system developed by and for OpenBSD developers which
prioritizes ease of use and simplicity over flexibility. Got wants
to remain on-disk compatible with bare Git repositories.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mystor.github.io/git-revise.html&quot;&gt;git-revise&lt;/a&gt; by Nika Layzell
is a history editing tool designed for the patch-stack workflow
(similarly to &lt;a href=&quot;http://procode.org/stgit/&quot;&gt;StGit&lt;/a&gt;, &lt;a href=&quot;http://savannah.nongnu.org/projects/quilt&quot;&gt;Quilt&lt;/a&gt;, &lt;a href=&quot;https://github.com/jeffpc/guilt&quot;&gt;Guilt (formerly gq)&lt;/a&gt; or &lt;a href=&quot;https://github.com/mackyle/topgit&quot;&gt;TopGit&lt;/a&gt;).
It is intended to be fast, at least for small editing tasks;
it is not meant to be a complete replacement for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase -i&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://storytime.dev/&quot;&gt;StoryTime&lt;/a&gt; is a tool
that enables developers to easily simulate debugger-like visuals
to tell or read a story about pieces of code (in their GitHub repositories).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Elijah Newren, Jeff Hostetler, Andrew Ardill and Jean-Noël Avila.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 53 (July 24th, 2019)</title>
      <link>https://git.github.io/rev_news/2019/07/24/edition-53/</link>
      <pubDate>Wed, 24 Jul 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/07/24/edition-53/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-53-july-24th-2019&quot;&gt;Git Rev News: Edition 53 (July 24th, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 53rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of June 2019.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20190628093751.GA3569@sigill.intra.peff.net/&quot;&gt;Easy bulk commit creation in tests&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Derrick Stolee, who prefers to be called Stolee, has been sending
“Git Test Coverage Report” emails to the mailing list
&lt;a href=&quot;https://public-inbox.org/git/4bcd63bf-648d-f3f6-dac8-aabe7ea1e480@gmail.com/&quot;&gt;since September 2018&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;These emails contain reports made using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contrib/coverage-diff.sh&lt;/code&gt;
to combine the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gcov&lt;/code&gt; output from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make coverage-test ; make coverage-report&lt;/code&gt;
with the output from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff A B&lt;/code&gt; to discover &lt;em&gt;new&lt;/em&gt; lines of code that are
not covered by the test suite.&lt;/p&gt;

    &lt;p&gt;In June 2019 Stolee sent
&lt;a href=&quot;https://public-inbox.org/git/49d98293-9f0b-44e9-cb07-d6b7ac791eb6@gmail.com/&quot;&gt;a new report&lt;/a&gt;
which stated that some new lines of code contributed by Jeff King,
alias Peff, were not covered by any test. Peff replied that when
running the test that exercises the surrounding code, we hit the early
return above the lines that are not tested when there are fewer than
100 commits to index.&lt;/p&gt;

    &lt;p&gt;One solution to that problem could be to create 100 commits, instead of just
10, in the test, though that would slow down the test. Peff then
concluded:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;It would be nice if we had a “test_commits_bulk” that used fast-import
to create larger numbers of commits.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;A few hours later Peff replied to himself by sending a 6 patch long
patch series which implements the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_commit_bulk&lt;/code&gt; function he
suggested.&lt;/p&gt;

    &lt;p&gt;In this patch series Peff converted a few places in the code to use
this function and reported that it saves around 7.5 seconds from his
test runs. He commented: “Not ground-breaking, but I think it’s nice
to have a solution where we don’t have to be afraid to generate a
bunch of commits.”&lt;/p&gt;

    &lt;p&gt;The comments above the function explains it like this:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Similar to test_commit, but efficiently create &amp;lt;nr&amp;gt; commits, each with a
# unique number $n (from 1 to &amp;lt;nr&amp;gt; by default) in the commit message.
#
# Usage: test_commit_bulk [options] &amp;lt;nr&amp;gt;
#   -C &amp;lt;dir&amp;gt;:
#	Run all git commands in directory &amp;lt;dir&amp;gt;
#   --ref=&amp;lt;n&amp;gt;:
#	ref on which to create commits (default: HEAD)
#   --start=&amp;lt;n&amp;gt;:
#	number commit messages from &amp;lt;n&amp;gt; (default: 1)
#   --message=&amp;lt;msg&amp;gt;:
#	use &amp;lt;msg&amp;gt; as the commit message (default: &quot;commit $n&quot;)
#   --filename=&amp;lt;fn&amp;gt;:
#	modify &amp;lt;fn&amp;gt; in each commit (default: &quot;$n.t&quot;)
#   --contents=&amp;lt;string&amp;gt;:
#	place &amp;lt;string&amp;gt; in each file (default: &quot;content $n&quot;)
#   --id=&amp;lt;string&amp;gt;:
#	shorthand to use &amp;lt;string&amp;gt; and $n in message, filename, and contents
#
# The message, filename, and contents strings are evaluated by the shell inside
# double-quotes, with $n set to the current commit number. So you can do:
#
#   test_commit_bulk --filename=file --contents=&apos;modification $n&apos;
#
# to have every commit touch the same file, but with unique content. Spaces are
# OK, but you must escape any metacharacters (like backslashes or
# double-quotes) you do not want expanded.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Johannes Schindelin replied to Peff that he likes the direction
because “it would make it super easy to go one step further that would
probably make a huge difference on Windows: to move &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_commit_bulk&lt;/code&gt;
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test-tool commit-bulk&lt;/code&gt;”.&lt;/p&gt;

    &lt;p&gt;Peff replied that “in the biggest case we dropped 900 processes to
4” so that he thought it would not make a big difference to convert
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_commit_bulk&lt;/code&gt; to C code and integrate it as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test-tool commit-bulk&lt;/code&gt;.
But anyway Peff suggested 3 different ways to have only 1 process.&lt;/p&gt;

    &lt;p&gt;One of the ways Peff suggested was to add a feature to fast-import to
say “build on top of ref X”. Elijah Newren replied to Peff that such
a feature already exists using something like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;from refs/heads/branch^0&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Peff thanked Elijah and used the feature in a patch he attached, which
further reduces the number of processes used.&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason also replied to Peff wondering if just
having a few “template” repositories, that could just be copied in
many tests, would be a better approach.&lt;/p&gt;

    &lt;p&gt;Peff replied to Ævar that just “seeing the end result of running a
bunch of commands” is less instructive than following “the steps
that the author was thinking about”, and that “it’s more annoying to
update”. Peff though would find cool that we could “allow caching of
the on-disk state at certain points in a test script”, for example
by annotating some test snippets as “SETUP”, like a prerequisite.&lt;/p&gt;

    &lt;p&gt;Stolee also replied to Peff, congratulating him for the quick
turnaround, providing results from performance tests on Windows
which were similar as those provided by Peff, and suggesting
possible improvements to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_commit_bulk&lt;/code&gt; function. These
suggestions were then discussed by Junio Hamano, the Git
maintainer, and Peff.&lt;/p&gt;

    &lt;p&gt;Junio, Ævar, Eric Sunshine and Gábor Szeder also discussed with Peff
some aspects of the implementation and documentation of the new
feature.&lt;/p&gt;

    &lt;p&gt;Peff then sent &lt;a href=&quot;https://public-inbox.org/git/20190629045322.GA8155@sigill.intra.peff.net/&quot;&gt;a version 2&lt;/a&gt;
of the patch that implements &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_commit_bulk&lt;/code&gt; with many of the
improvements that had been discussed. Junio discussed the
implementation a bit further, but seemed happy with the patch series.&lt;/p&gt;

    &lt;p&gt;Peff recently sent &lt;a href=&quot;https://public-inbox.org/git/20190719215417.GA31841@sigill.intra.peff.net/&quot;&gt;a version 3&lt;/a&gt;,
which will hopefully be merged soon.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2019/07/22/gitlab-12-1-released/&quot;&gt;12.1.0&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/07/03/security-release-gitlab-12-dot-0-dot-3-released/&quot;&gt;12.0.3, 11.11.5, and 11.10.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/06/26/gitlab-12-0-2-11-11-4-11-10-7-released/&quot;&gt;12.0.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/06/25/gitlab-12-0-1-released/&quot;&gt;12.0.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/06/22/gitlab-12-0-released/&quot;&gt;12.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#21610&quot;&gt;2.16.10&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/3.0.html#301&quot;&gt;3.0.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.17.5/notes&quot;&gt;2.17.5&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.14/notes&quot;&gt;2.16.14&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.19/notes&quot;&gt;2.15.19&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.4/notes&quot;&gt;2.17.4&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.13/notes&quot;&gt;2.16.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.18/notes&quot;&gt;2.15.18&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.25/notes&quot;&gt;2.14.25&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.3/notes&quot;&gt;2.17.3&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.12/notes&quot;&gt;2.16.12&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.17/notes&quot;&gt;2.15.17&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.24/notes&quot;&gt;2.14.24&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.0.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Synergy is looking for a Git expert to join as a partner or in a
freelance role. We are a startup developing an Enterprise Content
Management solution for the office worker and we are looking to
expand the team to build our GUI client and manage the
infrastructure. If interested, please reach out to
jaime.rivas@synergy.page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/antjanus/my-personal-git-tricks-cheatsheet-23j1&quot;&gt;My Personal Git Tricks Cheatsheet&lt;/a&gt;
by Antonin Januska, with some improvements based on feedback in comments&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/maxime1992/manage-your-dev-to-blog-posts-from-a-git-repo-and-use-continuous-deployment-to-auto-publish-update-them-143j&quot;&gt;Manage your dev.to blog posts from a Git repo
 and use continuous deployment to auto publish/update them&lt;/a&gt;
by Maxime (@maxime1992)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://matheustavares.gitlab.io/assets/oop_git_and_kernel.pdf&quot;&gt;Object Oriented Programming in C: A Case Study - Git and Linux Kernel&lt;/a&gt;:
slides by Matheus Tavares and Renato Lui Geh (PDF)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/2019-07-02-c-or-java-typescript-or-javascript-machine-learning-based-classification-of-programming-languages/&quot;&gt;C# or Java? TypeScript or JavaScript?
Machine learning based classification
of programming languages&lt;/a&gt;
by Kavita Ganesan on GitHub Blog (OctoLingua project)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/matheustavares/callpath&quot;&gt;CallPath&lt;/a&gt;, by Matheus
Tavares, “lets you see all the paths your code take until a
specified function”. Matheus is a Google Summer of Code student
currently working on
&lt;a href=&quot;https://matheustavares.gitlab.io/gsoc/&quot;&gt;making pack access code thread-safe&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mookid/diffr&quot;&gt;diffr&lt;/a&gt;, by Nathan Moreau, is a new
diff highlighting tool “trying to improve on the
&lt;a href=&quot;https://github.com/git/git/tree/master/contrib/diff-highlight&quot;&gt;diff-highlight&lt;/a&gt;
script distributed with Git”.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Jaime Rivas and Carlo Marcelo Arenas Belón.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 52 (June 28th, 2019)</title>
      <link>https://git.github.io/rev_news/2019/06/28/edition-52/</link>
      <pubDate>Fri, 28 Jun 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/06/28/edition-52/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-52-june-28th-2019&quot;&gt;Git Rev News: Edition 52 (June 28th, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 52nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of May 2019.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/87zhnuwdkp.fsf@evledraar.gmail.com/&quot;&gt;I made a flame graph renderer for git’s trace2 output&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason sent an email saying he developed a script that uses the
&lt;a href=&quot;http://www.brendangregg.com/flamegraphs.html&quot;&gt;FlameGraph tool&lt;/a&gt;
to generate a
&lt;a href=&quot;https://vm.nix.is/~avar/noindex/git-tests.svg&quot;&gt;picture&lt;/a&gt; showing
where Git’s test suite spends its time.&lt;/p&gt;

    &lt;p&gt;His script also uses the new
&lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/technical/api-trace2.aodc&quot;&gt;Git Trace2 API&lt;/a&gt;
which has been developed mostly by Jeff Hostetler
&lt;a href=&quot;https://public-inbox.org/git/20180713165621.52017-1-git@jeffhostetler.com/&quot;&gt;starting nearly one year ago&lt;/a&gt;
and then through different versions:
&lt;a href=&quot;https://public-inbox.org/git/pull.29.git.gitgitgadget@gmail.com/&quot;&gt;RFC&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/pull.108.git.gitgitgadget@gmail.com/&quot;&gt;V1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/pull.108.v2.git.gitgitgadget@gmail.com/&quot;&gt;V2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/pull.108.v3.git.gitgitgadget@gmail.com/&quot;&gt;V3&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/pull.108.v4.git.gitgitgadget@gmail.com/&quot;&gt;V4&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/pull.169.v5.git.gitgitgadget@gmail.com/&quot;&gt;V5&lt;/a&gt;,
and which has eventually been released in Git v2.22.0 at the beginning of June 2019.&lt;/p&gt;

    &lt;p&gt;Ævar added that he plans to improve
&lt;a href=&quot;https://github.com/avar/FlameGraph/commit/7a834718a12ed8b0d897ee90b00e2f654508cabd&quot;&gt;his script&lt;/a&gt;
over time and maybe submit it in a pull request to the FlameGraph
tool, or perhaps integrate it in the Git test suite.&lt;/p&gt;

    &lt;p&gt;Derrick Stolee, who prefers to be called just Stolee, replied that
he liked the idea and sent the commands using Ævar’s script that he used to create
&lt;a href=&quot;https://github.com/derrickstolee/FlameGraph/blob/git-test/git-test.svg&quot;&gt;another picture&lt;/a&gt;
from a much smaller test.&lt;/p&gt;

    &lt;p&gt;Gábor Szeder commented on Stolee’s commands to ask why &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_TR2&lt;/code&gt;
instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_TRACE2&lt;/code&gt; was used in the environment variables
related to the Trace2 API. Gábor referred to Ken Thompson “who
(allegedly?) later regretted spelling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;creat()&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;O_CREAT&lt;/code&gt; without the
‘e’…”.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, replied to Ævar’s initial email asking
“doesn’t &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;perf record -g make test&lt;/code&gt; already give us that granular
data?” referring to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Perf_(Linux)&quot;&gt;Linux perf tool&lt;/a&gt;
which is already supported by the FlameGraph tool. Peff also
wondered about the usefulness of such a graph:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;But having generated such a flamegraph, it’s not all that helpful. It
mainly tells us that we spend a lot of time on fork/exec. Which is no
surprise, since the test suite is geared not towards heavy workloads,
but lots of tiny functionality tests.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Though he agreed that it could help in some cases:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;I think the trace2 flamegraph would be most useful if you were
collecting across a broad spectrum of workloads done by a user. You
&lt;em&gt;can&lt;/em&gt; do that with perf or similar tools, but it can be a bit awkward.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Ævar replied that his “actual use-case for this is to see what
production nodes are spending their time on, similar to what
Microsoft is doing with their use of this facility”, and that he
used the test suite because it is a good way to test his script and
the Trace2 API as “we’re pretty much guaranteed to run all our
commands, and cover a lot of unusual cases”.&lt;/p&gt;

    &lt;p&gt;Ævar pointed that his work “shows that we’ve got a long way to go in
improving the trace2 facility, i.e. adding region enter/leave for
some of the things we spend the most time on.”&lt;/p&gt;

    &lt;p&gt;Jeff Hostetler, who authored the Trace2 API and works for Microsoft
along with Stolee, then replied “Very Nice!” to Ævar and agreed
with him about the work still needed “to get more granular data for
interesting/problematic things”.&lt;/p&gt;

    &lt;p&gt;Ævar and Jeff then discussed this future work further in a few
emails.&lt;/p&gt;

    &lt;p&gt;Jeff also replied to Gábor that he was ok to change &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TR2&lt;/code&gt; to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRACE2&lt;/code&gt;, and Gábor sent
&lt;a href=&quot;https://public-inbox.org/git/20190519144309.9597-1-szeder.dev@gmail.com/&quot;&gt;two patches&lt;/a&gt;
to get that change done. These patches were agreed on and merged before
Git v2.22.0 was released on June 7th, 2019.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/6d9c0911-6f36-3fb7-2be9-2be9bc68fc69@gmail.com/t/&quot;&gt;[PATCH 00/17] [RFC] Commit-graph: Write incremental files&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The road to incremental serialized &lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/technical/commit-graph.adoc&quot;&gt;commit-graph&lt;/a&gt;
started with &lt;a href=&quot;https://public-inbox.org/git/pull.112.git.gitgitgadget@gmail.com/t/#u&quot;&gt;an attempt to create commit-graph file format v2&lt;/a&gt;&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;The commit-graph file format has some shortcomings that were discussed
on-list:&lt;/p&gt;

      &lt;ol&gt;
        &lt;li&gt;
          &lt;p&gt;It doesn’t use the 4-byte format ID from the_hash_algo.&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;There is no way to change the reachability index from generation numbers
to &lt;a href=&quot;https://public-inbox.org/git/6367e30a-1b3a-4fe9-611b-d931f51effef@gmail.com/&quot;&gt;corrected commit date&lt;/a&gt;.&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;The unused byte in the format could be used to signal the file is
incremental, but current clients ignore the value even if it is
non-zero.&lt;/p&gt;
        &lt;/li&gt;
      &lt;/ol&gt;

      &lt;p&gt;This series adds a new version (2) to the commit-graph file. The fifth byte
already specified the file format, so existing clients will gracefully
respond to files with a different version number. The only real change now
is that the header takes 12 bytes instead of 8, due to using the 4-byte
format ID for the hash algorithm.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;(Note that switching to corrected commit date as generation number v2
was covered in &lt;a href=&quot;https://git.github.io/rev_news/2018/11/21/edition-45/&quot;&gt;Git Rev News edition 45, November 2018&lt;/a&gt;).&lt;/p&gt;

    &lt;p&gt;It turned out however that the statement &lt;em&gt;“existing clients will
gracefully respond to files with a different version number”&lt;/em&gt;
unfortunately turned out to be not true.  &lt;a href=&quot;https://public-inbox.org/git/87a7gdspo4.fsf@evledraar.gmail.com/&quot;&gt;Ævar Arnfjörð Bjarmason noticed&lt;/a&gt;
that older Git responds with a &lt;strong&gt;hard error&lt;/strong&gt; to commit-graph v2, instead
of simply turning the serialized-graph feature off in such case.&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;[…] writing a v2 file
would make most things (e.g. “status”) hard error on e.g. v2.21.0:&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git status
error: graph version 2 does not match version 1
$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;

      &lt;p&gt;Now as noted in &lt;a href=&quot;https://public-inbox.org/git/20190501183108.GE4109@sigill.intra.peff.net/t/#md66d1ac26799a296d6019cd8bb1048c975ad89f5&quot;&gt;my series&lt;/a&gt; we now on ‘master’ downgrade that to a warning
(along with the rest of the errors):&lt;/p&gt;

      &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ ~/g/git/git --exec-path=$PWD status
error: commit-graph version 2 does not match version 1
On branch master
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;      &lt;/div&gt;

      &lt;p&gt;…and this series sets the default version for all new graphs to v2.&lt;/p&gt;

      &lt;p&gt;I think this is &lt;em&gt;way&lt;/em&gt; too aggressive of an upgrade path. If these
patches go into v2.22.0 then git clients on all older versions that grok
the commit graph (IIRC v2.18 and above) will have their git completely
broken if they’re in a mixed-git-version environment.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;The workaround is easy: removing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/info/commit-graph&lt;/code&gt;, or using
“&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git -c core.commitGraph=false ...&lt;/code&gt;”.  However it is not possible
to e.g. add advice describing the workaround to past Git versions
(and new versions would simply not fail hard on v2).&lt;/p&gt;

    &lt;p&gt;It turned out that there is no need to introduce new commit-graph
file format to achieve [almost] all stated goals.  The goal 1.)
turned out to be &lt;a href=&quot;https://public-inbox.org/git/87lfzprkfc.fsf@evledraar.gmail.com/&quot;&gt;not important&lt;/a&gt;.&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;ul&gt;
        &lt;li&gt;
          &lt;p&gt;Let’s just live with “1” as the marker for SHA-1.&lt;/p&gt;

          &lt;p&gt;Yeah it would be cute to use 0x73686131 instead like “struct
git_hash_algo”, but we can live with a 1=0x73686131 (“sha1”),
2=0x73323536 (“s256”) mapping somewhere. It’s not like we’re going to
be running into the 255 limit of hash algorithms Git will support any
time soon.&lt;/p&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;For 2.), Stolee noticed that generation number v2 (corrected
commit date) &lt;a href=&quot;https://public-inbox.org/git/bb0c22f9-9d0b-0fa6-e826-8e2ac146c6f9@gmail.com/&quot;&gt;can be made backward compatible&lt;/a&gt;&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;Since we can make the “corrected commit date” offset for a commit be
strictly larger than the offset of a parent, we can make it so an old client
will not give incorrect values when we use the new values. The only downside
would be that we would fail on ‘&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit-graph verify&lt;/code&gt;’ since the offsets
are not actually generation numbers in all cases.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;This is discussed in a bit more detail in &lt;a href=&quot;https://public-inbox.org/git/20190521020009.GC32230@google.com/T/#m418d1c46c0200de198946ec00cfb5c8c39ddf4d0&quot;&gt;Re: Revision walking, commit dates, slop&lt;/a&gt;
thread.&lt;/p&gt;

    &lt;p&gt;The issue of incremental commit-graph file, i.e. 3.), turned out to
be better solved by keeping the base as backward-compatibile
commit-graph, and deltas as separate files.  Thus “Create
commit-graph file format v2” turned into &lt;a href=&quot;https://public-inbox.org/git/pull.112.git.gitgitgadget@gmail.com/t/#mc8fda9ba6fad8fc53c55db2b9b35bd9b3bab71ca&quot;&gt;Commit-graph write refactor&lt;/a&gt;,
and Stolee started a separate &lt;a href=&quot;https://public-inbox.org/git/6d9c0911-6f36-3fb7-2be9-2be9bc68fc69@gmail.com/t/&quot;&gt;[RFC] Commit-graph: Write incremental files&lt;/a&gt; thread.&lt;/p&gt;

    &lt;p&gt;The original idea was to store subsequent deltas (incremental
additions to serialized commit-graph data) in files named
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit-graph-2&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit-graph-3&lt;/code&gt;, etc.  After involved discussion,
considering problems of concurrency, at &lt;a href=&quot;https://public-inbox.org/git/6d9c0911-6f36-3fb7-2be9-2be9bc68fc69@gmail.com/t/#me8922324aebcdf4050bd5a4b1d18ef281bd47769&quot;&gt;V6&lt;/a&gt;
the design has changed, to having &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit-graphs/graph-{hash}.graph&lt;/code&gt;
together with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit-graph-chain&lt;/code&gt; index file.&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;The commit-graph is a valuable performance feature for repos with large
commit histories, but suffers from the same problem as git repack: it
rewrites the entire file every time. This can be slow when there are
millions of commits, especially after we stopped reading from the
commit-graph file during a write in &lt;a href=&quot;https://git.kernel.org/pub/scm/git/git.git/commit/?id=43d356180556180b4ef6ac232a14498a5bb2b446&quot;&gt;43d3561 (commit-graph write: don’t die
if the existing graph is corrupt)&lt;/a&gt;.&lt;/p&gt;

      &lt;p&gt;Instead, create a “chain” of commit-graphs in the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/objects/info/commit-graphs&lt;/code&gt; folder with name graph-{hash}.graph. The
list of hashes is given by the commit-graph-chain file, and also in a “base
graph chunk” in the commit-graph format. As we read a chain, we can verify
that the hashes match the trailing hash of each commit-graph we read along
the way and each hash below a level is expected by that graph file.&lt;/p&gt;

      &lt;p&gt;When writing, we don’t always want to add a new level to the stack. This
would eventually result in performance degradation, especially when
searching for a commit (before we know its graph position). We decide to
merge levels of the stack when the new commits we will write is less than
half of the commits in the level above. This can be tweaked by the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--size-multiple&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--max-commits&lt;/code&gt; options.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;This series, as ‘ds/commit-graph-incremental’ branch, is currently
marked as ready to be merged into ‘next’.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-jeff-hostetler&quot;&gt;Developer Spotlight: Jeff Hostetler&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My name is Jeff Hostetler and I work for Microsoft.
I’ve been working on Git and on Git-related technologies
for the last 5 years.  Primarily focusing on performance
and scale.&lt;/p&gt;

    &lt;p&gt;Prior to joining Microsoft, I worked for &lt;a href=&quot;http://www.sourcegear.com/&quot;&gt;SourceGear&lt;/a&gt;
and built the &lt;a href=&quot;https://en.wikipedia.org/wiki/Veracity_(software)&quot;&gt;Veracity&lt;/a&gt; DVCS
and the &lt;a href=&quot;http://www.sourcegear.com/diffmerge/&quot;&gt;DiffMerge&lt;/a&gt; visual
diff and merge tool.&lt;/p&gt;

    &lt;p&gt;A long, long time ago I was Architect for Spyglass Mosaic.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I’d have to say the Trace2 facility that is now in v2.22.
With this in place, it will be much easier to understand
performance bottlenecks at scale.&lt;/p&gt;

    &lt;p&gt;Second to that would be the beginnings of the Partial Clone
feature.  There’s still a lot of work to do in this area, but
I think long term, it will be central to solving certain
enterprise-level scale problems.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I’m currently working on a series of blog posts explaining
Trace2 and how it can be used to measure and track Git
performance.&lt;/p&gt;

    &lt;p&gt;Within Microsoft we continue to study Trace2 data generated
by our Windows and Office developers and look for opportunities
to improve the developer experience, such as making status and
checkout faster.  And we are using the data to guide how/where
we should invest our engineering time for future performance
gains.&lt;/p&gt;

    &lt;p&gt;Hopefully, I can encourage others to start using Trace2,
gather their own data and look for opportunities where they
can help improve Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Bring together the Partial Clone and Sparse Checkout features
to scale to large repos.  This includes completing the end-user
experience, so that it just works and doesn’t require any
wizardry.&lt;/p&gt;

    &lt;p&gt;There are several dimensions that have similar, but not
identical needs.&lt;/p&gt;

    &lt;p&gt;For example, a moderately-sized work tree with a few large
blobs might use Partial Clone with the blob-size filter and
only demand-fetch large blobs when actually needed.  This could
be seen as an easier to use solution than LFS.&lt;/p&gt;

    &lt;p&gt;Alternatively, a repo with a gigantic tree might use Partial
Clone with the sparse filter (to get “cones” of the work tree).
That could be coordinated with the sparse-checkout file to
populate just the desired parts of the work tree.  For some
users this would be simpler than using GVFS.&lt;/p&gt;

    &lt;p&gt;Let’s add new porcelain commands to create, grow, and shrink the
sparse-checkout file and automatically update the index, so that
the user doesn’t have to manually manipulate it.&lt;/p&gt;

    &lt;p&gt;Investigate a bulk pre-fetch command or hook, such as before a
checkout, to reduce the overhead of individually demand-loading
missing objects.&lt;/p&gt;

    &lt;p&gt;Finally, update Protocol V2 to include whatever verbs we need
to make all of this work efficiently.&lt;/p&gt;

    &lt;p&gt;With this we could probably retire most if not all of GVFS and
hopefully let our Windows and Office developers use core Git
and not need a private fork.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I’d like to revisit the design of the index.  Switch to a sparse
and hierarchical format, for example.  This is a large task and
touches everything from the on-disk format to every index-related
loop in the program.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://git.github.io/rev_news/2017/09/20/edition-31/&quot;&gt;Ben Peart&lt;/a&gt;
and &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Derrick Stolee&lt;/a&gt;
both touched upon this in earlier issues.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I’m mostly a terminal user, so I don’t use very many third-party
tools.  I do highly recommend
&lt;a href=&quot;https://github.com/gitgitgadget/gitgitgadget&quot;&gt;GitGitGadget&lt;/a&gt;.
I use it to run CI builds on all Windows, Mac, and Linux and to send
patches to the mailing list.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq36klozfu.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.22.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqlfyito3a.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.22.0-rc3&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqpnnzws9q.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.22.0-rc2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.22.0.windows.1&quot;&gt;2.22.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.28.2&quot;&gt;0.28.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.17.2/notes&quot;&gt;2.17.2&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.11/notes&quot;&gt;2.16.11&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.16/notes&quot;&gt;2.15.16&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.23/notes&quot;&gt;2.14.23&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.1/notes&quot;&gt;2.17.1&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.10/notes&quot;&gt;2.16.10&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.15/notes&quot;&gt;2.15.15&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.22/notes&quot;&gt;2.14.22&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.17.0/notes&quot;&gt;2.17.0&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.9/notes&quot;&gt;2.16.9&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.14/notes&quot;&gt;2.15.14&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.21/notes&quot;&gt;2.14.21&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2019/06/25/gitlab-12-0-1-released/&quot;&gt;12.0.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/06/22/gitlab-12-0-released/&quot;&gt;12.0&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/06/10/gitlab-11-11-3-released/&quot;&gt;11.11.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/06/05/gitlab-11-11-2-released/&quot;&gt;11.11.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/06/05/gitlab-11-10-6-released/&quot;&gt;11.10.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/06/03/security-release-gitlab-11-dot-11-dot-1-released/&quot;&gt;11.11.1, 11.10.5, and 11.9.12&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/05/22/gitlab-11-11-released/&quot;&gt;11.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21514&quot;&gt;2.15.14&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#2169&quot;&gt;2.16.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;6.0.0&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.4&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.3&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.0.4&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.0.3&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.0.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.0.1&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;2.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_3.2.1.html&quot;&gt;3.2.1&lt;/a&gt;,
&lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_3.2.html&quot;&gt;3.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dwheeler.com/blog/2019/05/25/#github-maintainer-security-advisories&quot;&gt;GitHub Maintainer Security Advisories&lt;/a&gt;
are a way to &lt;em&gt;privately&lt;/em&gt; report vulnerabilities to OSS projects on GitHub,
currently in a &lt;a href=&quot;https://dwheeler.com/blog/2019/05/25/#github-maintainer-security-advisories&quot;&gt;public beta&lt;/a&gt;.
Those are a part of a larger effort by GitHub to support security (especially targeting OSS projects).
For more information about this effort see the following GitHub Help pages:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://help.github.com/en/articles/about-maintainer-security-advisories&quot;&gt;About maintainer security advisories&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://help.github.com/en/articles/about-security-alerts-for-vulnerable-dependencies&quot;&gt;About security alerts for vulnerable dependencies&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2019-05-23-introducing-new-ways-to-keep-your-code-secure/&quot;&gt;Introducing new ways to keep your code secure&lt;/a&gt; by Justin Hutchings on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2019-05-23-announcing-github-sponsors-a-new-way-to-contribute-to-open-source/&quot;&gt;Announcing GitHub Sponsors: a new way to contribute to open source&lt;/a&gt; by Devon Zuegel on GitHub Blog;
see also &lt;a href=&quot;https://techcrunch.com/2019/05/23/github-launches-sponsors-lets-you-pay-your-favorite-open-source-contributors/&quot;&gt;TechCrunch article&lt;/a&gt; by Frederic Lardinois on the same subject.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2019-05-10-introducing-github-package-registry/&quot;&gt;Introducing GitHub Package Registry&lt;/a&gt; by Simina Pasat on GitHub Blog;
&lt;a href=&quot;https://github.com/features/package-registry&quot;&gt;GitHub Package Registry feature&lt;/a&gt; is currently in limited beta (you need to sign up for the beta).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freebsdfoundation.org/wp-content/uploads/2018/10/FreeBSD-and-Git.pdf&quot;&gt;FreeBSD and Git&lt;/a&gt; (PDF)
– slides from Ed Maste’s presentation at the FreeBSD Vendor Summit 2018.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.juliobiason.net/thoughts/things-i-learnt-the-hard-way/&quot;&gt;Things I Learnt The Hard Way (in 30 Years of Software Development)&lt;/a&gt; by Julio Biason,
including few thoughts about the use of version control and Git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/791284/&quot;&gt;Rebasing and merging in kernel repositories [LWN.net]&lt;/a&gt; by Jonathan Corbet.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://endaphelan.me/guides/git/using-git-hooks-to-enforce-conventional-commits/&quot;&gt;Enforcing Conventional Commits using Git hooks&lt;/a&gt; by Enda Phelan.
&lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; is a specification for adding human and machine readable meaning to commit messages.
The presented solution was turned into the &lt;a href=&quot;https://github.com/craicoverflow/sailr&quot;&gt;Sailr&lt;/a&gt; project.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/unseenwizzard/learn-git-concepts-not-commands-4gjc&quot;&gt;Learn Git concepts, not commands&lt;/a&gt; by Nico Riedmann:
An interactive Git tutorial for beginners meant to teach you how Git works,
not just which commands to execute.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.linuxjournal.com/content/git-origin-story&quot;&gt;A Git Origin Story&lt;/a&gt; by Zack Brown (2018).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/craicoverflow/sailr&quot;&gt;Sailr&lt;/a&gt;: a global Git hook for adhering to the &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commit specification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Jeff Hostetler, David Pursehouse and
Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 51 (May 22nd, 2019)</title>
      <link>https://git.github.io/rev_news/2019/05/22/edition-51/</link>
      <pubDate>Wed, 22 May 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/05/22/edition-51/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-51-may-22nd-2019&quot;&gt;Git Rev News: Edition 51 (May 22nd, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 51st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of April 2019.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20190508171941.GC2068@hank.intra.tgummerer.com/&quot;&gt;GSoC students and mentors 2019&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Two students are going to work on Git during this summer as part of the
&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;GSoC (Google Summer of Code)&lt;/a&gt;:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#6477677521797120&quot;&gt;Matheus Tavares&lt;/a&gt; is going to work on
&lt;a href=&quot;https://public-inbox.org/git/CAHd-oW7KMrDJ-cyzk63oqW9-QVpag6fKnDp+Mo5bWxg1KfzY3g@mail.gmail.com/&quot;&gt;making pack access code thread safe&lt;/a&gt;.
He will be mentored by Olga Telezhnaia, a former &lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt; intern, and Christian Couder.
Matheus has prepared &lt;a href=&quot;https://matheustavares.gitlab.io/gsoc&quot;&gt;a blog&lt;/a&gt; to report about his experience.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#6407042053439488&quot;&gt;Rohit Ashiwal&lt;/a&gt; will work on
&lt;a href=&quot;https://public-inbox.org/git/20190322151157.9550-1-rohit.ashiwal265@gmail.com/&quot;&gt;improving consistency of sequencer commands&lt;/a&gt;.
He will be mentored by Thomas Gummerer, a former GSoC student, and Elijah Newren.
Rohit has also prepared &lt;a href=&quot;https://rashiwal.me&quot;&gt;a blog&lt;/a&gt; to report about his experience.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;It will be the 12th time that the Git project will mentor students
as part of the GSoC. Rohit and Matheus will be the 28th and 29th
students mentored since 2007 when Git started participating in the
GSoC.&lt;/p&gt;

    &lt;p&gt;It will be the 15th year of GSoC and to celebrate that Google
decided to have the &lt;a href=&quot;https://sites.google.com/view/gsoc-mentorsummit2019/home&quot;&gt;GSoC Mentor Summit 2019&lt;/a&gt;
in a hotel in Munich, Germany instead of a Google campus in
California. The Mentor Summit will last 3.5 days (Thursday, October
17 - Sunday, October 20) instead of the usual 2.5 days. The
additional day, Friday, October 18, will be “Fun Day Activities for
attendees to explore Munich and get to know each other before the
unconference begins”.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/3e3b9d6c8e54b326809b95adabd3be39d2d0770f.1555111963.git.liu.denton@gmail.com/&quot;&gt;[RFC PATCH] *.h: remove extern from function declarations&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Denton Liu sent a big RFC patch that removes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extern&lt;/code&gt; keywords in
front of function declarations and that affects ‘.h’ header files
in large numbers.&lt;/p&gt;

    &lt;p&gt;He said that he used the following command to remove the keywords:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git ls-files &apos;*.h&apos; | xargs sed -i&apos;&apos; -e &apos;s/^\(\s*\)extern \(.*(\)/\1\2/&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;And the following one to check the result:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git grep -w extern &apos;*.h&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Jeff King, alias Peff, replied that dropping &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extern&lt;/code&gt; should not be
done on function pointer declarations though, as a function pointer
is a variable, so its visibility would change if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extern&lt;/code&gt; is removed
in front of it.&lt;/p&gt;

    &lt;p&gt;Junio agreed with Peff and explained that the reason we avoid
wholesale updates “is because of an unnecessary bug like this one,
not the one-time conflict resolution load that can be subcontracted
out to ‘rerere’ once dealt with ;-)”.&lt;/p&gt;

    &lt;p&gt;Junio also suggested using “a tool more suited for the job
(e.g. spatch)” as it “raises the confidence level of the end result
a lot more than a ‘sed and then eyeball’ rewrite”, though we then
have to be careful about possible “bugs in the instructions we give
to the tool”.&lt;/p&gt;

    &lt;p&gt;Denton then sent a &lt;a href=&quot;https://public-inbox.org/git/cover.1555352526.git.liu.denton@gmail.com/&quot;&gt;second version&lt;/a&gt;
of his work. It was now a 3 patch long patch series.&lt;/p&gt;

    &lt;p&gt;The first patch used the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spatch&lt;/code&gt; tool to do most of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extern&lt;/code&gt;
keyword removals. The second patch still used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt; to do it where
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spatch&lt;/code&gt; didn’t work, but it made sure to ignore function
variables. The third patch used a Coccinelle script to make sure
that no more &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extern&lt;/code&gt; keywords are added to the code base.&lt;/p&gt;

    &lt;p&gt;Thomas Gummerer replied to the first patch that it “leaves a bunch
of oddly indented parameter lists behind”, as when a function has a
larger number of parameters, its declaration often spans more than
one line.&lt;/p&gt;

    &lt;p&gt;Denton then send a &lt;a href=&quot;https://public-inbox.org/git/cover.1555487380.git.liu.denton@gmail.com/&quot;&gt;third version&lt;/a&gt;
of his work, with an additional patch to “manually align parameter
lists that were mangled by the tools”.&lt;/p&gt;

    &lt;p&gt;Peff replied wondering if it was a good thing to modify files in the
compat/ directory as the code there is often “copied from
elsewhere”. He also wondered if it was worth keeping the Coccinelle
script as it is expensive to run.&lt;/p&gt;

    &lt;p&gt;In the &lt;a href=&quot;https://public-inbox.org/git/cover.1556062365.git.liu.denton@gmail.com/&quot;&gt;fourth version&lt;/a&gt;
of his work, Denton decided to keep the Coccinelle script, but
excluded the compat/ directory from the files where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extern&lt;/code&gt; is
removed.&lt;/p&gt;

    &lt;p&gt;Junio noticed that in a commit message Denton mentioned using:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git ls-files \*.{c,h} | \
    grep -v ^compat/ | \
    xargs sed -i&apos;&apos; -e &apos;s/^\(\s*\)extern \([^(]*([^*]\)/\1\2/&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;and then asked him to remove the useless backslashes at the end of
the first 2 lines above, saying:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;Your shell knows its own syntax sufficiently well, and when you end
a line with a pipe, it knows that you haven’t finished speaking to
it and waits for you to give the command downstream of the pipe,
without being told that you haven’t finished with a backslash.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Unfortunately Gábor Szeder then found that the Coccinelle script
failed on ‘compat/obstack.h’ as it is included in a ‘.c’ file
checked by Coccinelle scripts.&lt;/p&gt;

    &lt;p&gt;Denton replied by proposing to drop the patch that contained his
Coccinelle script, but Johannes Schindelin, alias Dscho, suggested
to exclude certain directories or certain files for certain
Coccinelle scripts.&lt;/p&gt;

    &lt;p&gt;There was then a long discussion thread involving Peff, Denton,
Jacob Keller, Dscho, Junio and Gábor about what was possible to do
with Coccinelle and spatch and how they are used in the Git
toolchain. This thread eventually resulted in Peff writing a small
series of
&lt;a href=&quot;https://public-inbox.org/git/20190506234334.GA13296@sigill.intra.peff.net/&quot;&gt;patches&lt;/a&gt;,
based on a previous patch by Jacob, that makes it possible to run
Coccinelle faster on machines with a lot of memory. Peff’s patches
have since been merged into the ‘master’ branch.&lt;/p&gt;

    &lt;p&gt;Denton in the meantime sent a &lt;a href=&quot;https://public-inbox.org/git/cover.1556526308.git.liu.denton@gmail.com/&quot;&gt;fifth version&lt;/a&gt;
of his work that drops the patch that contained his Coccinelle
script, and loses the useless backslashes. This patch series has
also been merged into the ‘master’ branch and will be part of Git
v2.22.0 that should be released at the beginning of June 2019.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-denton-liu&quot;&gt;Developer Spotlight: Denton Liu&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;My name is Denton and I’m a relatively new contributor to Git. I’m a
Software Engineering student at the University of Waterloo and I’ve been
bouncing around from internship to internship until I graduate next
year.&lt;/p&gt;

    &lt;p&gt;I got started just over half a year ago when we had an assignment in
school that required us to make a contribution to some open-source
project. Since Git is so ubiquitous for developers, my team decided to
target it.&lt;/p&gt;

    &lt;p&gt;Since then, I never really stopped because I’ve been having a lot of fun
with it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I haven’t really been as prolific as other contributors so I wouldn’t
say that my contributions are “important”, per se. I guess the most
important contribution that I’ve made (although it’s still cooking) is
teaching &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--keep-base&lt;/code&gt; to rebase.&lt;/p&gt;

    &lt;p&gt;Judging from the number of StackOverflow posts about it, I guess people
expect this to be a feature but, since it’s not, I think most people
alias it away or something.&lt;/p&gt;

    &lt;p&gt;Hopefully, this will be helpful to all the good people in the world who
bother to clean up their branches before sending them up ;).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I’d say that I’m a “selfish” contributor to Git. What I mean by this is
I’ve only been working on features that &lt;em&gt;I’ve&lt;/em&gt; wanted.&lt;/p&gt;

    &lt;p&gt;I keep a todo list on my phone of feature requests that I would like
in Git and, whenever I have some free time, I’ll code it up. So these
days, I’m mostly working all over the place, but mostly at a pretty high
level.&lt;/p&gt;

    &lt;p&gt;Why? Because it’s fun :). It’s always cool running
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull upstream master&lt;/code&gt; and seeing your work in there.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;Hmm, it would be nice if Git’s interface were a little more standardised.&lt;/p&gt;

    &lt;p&gt;If I could get a team of developers working on Git, I’d probably get
them to clean up Git’s user interface and make it more consistent with
itself.&lt;/p&gt;

    &lt;p&gt;In this regard, Duy has been making me happy with his work making Git
externally and internally consistent with git-restore, git-switch and
the diff-parseopt changes but if we could have a team of Duys working,
that would be amazing!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Continuing the above, my biggest gripe about Git is how inconsistent its
interface is since it was developed organically. I think the biggest
example of this would be how the meaning of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;..&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;...&lt;/code&gt; are
essentially swapped in diff compared to the log family of commands. I
always end up using the wrong number of dots because of this.&lt;/p&gt;

    &lt;p&gt;If I could change one thing about Git, it’d probably be the above. Even
though it’s a very small thing, it trips me up a lot of the time.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I like to keep my setup as vanilla as possible so that when I move onto
other machines, I don’t have to adjust my workflow very much so I only
really use the stock Git. However, a while back, I was reading about
git-imerge by Michael Haggerty.&lt;/p&gt;

    &lt;p&gt;I’m very thankful that I haven’t had to deal with any painfully large
merges recently that have necessitated it but I’m keeping this tool in
my back pocket in case the situation ever comes up.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Anything else you’d like to add?&lt;/p&gt;

    &lt;p&gt;I’d like to thank the more seasoned members of the Git project for being
patient and helping me learn even through the (many) mistakes I’ve made
through the process. In particular, in no particular order, I’d like to
thank Junio, Ævar, Phillip Wood, Johannes Schindelin, Eric Sunshine and
many others for helping me.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq36la24t1.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.22.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqef52baih.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.22.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.1905192229360.46@tvgsbejvaqbjf.bet/&quot;&gt;2.22.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.1905141056550.44@tvgsbejvaqbjf.bet/&quot;&gt;2.22.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/3.0.html&quot;&gt;3.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.16.8/notes&quot;&gt;2.16.8&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.13/notes&quot;&gt;2.15.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.20/notes&quot;&gt;2.14.20&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.7/notes&quot;&gt;2.16.7&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.12/notes&quot;&gt;2.15.12&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.19/notes&quot;&gt;2.14.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2019/05/01/gitlab-11-10-4-released/&quot;&gt;11.10.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/04/30/security-release-gitlab-11-dot-10-dot-3-released/&quot;&gt;11.10.3, 11.9.11, and 11.8.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/04/29/security-release-gitlab-11-dot-10-dot-2-released/&quot;&gt;11.10.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/04/24/gitlab-11-10-1-released/&quot;&gt;11.10.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.6.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;git-cinnabar &lt;a href=&quot;https://public-inbox.org/git/20190508221316.otsflud4qlcpwaeb@glandium.org&quot;&gt;0.5.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/875zqbx5yz.fsf@evledraar.gmail.com/&quot;&gt;Git and the new SHA-1 prefix collision attack&lt;/a&gt;
is an email by Ævar Arnfjörð Bjarmason that has information and
links about a newly published paper about new attacks building on the
known “SHAttered” attack.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;On April 1st, Ævar sent a two patches long &lt;a href=&quot;https://public-inbox.org/git/20190401101246.21418-1-avarab@gmail.com/&quot;&gt;patch series&lt;/a&gt;
to the mailing list. These April fool’s day patches were “praise: a
culturally sensitive wrapper for ‘blame’” and “praise: make
‘blameless’ cultural enforcement configurable”.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Dave Borowitz, one of the top contributors of Gerrit Code Review,
&lt;a href=&quot;https://groups.google.com/forum/#!topic/repo-discuss/ySP84Q0DHsw&quot;&gt;leaves the project&lt;/a&gt; after
9k reviews, 3.4k commits and 8 years of contributions.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.vice.com/en_us/article/vb9v33/github-bitbucket-repositories-ransomware&quot;&gt;Someone Is Hacking GitHub Repositories and Holding Code Ransom&lt;/a&gt;,
which lead to &lt;a href=&quot;https://github.blog/2019-05-14-git-ransom-campaign-incident-report/&quot;&gt;Git ransom campaign incident report—Atlassian Bitbucket, GitHub, GitLab&lt;/a&gt;;
this topic was also discussed on git mailing list:
    &lt;a href=&quot;https://public-inbox.org/git/20190519051604.GC19434@sigill.intra.peff.net/t/#m5a98bd982c8994b3c275b86cd46d67dbe9ee7d7e&quot;&gt;Git ransom campaign incident report - May 2019&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/devops/exploring-new-frontiers-for-git-push-performance/&quot;&gt;Exploring new frontiers for Git push performance&lt;/a&gt;
includes a description of the new “sparse” push algorithm, enabled
by the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pack.useSparse&lt;/code&gt; config option.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://stolee.dev/&quot;&gt;The Developer Homepage of Derrick Stolee&lt;/a&gt;
contains a number of interesting articles, presentations and links
especially about features he developed like the commit-graph.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://gitenterprise.me/2019/05/20/gerrit-v3-0-is-here/&quot;&gt;The history behind 6 years of development of Gerrit v3.0&lt;/a&gt;
goes back in time and describes the long path from the original
greenish GWT UI until the latest shiny blue Polymer-based user
experience.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://git-rebase.io/&quot;&gt;git rebase in depth&lt;/a&gt;, a guide to help
demystify the powerful &lt;a href=&quot;https://git-scm.com/docs/git-rebase&quot;&gt;git-rebase&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.linuxjournal.com/content/signing-git-commits&quot;&gt;Signing Git Commits&lt;/a&gt;
by Kyle Rankin, from Linux Journal.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://snede.net/git-does-not-remember-username-password/&quot;&gt;Git does not remember username and password on Windows&lt;/a&gt;
by André Snede Kock, or how to use Windows Credentials manager with Git,
and how to manually set credentials if needed.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20190514-00/?p=102493&quot;&gt;Stupid git tricks: Combining two files into one while preserving line history&lt;/a&gt;
by Raymond Chen; the trick is to create a rename/rename merge commit.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://medium.freecodecamp.org/the-essential-git-handbook-a1cf77ed11b5&quot;&gt;The Essential Git Handbook&lt;/a&gt;
by Sanjula Madurapperuma, teaching a little about Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://bitbucket.org/blog/git-squash-commits-merging-bitbucket&quot;&gt;Squash commits when merging a Git branch with Bitbucket&lt;/a&gt; by Abhin Chhabra.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://blog.usmanity.com/serving-vue-js-apps-on-github-pages/&quot;&gt;Serving Vue.js apps on Github Pages&lt;/a&gt;
by Muhammad Usman; the trick is to configure
GitHub Pages and use ‘docs’ folder.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/imfunniee/gitfolio&quot;&gt;gitfolio&lt;/a&gt;:
personal website + blog for every GitHub user (JavaScript with Node.js);
see &lt;a href=&quot;https://imfunniee.github.io/gitfolio/&quot;&gt;https://imfunniee.github.io/gitfolio/&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lab.github.com/&quot;&gt;GitHub Learning Lab&lt;/a&gt;: learn new skills
by completing fun, realistic projects in your very own GitHub
repository.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/xorhash/fh&quot;&gt;fh&lt;/a&gt;: record changes to a file on a per-file basis,
with ed(1), diff(1), awk(1), sed(1) and sh(1).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/RomuloOliveira/commit-messages-guide&quot;&gt;commit-messages-guide&lt;/a&gt;:
a guide to understand the importance of commit messages and how to write them well.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from David Pursehouse, Luca Milanesio and Denton Liu.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 50 (April 26th, 2019)</title>
      <link>https://git.github.io/rev_news/2019/04/26/edition-50/</link>
      <pubDate>Fri, 26 Apr 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/04/26/edition-50/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-50-april-26th-2019&quot;&gt;Git Rev News: Edition 50 (April 26th, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 50th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of March 2019.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1551729517.4092.1.camel@libero.it/&quot;&gt;Can’t build first git commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fabio Aiuto asked for support on the Git mailing list as he was trying
to build &lt;a href=&quot;https://github.com/git/git/commit/e83c5163316f89bfbde7d9ab23&quot;&gt;the first commit of Git made by Linus in April 2005&lt;/a&gt;,
but was getting “undefined reference to symbol” errors related to the OpenSSL library.&lt;/p&gt;

&lt;p&gt;Santiago Torres replied suggesting him to use a toolchain from around
the time the commit was made and using an earlier OpenSSL library.&lt;/p&gt;

&lt;p&gt;Fabio replied that he would have liked to “to debug around that simple
version, to understand how everything works”.&lt;/p&gt;

&lt;p&gt;Santiago suggested playing with libgit2, that has a smaller code base,
and its python bindings that “abstract the memory management and other
low-level stuff”.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, suggested linking with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-lcrypto&lt;/code&gt; instead of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-lssl&lt;/code&gt; and also adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-lz&lt;/code&gt; to the Makefile or the command line.
He said that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make LIBS=&apos;-lcrypto -lz&apos;&lt;/code&gt; works for him and that he
“used periodically check that Git v1.0 can fetch happily from GitHub”.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20190304214829.GA573@sleipnir/&quot;&gt;asymptosis&lt;/a&gt;
chimed in to suggest working through
&lt;a href=&quot;https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain&quot;&gt;the “Git Internals” chapter in the Git Book&lt;/a&gt;
to understand how Git works. He also pointed to a
&lt;a href=&quot;https://notabug.org/cryptarch/sgit&quot;&gt;Git re-implementation as simple bash scripts&lt;/a&gt;
he had started to understand that chapter.&lt;/p&gt;

&lt;p&gt;Jonathan Nieder recommended reading the
&lt;a href=&quot;https://www.kernel.org/pub/software/scm/git/docs/user-manual.html#hacking-git&quot;&gt;Hacking Git chapter in the user manual documentation&lt;/a&gt;
that comes with Git.&lt;/p&gt;

&lt;p&gt;Peff then reported that he managed again to build Git version 1.0.0
from December 2005 with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make NO_OPENSSL=Nope&lt;/code&gt; and to use it to fetch
from GitHub.&lt;/p&gt;

&lt;p&gt;Fabio replied that he also succeeded in building the first commit of
Git made by Linus.&lt;/p&gt;

&lt;p&gt;Fabio, Santiago and Peff then discussed the fact that it was still
possible to build a 15 year old codebase with a modern toolchain. Peff
explained that it’s possible because “Git has very few external
dependencies”, and other than that, Git “just depends on a reasonable
C compiler and a POSIX libc, both of which have been standardized for
decades”.&lt;/p&gt;

&lt;p&gt;Then Fabio reported a segfault in the version he had built. Peff
reproduced it and showed how to work around it.&lt;/p&gt;

&lt;p&gt;Fabio thanked Peff and asymptosis. He said he would “go on studying
Git this way, and follow all the improvements that were made along its
history”.&lt;/p&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.13.html#21314&quot;&gt;2.13.14&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.14.html#21420&quot;&gt;2.14.20&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21513&quot;&gt;2.15.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.16.6/notes&quot;&gt;2.16.6&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.11/notes&quot;&gt;2.15.11&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.18/notes&quot;&gt;2.14.18&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.5/notes&quot;&gt;2.16.5&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.10/notes&quot;&gt;2.15.10&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.17/notes&quot;&gt;2.14.17&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.23/notes&quot;&gt;2.13.23&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2019/04/22/gitlab-11-10-released/&quot;&gt;11.10&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/04/11/gitlab-11-9-8-released/&quot;&gt;11.9.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/04/10/critical-security-release-gitlab-11-dot-9-dot-7-released/&quot;&gt;11.9.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/04/04/gitlab-11-9-6-released/&quot;&gt;11.9.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/04/01/security-release-gitlab-11-dot-9-dot-4-released/&quot;&gt;11.9.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/03/26/gitlab-11-9-1-released/&quot;&gt;11.9.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/03/22/gitlab-11-9-released/&quot;&gt;11.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.4&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.3&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2019-02-24-highlights-from-git-2-21/&quot;&gt;Highlights from Git 2.21&lt;/a&gt;
on GitHub Blog.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bitbucket.org/blog/6-new-bitbucket-cloud-features-that-spark-joy&quot;&gt;6 new Bitbucket Cloud features that spark joy&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.jcoglan.com/2019/04/08/announcing-building-git/&quot;&gt;Announcing &lt;em&gt;Building Git&lt;/em&gt;&lt;/a&gt; by James Coglan;
some of the articles about diff and merge algorithms that form a part of this book were covered in
&lt;a href=&quot;https://git.github.io/rev_news/2017/03/15/edition-25/&quot;&gt;Git Rev News Edition #25&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://flusp.ime.usp.br/git/2019/02/15/sending-patches-by-email-with-git/&quot;&gt;Sending patches by email with Git&lt;/a&gt;
by Matheus Tavares and &lt;a href=&quot;https://git-send-email.io/&quot;&gt;https://git-send-email.io/&lt;/a&gt;
by sourcehut are two articles on how to setup and use Git’s send-email
command.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/agoldis/learn-by-contributing-27g6&quot;&gt;Learn by Contributing&lt;/a&gt; by Andrew Goldis,
about how contributing to open source projects helps you to improve
your professional skills and discover new opportunities.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/rachelsoderberg/writing-good-source-control-commit-messages-2j2m&quot;&gt;Writing Good Source Control Commit Messages&lt;/a&gt; by Rachel Soderberg;
the slightly controversial part might be leaving out the information
that can be found in issue tracker.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@a.lurie_78598/using-graph-theory-to-decide-where-to-start-reading-source-code-74a1e2ddf72&quot;&gt;Using Graph Theory to Decide Where to Start Reading Source Code&lt;/a&gt; by Aron Lurie
(connecting files that are changed together, and finding “central” nodes in that graph).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://drewdevault.com/2019/02/25/Using-git-with-discipline.html&quot;&gt;Tips for a disciplined git workflow&lt;/a&gt; by Drew DeVault.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/javinpaul/5-free-courses-to-learn-git-and-github-in-depth-jpp&quot;&gt;5 Free Courses to Learn Git and GitHub in Depth&lt;/a&gt; by javingpaul.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/zaiste/15-git-commands-you-may-not-know-4a8j&quot;&gt;15 Git Commands You May Not Know&lt;/a&gt; by Zaiste.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/datreeio/10-insanely-useful-git-commands-you-wish-existed-and-their-alternatives-8e6&quot;&gt;10 insanely useful Git commands you wish existed – and their alternatives&lt;/a&gt; by Eyar Zilberman.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@corylanou/dont-commit-improperly-formatted-go-golang-code-5cea011d589d&quot;&gt;Don’t Commit Improperly Formatted Go (golang) Code&lt;/a&gt; - use git hooks, by Cory LaNou.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://julien.mascart.com/2017/03/how-does-git-bisect-choose-commit-to.html&quot;&gt;How does git bisect choose the commit to test?&lt;/a&gt; by Julien ‘jma’ Mascart (2017).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-blame.blogspot.com/2011/07/fun-with-bisecting.html&quot;&gt;Fun with bisecting&lt;/a&gt; by Junio C Hamano aka Gitster (2011).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://gitlet.maryrosecook.com/docs/gitlet.html&quot;&gt;Gitlet.js&lt;/a&gt;
by Mary Rose Cook is Git implemented in JavaScript,
written to show how Git works under the covers
(written to be readable and heavily commented).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/chrisdickinson/git-rs&quot;&gt;git-rs&lt;/a&gt;:
Git, implemented in &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt;, for fun and education.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.github.com/training-kit/&quot;&gt;Git Cheat Sheets&lt;/a&gt;:
Reference sheets covering Git commands, features, SVN migrations,
and bash.  Available in multiple languages.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://giistr.com/&quot;&gt;Giistr&lt;/a&gt;: Contribute to build the open-source world.
Search, filter and help easily on the issues of the [GitHub] repositories you starred.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://derrickstolee.github.io/bdfl/&quot;&gt;BDFL: A 100% accurate simulation of OSS maintenance&lt;/a&gt;:
A silly clicker game featuring graphs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Luca Milanesio.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 49 (March 20th, 2019)</title>
      <link>https://git.github.io/rev_news/2019/03/20/edition-49/</link>
      <pubDate>Wed, 20 Mar 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/03/20/edition-49/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-49-march-20th-2019&quot;&gt;Git Rev News: Edition 49 (March 20th, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 49th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of February 2019.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20190208115045.13256-1-szeder.dev@gmail.com/&quot;&gt;test-lib: make ‘--stress’ more bisect-friendly&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress&lt;/code&gt; is an option that can be passed to a test script from the
Git test suite to try to reproduce rare failures in the test script
by running it many times in parallel.&lt;/p&gt;

    &lt;p&gt;Gábor Szeder had initially implemented this option starting
&lt;a href=&quot;https://public-inbox.org/git/20181204163457.15717-1-szeder.dev@gmail.com/&quot;&gt;last December&lt;/a&gt;
based on &lt;a href=&quot;https://github.com/peff/git/blob/meta/stress&quot;&gt;a script&lt;/a&gt;
that Jeff King, alias Peff, had developed and
&lt;a href=&quot;https://public-inbox.org/git/20181122161722.GC28192@sigill.intra.peff.net/&quot;&gt;mentioned&lt;/a&gt;
on the mailing list.&lt;/p&gt;

    &lt;p&gt;That first iteration had been reviewed by Peff, Ævar Arnfjörð
Bjarmason and Junio Hamano, and was followed by a
&lt;a href=&quot;https://public-inbox.org/git/20181209225628.22216-1-szeder.dev@gmail.com/&quot;&gt;second iteration&lt;/a&gt;
also reviewed by Peff.&lt;/p&gt;

    &lt;p&gt;A &lt;a href=&quot;https://public-inbox.org/git/20181230191629.3232-1-szeder.dev@gmail.com/&quot;&gt;third&lt;/a&gt; and
&lt;a href=&quot;https://public-inbox.org/git/20190105010859.11031-1-szeder.dev@gmail.com/&quot;&gt;fourth&lt;/a&gt;
iteration were sent with only minor changes. The latter then got merged last January,
so the feature was released in Git 2.21.0.&lt;/p&gt;

    &lt;p&gt;On February 8th Gábor sent a patch to improve on top of his previous
work on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress&lt;/code&gt;. The goal was to make it easier to use the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress&lt;/code&gt; along with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt; to find the first commit that
introduced a test failure when the test failure is not easy to
reproduce.&lt;/p&gt;

    &lt;p&gt;Specifically, the patch was addressing two issues with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress&lt;/code&gt;. The first one is that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress&lt;/code&gt; runs the test script
endlessly when the test doesn’t fail. This is fixed with a new
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress-limit=&amp;lt;N&amp;gt;&lt;/code&gt; option “to repeat the test script at most N
times in each of the parallel jobs, and exit with success when the
limit is reached”.&lt;/p&gt;

    &lt;p&gt;The second issue is that when the test script used with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress&lt;/code&gt;
fails, it exits with a success error code. This is addressed by
making it exit with a failure error code in this case.&lt;/p&gt;

    &lt;p&gt;With the improvement, it is possible to automatically find the
commit that introduced a flakiness in for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t1234-foo.sh&lt;/code&gt;,
using something like:&lt;/p&gt;

    &lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git bisect start origin/pu master
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git bisect run sh &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;make &amp;amp;&amp;amp; cd t &amp;amp;&amp;amp; ./t1234-foo.sh --stress --stress-limit=300&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Gábor and Peff then discussed a few details. Regarding how to select a
good N to pass to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress-limit=&amp;lt;N&amp;gt;&lt;/code&gt;, Gábor suggested running the
test script with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress&lt;/code&gt; 3-5 times to trigger the failure, taking
the highest repetition count that was necessary for the failure and
multiplying it by 4-6 to get a round number”.&lt;/p&gt;

    &lt;p&gt;Gábor later sent &lt;a href=&quot;https://public-inbox.org/git/20190211195803.1682-1-szeder.dev@gmail.com/&quot;&gt;a subsequent patch&lt;/a&gt;
to fix a minor issue in his previous patches, as it seems that some
shells require the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;!&lt;/code&gt; character to start a non-matching pattern
bracket expression instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^&lt;/code&gt; that he had used.&lt;/p&gt;

    &lt;p&gt;These improvements to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress&lt;/code&gt; option made it in the Git
2.21.0 release too.&lt;/p&gt;

    &lt;p&gt;Even more recently Johannes Schindelin, alias Dscho, sent
&lt;a href=&quot;https://public-inbox.org/git/pull.155.git.gitgitgadget@gmail.com/&quot;&gt;a small patch series&lt;/a&gt;
to improve on the previous work by:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;having &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress-limit=&amp;lt;N&amp;gt;&lt;/code&gt; imply &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;introducing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress-jobs=&amp;lt;N&amp;gt;&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;The goal is to avoid mistakenly using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress=&amp;lt;N&amp;gt;&lt;/code&gt; when one wants
to limit the number of number of times the test script is run (which
should be done using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--stress-limit=&amp;lt;N&amp;gt;&lt;/code&gt;).&lt;/p&gt;

    &lt;p&gt;Dscho then sent a &lt;a href=&quot;https://public-inbox.org/git/pull.155.v2.git.gitgitgadget@gmail.com/&quot;&gt;second version&lt;/a&gt;
of his patch series with a few improvements.&lt;/p&gt;

    &lt;p&gt;These patches were reviewed by Junio, Eric Sunshine, Peff and
Gábor. The changes have been merged to the ‘next’ branch and are
planned to be merged in the ‘master’ branch soon.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2019/03/14/gitlab-11-8-2-released/&quot;&gt;11.8.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/03/04/security-release-gitlab-11-dot-8-dot-1-released/&quot;&gt;11.8.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#2167&quot;&gt;2.16.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#2166&quot;&gt;2.16.6&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21511&quot;&gt;2.15.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.16.4/notes&quot;&gt;2.16.4&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.9/notes&quot;&gt;2.15.9&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.16/notes&quot;&gt;2.14.16&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.22/notes&quot;&gt;2.13.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.6.4&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.6.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;5.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Videos of the &lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge 2019&lt;/a&gt; conference
(January 31th and February 1st 2019 in Brussels, Belgium) are now
&lt;a href=&quot;https://www.youtube.com/playlist?list=PL0lo9MOBetEFqBue4vNcTEnkBjgIQU1Q3&quot;&gt;available&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The &lt;a href=&quot;https://gus2019.eventbrite.com&quot;&gt;Gerrit User Summit 2019&lt;/a&gt; will take place
in Gothenburg 29-30 August, hosted by &lt;a href=&quot;http://volvocars.com&quot;&gt;Volvo Cars&lt;/a&gt;.
The event is free but seats are limited. For the first time also the community
opens the 5 days Hackathon 24-28 August, same location, to everyone: the only
requirement is to be willing to learn and contribute to the JGit or Gerrit
Code Review project.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Google &lt;a href=&quot;https://opensource.googleblog.com/2019/03/introducing-season-of-docs.html&quot;&gt;is creating&lt;/a&gt;
a project aimed at improving OSS projects documentation:
&lt;a href=&quot;https://developers.google.com/season-of-docs/&quot;&gt;Season of Docs 2019&lt;/a&gt;.
Mentoring organizations can begin submitting applications to Google
on April 2, 2019.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://tonsky.me/blog/github-redesign/&quot;&gt;Redesigning Github repository page&lt;/a&gt;
by Nikita Prokopov describes how the author would have changed the design.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://wyag.thb.lt/&quot;&gt;Write yourself a Git!&lt;/a&gt; by Thibault Polge is
an attempt at explaining the Git version control system from the
bottom up, that is, starting at the most fundamental level moving up
from there. All it takes to understand Git internals is to
reimplement Git from scratch  in exactly 503 lines of very simple
Python code.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://towardsdatascience.com/10-git-commands-you-should-know-df54bea1595c&quot;&gt;10 Git Commands You Should Know; Plus tips to save time with Git&lt;/a&gt;
by Jeff Hale.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dev.to/teamxenox/git-hacks-you-should-know-about-16pk&quot;&gt;Git hacks you should know about&lt;/a&gt;
by Ankur Biswas; most of these is a regular workflow stuff, though
(and you need to take care as some of commands rewrite history).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://emilygorcenski.com/post/data-versioning/&quot;&gt;Data Versioning&lt;/a&gt;
by Emily Gorcenski identifies four key axes on which machine
learning systems have a notion of version along with some brief
recommendations for how to simplify it a bit.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://gitrebasetool.mitmaro.ca/&quot;&gt;Git Interactive Rebase Tool&lt;/a&gt; is
an improved sequence editor for Git interactive rebase by
&lt;a href=&quot;https://github.com/MitMaro&quot;&gt;MitMaro&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://radicle.xyz/&quot;&gt;radicle&lt;/a&gt; is a peer-to-peer stack for code
collaboration based on Git and &lt;a href=&quot;https://ipfs.io/&quot;&gt;IPFS&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/hoduche/git-graph&quot;&gt;Git-graph&lt;/a&gt; by
&lt;a href=&quot;https://github.com/hoduche&quot;&gt;Henri-Olivier Duché&lt;/a&gt;
can help you “Learn Git fast and well - by visualizing the inner graph of your Git
repositories”.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.pachyderm.io/open_source.html&quot;&gt;Pachyderm&lt;/a&gt; is designed
to enable sustainable data science workflows via a language-agnostic
system for &lt;em&gt;data versioning&lt;/em&gt; with data pipelining.  Similar tools,
namely &lt;a href=&quot;https://dvc.org&quot;&gt;DVC&lt;/a&gt; (Data Version Control)
and &lt;a href=&quot;https://gitlab.com/meltano/meltano&quot;&gt;Meltano&lt;/a&gt;, were described
in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://gitready.com/&quot;&gt;git ready&lt;/a&gt;: learn Git one commit at a time;
tips are split into beginner, intermediate and advanced.
Latest tip is from 2015, though.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Luca Milanesio &amp;lt;&lt;a href=&quot;mailto:luca.milanesio@gmail.com&quot;&gt;luca.milanesio@gmail.com&lt;/a&gt;&amp;gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 48 (February 27th, 2019)</title>
      <link>https://git.github.io/rev_news/2019/02/27/edition-48/</link>
      <pubDate>Wed, 27 Feb 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/02/27/edition-48/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-48-february-27th-2019&quot;&gt;Git Rev News: Edition 48 (February 27th, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 48th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of January 2019.
It also covers the Git Contributor Summit and the Git
Merge conference that took place on January 31th and February 1st.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Git Merge 2019 — General Sessions&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge&lt;/a&gt; 2019 conference took place in Brussels, Belgium
on January 31st (workshops and contributor summit) and February 1st (main conference day).&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;This year a big theme was handling large Git repositories,
both from technical and organizational point of view&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;Ivan Frade and Minh Thai in &lt;em&gt;“Tales in scalability: how Google has seen users break Git”&lt;/em&gt;
talked about solving problems with Android (many repos, huge binary assets, many commits)
and Chromium monorepo (many unique committers).  Some of the problems were caused by legacy
practices of trying to keep Subversion-like monotonic version number – it turned out
that attempts to provide it got into troubles and were cause of much of churn.  Another
problem was the change in Gerrit, which now stores patch history in git repo, resulting
in “forest of tiny bushes” graph of commits; the solution here was moving to protocol v2.
There was also talk about making the negotiation phase during fetch faster at the cost
of somewhat bigger data transfer, e.g. by skipping commits using Fibonacci number gaps.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Johan Abildskov, a consultant at Praqma in &lt;em&gt;“The what, how and why of scaling repositories”&lt;/em&gt;
talked about how to choose between monorepos and many-repos (and how to split the codebase
into repositories).  The major idea was to not ignore the real problems (like having to
create multiple commits to handle single bug), and to base decision on data&lt;/p&gt;

            &lt;blockquote&gt;
              &lt;p&gt;Our conclusions are not better than our data&lt;/p&gt;
            &lt;/blockquote&gt;

            &lt;p&gt;For this reason the &lt;a href=&quot;https://github.com/Praqma/git-metrics&quot;&gt;git-metrics&lt;/a&gt; tool was created,
which is a set of util scripts to scrape data from git repositories to help teams improve.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Brandon Williams from Facebook gave a lightning talk &lt;em&gt;“Git protocols: still tinkering after all these years?”&lt;/em&gt;
focusing on introduction of protocol v2 to reduce communication overhead (especially important
for repositories with large number of branches and tags) and increase extensibility, and troubles
with adding it while maintaining all-important backwards compatibility.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Terry Parker from Google gave a lightning talk &lt;em&gt;“Native Git support for large objects”&lt;/em&gt;
explain how Git’s new partial clone feature (where only a subset of objects,
selected by initial filter, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--filter=blob:limit=1m&lt;/code&gt;, is downloaded on clone;
the rest are fetched on demand, as needed) and the new proposal to use content distribution networks
(CDN) can help with handling repositories with large files.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;John Briggs from Microsoft in &lt;em&gt;“Technical contributions towards scaling for Windows”&lt;/em&gt;
talked about both technical improvements in Git, like serialized commit graph (with
generation numbers) and multipack index (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*.midx&lt;/code&gt;), and the “sparse” object walk
during push that is being worked on (see the &lt;a href=&quot;#reviews&quot;&gt;“Reviews”&lt;/a&gt; section), and
improvements in VFS for Git (formerly called GVFS), like prefetching in background
and git status serialization.  He also announced that VFS for Git will be ported
to other platforms: MacOS and Linux (to handle MS Office, which itself is cross-platform
project).&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;John Austin, game studio technical lead from A Stranger Gravity and Funomena
in &lt;em&gt;“Git for games: current problems and solutions”&lt;/em&gt; talked about major problem
with using Git in game development workflows, namely many and large binary files,
for which file conflicts are lost work (minor change, like adding voiceover
or changing equalizer settings results in large changes to files).  File locking
is one possibility, but it doesn’t play nicely with Git – it is inherently centralized.
He introduces a new tool, &lt;a href=&quot;https://github.com/Kleptine/gitglobalgraph&quot;&gt;Git Global Graph&lt;/a&gt;
(a work in progress), which can be used to check at commit time if it wouldn’t
create a divergent version of a file.  The idea is that there should be only
a single path through commit graph with changes to binary files.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Javier Fontan from source{d} gave a lightning talk &lt;em&gt;“Gitbase, SQL interface to Git repositories”&lt;/em&gt;
about &lt;a href=&quot;https://github.com/src-d/gitbase&quot;&gt;gitbase&lt;/a&gt; tool, which provides read-only
SQL interface to Git repositories (with Abstract Syntax Tree support).&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Brian M. Carlson, Git Ecosystem Engineer at GitHub in &lt;em&gt;“Bridging the gap: transitioning Git to SHA-256”&lt;/em&gt;
talked about ongoing work to transition from SHA-1, which is considered weak,
to SHA-256, which is more secure: the transition plan, where we are with it,
and how to provide interoperability between versions of Git using different hash algorithms.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Belén Barros Pena, PhD student and interaction designer, gave talk
&lt;em&gt;“The art of patience: why you should bother teaching Git to designers”&lt;/em&gt;,
where she also described &lt;em&gt;how&lt;/em&gt; to do it and provide good retention, namely:&lt;/p&gt;

        &lt;ol&gt;
          &lt;li&gt;Show things on a need-to-know basis&lt;/li&gt;
          &lt;li&gt;Avoid the Git jargon&lt;/li&gt;
          &lt;li&gt;Don’t bother too much with the concepts;
will be grasped through practice&lt;/li&gt;
          &lt;li&gt;Do things with, never for, your designer&lt;/li&gt;
          &lt;li&gt;Designer should take notes and keep cheat sheet&lt;/li&gt;
          &lt;li&gt;Teach command–line Git&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Veronica Hanus in &lt;em&gt;“Version control for visual learners”&lt;/em&gt;
talked about how to enter visual representations of recently-changed elements into version control
in the form of screenshot diffing.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/pull.89.git.gitgitgadget@gmail.com/&quot;&gt;Add a new “sparse” tree walk algorithm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last November Derrick Stolee, who prefers to be called just Stolee,
sent a patch series to the mailing list to speed up &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt;
operations by implementing and using a new “sparse” tree walk
algorithm.&lt;/p&gt;

&lt;p&gt;Stefan Beller wondered how users can know about this new algorithm and
if it should be turned on by default for users. Stolee replied that
indeed “we should actually make the config setting true by default,
and recommend that servers opt-out”.&lt;/p&gt;

&lt;p&gt;Junio Hamano, the Git maintainer, disagreed saying that we should wait
until “enough users complain that they have to turn it on” before we
turn it on by default.&lt;/p&gt;

&lt;p&gt;Stolee later sent a &lt;a href=&quot;https://public-inbox.org/git/pull.89.v2.git.gitgitgadget@gmail.com/&quot;&gt;version 2 of the patch series&lt;/a&gt;
improving the tests, then a &lt;a href=&quot;https://public-inbox.org/git/pull.89.v3.git.gitgitgadget@gmail.com/&quot;&gt;version 3&lt;/a&gt;
improving the documentation, and a &lt;a href=&quot;https://public-inbox.org/git/pull.89.v4.git.gitgitgadget@gmail.com/&quot;&gt;version 4&lt;/a&gt;
with a few code and commit message improvements.&lt;/p&gt;

&lt;p&gt;Junio and Stolee discussed how the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mark_trees_uninteresting_sparse()&lt;/code&gt;
function is implemented in the first patch, and how a variable is
named in this function.&lt;/p&gt;

&lt;p&gt;They also discussed the purpose of patches 2 and 3 and agreed that
they should be merged and what the related tests should do.&lt;/p&gt;

&lt;p&gt;Additionally, Junio suggested a number of small code improvements in the last
patch. Especially he suggested to get rid of a global variable that
was unused. Ramsay Jones, who regularly uses the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sparse&lt;/code&gt; tool and his
own &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;static-check.pl&lt;/code&gt; script on the Git code base to find errors, had
also found this unused variable separately.&lt;/p&gt;

&lt;p&gt;Ævar Arnfjörð Bjarmason chimed in to ask for a clarification about
which step the patch speeds up, and if a progress bar should be added
while the user is waiting during this step, and how this step should
be named on the command line interface. It seems though that some
preliminary work would be needed to untangle the steps during which a
progress bar is already displayed.&lt;/p&gt;

&lt;p&gt;Stolee eventually sent a &lt;a href=&quot;https://public-inbox.org/git/pull.89.v5.git.gitgitgadget@gmail.com/&quot;&gt;version 5 of the patch series&lt;/a&gt;
on January 16th which has since been merged and is in the recently
released Git v2.21.0.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqtvgtkq46.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.21.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq8sybz7b2.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.21.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq8syj9h9b.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.21.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqh8dgqcqn.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.21.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.21.0.windows.1&quot;&gt;2.21.0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.28.1&quot;&gt;0.28.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.28.0&quot;&gt;0.28.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.27.8&quot;&gt;0.27.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2sharp &lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.26&quot;&gt;0.26&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.16.3/notes&quot;&gt;2.16.3&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.8/notes&quot;&gt;2.15.8&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.15/notes&quot;&gt;2.14.15&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.21/notes&quot;&gt;2.13.21&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.2/notes&quot;&gt;2.16.2&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.7/notes&quot;&gt;2.15.7&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.14/notes&quot;&gt;2.14.14&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.20/notes&quot;&gt;2.13.20&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.16.1/notes&quot;&gt;2.16.1&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.6/notes&quot;&gt;2.15.6&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.13/notes&quot;&gt;2.14.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.19/notes&quot;&gt;2.13.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2019/02/22/gitlab-11-8-released/&quot;&gt;11.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/02/07/gitlab-11-7-5-released/&quot;&gt;11.7.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/02/05/critical-security-release-gitlab-11-dot-7-dot-4-released/&quot;&gt;11.7.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/01/31/security-release-gitlab-11-dot-7-dot-3-released/&quot;&gt;11.7.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;6.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21511&quot;&gt;2.15.11&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#2165&quot;&gt;2.16.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#21510&quot;&gt;2.15.10&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#2164&quot;&gt;2.16.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#2159&quot;&gt;2.15.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.2.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.2.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.2.0&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.1.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.1.0&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.6&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.5&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.4&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.3&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.6.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.6.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_3.1.html&quot;&gt;3.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20190204215251.GB6085@hank.intra.tgummerer.com/T/&quot;&gt;GSoC 2019: Git’s application submitted&lt;/a&gt;
and &lt;a href=&quot;https://summerofcode.withgoogle.com/organizations/6104737735245824/&quot;&gt;got accepted&lt;/a&gt; as one of &lt;a href=&quot;https://opensource.googleblog.com/2019/02/gsoc-2019-organizations.html&quot;&gt;207 open source projects&lt;/a&gt;;
ideas for project proposals &lt;a href=&quot;https://git.github.io/SoC-2019-Ideas/&quot;&gt;published&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The Git Contributor Summit 2019 happened on January 30th in Brussels. Elijah
Newren took some &lt;a href=&quot;https://public-inbox.org/git/CABPp-BGfSRy-NT+f39gSumD9haYZPAnpNPY-VnanioCbdYFoEQ@mail.gmail.com/&quot;&gt;notes&lt;/a&gt;.
A video stream of the event was broadcast and recorded, but is not
yet available for download.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge Conference 2019&lt;/a&gt; happened on
February 1st in Brussels. Videos of the presentations are not yet
available. The GitHub team expects them to be available
&lt;a href=&quot;https://public-inbox.org/git/20190221082218.GA3335@sigill.intra.peff.net/&quot;&gt;before the end of this month&lt;/a&gt;.
    &lt;ul&gt;
      &lt;li&gt;A short &lt;a href=&quot;https://github.blog/2019-02-12-mission-report-git-merge-2019/&quot;&gt;Mission report: Git Merge 2019&lt;/a&gt; was posted on GitHub blog.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://groups.google.com/forum/#!topic/repo-discuss/A9dGOppvgGA&quot;&gt;GerritHub.io multi-site plugin is going public&lt;/a&gt; and has
been proposed to be hosted on gerrit-review.googlesource.com. That is going to be the first globally available Open Source
implementation for having &lt;a href=&quot;https://www.gerritcodereview.com&quot;&gt;Gerrit Code Review&lt;/a&gt; masters replicated and synchronized over multiple sites.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.karimyaghmour.com/blog/2019/02/gitgeist-a-git-based-social-network-proof-of-concept.html&quot;&gt;gitgeist: a git-based social network proof of concept&lt;/a&gt; by Karim Yaghmour
(mentioned &lt;a href=&quot;https://lwn.net/Articles/780365/&quot;&gt;on LWN.net&lt;/a&gt;).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/779331/&quot;&gt;France enters the Matrix [LWN.net]&lt;/a&gt; by Tom Yates
covers Matthew Hodgson talk about &lt;a href=&quot;https://matrix.org/blog/home/&quot;&gt;Matrix&lt;/a&gt; at &lt;a href=&quot;https://fosdem.org/2019/&quot;&gt;FOSDEM 2019&lt;/a&gt;;
Matrix is an open standard and lightweight protocol for real-time communication,
allowing to create decentralized federated instant messaging system with end-to-end encryption;
the video of the whole talk &lt;a href=&quot;https://fosdem.org/2019/schedule/event/matrix_french_state/&quot;&gt;is available&lt;/a&gt;.&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;[…] the “first-class citizen” in Matrix is not the message, but
the conversation history of the room. That history is stored in a
big data structure that is replicated across a number of
participants; in that respect, said Hodgson, Matrix is &lt;em&gt;more like
Git&lt;/em&gt; than XMPP, SIP, IRC, or many other traditional communication
protocols.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://hacker-tools.github.io/version-control/&quot;&gt;./hacker-tools lectures: Version Control&lt;/a&gt;,
focusing on Git (article with an embedded 53 minutes video).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://githubengineering.com/an-open-source-parser-for-github-actions/&quot;&gt;An open source parser for GitHub Actions&lt;/a&gt;
on GitHub Engineering Blog
(&lt;a href=&quot;https://github.com/features/actions&quot;&gt;GitHub Actions&lt;/a&gt; were covered in
&lt;a href=&quot;https://git.github.io/rev_news/2018/10/24/edition-44/&quot;&gt;Git Rev News #44&lt;/a&gt;).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/777421/&quot;&gt;Snowpatch: continuous-integration testing for the kernel [LWN.net]&lt;/a&gt;
by Jonathan Corbet.  &lt;a href=&quot;https://github.com/ruscur/snowpatch&quot;&gt;Snowpatch&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;Git Rev News Edition #40&lt;/a&gt;)
is built on top of &lt;a href=&quot;http://jk.ozlabs.org/projects/patchwork/&quot;&gt;patchwork&lt;/a&gt;
(mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News Edition #20&lt;/a&gt;).&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/pomber/git-history&quot;&gt;git-history&lt;/a&gt; is a web-based tool (for Node.js)
to quickly browse the history of a file from any GitHub repository.
(&lt;a href=&quot;https://github.com/pomber/git-history/issues/14&quot;&gt;GitLab and Bitbucket support is also planned&lt;/a&gt;);
unfortunately the &lt;a href=&quot;https://github.githistory.xyz/babel/babel/blob/master/packages/babel-core/test/browserify.js&quot;&gt;demo service&lt;/a&gt;
at &lt;a href=&quot;https://githistory.xyz/&quot;&gt;https://githistory.xyz/&lt;/a&gt; &lt;a href=&quot;https://twitter.com/pomber/status/1100412811455287304&quot;&gt;was down&lt;/a&gt; at the time of publishing this edition,
causing &lt;a href=&quot;https://chrome.google.com/webstore/detail/github-history-browser-ex/laghnmifffncfonaoffcndocllegejnf&quot;&gt;Chrome&lt;/a&gt; and &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/github-history/&quot;&gt;Firefox&lt;/a&gt; extensions,
which add an &lt;em&gt;Open in Git History&lt;/em&gt; button to GitHub, not to work either.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/opersys/gitgeist-poc&quot;&gt;gitgeist-poc&lt;/a&gt; by Francois-Denis Gonthier
is a Proof-of-Concept implementation  of
&lt;a href=&quot;https://www.karimyaghmour.com/blog/2019/02/gitgeist-a-git-based-social-network-proof-of-concept.html&quot;&gt;gitgeist: a git-based social network proof of concept&lt;/a&gt; idea.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://nic-hartley.github.io/git-gud/&quot;&gt;Git Gud&lt;/a&gt; is a pretty
barebone visual web-based Git simulator, meant to help understand
Git better, which got announced by its author Nic Hartley in
&lt;a href=&quot;https://dev.to/nichartley/git-gud-at-git-5d9k&quot;&gt;Git Gud at git&lt;/a&gt;;
quite similar to &lt;a href=&quot;https://learngitbranching.js.org/&quot;&gt;Learn Git Branching&lt;/a&gt;
service (covered in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/#other-news&quot;&gt;Git Rev News Edition #30&lt;/a&gt;).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&quot;&gt;GitLens — Git supercharged&lt;/a&gt;
extension supercharges the Git capabilities built into Visual Studio Code.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/Annihil/github-spray&quot;&gt;github-spray&lt;/a&gt; is yet another tool
to draw on your GitHub contribution graph; there is also
&lt;a href=&quot;https://annihil.github.io/github-spray-generator/&quot;&gt;GitHub Spray Generator&lt;/a&gt; service.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/src-d/gitbase&quot;&gt;gitbase&lt;/a&gt; from source{d} is a tool (in alpha) providing
&lt;a href=&quot;https://docs.sourced.tech/gitbase&quot;&gt;SQL interface to Git repositories&lt;/a&gt;, written in Go.
It is part of &lt;a href=&quot;https://sourced.tech/engine&quot;&gt;source{d} Engine&lt;/a&gt;, and implements MySQL wire protocol.
Uses &lt;a href=&quot;https://github.com/src-d/go-git&quot;&gt;go-git&lt;/a&gt; for accessing Git repositories,
&lt;a href=&quot;https://github.com/src-d/go-mysql-server&quot;&gt;go-mysql-server&lt;/a&gt; for the SQL engine implementation,
&lt;a href=&quot;https://github.com/src-d/enry&quot;&gt;enry&lt;/a&gt; for programming language detection for files,
and &lt;a href=&quot;https://github.com/bblfsh&quot;&gt;bblfhs&lt;/a&gt; for source code parsing into AST (Abstract Syntax Tree).
There is also a &lt;a href=&quot;https://github.com/src-d/gitbase-web&quot;&gt;web client&lt;/a&gt; for it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://modeling-languages.com/gitana-a-sql-based-git-repository-inspector/&quot;&gt;Gitana&lt;/a&gt;: a SQL-based Project Activity Inspector,
written in Python (&lt;a href=&quot;https://github.com/SOM-Research/Gitana&quot;&gt;GitHub repository&lt;/a&gt;),
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/09/09/edition-7/#other-news&quot;&gt;Git Rev News Edition #7&lt;/a&gt;.
Nowadays it imports and digests the data of Git repositories, issue trackers (including Bugzilla and GitHub),
Q&amp;amp;A web-sites (including forums and StackOverflow) and instant messaging services to a relational database
in order to ease browsing and querying activities with standard SQL syntax and tools.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from David Pursehouse and Luca Milanesio.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 47 (January 23rd, 2019)</title>
      <link>https://git.github.io/rev_news/2019/01/23/edition-47/</link>
      <pubDate>Wed, 23 Jan 2019 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2019/01/23/edition-47/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-47-january-23rd-2019&quot;&gt;Git Rev News: Edition 47 (January 23rd, 2019)&lt;/h2&gt;

&lt;p&gt;Welcome to the 47th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of December 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/877eg5fwd5.fsf@evledraar.gmail.com/&quot;&gt;Referring to commits in commit messages&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason replied to a
&lt;a href=&quot;https://public-inbox.org/git/20181217165957.GA60293@google.com/&quot;&gt;patch&lt;/a&gt;
that Jonathan Nieder had sent to the mailing list. He suggested using
the &lt;a href=&quot;https://github.com/git/git/blob/16a465bc018d09e9d7bbbdc5f40a7fb99c21f8ef/Documentation/SubmittingPatches#L143-L158&quot;&gt;standard commit-reference format documented in SubmittingPatches&lt;/a&gt; in the commit message of the patch.&lt;/p&gt;

    &lt;p&gt;Using the standard format would have produced:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;92068ae8bf (&quot;stripspace: respect repository config&quot;, 2016-11-21)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;while Jonathan’s patch contained:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;v2.11.0-rc3~3^2~1 (stripspace: respect repository config, 2016-11-21)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;The main difference is that the former starts with an abbreviated
object id, while the latter starts with an output from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git describe&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Ævar gave an example of him previously looking for a commit using
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --grep=0386dd37b1&lt;/code&gt; and not finding it because Jonathan had
not used the standard format.&lt;/p&gt;

    &lt;p&gt;Ævar also wondered if “we should have some mode where
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--grep=&amp;lt;commitish&amp;gt;&lt;/code&gt; will be combined with some mode where we try to
find various forms of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;commitish&amp;gt;&lt;/code&gt; in commit messages, then normalize
&amp;amp; match them…”&lt;/p&gt;

    &lt;p&gt;Duy Nguyen replied to that by suggesting we use email style trailers
like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;In-Reply-To: ...&lt;/code&gt; or even &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Fixes: ...&lt;/code&gt; to refer
to related commits, which could make sense as we already use
&lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/SubmittingPatches#L306-L347&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Signed-off-by: User &amp;lt;email&amp;gt;&lt;/code&gt; trailers&lt;/a&gt;
and some other similar trailers in commit messages.&lt;/p&gt;

    &lt;p&gt;Gábor Szeder also replied to Ævar saying that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%h (%s, %ad)&lt;/code&gt; is
even better and more widely used than the standard &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%h (&quot;%s&quot;, %ad)&lt;/code&gt; as
the former avoids useless double quotes around the commit title.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, then commented to Ævar’s suggestion about a new
mode for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--grep=&amp;lt;commitish&amp;gt;&lt;/code&gt;. He gave examples of other tools that
work better with the standard format:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;web interfaces like GitHub have learned to replace an abbreviated
object id with a link to a page displaying the object,&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;terminals makes it easy to select object ids, but don’t understand
output from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git describe&lt;/code&gt;.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Peff acknowledged that the format with an output from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git describe&lt;/code&gt;
has some benefits:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;As far as I can tell, the main advantage of using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v2.11.0-rc3~3^2~1&lt;/code&gt;
over its hex id is that it gives a better sense in time of which Git
version we’re talking about. The date in the parentheses does something
similar for wall-clock time, but it’s left to the reader to map that to
a Git version if they choose.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;But he thought that they were not worth the disadvantages “as in the
rare instance that I care about the containing version, it’s not a big
deal to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git tag --contains&lt;/code&gt;”.&lt;/p&gt;

    &lt;p&gt;He suggested anyway using something like:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;1234abcd (the subject line, 2016-01-01, v2.11.0)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;which adds a version after the date, “if we really want to convey that
information”. And he proposed some reasonable rules for this new
format.&lt;/p&gt;

    &lt;p&gt;Jonathan replied to Peff’s suggestion by discussing the possible
ambiguities in what the tag name is referring to. This led Jonathan to
prefer using trailers like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Fixes: ...&lt;/code&gt; as Duy had suggested,
saying they have been working well for the Linux kernel project.&lt;/p&gt;

    &lt;p&gt;In a separate reply to Duy’s email, Jonathan copied relevant
&lt;a href=&quot;https://github.com/torvalds/linux/blob/ae67ee6c5e1d5b6acdb0d51fddde651834096d75/Documentation/process/submitting-patches.rst&quot;&gt;documentation from the Linux kernel project&lt;/a&gt;
where they specify a trailer that looks like:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Fixes: e21d2170f366 (&quot;video: remove unnecessary platform_set_drvdata()&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Jonathan then proposed a patch to the Git Documentation that would
make the Git project adopt a similar policy.&lt;/p&gt;

    &lt;p&gt;Peff replied to Jonathan that using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Fixes: ...&lt;/code&gt; trailers is a good
idea but that “there are many other reasons to refer to another commit
in prose (or even outside of a commit message entirely)”.&lt;/p&gt;

    &lt;p&gt;Jonathan, Peff and Ævar discussed a bit more, and Jacob Keller chimed
in, but in the end it doesn’t look like any change has been decided.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;JGit &lt;a href=&quot;https://projects.eclipse.org/projects/technology.jgit/releases/4.5.5&quot;&gt;4.5.5&lt;/a&gt;,
&lt;a href=&quot;https://projects.eclipse.org/projects/technology.jgit/releases/4.7.7&quot;&gt;4.7.7&lt;/a&gt;,
&lt;a href=&quot;https://projects.eclipse.org/projects/technology.jgit/releases/4.9.8&quot;&gt;4.9.8&lt;/a&gt;,
&lt;a href=&quot;https://projects.eclipse.org/projects/technology.jgit/releases/4.11.6&quot;&gt;4.11.6&lt;/a&gt;,
&lt;a href=&quot;https://projects.eclipse.org/projects/technology.jgit/releases/5.1.5&quot;&gt;5.1.5&lt;/a&gt;,
&lt;a href=&quot;https://projects.eclipse.org/projects/technology.jgit/releases/5.2.1&quot;&gt;5.2.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.9.html#295&quot;&gt;2.9.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.10.html#2108&quot;&gt;2.10.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.11.html#21112&quot;&gt;2.11.12&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.12.html#2129&quot;&gt;2.12.9&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.13.html#21312&quot;&gt;2.13.12&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.14.html#21418&quot;&gt;2.14.18&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#2158&quot;&gt;2.15.8&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#2162&quot;&gt;2.16.2&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#2163&quot;&gt;2.16.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.15.5/notes&quot;&gt;2.15.5&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.12/notes&quot;&gt;2.14.12&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.18/notes&quot;&gt;2.13.18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2019/01/17/gitlab-11-6-5-released/&quot;&gt;11.6.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/01/16/critical-security-release-gitlab-11-dot-6-dot-4-released/&quot;&gt;11.6.4, 11.5.7 and 11.4.14&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/01/05/gitlab-11-6-3-released/&quot;&gt;11.6.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2019/01/03/gitlab-11-6-2-released/&quot;&gt;11.6.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/12/31/security-release-gitlab-11-dot-6-dot-1-released/&quot;&gt;11.6.1, 11.5.6 and 11.4.13&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/12/22/gitlab-11-6-released/&quot;&gt;11.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.6.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Security vulnerabilities in JGit and Gerrit:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.chromium.org/p/gerrit/issues/detail?id=10201&quot;&gt;Gerrit issue 10201&lt;/a&gt;:
When protocol v2 was enabled and used, Gerrit would make all refs visible to the
calling user. Support for protocol v2 was removed in Gerrit 2.16.2, and the issue
was fixed in JGit versions 5.1.5 and 5.2.1.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.chromium.org/p/gerrit/issues/detail?id=10262&quot;&gt;Gerrit issue 10262&lt;/a&gt;:
In protocol v0 stateless transport, it was possible to fetch anything that is
pointed to by any ref (using fetch-by-sha1), as long as the attacker could guess
the object name. The issue was fixed in JGit versions 4.5.5, 4.7.7, 4.9.8, 4.11.6,
5.1.5 and 5.2.1, which were included in Gerrit versions 2.9.5, 2.10.8, 2.11.12,
2.12.9, 2.13.12, 2.14.18, 2.15.8 and 2.16.3.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt; interns working on Git have been blogging about their internship:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://tanu1596.blogspot.com/&quot;&gt;Tanushree Tumane’s blog&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://slavicadj.github.io/blog/&quot;&gt;Slavica Đukić’s blog&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;AsciiDoc, the markup language used by &lt;a href=&quot;https://git-scm.com/docs&quot;&gt;Git’s manual and other documentation&lt;/a&gt;,
will get &lt;a href=&quot;https://asciidoctor.org/news/2019/01/07/asciidoc-spec-proposal/&quot;&gt;an official specification under the Eclipse Foundation&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Google is &lt;a href=&quot;https://opensource.googleblog.com/2019/01/seeking-projects-for-gsoc-2019.html&quot;&gt;seeking open source projects for Google Summer of Code 2019&lt;/a&gt;.
The deadline to apply is February 6 at 20:00 UTC, chosen
organizations will be announced on February 26.
Git Development Community &lt;a href=&quot;https://public-inbox.org/git/CAP8UFD3Kt3dreMnfAdLiP2yc47kBLoVYCk-2yDw67OkujVY=Ew@mail.gmail.com/T/#m5568b147f03c0b2e9dc96843dc13e85f5b2f187f&quot;&gt;is interested&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2018/12/11/introducing-gitlab-serverless/&quot;&gt;GitLab Serverless launched Dec. 22&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/2019-01-07-new-year-new-github/&quot;&gt;New year, new GitHub: Announcing unlimited free private repos and unified Enterprise offering&lt;/a&gt; (the former with up to three collaborators per repository).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/1IQCRPHEIX-qKo7QFxsD3V62yhyGA9_5YsYXFOiBpgkk/edit?usp=sharing&quot;&gt;Git explained: Git Concepts and Workflows&lt;/a&gt; by Edwin Kempin&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/1C73UgQdzZDw0gzpaEqIC6SPujZJhqamyqO1XOHjH-uk/edit?usp=sharing&quot;&gt;Gerrit explained: Gerrit Concepts and Workflows&lt;/a&gt; by Edwin Kempin&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://linuxwit.ch/blog/2018/12/e98e/&quot;&gt;A tale of 132 e’s&lt;/a&gt; and &lt;a href=&quot;https://linuxwit.ch/blog/2018/12/everything-that-lives-is-designed-to-end/&quot;&gt;the [E]nd of eeeee&lt;/a&gt; by Iliana Weller, about &lt;a href=&quot;https://github.com/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee&quot;&gt;e30e/e98e&lt;/a&gt; GitHub repository and its history&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rachelcarmena.github.io/2018/12/12/how-to-teach-git.html&quot;&gt;How to teach Git&lt;/a&gt; by Rachel M. Carmena&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/digitalocean/how-to-use-git-a-reference-guide-6b6&quot;&gt;How To Use Git: A Reference Guide&lt;/a&gt; by Lisa Tagliaferri from DigitalOcean&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/_darrenburns/8-productivity-tips-for-github-44kn&quot;&gt;8 Productivity Tips for GitHub&lt;/a&gt; by Darren Burns&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/benjaminadk/something-someone-somewhere-uses-sometimes-1kab&quot;&gt;Something Someone Somewhere Uses… Sometimes&lt;/a&gt; by benjaminadk, about &lt;a href=&quot;https://gitmoji.carloscuesta.me/&quot;&gt;gitmoji&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/775963/&quot;&gt;A new free-software forge: sr.ht [LWN.net]&lt;/a&gt; by Jake Edge; this service was covered in &lt;a href=&quot;https://git.github.io/rev_news/2018/12/19/edition-46/#other-news&quot;&gt;previous edition of Git Rev News&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@mattklein123/monorepos-please-dont-e9a279be011b&quot;&gt;Monorepos: Please don’t!&lt;/a&gt; by Matt Klein
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://medium.com/@adamhjk/monorepo-please-do-3657e08a4b70&quot;&gt;Monorepo: please do!&lt;/a&gt;, response by Adam Jacob&lt;/li&gt;
      &lt;li&gt;see also
&lt;a href=&quot;http://danluu.com/monorepo/&quot;&gt;Advantages of Monolithic Version Control&lt;/a&gt; by Dan Luu
(&lt;a href=&quot;https://git.github.io/rev_news/2015/06/03/edition-4/&quot;&gt;Git Rev News: Edition #4&lt;/a&gt;) and
&lt;a href=&quot;https://developer.atlassian.com/blog/2015/10/monorepos-in-git/?p&quot;&gt;Monorepos in Git&lt;/a&gt; by Stefan Saasen
(&lt;a href=&quot;https://git.github.io/rev_news/2015/11/11/edition-9/&quot;&gt;Git Rev News: Edition #9&lt;/a&gt;)&lt;/li&gt;
      &lt;li&gt;and also &lt;a href=&quot;https://github.com/splitsh/lite&quot;&gt;splitsh/lite&lt;/a&gt; (&lt;a href=&quot;https://git.github.io/rev_news/2016/06/15/edition-16/&quot;&gt;Git Rev News: Edition #16&lt;/a&gt;) and
&lt;a href=&quot;https://lernajs.io/&quot;&gt;Lerna&lt;/a&gt; (&lt;a href=&quot;https://git.github.io/rev_news/2018/09/19/edition-43/&quot;&gt;Git Rev News: Edition #43&lt;/a&gt;) tools for monorepos&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/compass-true-north/writing-good-commit-messages-fc33af9d6321&quot;&gt;Writing Good Commit Messages&lt;/a&gt; by Ben Hoyt (2018)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://code.likeagirl.io/useful-tips-for-writing-better-git-commit-messages-808770609503&quot;&gt;Useful Tips for writing better Git commit messages&lt;/a&gt; by Egwuenu Gift (2018)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.explainxkcd.com/wiki/index.php/1296:_Git_Commit&quot;&gt;1296: Git Commit – explain xkcd&lt;/a&gt; (2013)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/life/16/8/how-manage-binary-blobs-git-part-7&quot;&gt;How to manage binary blobs with Git&lt;/a&gt; by Seth Kenlon (2016)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/~tracey/slides/kubecon/#/&quot;&gt;Migrating Internet Archive to Kubernetes&lt;/a&gt; – slides from presentation at KubeCon 2018; slides &lt;a href=&quot;https://archive.org/~tracey/slides/kubecon/#/35&quot;&gt;#35&lt;/a&gt; and later are about how Git is used at &lt;a href=&quot;https://archive.org/&quot;&gt;archive.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://onedev.io&quot;&gt;OneDev&lt;/a&gt; Open source git server with unique features such as language aware code search and navigation, source/diff annotation for code discussion and comprehension, customizable issue field and workflow, write protection for branches/tags/files, etc.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitmoji.carloscuesta.me/&quot;&gt;gitmoji – An emoji guide for your commit messages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Johannes Schindelin, Robin Shen and David Pursehouse.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 46 (December 19th, 2018)</title>
      <link>https://git.github.io/rev_news/2018/12/19/edition-46/</link>
      <pubDate>Wed, 19 Dec 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/12/19/edition-46/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-46-december-19th-2018&quot;&gt;Git Rev News: Edition 46 (December 19th, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 46th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of November 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20181120174554.GA29910@duynguyen.home/&quot;&gt;[RFC] Introduce two new commands, switch-branch and restore-paths&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Duy Nguyen sent an RFC patch to the mailing list that implemented 2
new Git commands:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch-branch&lt;/code&gt; which “is all about switching branches”&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore-paths&lt;/code&gt; “for checking out paths”&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;The goal is to split &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt; into different commands while
not deprecating it, so that “Old timers will still use
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;. But new people should be introduced to the new two
instead.”&lt;/p&gt;

    &lt;p&gt;The idea to do that appeared &lt;a href=&quot;https://public-inbox.org/git/20181110133525.17538-1-pclouds@gmail.com/&quot;&gt;following a previous patch to print something when checking out paths&lt;/a&gt;,
though it has been considered for a long time that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;
should not do as many different things as it currently does.&lt;/p&gt;

    &lt;p&gt;Thomas Gummerer replied that he liked the idea and had been
considering working on it. He suggested taking at look at maybe
changing the behavior of the new command a bit.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, then started to discuss the naming
of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git restore-paths&lt;/code&gt; with Duy.&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason replied to Duy’s original message asking
questions about arguments accepted by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git switch-branch&lt;/code&gt; and
suggesting a comparison between the new commands and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;
or even other source code management tools. He also discussed with
Duy about eventually deprecating &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;Stefan Beller replied to Ævar and started discussing the names and
syntax of the command. Junio replied to Stefan telling that he
thought the names Duy suggested make sense, though &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;checkout&lt;/code&gt;
already makes sense and longhands starting with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;checkout&lt;/code&gt;, like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;checkout-branch&lt;/code&gt;, would make sense too.&lt;/p&gt;

    &lt;p&gt;Duy then sent a &lt;a href=&quot;https://public-inbox.org/git/20181127165211.24763-1-pclouds@gmail.com/&quot;&gt;version 2&lt;/a&gt;
of his initial patch that “breaks down the giant patch in v1 and
starts adding some changes in these new commands”. Especially the
names were changed to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;checkout-branch&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;checkout-files&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;A first discussion thread started with Junio, Duy, Stefan Beller and
Stefan Xenos about the name and syntax of the new commands. As no
clear conclusion appeared though, Duy decided to go back towards the
original names he had proposed.&lt;/p&gt;

    &lt;p&gt;Another discussion thread among the same developers was about using
“unnamed branch” instead of “detached HEAD”.&lt;/p&gt;

    &lt;p&gt;These discussions were followed by a &lt;a href=&quot;https://public-inbox.org/git/20181129215850.7278-1-pclouds@gmail.com/&quot;&gt;version 3&lt;/a&gt;
where the names of the commands were changed back to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;switch-branch&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;restore-files&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;restore-paths&lt;/code&gt;.&lt;/p&gt;

    &lt;p&gt;There were further discussions involving Elijah Newren, Junio, Duy,
Ævar, Dan Fabulich, Thomas and Eric Sunshine, about a lot of related
subjects, though Duy decided to wait until the release of Git 2.20
before sending an updated patch series.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqsgyzbcyy.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.20.1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq1s6r3xb5.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.20.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqq36rhjnts.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.20.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqmuq25ufc.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.20.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqtvka5ugt.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.19.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.20.1.windows.1&quot;&gt;2.20.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.20.0.windows.1&quot;&gt;2.20.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.20.0-rc2.windows.1&quot;&gt;2.20.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.20.0-rc1.windows.1&quot;&gt;2.20.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.20.0-rc0.windows.1&quot;&gt;2.20.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2sharp &lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.25.4&quot;&gt;0.25.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2018/12/13/critical-security-release-gitlab-11-dot-5-dot-4-released/&quot;&gt;11.6RC7, 11.5.4, 11.4.11 and 11.3.13&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/12/06/critical-security-release-gitlab-11-dot-5-dot-3-released/&quot;&gt;11.5.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/12/04/gitlab-11-4-9-released/&quot;&gt;11.4.9&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/12/04/gitlab-11-5-2-released/&quot;&gt;11.5.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/11/28/security-release-gitlab-11-dot-5-dot-1-released/&quot;&gt;11.5.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/11/22/gitlab-11-5-released/&quot;&gt;11.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/11/21/gitlab-11-4-7-released/&quot;&gt;11.4.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/11/19/critical-security-release-gitlab-11-dot-4-dot-6-released/&quot;&gt;11.5.0-rc12, 11.4.6 and 11.3.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;5.16&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.16.html#2161&quot;&gt;2.16.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.15.4/notes&quot;&gt;2.15.4&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.11/notes&quot;&gt;2.14.11&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.17/notes&quot;&gt;2.13.17&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.25/notes&quot;&gt;2.12.25&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.3/notes&quot;&gt;2.15.3&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.10/notes&quot;&gt;2.14.10&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.16/notes&quot;&gt;2.13.16&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.24/notes&quot;&gt;2.12.24&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20181206094805.GA1398@sigill.intra.peff.net&quot;&gt;Git Contributor Summit Registration, Jan 31, 2019, Brussels&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge 2019&lt;/a&gt; (Jan 31 – Feb 01) schedule announced, including:
    &lt;ul&gt;
      &lt;li&gt;A “Git and version control in the enterprise” panel with GitHub, Atlassian, and GitLab&lt;/li&gt;
      &lt;li&gt;A chat with Deb Nicholson from the Software Freedom Conservancy on the future of software&lt;/li&gt;
      &lt;li&gt;Sessions by Google, Microsoft, and Praqma on scaling Git&lt;/li&gt;
      &lt;li&gt;Lighting talks on everything from version control for law to Git for games&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=690b0543a813b0ecfc51b0374c0ce6c8275435f0&quot;&gt;“The ‘s’ is sad”: 4-year-old submits Linux kernel doc patch&lt;/a&gt; with some assistance (via Hacker Newsletter #429)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ed Thomson’s &lt;a href=&quot;https://www.edwardthomson.com/blog/git_tips_and_tricks_advent_calendar.html&quot;&gt;Git Advent Calendar&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Samuel Walladge explains &lt;a href=&quot;https://vimways.org/2018/vim-and-git/&quot;&gt;how to use Git with (Neo)Vim&lt;/a&gt; on Day 6 of the Vimways Advent Calendar.&lt;/li&gt;
  &lt;li&gt;Neil Kakkar’s &lt;a href=&quot;https://medium.freecodecamp.org/how-not-to-be-afraid-of-git-anymore-fe1da7415286&quot;&gt;How not to be afraid of Git anymore&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Will Hay Jr.’s &lt;a href=&quot;https://medium.com/@willhayjr/the-architecture-and-history-of-git-a-distributed-version-control-system-62b17dd37742&quot;&gt;The Architecture and History of Git: A Distributed Version Control System&lt;/a&gt;. See also:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://tom.preston-werner.com/2009/05/19/the-git-parable.html&quot;&gt;The Git Parable&lt;/a&gt;, by Tom Preston-Werner (2009) - the ideas behind the architecture of Git; covered in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;Git Rev News #30&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;slides from &lt;a href=&quot;https://docs.google.com/file/d/0Bw3FApcOlPDhMFR3UldGSHFGcjQ/view&quot;&gt;“Git Chronicles”&lt;/a&gt; talk at GitTogether 2008 - early history&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Susan Potter’s &lt;a href=&quot;http://www.aosabook.org/en/git.html&quot;&gt;Git entry&lt;/a&gt; in &lt;a href=&quot;http://www.aosabook.org/en/index.html&quot;&gt;“The Architecture of Open Source Applications” book&lt;/a&gt;, Volume II (2012); there is &lt;a href=&quot;http://www.aosabook.org/en/mercurial.html&quot;&gt;chapter on Mercurial&lt;/a&gt; in Volume I (2012).&lt;/li&gt;
  &lt;li&gt;David Gohberg’s &lt;a href=&quot;https://medium.com/@gohberg/the-biggest-misconception-about-git-b2f87d97ed52&quot;&gt;The Biggest Misconception About Git&lt;/a&gt;, that Git is all about storing differences between files.&lt;/li&gt;
  &lt;li&gt;Aditya Sridhar’s &lt;a href=&quot;https://medium.freecodecamp.org/how-to-become-a-git-expert-e7c38bf54826&quot;&gt;How to become a Git expert&lt;/a&gt;, about amending commits and rebasing&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/774125&quot;&gt;Large files with Git: LFS and git-annex&lt;/a&gt; article on LWN.net, contributed by Antoine Beaupré&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/tech-policy/2018/11/how-i-changed-the-law-with-a-github-pull-request/&quot;&gt;How I changed the law with a GitHub pull request&lt;/a&gt; article on Ars Technica, contributed by Joshua Tauberer&lt;/li&gt;
  &lt;li&gt;Caitlin Hudon’s &lt;a href=&quot;https://caitlinhudon.com/2018/11/28/git-sql-together/&quot;&gt;Git Your SQL Together (with a Query Library)&lt;/a&gt; recommends tracking SQL queries in Git&lt;/li&gt;
  &lt;li&gt;Eric S. Raymond’s &lt;a href=&quot;http://esr.ibiblio.org/?p=8205&quot;&gt;SRC, four years later&lt;/a&gt;, about his single-file version control system with modern UI&lt;/li&gt;
  &lt;li&gt;Johnathan Swan’s &lt;a href=&quot;https://medium.com/adzuna-engineering/gradually-improving-our-code-quality-with-test-perl-critic-progressive-a8f98319ac56&quot;&gt;Gradually improving our code quality with Test::Perl::Critic::Progressive&lt;/a&gt; together with Git to catch and report &lt;em&gt;new&lt;/em&gt; code style policy violations&lt;/li&gt;
  &lt;li&gt;Peter Hutterer’s &lt;a href=&quot;http://who-t.blogspot.com/2009/12/on-commit-messages.html&quot;&gt;On commit messages&lt;/a&gt; (2009)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://sr.ht/&quot;&gt;sr.ht&lt;/a&gt; (&lt;a href=&quot;https://sr.ht/&quot;&gt;https://sr.ht&lt;/a&gt;) is a very
capable software forge which is already serving the needs of many
projects in the free &amp;amp; open source software community site.  It is
100% open source software and includes goodies such as a wiki,
mailing lists, ticketing, with neat features such as all the pages
work without Javascript, and it is designed to support an email Git
workflow. Provided hosting is available for a low cost and
contributing to the software can get one credit towards hosting.
It was announced in a
&lt;a href=&quot;https://drewdevault.com/2018/11/15/sr.ht-general-availability.html&quot;&gt;sr.ht, the hacker’s forge, now open for public alpha&lt;/a&gt;
blog post.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/adobe/git-server&quot;&gt;Adobe’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-server&lt;/code&gt;&lt;/a&gt;, a &lt;a href=&quot;https://github.com/nodegit/nodegit&quot;&gt;nodegit&lt;/a&gt;-based application to serve Git repositories via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.gitbutler.com/&quot;&gt;Git Butler&lt;/a&gt;: Pull Request and Issue Workflow Automation – an alternative to &lt;a href=&quot;https://github.com/features/actions&quot;&gt;GitHub Actions&lt;/a&gt; (covered in &lt;a href=&quot;https://git.github.io/rev_news/2018/10/24/edition-44/&quot;&gt;Git Rev News #44&lt;/a&gt;), allowing to automate Git workflow by creating powerful rules with a simple visual editor&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Johannes Schindelin, Kaartic Sivaraam
and Matt Singletary.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 45 (November 21st, 2018)</title>
      <link>https://git.github.io/rev_news/2018/11/21/edition-45/</link>
      <pubDate>Wed, 21 Nov 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/11/21/edition-45/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-45-november-21st-2018&quot;&gt;Git Rev News: Edition 45 (November 21st, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 45th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of October 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CABPp-BECpSOxudovjbDG_3W9wus102RW+E+qPmd4g3Qyd-QDKQ@mail.gmail.com/&quot;&gt;commit-graph is cool&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Elijah Newren sent an email to the mailing list that started with:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;Just wanted to give a shout-out for the commit-graph work and how
impressive it is.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;He then describes a user with a repo where pushing a commit takes
more than one minute. The repo was quite “unusual” as it had a lots
of tag and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push.followTags&lt;/code&gt; config option was set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt;. Elijah
found that most of the time was spent in an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add_missing_tags()&lt;/code&gt;
function which called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;in_merge_bases_many()&lt;/code&gt; once per tag, which
“seemed rather suboptimal”, as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;in_merge_bases_many()&lt;/code&gt; does a commit
traversal which is not cheap.&lt;/p&gt;

    &lt;p&gt;Instead of optimizing this Elijah tried a development version of the
commit-graph feature. The commit-graph feature itself is a quite
recent feature in Git that was developed by Derrick Stolee, alias
Stolee, who blogged about it:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/06/25/supercharging-the-git-commit-graph/&quot;&gt;Supercharging the Git Commit Graph&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/07/02/supercharging-the-git-commit-graph-ii-file-format/&quot;&gt;Supercharging the Git Commit Graph II: File Format&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/07/09/supercharging-the-git-commit-graph-iii-generations/&quot;&gt;Supercharging the Git Commit Graph III: Generations and Graph Algorithms&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/07/16/super-charging-the-git-commit-graph-iv-bloom-filters/&quot;&gt;Supercharging the Git Commit Graph IV: Bloom Filters&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;(These links were already provided in &lt;a href=&quot;https://git.github.io/rev_news/2018/07/18/edition-41/&quot;&gt;Git Rev News edition 41 last July&lt;/a&gt;.
Stolee has been interviewed in &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News edition 42 last August&lt;/a&gt;.)&lt;/p&gt;

    &lt;p&gt;Elijah found that the commit-graph feature reduced the time of a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push --dry-run&lt;/code&gt; by a factor of over 100, from over a minute to
sub-second, though this speed up came from making all the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;in_merge_bases_many()&lt;/code&gt; calls much faster, not from reducing the
number of calls to this function.&lt;/p&gt;

    &lt;p&gt;Stolee replied that the generation numbers feature in the
commit-graph file is likely what makes the calls much faster, as it
can often avoid commit traversals altogether.&lt;/p&gt;

    &lt;p&gt;Jeff King, alias Peff, also replied to Elijah suggesting
implementing an “all-points” traversal instead of many commit
traversals. Peff also noticed that generation numbers might give a
better answer in some cases as commit traversals are “susceptible to
wrong answers due to clock skew”.&lt;/p&gt;

    &lt;p&gt;Stolee a few weeks later sent
&lt;a href=&quot;https://public-inbox.org/git/pull.60.git.gitgitgadget@gmail.com/&quot;&gt;a small patch series&lt;/a&gt;
to fix the behavior of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add_missing_tags()&lt;/code&gt; function by
implementing a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get_reachable_subset()&lt;/code&gt; function which does “a
many-to-many reachability test” and performs only one commit
traversal.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, and Elijah then reviewed the patch
series and discussed the implementation with Stolee.&lt;/p&gt;

    &lt;p&gt;Elijah reported that the patch series indeed improved the time of a
dry-run push from around 1 minutes and 20 seconds to around 3
seconds, but that it seemed that now the push was a little bit
faster without the commit-graph feature. After discussing this with
Stolee and running additional tests though Elijah reported that he
had made a mistake in testing Stolee’s patch series and that using
the commit-graph feature was still faster even with the patch series.&lt;/p&gt;

    &lt;p&gt;Ævar Arnfjörð Bjarmason also replied to Elijah’s initial email to
say that users can set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fetch.pruneTags&lt;/code&gt; config option to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; to
avoid accumulating local-only tags. Elijah then thanked Ævar for the
suggestion.&lt;/p&gt;

    &lt;p&gt;A few days later Stolee sent
&lt;a href=&quot;https://public-inbox.org/git/pull.60.v2.git.gitgitgadget@gmail.com/&quot;&gt;a slightly improved version of his small patch series&lt;/a&gt;.
This version has recently been merged into the master branch, so it
should be in the upcoming v2.20.0 Git release
&lt;a href=&quot;https://tinyurl.com/gitCal&quot;&gt;scheduled for the beginning of December&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/86tvl0zhos.fsf@gmail.com/t/#u&quot;&gt;[RFC] Generation Number v2&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/technical/commit-graph.adoc&quot;&gt;commit-graph&lt;/a&gt;
file mechanism (see the description above) accelerates commit graph
walks in the two following ways:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;Getting basic commit data (satisfying requirements of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parse_commit_gently()&lt;/code&gt;) without decompressing and parsing.&lt;/li&gt;
      &lt;li&gt;Reducing the time it takes to walk commits and determine
topological relationships by providing “generation number” (as a
negative-cut reachability index), which makes it possible skip
walking whole parts of commit graph.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;The current version of the generation number has the advantage over
using heuristic based on the commit date that it is always correct.
It turned out however that in some cases it can give worse
performance than using the date heuristics; that is why its use got
limited in &lt;a href=&quot;https://public-inbox.org/git/efa3720fb40638e5d61c6130b55e3348d8e4339e.1535633886.git.gitgitgadget@gmail.com/&quot;&gt;[PATCH 1/1] commit: don’t use generation numbers if not
needed&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;For the same reason why &lt;a href=&quot;https://public-inbox.org/git/pull.25.git.gitgitgadget@gmail.com/&quot;&gt;[PATCH 0/6] Use generation numbers for
–topo-order&lt;/a&gt;,
and its subsequent revisions, also limited its use:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;One notable case that is not included in this series is the case
of a history comparison such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rev-list --topo-order A..B&lt;/code&gt;.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Removing this limitation yields correct results, but the performance
is worse.&lt;/p&gt;

    &lt;p&gt;That is why Derrick Stolee sent &lt;a href=&quot;https://public-inbox.org/git/86tvl0zhos.fsf@gmail.com/t/#u&quot;&gt;this RFC&lt;/a&gt;:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;We’ve discussed in several places how to improve upon generation
numbers. This RFC is a report based on my investigation into a
few new options, and how they compare for Git’s purposes on
several existing open-source repos.&lt;/p&gt;

      &lt;p&gt;You can find this report and the associated test scripts at
&lt;a href=&quot;https://github.com/derrickstolee/gen-test&quot;&gt;https://github.com/derrickstolee/gen-test&lt;/a&gt;.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;blockquote&gt;
      &lt;p&gt;Please also let me know about any additional tests that I could
run. Now that I’ve got a lot of test scripts built up, I can re-run
the test suite pretty quickly.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;He then explains why Generation Number v2 is needed:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;Specifically, some algorithms in Git already use commit date as a
heuristic reachability index. This has some problems, though, since
commit date can be incorrect for several reasons (clock skew between
machines, purposefully setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_COMMIT_DATE&lt;/code&gt; to the author date, etc.).
However, the speed boost by using commit date as a cutoff was so
important in these cases, that the potential for incorrect answers was
considered acceptable.&lt;/p&gt;

      &lt;p&gt;When these algorithms were converted to use generation numbers, we
&lt;em&gt;added&lt;/em&gt; the extra constraint that the algorithms are &lt;em&gt;never incorrect&lt;/em&gt;.
Unfortunately, this led to some cases where performance was worse than
before. There are known cases where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git merge-base A B&lt;/code&gt; or
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --topo-order A..B&lt;/code&gt; are worse when using generation numbers
than when using commit dates.&lt;/p&gt;

      &lt;p&gt;This report investigates four replacements for generation numbers, and
compares the number of walked commits to the existing algorithms (both
using generation numbers and not using them at all). We can use this
data to make decisions for the future of the feature.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;The very rough implementation of those four proposed generation
numbers can be found in &lt;a href=&quot;https://github.com/derrickstolee/git/tree/reach-perf&quot;&gt;the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reach-perf&lt;/code&gt; branch in 
https://github.com/derrickstolee/git&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Based on performed benchmarks (by comparing the number of commits
walked with the help of &lt;a href=&quot;https://public-inbox.org/git/pull.29.git.gitgitgadget@gmail.com/t/#u&quot;&gt;trace2&lt;/a&gt;
facility), Stolee proposed to pursue one of the following options,
though he was undecided about which one to choose:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;Maximum Generation Number.&lt;/li&gt;
      &lt;li&gt;Corrected Commit Date.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;Maximum generation number has the advantage that it is
backwards-compatibile, that is it can be used (but not updated) with
the current code; however it is not locally-computable or
immutable.  Corrected commit date would require changes to the
commit-graph format, but it can be updated incrementally.&lt;/p&gt;

    &lt;p&gt;Junio C Hamano &lt;a href=&quot;https://public-inbox.org/git/86tvl0zhos.fsf@gmail.com/t/#m83011e1c6f4dedf35a2e167870cdcb1bfda46e30&quot;&gt;replied&lt;/a&gt;
that:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;[…] I personally do not think being compatible with
currently deployed clients is important at all (primarily because I
still consider the whole thing experimental), and there is a clear
way forward once we correct the mistake of not having a version
number in the file format that tells the updated clients to ignore
the generation numbers.  For longer term viability, we should pick
something that is immutable, reproducible, computable with minimum
input—all of which would lead to being incrementally computable, I
would think.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;It looks like the Corrected Commit Date is the way
forward,… unless the variant of Maximum Generation
Number &lt;a href=&quot;https://public-inbox.org/git/86ftwjzv1h.fsf@gmail.com/t/#e6a1ca42ad3dd0e9f3a63912af404973be4cbe181&quot;&gt;proposed by Jakub Narębski&lt;/a&gt;,
which looks like it could be updated almost incrementally, would
turn out to be better.  The change to use Corrected Commit Date
would require new revision of the commit-graph format (which includes
a version number, fortunately).  Derrick Stolee &lt;a href=&quot;https://public-inbox.org/git/6902dbff-d9f6-e897-2c20-d0cb47a50795@gmail.com/&quot;&gt;writes&lt;/a&gt;:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;Here is my list for what needs to be in the next
version of the commit-graph file format:&lt;/p&gt;

      &lt;ol&gt;
        &lt;li&gt;
          &lt;p&gt;A four-byte hash version.&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;File incrementality (split commit-graph).&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;Reachability Index versioning&lt;/p&gt;
        &lt;/li&gt;
      &lt;/ol&gt;

      &lt;p&gt;Most of these changes will happen in the file header. The chunks
themselves don’t need to change, but some chunks may be added that
only make sense in v2 commit-graphs.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-elijah-newren&quot;&gt;Developer Spotlight: Elijah Newren&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;Big question; I’ll answer in three parts, and see if I can use a
little humor to offset the lengthy answer.&lt;/p&gt;

    &lt;p&gt;Personally, I’m a husband to the most amazing woman in the world, and
a father to one son and six daughters.  My wife is expecting again, so
next spring my son will get something he’s never had before: a seventh
sister!  I’m a devout member of
&lt;a href=&quot;https://www.lds.org&quot;&gt;The Church of Jesus Christ of Latter-day Saints&lt;/a&gt;.
I received a PhD in mathematics from the
&lt;a href=&quot;http://www.math.utah.edu/~newren/&quot;&gt;University of Utah&lt;/a&gt;, which
aside from meaning I’ve forgotten more math than most people will
ever know, comes with one primary benefit: when my kids need a
“doctor’s note”, it’s often the case that someone has overlooked
specifying that the note needs to come from a medical doctor.
Sadly, my wife has vetoed me writing these notes myself, which just
goes to show that a doctorate isn’t all it’s cracked up to be.&lt;/p&gt;

    &lt;p&gt;In the open source world, in addition to my contributions to Git in
more recent years, I was once upon a time heavily involved in the
Gnome community; a
&lt;a href=&quot;https://thegnomejournal.wordpress.com/2006/04/21/behind-the-scenes-elijah-newren/&quot;&gt;behind the scenes interview&lt;/a&gt;
I did with them may still be interesting, particularly the
travelling tips.&lt;/p&gt;

    &lt;p&gt;Professionally, I worked at &lt;a href=&quot;https://www.sandia.gov/&quot;&gt;Sandia National Labs&lt;/a&gt;
for about six years, transitioning during that time from working on
fluid dynamics codes to working on tools to make other developers more
productive. Palantir lured me away in early 2013 with a cool
&lt;a href=&quot;https://www.palantir.com/about/&quot;&gt;mission&lt;/a&gt; (especially
intriguing to me at the time was the results they were getting in
&lt;a href=&quot;https://www.palantir.com/philanthropy-engineering/annual-report/2017/ncmec.html&quot;&gt;fighting child exploitation and recovering missing children&lt;/a&gt;),
and an understanding that I would get to work on open source stuff
like Gerrit and Git. The underlying mission has remained cool (despite
some contrary claims in the media these days), but between managerial
turnover and the short-term focus of a startup, it took a long time
before I actually had the opportunity to work on Git even part time.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;I’ve contributed to a few different places in Git, but most of my
contributions have been around merging. I’ve put a lot of work into
addressing edge and corner cases; possibly too much: Junio has named
some of my patch series things like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;en/t6042-insane-merge-rename-testcases&lt;/code&gt;.  Part of the reason for
addressing edge and corner cases, though, dovetails with my other
work towards fixing, documenting, testing, and restructuring the
recursive merge machinery with an eye towards changing out the
&lt;a href=&quot;https://public-inbox.org/git/xmqqd147kpdm.fsf@gitster.mtv.corp.google.com/&quot;&gt;basic implementation strategy&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;A while ago I found a bug in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge-recursive.c&lt;/code&gt; and traced it back to
code introduced years ago by myself, but then found that the original
bug was only an issue because of some other problem created years
ago…that also traced back to me. Sometimes merge-recursive.c feels
like it’s all my fault other than the original implementation
design. So, not only have I mostly worked on stuff that few people
will ever notice, but once I change the implementation underpinnings,
merge problems can be entirely my fault too. :-)&lt;/p&gt;

    &lt;p&gt;The most notable thing I’ve contributed that users are likely to
notice is directory rename detection in the merge machinery. An
amusing bit of trivia about that feature is that GitHub highlighted
this feature in their
&lt;a href=&quot;https://blog.github.com/2018-09-10-highlights-from-git-2-19/#directory-rename-detection&quot;&gt;Highlights from Git 2.19&lt;/a&gt;,
even though this was a feature added in Git 2.18. (I’m not
complaining since this meant more exposure to my pet feature, I just
found it humorous.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I’m currently creating a replacement for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-branch&lt;/code&gt; that I’m
provisionally naming &lt;a href=&quot;https://github.com/newren/git-repo-filter/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repo-filter&lt;/code&gt;&lt;/a&gt;.
My goal is to address what I perceive to be a few glaring
deficiencies of the otherwise versatile and cool filter-branch
tool. It’s not ready for external consumption at all yet (one
problem of many is that it depends on Git patches which I just
recently posted to the list). I’ll submit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repo-filter&lt;/code&gt; to the list
when it’s closer to ready.&lt;/p&gt;

    &lt;p&gt;I’ve done some work to document inconsistencies and incompatible
flag pairs in rebase, due to its multiple different backends. I’m
slowly doing some ongoing work to make that behavior more uniform. One
particular difference that ties into my other work concerns directory
rename detection: I want that capability for rebases as well as merges
and cherry-picks. However, directory rename detection in rebase is
&lt;a href=&quot;https://public-inbox.org/git/xmqqh8jeh1id.fsf@gitster-ct.c.googlers.com/&quot;&gt;backend dependent, and the default backend lacks this ability&lt;/a&gt;.
Dscho has some performance concerns with switching the default backend
(fewer than he used to now that the various rebase-in-C rewrites have
merged), so fixing that issue might depend on some more merge work
first.&lt;/p&gt;

    &lt;p&gt;I will also soon get back to my
&lt;a href=&quot;https://public-inbox.org/git/xmqqk1ydkbx0.fsf@gitster.mtv.corp.google.com/&quot;&gt;rewrite of the implementation strategy from merge-recursive&lt;/a&gt;.
While that may not sound too exciting to most users, I think it
could net some nice maintainability wins, improve performance (thus
perhaps allowing the rebase switchover), fix a variety of
edge/corner cases we currently fail, and make some new features
easier to implement (e.g. merges in bare repos, cherry-picking to an
un-checked-out branch, remerge-diff capability, and tree-based
trivial merges).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I’d be happy if I could be allowed to work full time on Git
myself. Getting a full time team?  Well…&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Work on all the stuff I mentioned above (including the features
I think my current work would enable)&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Upstream or at least release and open source our snowflake report
tool, to help other groups (if there are any) that also weirdly
support way too many customer-specific branches and want a better
way to determine what changes have already been ported back to the
main development branch.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Improve performance on large repositories (in particular, storing
and using a partial index that includes some tree entries and
omits files underneath, used together with partial clones and
sparse checkouts).&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Add a couple alternative forms of binary storage.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Create a better webby merge review tool. One which treats commits
as the unit of review and branches as the unit of merging,
possibly based on or taking advantage of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;range-diff&lt;/code&gt;. One which
encourages writing clean history that is easy for future readers
to follow. (This includes making commit messages a fundamental
part of what is reviewed, expecting and working with multiple
commits as separate small atomic steps, avoiding fixup commits in
the final while also not doing user-hostile history-destroying
squash merges, and if it wasn’t clear already from the previous
requirements it needs to work reasonably with and not be hostile
to rebases). Also, it shouldn’t botch commit order (I understand
that merges may be difficult and some form of linearization may be
in order, but messing up the topology of a linear history is
unforgivable; doubly so when you document it as intended), and it
shouldn’t use magic refnames. There are probably other issues
from the various systems I have used that I could add into the
above requirements, but the list already rules out all existing
tools that I know of. Git’s (and Linux’s) email based workflow is
the only one I know of to get all these things right; however, the
problems with getting an email workflow running make it a
non-starter for many groups. I wish there were something better
than the current offerings to point people to, or that one of the
existing offerings would transform into this tool.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Perhaps just make checkout and reset do just one thing each?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I would have said &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tbdiff&lt;/code&gt;, but now &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;range-diff&lt;/code&gt; is built in. I could
mention various repository management and code review tools
(particularly a few that bundle these capabilities together), but
it’s hard to pick a “favorite” as the ones I know all tend to be
strong in some area(s) and extremely weak in others.&lt;/p&gt;

    &lt;p&gt;I’m not sure if &lt;a href=&quot;https://public-inbox.org/git/&quot;&gt;public-inbox.org/git&lt;/a&gt; qualifies as a “Git-related
tool or library”, but it’s been very helpful. I also use Dscho’s
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apply-from-public-inbox.sh&lt;/code&gt; script to apply submitted patch series
locally.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqh8gefowy.fsf@gitster-ct.c.googlers.com/&quot;&gt;2.20.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.20.0-rc0.windows.1&quot;&gt;2.20.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;StGit &lt;a href=&quot;https://public-inbox.org/git/1541522776.3963181.1567641696.46EFA2E6@webmail.messagingengine.com&quot;&gt;0.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.27.7&quot;&gt;0.27.7&lt;/a&gt;,
&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.27.6&quot;&gt;0.27.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.15.2/notes&quot;&gt;2.15.2&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.9/notes&quot;&gt;2.14.9&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.15/notes&quot;&gt;2.13.15&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.23/notes&quot;&gt;2.12.23&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.15.1/notes&quot;&gt;2.15.1&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.8/notes&quot;&gt;2.14.8&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.14/notes&quot;&gt;2.13.14&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.22/notes&quot;&gt;2.12.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2018/11/05/gitlab-11-4-5-released/&quot;&gt;11.4.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/11/01/critical-security-release-gitlab-11-dot-4-dot-4-released/&quot;&gt;11.4.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/10/29/security-release-gitlab-11-dot-4-dot-3-released/&quot;&gt;11.4.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/10/22/gitlab-11-4-released/&quot;&gt;11.4.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.16.html&quot;&gt;2.16&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#2157&quot;&gt;2.15.7&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.14.html#21417&quot;&gt;2.14.17&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.1.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.5.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://product-downloads.atlassian.com/software/sourcetree/ReleaseNotes/Sourcetree_3.0.html&quot;&gt;3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20181109104202.GA8717@sigill.intra.peff.net&quot;&gt;Git Merge Contributor’s Summit Jan 31, 2019, Brussels&lt;/a&gt;
as part of the &lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge Conference&lt;/a&gt;
has been announced on the mailing list. All contributors to Git
or related projects in the Git ecosystem are invited.&lt;br /&gt;
Open source addicts may also want to
attend the &lt;a href=&quot;https://fosdem.org/2019/&quot;&gt;FOSDEM&lt;/a&gt; conference on the two subsequent days.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.outreachy.org/alums/&quot;&gt;Outreachy interns&lt;/a&gt; for the
December 2018 to March 2019 round have been announced. Two Outreachy
interns will work on Git. Slavica Đukić mentored by Johannes
Schindelin will work on turning &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add -i&lt;/code&gt; into a built-in, while
Tanushree Tumane co-mentored by Christian Couder and Johannes
Schindelin will work on improving &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt;. GitHub will sponsor
these internships.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://gitenterprise.me/2018/11/18/gerrit-user-summit-2018-2/&quot;&gt;Gerrit User Summit 2018, Summary Report&lt;/a&gt; has been published.
The Gerrit User Summit 2018 at Cloudera in Palo Alto has ended with
over 80+ participants coming from all over the world. Main topics
have been the release of Gerrit v2.16, support for Git protocol v2,
Gerrit DevOps Analytics &amp;amp; Insights and the support for Kubernetes.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;In June Microsoft announced an agreement to acquire GitHub for $7.5 billion (this was covered by &lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;Git Rev News Edition #40&lt;/a&gt;). The acquisition is now completed:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.geekwire.com/2018/microsoft-completes-7-5b-github-acquisition-says-user-base-grown-31m-developers/&quot;&gt;Microsoft completes $7.5B GitHub acquisition, says user base has grown to 31M developers&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://mashable.com/article/microsoft-closes-7-5-billion-github-acquisition/&quot;&gt;Microsoft officially closes $7.5 billion purchase of GitHub&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2018/10/github-is-now-officially-a-part-of-microsoft/&quot;&gt;GitHub is now officially a part of Microsoft&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.github.com/2018-10-05-git-submodule-vulnerability/&quot;&gt;Git Submodule Vulnerability Announced&lt;/a&gt; (CVE-2018-17456), fixed in v2.19.1, backported to v2.14.5, v2.15.3, v2.16.5, v2.17.2, and v2.18.1.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://dangitgit.com/&quot;&gt;Dangit, git!&lt;/a&gt; by Katie Sylor-Miller – figuring out how to fix your mistakes. Also in the form of ready to print $10 &lt;a href=&quot;https://gumroad.com/l/dangit-git&quot;&gt;Dangit, git! Recipes for gitting out of a Git mess&lt;/a&gt; zine on Gumroad.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/20-useful-tools-for-open-source-maintainers-ee86a09e04e5&quot;&gt;20 useful tools for open-source maintainers&lt;/a&gt; by Kazz Yokomizo, includes a series of &lt;a href=&quot;https://github.com/probot/probot&quot;&gt;Probot&lt;/a&gt;-based GitHub Apps, various continuous integration tools, and more.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.inc.com/cameron-albert-deitch/2018-inc5000-gitlab.html&quot;&gt;How This Startup [GitLab] Made $10.5 Million in Revenue With Every Single Employee Working From Home&lt;/a&gt; by Cameron Albert-Deitch.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/adityasridhar/how-to-use-git-efficiently-2pfa&quot;&gt;How to use git efficiently&lt;/a&gt; (also on &lt;a href=&quot;https://medium.freecodecamp.org/how-to-use-git-efficiently-54320a236369&quot;&gt;Medium&lt;/a&gt;) by Aditya Sridhar, describing particular workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitote.in/&quot;&gt;Gitote&lt;/a&gt; (&lt;a href=&quot;https://gitote.in/&quot;&gt;https://gitote.in&lt;/a&gt;)
is a new Git repository hosting site, an alternative to GitHub, GitLab, Bitbucket, etc.
It is developed from &lt;a href=&quot;https://gogs.io&quot;&gt;Gogs&lt;/a&gt; fork, and powered by &lt;a href=&quot;https://www.digitalocean.com/&quot;&gt;DigitalOcean&lt;/a&gt;.
Announced in &lt;a href=&quot;https://dev.to/gitote/gitote-has-been-launched-m35&quot;&gt;Gitote is out now&lt;/a&gt; blog post.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bitsrc.io&quot;&gt;Bit&lt;/a&gt; (&lt;a href=&quot;https://github.com/teambit/bit&quot;&gt;on GitHub&lt;/a&gt;) helps you organize your components, share them as a team and keep them synced in all your projects; it helps to seamlessly isolate components (sets of files) from any existing repository and share them.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://metacpan.org/pod/Git::IssueManager&quot;&gt;Git::IssueManager&lt;/a&gt; is a Perl module for managing issues in a git branch within your repository, creating a distributed issue management system; see also &lt;a href=&quot;https://git.github.io/rev_news/2018/09/19/edition-43/&quot;&gt;Git Rev News Edition #43&lt;/a&gt; for more bug trackers embedded in Git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pre-commit.com&quot;&gt;pre-commit Python module&lt;/a&gt; is a framework for managing and maintaining multiple multi-language pre-commit hooks.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/okonet/lint-staged&quot;&gt;lint-staged&lt;/a&gt; runs linters on Git staged files.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/qw3rtman/git-fire&quot;&gt;git-fire&lt;/a&gt; is a Git plugin to save (add, commit and push) your code in the case of emergency.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Luca Milanesio, Elijah Newren, Derrick Stolee
and Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 44 (October 24th, 2018)</title>
      <link>https://git.github.io/rev_news/2018/10/24/edition-44/</link>
      <pubDate>Wed, 24 Oct 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/10/24/edition-44/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-44-october-24th-2018&quot;&gt;Git Rev News: Edition 44 (October 24th, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 44th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of September 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20180917230307.588334-1-sandals@crustytoothpaste.net/&quot;&gt;Add an EditorConfig file&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Brian Carlson sent a patch that adds a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.editorconfig&lt;/code&gt; file to the
Git codebase.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://editorconfig.org/&quot;&gt;EditorConfig web site&lt;/a&gt; explains the
purpose and format of such files. It also list a number of
&lt;a href=&quot;https://editorconfig.org/#download&quot;&gt;text editors&lt;/a&gt; that support such
files either natively or after installing a plugin.&lt;/p&gt;

&lt;p&gt;The goal of adding this file to the Git codebase is to make it easier
to automatically configure one’s editor. This will help contributors,
especially new ones, follow the many indentation rules used in the Git
codebase without having to read the &lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/CodingGuidelines&quot;&gt;CodingGuidelines document&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Taylor Blau, who has been using Vim with the editorconfig-vim plugin
for years, supported the patch and the choice of settings that Brian
had written in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.editorconfig&lt;/code&gt; file. He suggested adding a
guideline to enforce at most 72 characters per line in commit
messages.&lt;/p&gt;

&lt;p&gt;Junio Hamano, the Git maintainer, also replied to Brian wondering how
to keep the content of the file in sync with the &lt;a href=&quot;https://github.com/git/git/blob/master/.clang-format&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.clang-format&lt;/code&gt; file&lt;/a&gt;
that is already part of the project and can be used through the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;style&lt;/code&gt; Makefile target.&lt;/p&gt;

&lt;p&gt;Brian replied to Junio that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make style&lt;/code&gt; is not run automatically and
only formats C code, not Perl, Python, shell code and commit
messages. Brian also said that he had trouble running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make style&lt;/code&gt; as
it invokes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clang-format&lt;/code&gt; as a Git subcommand.&lt;/p&gt;

&lt;p&gt;Junio replied that in an ideal dream-world, an EditorConfig driven
tool solution to “generate clang-format configuration from the section
for C language in any EditorConfig file” already existed,
but otherwise he would be “perfectly OK if the plan is to manually
keep them (loosely) in sync”.&lt;/p&gt;

&lt;p&gt;Eric Sunshine then pointed Brian to &lt;a href=&quot;https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/git-clang-format&quot;&gt;git-clang-format&lt;/a&gt;
which integrates &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clang-format&lt;/code&gt; with Git, so that clang-format can be
run on the changes in current files or a specific commit.&lt;/p&gt;

&lt;p&gt;This prompted Peff and Brian to discuss possible improvements in
Debian or Git that would make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-clang-format&lt;/code&gt; work better.&lt;/p&gt;

&lt;p&gt;Responding to Junio, Brian suggested adding a script to check that
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.editorconfig&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.clang-format&lt;/code&gt; were kept in sync, but Junio
replied that adding a comment in both files saying that they should be
kept in sync would be enough.&lt;/p&gt;

&lt;p&gt;Brian resent an &lt;a href=&quot;https://public-inbox.org/git/20181008202903.100166-1-sandals@crustytoothpaste.net/&quot;&gt;improved version&lt;/a&gt;
of his patch which enforces at most 72 characters per line in commit
messages along with another patch that adds the comments that Junio
suggested.&lt;/p&gt;

&lt;p&gt;Ævar Arnfjörð Bjarmason suggested an improvement to also catch Perl
files with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.pl&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.pm&lt;/code&gt; file extensions. Brian
implemented this in a &lt;a href=&quot;https://public-inbox.org/git/20181008220353.780301-1-sandals@crustytoothpaste.net/&quot;&gt;third version&lt;/a&gt;
of his patches.&lt;/p&gt;

&lt;p&gt;This third version should be merged into the “master” branch soon.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqy3bcuy3l.fsf@gitster-ct.c.googlers.com&quot;&gt;2.14.5, 2.15.3, 2.16.5, 2.17.2, 2.18.1, and 2.19.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.19.1.windows.1&quot;&gt;2.19.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.27.5&quot;&gt;0.27.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2sharp &lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.25.3&quot;&gt;0.25.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#2155&quot;&gt;2.15.5&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#2154&quot;&gt;2.15.4&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#2153&quot;&gt;2.15.3&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#2152&quot;&gt;2.15.2&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#2151&quot;&gt;2.15.1&lt;/a&gt;,
&lt;a href=&quot;https://www.gerritcodereview.com/2.15.html&quot;&gt;2.15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;5.15&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.15.0/notes&quot;&gt;2.15.0&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.7/notes&quot;&gt;2.14.7&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.13/notes&quot;&gt;2.13.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.21/notes&quot;&gt;2.12.21&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.6/notes&quot;&gt;2.14.6&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.12/notes&quot;&gt;2.13.12&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.20/notes&quot;&gt;2.12.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2018/10/17/gitlab-11-3-6-released/&quot;&gt;11.3.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/10/15/gitlab-11-3-5-released/&quot;&gt;11.3.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/10/05/critical-security-release-11-3-4/&quot;&gt;11.3.4, 11.2.5, and 11.1.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/10/04/gitlab-11-3-3-released/&quot;&gt;11.3.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/10/01/security-release-gitlab-11-dot-3-dot-1-released/&quot;&gt;11.3.1, 11.2.4, and 11.1.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/09/22/gitlab-11-3-released/&quot;&gt;11.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.6&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.5&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.4&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.3&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;4.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.4.3&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.4.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.4.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The Git community is still looking for an
&lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt; applicant to work on a Git
related project from December 2018 to March 2019. Two different
projects are proposed on the &lt;a href=&quot;https://www.outreachy.org/apply/project-selection/&quot;&gt;list of all the open projects&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;New Git PLC Members have been &lt;a href=&quot;https://public-inbox.org/git/20180925215112.GA29627@sigill.intra.peff.net/&quot;&gt;announced&lt;/a&gt;.
Ævar Arnfjörð Bjarmason and Christian Couder are joining Junio
Hamano and Jeff King (alias Peff) in the committee representing the
Git project as part of Software Freedom Conservancy.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.github.com/2018-09-10-highlights-from-git-2-19/&quot;&gt;Highlights from Git 2.19&lt;/a&gt; on the GitHub Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://techcrunch.com/2018/10/16/github-launches-actions-its-workflow-automation-tool/&quot;&gt;GitHub launches Actions, its workflow automation tool&lt;/a&gt;.
One may register for &lt;a href=&quot;https://github.com/features/actions&quot;&gt;GitHub Actions&lt;/a&gt; beta;
there is already &lt;a href=&quot;https://github.com/sdras/awesome-actions&quot;&gt;a short curated list of actions&lt;/a&gt; to use on GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bitbucket.org/blog/introducing-bitbucket-branching-model-support&quot;&gt;Bitbucket Cloud introduced branching model support&lt;/a&gt;,
helping to keep consistent naming decisions when creating branches,
enforcing branching permissions for different types of branches, etc.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://venturebeat.com/2018/09/19/gitlab-raises-100-million-from-iconiq-gv-and-khosla-at-1-1-billion-valuation/&quot;&gt;GitLab raises $100 million from Iconiq, GV, and Khosla, at $1.1 billion valuation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sourcegraph.com/start&quot;&gt;Sourcegraph&lt;/a&gt;, a code navigation engine for a repository with advanced search capabilities
&lt;a href=&quot;https://www.i-programmer.info/news/90-tools/12219-sourcegraph-powers-up-your-code-repository.html&quot;&gt;has just gone open-source&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.theserverside.com/video/Tips-and-tricks-on-how-to-use-Jenkins-Git-Plugin&quot;&gt;How to use the Jenkins Git Plugin: Tips and tricks&lt;/a&gt; by Cameron McKenzie&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/deploying-frontend-applications-the-fun-way-bc3f69e15331&quot;&gt;Deploying frontend applications — the fun way&lt;/a&gt; (from Git repository), by Carlos Roso&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jg.gg/2018/09/29/stacked-diffs-versus-pull-requests/&quot;&gt;Stacked Diffs versus Pull Requests&lt;/a&gt; by Jackson Gabbard&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/hardkoded/how-to-organize-your-git-branches-4dci&quot;&gt;How to organize your git branches&lt;/a&gt;, listing different approaches, by Dario Kondratiuk&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/tomerbendavid/the-second-most-voted-question-on-stackoverflow-is-60b&quot;&gt;and the second top voted question on StackOverflow is…&lt;/a&gt; by Tomer Ben David&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Makers of Sublime Text editor introduced Git GUI client: &lt;a href=&quot;https://www.sublimemerge.com/&quot;&gt;Sublime Merge&lt;/a&gt; (tagline: &lt;em&gt;Git, done Sublime&lt;/em&gt;)&lt;/li&gt;
  &lt;li&gt;TwilioQuest, an interactive, self-paced game-like learning platform now includes
&lt;a href=&quot;https://www.twilio.com/quest/mission/28&quot;&gt;Contributing to Open Source Projects on GitHub&lt;/a&gt;
quest&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 43 (September 19th, 2018)</title>
      <link>https://git.github.io/rev_news/2018/09/19/edition-43/</link>
      <pubDate>Wed, 19 Sep 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/09/19/edition-43/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-43-september-19th-2018&quot;&gt;Git Rev News: Edition 43 (September 19th, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 43rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of August 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Google Summer of Code 2018 wrap up&lt;/p&gt;

    &lt;p&gt;The three students who worked on &lt;a href=&quot;https://summerofcode.withgoogle.com/organizations/5376866043559936/#projects&quot;&gt;projects&lt;/a&gt;
to improve Git this summer as part of
&lt;a href=&quot;https://summerofcode.withgoogle.com&quot;&gt;Google Summer of Code 2018&lt;/a&gt;
have successfully passed their final evaluation.&lt;/p&gt;

    &lt;p&gt;They have created repositories with a lot of information related to their work:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Alban Gruin’s &lt;a href=&quot;https://github.com/agrn/gsoc2018&quot;&gt;Convert interactive rebase to C&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Pratik Karki’s &lt;a href=&quot;https://github.com/prertik/GSoC2018&quot;&gt;Convert rebase and its options to C&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Paul-Sebastian Ungureanu’s &lt;a href=&quot;https://github.com/ungps/gsoc2018&quot;&gt;Convert &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; to builtin&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Their patch series are still not fully merged, but it seems that this
is likely to happen after perhaps a few more review and improvement
cycles.&lt;/p&gt;

    &lt;p&gt;Fast, built-in versions of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; based on their
work are already available as experimental options in
&lt;a href=&quot;https://public-inbox.org/git/20180913022344.1348-1-johannes.schindelin@gmx.de/&quot;&gt;Git for Windows 2.19.0&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Congratulations to them and their mentors!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CACSZ0Pwzs2e7E5RUEPDcEUsa=inzCyBAptU7YaCUw+5=MutSsA@mail.gmail.com/&quot;&gt;git-bug: Distributed bug tracker embedded in git&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Michael Muré emailed the mailing list to announce that he had just
released “&lt;a href=&quot;https://github.com/MichaelMure/git-bug&quot;&gt;git-bug&lt;/a&gt;, a
distributed bug tracker that embeds in git”.&lt;/p&gt;

    &lt;p&gt;Michael had previously announced it on
&lt;a href=&quot;https://news.ycombinator.com/item?id=17782121&quot;&gt;Hacker News&lt;/a&gt;
where Ævar Arnfjörð Bjarmason suggested him to also post on the
mailing list.&lt;/p&gt;

    &lt;p&gt;Michael described his tool like this:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;It uses git’s internal storage to store bugs information in a way
that can be merged without conflict. You can push/pull to the normal
git remote you are already using to interact with other people. Normal
code and bugs are completely separated and no files are added in the
regular branches.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;and:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;It’s an all-in-one binary that is picked up by git as a porcelain
command. It features a set of CLI command for simple interaction, an
interactive terminal UI and a rich web UI.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;He also gave a &lt;a href=&quot;https://github.com/MichaelMure/git-bug/blob/master/doc/model.md&quot;&gt;link to the documentation of the internal design&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Jonathan Nieder replied to Michael asking if it might be possible to
rename the tool to use a less generic name, as Jonathan envisioned “a
future Git command like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bug&lt;/code&gt; to produce a bug report with
appropriate diagnostics for a bug in Git”.&lt;/p&gt;

    &lt;p&gt;Ævar replied to Jonathan suggesting other names for the envisioned
command to report bugs in Git, and starting a subthread about
adopting a policy regarding external tools named “git-whatever”.&lt;/p&gt;

    &lt;p&gt;This subthread involved Ævar, Jonathan and towards the end Jeff
King, alias Peff. It looks like the Git community is likely to
continue to recommend against too generic names. Peff gave the
example of the Microsoft GVFS tool which is in a similar situation,
as people are thinking about using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-vfs&lt;/code&gt; command name which
Peff also considers too generic.&lt;/p&gt;

    &lt;p&gt;Tacitus Aedifex also replied to Michael saying that he had “often
wanted an integrated bug database like this”, and that he had
created his own solution for this purpose using a “subrepo storing
bug reports and comments in .txt files” and “bash porcelain scripts”.&lt;/p&gt;

    &lt;p&gt;Junio Hamano, the Git maintainer, replied to Michael, too. He told
that this reminds him of a “demo Scott Chacon showed us ages ago”.&lt;/p&gt;

    &lt;p&gt;Jonathan added that the tool Scott demoed was TicGit. Then Jonathan
started along with Kyle Meyer to compile the following lists of
similar tools and links related to them in a small subthread:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;tools:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/jeffWelling/ticgit&quot;&gt;TicGit&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/jashmenn/ditz&quot;&gt;Ditz&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/duplys/git-issues&quot;&gt;git-issues&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/chilts/cil&quot;&gt;cil&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;http://bugseverywhere.org/&quot;&gt;Bugs Everywhere&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;milli by Steve Kemp (no copy found)&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://syncwith.us/sd/&quot;&gt;Simple Defects&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://gitorious.org/kipling/mainline&quot;&gt;Kipling&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://gitlab.com/monnier/bugit&quot;&gt;BuGit&lt;/a&gt; (&lt;a href=&quot;https://public-inbox.org/git/jwva8psr6vr.fsf-monnier+gmane.comp.version-control.git@gnu.org/&quot;&gt;discussion on the mailing list&lt;/a&gt;)&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://github.com/neithernut/git-dit&quot;&gt;git-dit&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;lists of such tools:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://dist-bugs.branchable.com/software/&quot;&gt;good list on a non Git-specific wiki&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools#Bug.2Fissue_trackers.2C_etc&quot;&gt;old list on the Git wiki&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;http://www.cs.unb.ca/~bremner/blog/posts/git-issue-trackers/&quot;&gt;nice though old list&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;&lt;br /&gt;
Jonathan commented that it was nice to see new work in this area as
“it seems to have gone mostly quiet since 2014”. He also added
git-dit authors in CC of his last email in the subthread, while
saying that git-dit seems to have “very similar goals and a similar
data model” as git-bug, and suggesting that the authors could work
“more closely together”.&lt;/p&gt;

    &lt;p&gt;This later prompted Julian Ganz, a co-author of git-dit, to request
comments in an email called
“&lt;a href=&quot;https://public-inbox.org/git/20180820195929.58444ae0@neithernut.Speedport_W_921V_1_39_000/&quot;&gt;[RFC] Git enumerations&lt;/a&gt;”
about a functionality which he had originally planned on introducing
it as a git-dit internal feature. Unfortunately, it looks like no one
commented on the proposed feature.&lt;/p&gt;

    &lt;p&gt;Jonathan also sent another reply to Michael’s original
email. Commenting on the &lt;a href=&quot;https://github.com/MichaelMure/git-bug/blob/master/doc/model.md&quot;&gt;documentation of the internal design&lt;/a&gt;
of git-bug, he said that he likes that git-bug uses the hash of the
first commit in the chain of related commits as identifier for
the bug.&lt;/p&gt;

    &lt;p&gt;About the fact that Git doesn’t provide a low-level command to
rebase a branch onto another without touching the index, Jonathan
replied that a lot of related work has been done lately, as merge
code (also used for cherry-pick) is less reliant on the index and
worktree, and rebase code is being ported to C (see the article
about Google Summer of Code 2018 above). Jonathan suggested setting
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_INDEX&lt;/code&gt; environment variable to point to a temporary index
file as a work-around until something like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick --onto=&amp;lt;branch&amp;gt; &amp;lt;revisions&amp;gt;&lt;/code&gt; is implemented.&lt;/p&gt;

    &lt;p&gt;Jonathan then asked about which federation model git-bug intends to
support. Michael replied giving technical details about how the tool
works and saying:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;So for now, collaboration is based on push/pull to whatever remote you
want, as git does, with the exception of the Web UI. The goal here is
to have it running locally for each user but also to make it a public
interface for users that don’t have write access to the repo, much
like any bug tracker has.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;and:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;In the future, it could be possible to have more fancy features like a
federated forge with ActivityPub, but that’s way outside of the scope
of the project for now.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;About Jonathan’s suggestion for an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--onto&lt;/code&gt; option in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
cherry-pick&lt;/code&gt;, Elijah Newren replied that, after his current work on
the merge code, he indeed wanted to work on that, and also
investigate “in-memory” merges to improve interactive rebase
performance. He agreed that “we’re pretty close to having a
rebase-without-touching-index-or-worktree that we can make
accessible to other scripts like git-bug”.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqin3dru2u.fsf@gitster-ct.c.googlers.com/&quot;&gt;v2.19.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqsh2o6ge6.fsf@gitster-ct.c.googlers.com/&quot;&gt;v2.19.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqftyyfecy.fsf@gitster-ct.c.googlers.com/&quot;&gt;v2.19.0-rc1&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqwoskadpe.fsf@gitster-ct.c.googlers.com/&quot;&gt;v2.19.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.19.0.windows.1&quot;&gt;v2.19.0(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2018/08/28/security-release-gitlab-11-dot-2-dot-2-released/&quot;&gt;11.2.3, 11.1.6, and 11.0.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/08/23/gitlab-11-2-1-released/&quot;&gt;11.2.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/08/22/gitlab-11-2-released/&quot;&gt;11.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;v5.14&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://groups.google.com/forum/#!msg/repo-discuss/iTc-8qSHNOM/WchxHqg7BQAJ;context-place=forum/repo-discuss&quot;&gt;v2.14.12&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.14.5&quot;&gt;v2.14.5&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.11&quot;&gt;v2.13.11&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.19&quot;&gt;v2.12.19&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.11.25&quot;&gt;v2.11.25&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.4&quot;&gt;v2.14.4&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.10&quot;&gt;v2.13.10&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.18&quot;&gt;v2.12.18&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.11.24&quot;&gt;v2.11.24&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.3&quot;&gt;v2.14.3&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.9&quot;&gt;v2.13.9&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.17&quot;&gt;v2.12.17&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.11.23&quot;&gt;v2.11.23&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;v1.4.0&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;v1.3.5&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;v1.3.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;v4.0.4&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;v4.0.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dzone.com/articles/gitops-git-push-all-the-things&quot;&gt;GitOps — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; all the things&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gerrit.googlesource.com/summit/2018/+/master/index.md&quot;&gt;Gerrit User Summit 2018&lt;/a&gt; will be hosted at Cloudera HQ in Palo Alto,
15-16 Nov. Registration is now open to all Gerrit and JGit users, maintainers and supporters.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.github.com/2018-09-10-highlights-from-git-2-19/&quot;&gt;Highlights from Git 2.19&lt;/a&gt; on The GitHub Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.github.com/2018-07-31-new-improvements-and-best-practices-for-account-security-and-recoverability/&quot;&gt;New improvements and best practices for account security and recoverability at GitHub&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hub.packtpub.com/git-bug-a-new-distributed-bug-tracker-embedded-in-git/&quot;&gt;Git-bug: A new distributed bug tracker embedded in git&lt;/a&gt; by Melisha Dsouza on Packt Hub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://philna.sh/blog/2018/08/21/git-commands-to-keep-a-fork-up-to-date/&quot;&gt;Git commands to keep a fork up to date&lt;/a&gt; by Phil Nash&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/drews256/i-love-git-log-off&quot;&gt;I love git log&lt;/a&gt; by Andrew Stuntz&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://code-maven.com/enforce-fast-forward-as-merge-strategy&quot;&gt;Enforce fast forward as merge strategy in Git&lt;/a&gt; and some of Git hosting sites, by Gabor Szabo&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://code-maven.com/enforcing-commit-message-format-in-git&quot;&gt;Enforcing commit message format in Git – on the client side&lt;/a&gt; with &lt;a href=&quot;https://git-scm.com/docs/githooks#_commit_msg&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit-msg&lt;/code&gt; hook&lt;/a&gt; by Gabor Szabo&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://polyhacks17.github.io/github-workshop/&quot;&gt;Slides from Git &amp;amp; GitHub Getting Started Workshop&lt;/a&gt;, originally by Gwen Lofman, modified by Greg Willard&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/robertcoopercode/using-aliases-to-speed-up-your-git-workflow-2f5a&quot;&gt;Using [Shell] Aliases to Speed Up Your Git Workflow&lt;/a&gt; by Robert Cooper&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/tomerbendavid/the-second-most-voted-question-on-stackoverflow-is-60b&quot;&gt;and the second top voted question on StackOverflow is… how to undo the most recent commit in Git&lt;/a&gt; by Tomer Ben David&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://redfin.engineering/visualize-merge-history-with-git-log-graph-first-parent-and-no-merges-c6a9b5ff109c&quot;&gt;Visualize Merge History with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --graph&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--first-parent&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-merges&lt;/code&gt;&lt;/a&gt; by Dan Fabulich (2017)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@tygertec/how-to-find-stuff-in-git-35d4cb8c1845&quot;&gt;How to find stuff in Git&lt;/a&gt; by Ty Walls (2017)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sharkdp/bat&quot;&gt;bat&lt;/a&gt;, a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat(1)&lt;/code&gt; clone with syntax highlighting and Git integration&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lernajs.io/&quot;&gt;Lerna&lt;/a&gt; is a tool that optimizes the workflow around managing multi-package JavaScript repositories (monorepos) with git and npm&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://datproject.org/&quot;&gt;Dat&lt;/a&gt; is a new peer-to-peer protocol for sharing, archiving, and cataloging large data sets, that uses some of the concepts of BitTorrent and Git.
Described in LWN.net article &lt;a href=&quot;https://lwn.net/Articles/763492/&quot;&gt;Sharing and archiving data sets with Dat&lt;/a&gt; by Antoine Beaupré.
For other version control tools for Data Science see &lt;a href=&quot;https://git.github.io/rev_news/2018/08/22/edition-42/&quot;&gt;Git Rev News Edition #42&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aergoio/litetree&quot;&gt;LiteTree: SQLite with Branches&lt;/a&gt; is a modification of the SQLite engine to support branching, like Git&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://githooks.com/&quot;&gt;GitHooks.com&lt;/a&gt; is a guide to the wonders of git hooks, with the list of hooks, links to some articles about git hooks, and list of various related projects; accepts pull requests&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Johannes Schindelin and Luca Milanesio.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 42 (August 22nd, 2018)</title>
      <link>https://git.github.io/rev_news/2018/08/22/edition-42/</link>
      <pubDate>Wed, 22 Aug 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/08/22/edition-42/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-42-august-22nd-2018&quot;&gt;Git Rev News: Edition 42 (August 22nd, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 42nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of July 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20180725083024.16131-1-avarab@gmail.com/&quot;&gt;SHA-256 has been selected as Git’s next-generation hash function&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://git.github.io/rev_news/2018/07/18/edition-41/#discussions&quot;&gt;Last month’s edition&lt;/a&gt;
discussed the state of NewHash work, i.e. the process of selecting
Git’s next-generation hash function. &lt;a href=&quot;https://public-inbox.org/git/20180724190136.GA5@0f3cdde9c159/&quot;&gt;This discussion has concluded&lt;/a&gt;
with the selection of SHA-256. An
&lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/technical/hash-function-transition.adoc&quot;&gt;update to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hash-function-transition.txt&lt;/code&gt; to change &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NewHash&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA-256&lt;/code&gt;&lt;/a&gt;
is queued in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next&lt;/code&gt; branch.&lt;/p&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/24A09B73-B4D4-4C22-BC1B-41B22CB59FE6@gmail.com/&quot;&gt;Git clone and case sensitivity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Paweł Paruzel reported that he found some test files in his repo
appeared modified just after a clone because he had files like
“boolStyle_t_f” and “boolStyle_T_F” that differ only in case and was
cloning on a case-insensitive Mac.&lt;/p&gt;

&lt;p&gt;He suggested having &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; throw an exception when files that
differ only in case are cloned to a case insensitive system.&lt;/p&gt;

&lt;p&gt;Brian Carlson replied that this would make it impossible to clone such
a repository on a case-insensitive system while the current behavior
might still result in a functional repo.&lt;/p&gt;

&lt;p&gt;Brian also suggested using something like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test $(git status --porcelain | wc -l) -eq 0&lt;/code&gt;
to check that a repo is unmodified after clone.&lt;/p&gt;

&lt;p&gt;Duy Nguyen agreed with Brian and proposed a patch that uses sparse
checkout to hide all the paths that fail to checkout because of the
filesystem. Duy’s patch also warns to tell the user what happens.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, replied to Duy suggesting just warning and
advising the user. And Duy followed up with a modified patch that does
just that.&lt;/p&gt;

&lt;p&gt;Simon Ruderich commented that the advice message in Duy’s patch should
list the problematic file names to help users.&lt;/p&gt;

&lt;p&gt;Peff agreed with Simon and wondered if it was better to detect at
checkout time if a file already exists on the filesystem rather than
checking before the checkout. Peff also noted that Duy’s patch used
strcasecmp() to check if filenames diff only by case, but in some
cases, especially related to utf8 names, a filesystem could use
complex folding rules which we would need to follow.&lt;/p&gt;

&lt;p&gt;Brian replied to Peff saying that it was indeed possible to detect the
issue at checkout time, and Duy replied that it was actually what his
patch was doing.&lt;/p&gt;

&lt;p&gt;Duy, Peff and Jeff Hostetler then agreed that it would be difficult to
follow complex folding rules that a filesystem might use.&lt;/p&gt;

&lt;p&gt;Duy then started sending &lt;a href=&quot;https://public-inbox.org/git/20180730152756.15012-1-pclouds@gmail.com/&quot;&gt;a real patch in its own email&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Junio Hamano chimed in to suggest a different implementation and a
long discussion thread involving Torsten Bögershausen, Elijah Newren,
Duy, Junio, Peff and Jeff Hostetler followed about how to best find
all the colliding paths.&lt;/p&gt;

&lt;p&gt;Duy sent &lt;a href=&quot;https://public-inbox.org/git/20180807190110.16216-1-pclouds@gmail.com/&quot;&gt;a version 2 of his patch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The previous long discussion thread continued following this patch though.&lt;/p&gt;

&lt;p&gt;Duy sent &lt;a href=&quot;https://public-inbox.org/git/20180810153608.30051-1-pclouds@gmail.com/&quot;&gt;a version 3&lt;/a&gt;
that actually tries to find all the colliding paths on “UNIXy platforms”.&lt;/p&gt;

&lt;p&gt;Szeder Gábor found small issues in the patch, so Duy
sent &lt;a href=&quot;https://public-inbox.org/git/20180812090714.19060-1-pclouds@gmail.com/&quot;&gt;a version 4&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Comments from Torsten started a discussion about clarifying the
documentation of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.checkStat&lt;/code&gt; config option which was
addressed by a separate patch from Duy and Junio.&lt;/p&gt;

&lt;p&gt;Duy then recently sent &lt;a href=&quot;https://public-inbox.org/git/20180817161645.28249-1-pclouds@gmail.com/&quot;&gt;a version 5&lt;/a&gt;
which tries to find all the colliding paths on Windows too,
and &lt;a href=&quot;https://public-inbox.org/git/20180817180039.GA31789@duynguyen.home/&quot;&gt;a version 6&lt;/a&gt;
to address a few more comments from Junio and Torsten.&lt;/p&gt;

&lt;p&gt;It looks like the latest version will be merged to the “next” branch soon.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-derrick-stolee&quot;&gt;Developer Spotlight: Derrick Stolee&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a software engineer at Microsoft working on the version control
client team. My team includes the Git contributors from Microsoft
as well as most of the developers for VFS for Git (formerly
GVFS). We also work on other version control clients, such as Team
Explorer for Visual Studio.&lt;/p&gt;

    &lt;p&gt;I joined this team after a couple years on the Git Server team for
Visual Studio Team Services (VSTS), where I work generally on
performance features, such as the history algorithm, reachability
bitmaps, and other scale issues. While I was on the team, we
onboarded the Windows development group to Git, which was a very
exciting time to be part of the team. After they were using VSTS,
the place that needed the most performance improvement was in the
client experience, so I switched teams.&lt;/p&gt;

    &lt;p&gt;Before Microsoft, I was an academic. I got my Ph.D in Mathematics
and Computer Science from the University of Nebraska and was an
assistant professor for a few years, working in computational graph
theory and combinatorics. I found that being a faculty was not
nearly as much fun as being a graduate student, and I couldn’t find
enough time to write code for my computational experiments. Luckily,
I was able to find a role at Microsoft that could use some of those
skills.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;My most important contribution to Git has been the commit-graph
feature. This feature enables significant performance boosts for Git
repos of almost every size. I built a similar feature while
rewriting the history algorithm for VSTS, and I changed teams from
server to client so I could contribute this feature to core Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;In addition to working on more fallout from the commit-graph feature
(including speeding up &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --graph&lt;/code&gt;), I’ve been working on the
multi-pack-index feature. This allows indexing a list of objects
across several packfiles. I’m the first to admit that this feature
is not as necessary as the commit-graph until you get to incredibly
large repositories. When &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git repack&lt;/code&gt; stops being a realistic
option, then the multi-pack-index can keep your lookup times sane. I
hope that there are some more future integrations that are
beneficial to other repos, such as tying the reachability bitmap to
the multi-pack-index instead of a single packfile.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;THE INDEX! The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/index&lt;/code&gt; file is a linear list of every path
available in the working directory, even if those files are not
checked out (due to a sparse-checkout). This is one of the most
central features to all of Git, and is used in many places with a
very transparent API.&lt;/p&gt;

    &lt;p&gt;The index is the single biggest bottleneck left to tackle for
super-large repos like the Windows repo. These enormous repos are
too large for most developers to need the entire thing, so they work
in a small cone. VFS for Git virtualizes the files until they are
read or written, and we use the sparse-checkout feature to limit
Git’s interaction to be in that cone. However, we still need to read
and write the entire index file whenever we interact with the
staging area. If the index was hierarchical or could prune the list
for entire subtrees, then we could drastically reduce this cost.&lt;/p&gt;

    &lt;p&gt;The biggest problem with this direction is that it requires
refactoring almost all of the consumers to use a new API that is not
as coupled to the layout of the index. Only after that change
happens can we drastically replace the file format. It’s a bit of a
chicken-or-the-egg problem, because we can’t refactor the API unless
we know the behavior the new format can present, but we can’t test
format options until we refactor the API.&lt;/p&gt;

    &lt;p&gt;The task is pretty daunting, but I think someone could get there
with enough focus and determination.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;I would rebuild &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;revision.c&lt;/code&gt; from scratch. I’m going to need to do a
lot of replacement to make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --graph&lt;/code&gt; use generation numbers,
but it would be easier if I could start over and add features one at
a time.&lt;/p&gt;

    &lt;p&gt;This is probably a boring answer, but I have found that every single
command-line option is someone’s favorite feature, so I don’t want
to take that away from anyone. One of Git’s strengths is that it is
so flexible for different use cases and different repos.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;It’s rather new, but I’ve been enjoying using &lt;a href=&quot;https://github.com/gitgitgadget/gitgitgadget&quot;&gt;GitGitGadget&lt;/a&gt;
to send patches to the mailing list. Too often I make a mistake
sending patches upstream, or lose track of which commit I used in
v2, and things like that. Starting from a GitHub pull request (that
also ran builds on the code for Windows, Mac, &amp;amp; Linux) is much
easier (to me) than going through the hoops of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt;
and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;. I think that getting started submitting
patches via email is one of the biggest barriers to entry for our
community, and I really believe we are losing quality contributors
due to that friction. Hopefully, GitGitGadget can be one way that we
can attract and retain more contributors.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.27.4&quot;&gt;v0.27.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#2153&quot;&gt;v2.15.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.14.2&quot;&gt;v2.14.2&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.8&quot;&gt;v2.13.8&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.16&quot;&gt;v2.12.16&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.11.22&quot;&gt;v2.11.22&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.14.1&quot;&gt;v2.14.1&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.7&quot;&gt;v2.13.7&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.15&quot;&gt;v2.12.15&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.11.21&quot;&gt;v2.11.21&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2018/07/31/gitlab-11-1-4-released/&quot;&gt;11.1.4&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/07/26/security-release-gitlab-11-dot-1-dot-2-released/&quot;&gt;11.1.2, 11.0.5, and 10.8.7&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/07/24/gitlab-11-1-1-released/&quot;&gt;11.1.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/07/22/gitlab-11-1-released/&quot;&gt;11.1.0&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/07/17/critical-security-release-gitlab-11-dot-0-dot-4-released/&quot;&gt;11.0.4, 10.8.6, and 10.7.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;v5.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;v4.0.2&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;v4.0.1&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;v4.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;v1.3.3&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;v1.3.2&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;v1.3.1&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;v1.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;tig &lt;a href=&quot;https://public-inbox.org/git/CAFuPQ1LtE2OgsfUOff=a_RDA0Q7B7Xk91kyAEWMnG2EW0TNRuw@mail.gmail.com/&quot;&gt;v2.4.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.fooishbar.org/blog/gitlab-fdo-introduction/&quot;&gt;Introducing freedesktop.org GitLab&lt;/a&gt; by Daniel Stone&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/ben/devto-is-now-open-source-5n1&quot;&gt;dev.to is now open source&lt;/a&gt; announcement by Ben Halpern (source available &lt;a href=&quot;https://github.com/thepracticaldev/dev.to&quot;&gt;on GitHub&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/image-diffing-and-reflog&quot;&gt;Image Diffing &amp;amp; Reflog in [new] Tower&lt;/a&gt; (multiplatform proprietary Git client) by Tobias Günther&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.bitbucket.org/2018/07/19/13-new-bitbucket-cloud-features/&quot;&gt;13 new Bitbucket Cloud features&lt;/a&gt; by Justine Davis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://code-maven.com/git-workflow-for-individuals&quot;&gt;Git workflow for individuals&lt;/a&gt; by Gabor Szabo&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://queue.acm.org/detail.cfm?id=3237207&quot;&gt;GitOps: A Path to More Self-service IT&lt;/a&gt; by Thomas A. Limoncelli&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.weave.works/blog/kubernetes-anti-patterns-let-s-do-gitops-not-ciops&quot;&gt;Kubernetes anti-patterns: Let’s do GitOps, not CIOps!&lt;/a&gt; by Ilya on Weaveworks blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://iamjonfry.com/splitting-ssh-and-git-configs/&quot;&gt;Splitting SSH and git configs&lt;/a&gt; (with the help of &lt;a href=&quot;https://git-scm.com/docs/git-config#_includes&quot;&gt;git-config’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;includeIf&lt;/code&gt; directive&lt;/a&gt;), by Jonathon Fry&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/citizen428/10-common-git-problems-and-how-to-fix-them-234o&quot;&gt;10 Common Git Problems and How to Fix Them&lt;/a&gt; by Michael Kohl (with caveats about some advice)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/vickylai/an-automatic-interactive-pre-commit-checklist-in-the-style-of-infomercials-14i7&quot;&gt;An automatic interactive pre-commit checklist, in the style of infomercials&lt;/a&gt; by Vicky Lai&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/sublimegeek/do-your-commits-pass-this-simple-test-4ak2&quot;&gt;Do your commits pass this simple test?&lt;/a&gt; (Frequent. Descriptive. Atomic. Decentralized. Immutable.) by Jonathan Irvin&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.freecodecamp.org/follow-these-simple-rules-and-youll-become-a-git-and-github-master-e1045057468f&quot;&gt;Follow these [three] simple rules and you’ll become a Git and GitHub master&lt;/a&gt; by Ariel Camus&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.community/t5/Support-Protips/Working-with-large-files-and-repositories/ba-p/9343&quot;&gt;Working with large files and repositories&lt;/a&gt; with Git LFS on GitHub, on GitHub Community Forum&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.theserverside.com/quiz/Prove-your-DVCS-IQ-with-our-Git-quiz-for-beginners&quot;&gt;10 Git quiz questions to test your distributed version control skills&lt;/a&gt; by Cameron McKenzie&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.dataversioncontrol.com/data-version-control-tutorial-9146715eda46&quot;&gt;Data Version Control Tutorial&lt;/a&gt; by Dmitry Petrov (uses &lt;a href=&quot;https://dvc.org&quot;&gt;DVC software&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ybrikman.com/writing/2018/08/12/the-10-to-1-rule-of-writing-and-programming/&quot;&gt;The 10:1 rule of writing and programming&lt;/a&gt; by Yevgeniy Brikman; it uses &lt;a href=&quot;https://github.com/arzzen/git-quick-stats#usage&quot;&gt;git-quick-stats&lt;/a&gt; and &lt;a href=&quot;https://github.com/AlDanial/cloc&quot;&gt;cloc&lt;/a&gt; to derive its conclusions, and inspired creation of &lt;a href=&quot;https://github.com/Decagon/hofs-churn&quot;&gt;hofs-churn&lt;/a&gt; script&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hecate.co/blog/code-review-review-is-the-managers-job&quot;&gt;Code Review Review is the Manager’s Job&lt;/a&gt; by John Barton&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.martinfenner.org/2014/08/25/using-microsoft-word-with-git/&quot;&gt;Using Microsoft Word with git&lt;/a&gt; by Martin Fenner (2014); advises to use &lt;a href=&quot;https://pandoc.org/&quot;&gt;pandoc&lt;/a&gt; to convert MS Word documents to Markdown format in a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt; filter (via &lt;a href=&quot;https://git-scm.com/docs/gitattributes#_generating_diff_text&quot;&gt;gitattributes&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Web applications for sending patches via email:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/gitgitgadget/gitgitgadget&quot;&gt;GitGitGadget&lt;/a&gt; (&lt;a href=&quot;https://gitgitgadget.github.io/&quot;&gt;homepage&lt;/a&gt;) is a bot (gadget) to serve as glue between GitHub Pull Requests and the Git mailing list, allowing to submit &lt;em&gt;patch series&lt;/em&gt;, and to iterate this process.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/rtyley/submitgit&quot;&gt;submitGit&lt;/a&gt; is an older &lt;a href=&quot;https://submitgit.herokuapp.com/&quot;&gt;Heroku app&lt;/a&gt; to send GitHub Pull Request to the Git mailing list, correctly formatting the patches. It’s creation was extensively covered in &lt;a href=&quot;https://git.github.io/rev_news/2015/06/03/edition-4/&quot;&gt;Git Rev News Edition #4&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Version control for Data Science:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://gitlab.com/meltano/meltano&quot;&gt;Meltano&lt;/a&gt; by GitLab is an open source convention-over-configuration product for the whole data lifecycle, all the way from loading data to analyzing it. Meltano stands for the &lt;a href=&quot;https://gitlab.com/meltano/meltano/tree/master#data-engineering-lifecycle&quot;&gt;steps of the data science life-cycle&lt;/a&gt;: Model, Extract, Load, Transform, Analyze, Notebook, and Orchestrate. Announced in &lt;a href=&quot;https://about.gitlab.com/2018/08/01/hey-data-teams-we-are-working-on-a-tool-just-for-you/&quot;&gt;Hey, data teams - We’re working on a tool just for you&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://dvc.org&quot;&gt;DVC&lt;/a&gt;: Open-source Version Control System for Data Science Projects. It is present in Python Package Index.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;lazygit&lt;/a&gt; is simple [windowed] terminal UI for git commands, written in Go with the &lt;a href=&quot;https://github.com/jroimartin/gocui&quot;&gt;gocui&lt;/a&gt; library (compare &lt;a href=&quot;https://github.com/jonas/tig&quot;&gt;tig&lt;/a&gt;, an ncurses-based text-mode interface for Git).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/michenriksen/gitrob&quot;&gt;Gitrob: Putting the Open Source in OSINT&lt;/a&gt; is a tool to help find potentially sensitive files pushed to public repositories on GitHub&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/arzzen/git-quick-stats&quot;&gt;git-quick-stats&lt;/a&gt; is a simple and efficient way to access various statistics in git repository (with a simple &lt;a href=&quot;https://arzzen.github.io/git-quick-stats/&quot;&gt;homepage&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Decagon/hofs-churn&quot;&gt;hofs-churn&lt;/a&gt; is a small bash script to approximate code churn for a Git repo as described by Brikman’s article: “&lt;a href=&quot;https://www.ybrikman.com/writing/2018/08/12/the-10-to-1-rule-of-writing-and-programming/&quot;&gt;The 10:1 rule of writing and programming&lt;/a&gt;”&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://atlas.oreilly.com&quot;&gt;Atlas&lt;/a&gt; by O’Reilly, is a tool/site for publishing books (which can be written in AsciiDoc, with layout and structure defined in HTML and CSS files), based on Git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://keepachangelog.com/en/1.0.0/&quot;&gt;Keep a Changelog&lt;/a&gt;, a site with proposed changelog format and a motto: &lt;em&gt;“Don’t let your friends dump git logs into changelogs”&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Derrick Stolee and Ævar Arnfjörð Bjarmason.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 41 (July 18th, 2018)</title>
      <link>https://git.github.io/rev_news/2018/07/18/edition-41/</link>
      <pubDate>Wed, 18 Jul 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/07/18/edition-41/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-41-july-18th-2018&quot;&gt;Git Rev News: Edition 41 (July 18th, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 41st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of June 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/87fu1vwt11.fsf@evledraar.gmail.com&quot;&gt;State of NewHash work, future directions, and discussion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Brian Carlson, who has been working for a long time on improving Git
code to make it easier to support replacing SHA-1 with a new hash
function, recently posted an update and invited people to discuss the
future steps in this area.&lt;/p&gt;

&lt;p&gt;As the new hash function is still undecided (see below), it is called
“NewHash” by everyone for now. It is expected though that it will be a
256-bit hash algorithm while SHA-1 is 160-bit, and this change alone
has required a lot of internal work.&lt;/p&gt;

&lt;p&gt;With Brian’s latest patches Git would work using NewHash, including
passing the test suite, though it would be incompatible with current
Git.&lt;/p&gt;

&lt;p&gt;As the &lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/technical/hash-function-transition.adoc&quot;&gt;hash function transition plan&lt;/a&gt;
tells that a Git using NewHash should be able to communicate through
fetching and pushing with a Git using SHA-1, the next step is to
implement such kind of communication and that’s what Brian started to
do.&lt;/p&gt;

&lt;p&gt;Technically the work consists in porting everything to use a variable
called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;the_hash_algo&lt;/code&gt; that will store information about the current
hash algorithm.&lt;/p&gt;

&lt;p&gt;After describing other technical details related to his work and
recommending ways to make current developments compatible with it,
Brian suggested resuming the discussion about what NewHash should
actually be, as he will need to actually use a new hash when writing
objects to disk.&lt;/p&gt;

&lt;p&gt;Brian then proposed to send to the list an analysis he made on
“availability of implementations, performance, and other attributes
described in the transition plan”.&lt;/p&gt;

&lt;p&gt;Ævar Arnfjörð Bjarmason, Jonathan Nieder and Duy Nguyen all replied
separately to Brian to congratulate him for his work, to discuss a few
technical details, and to welcome his analysis of the possible hash
functions.&lt;/p&gt;

&lt;p&gt;Brian replied to them by sending his &lt;a href=&quot;https://public-inbox.org/git/20180609224913.GC38834@genre.crustytoothpaste.net/&quot;&gt;Hash algorithm analysis&lt;/a&gt;
to the mailing list. The conclusion from this document is that the
best is one of SHA-256, SHA-3-256 and BLAKE2b depending on the goals
(security, performance, availability).&lt;/p&gt;

&lt;p&gt;Jonathan replied to this analysis by asking technical questions and
summarizing the previous discussions. He said that Yves Orton and
Linus Torvalds
&lt;a href=&quot;https://public-inbox.org/git/CA+55aFwUn0KibpDQK2ZrxzXKOk8-aAub2nJZQqKCpq1ddhDcMQ@mail.gmail.com/&quot;&gt;prefer&lt;/a&gt;
SHA-3 over SHA-2 because of how it is constructed, though a number of
knowledgeable people suggested K12 instead of SHA-3 for performance
reasons, while Johannes Schindelin, alias Dscho, strongly
&lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.21.1.1706151122180.4200@virtualbox/&quot;&gt;prefers&lt;/a&gt;
SHA-256 because it is well known, widely available and fast.&lt;/p&gt;

&lt;p&gt;Linus replied to this summary by explaining that “SHA-2 has the exact
same weak inter-block state attack” as SHA-1, and it would be crazy to
“go with a crypto choice that has that known weakness”. About
performance he thinks that “‘256-bit hashes are bigger’ is going to be
the more noticeable performance issue” and that K12 “should be a
front-runner” as it was suggested by the Keccak people.&lt;/p&gt;

&lt;p&gt;There were further discussions involving Ævar, Linus, David Lang,
Brian, Dscho and also Gilles Van Assche who co-created Keccak which
then became SHA-3, but there was still no consensus and no decision
has been made.&lt;/p&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqbmc4szxc.fsf@gitster-ct.c.googlers.com/&quot;&gt;v2.18.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://public-inbox.org/git/20180622115913.14184-1-johannes.schindelin@gmx.de&quot;&gt;2.18.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.27.3&quot;&gt;v0.27.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-release-notes-872139866.html&quot;&gt;v5.12&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.14.0&quot;&gt;v2.14.0&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.6&quot;&gt;v2.13.6&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.14&quot;&gt;v2.12.14&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.11.20&quot;&gt;v2.11.20&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.13.5&quot;&gt;v2.13.5&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.13&quot;&gt;v2.12.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.11.19&quot;&gt;v2.11.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2018/07/05/gitlab-11-0-3-released/&quot;&gt;11.0.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/06/27/gitlab-11-0-2-released/&quot;&gt;11.0.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/06/25/security-release-gitlab-11-dot-0-dot-1-released/&quot;&gt;11.0.1, 10.8.5, 10.7.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/06/22/gitlab-11-0-released/&quot;&gt;11.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;v3.6.6&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;v3.6.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;v1.2.6&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;v1.2.5&lt;/a&gt;,
&lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;v1.2.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.14.html#21410&quot;&gt;v2.14.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git Tower GUI v2: &lt;a href=&quot;https://www.git-tower.com/blog/the-new-tower-has-launched-2018&quot;&gt;Better than Ever: The New Tower Has Launched&lt;/a&gt;, now with annual license model&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;A &lt;a href=&quot;https://public-inbox.org/git/20180713170018.GA139708@aiede.svl.corp.google.com/&quot;&gt;Git standup on IRC&lt;/a&gt;
every two weeks at 17:00-17:30 UTC has been announced by Jonathan Nieder.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Derrick Stolee has written about Commit Graph on &lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/&quot;&gt;Microsoft DevOps Blog&lt;/a&gt;:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/06/25/supercharging-the-git-commit-graph/&quot;&gt;Supercharging the Git Commit Graph&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/07/02/supercharging-the-git-commit-graph-ii-file-format/&quot;&gt;Supercharging the Git Commit Graph II: File Format&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/07/09/supercharging-the-git-commit-graph-iii-generations/&quot;&gt;Supercharging the Git Commit Graph III: Generations and Graph Algorithms&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/07/16/super-charging-the-git-commit-graph-iv-bloom-filters/&quot;&gt;Supercharing the Git Commit Graph IV: Bloom Filters&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Echoes of Microsoft acquiring GitHub (see &lt;a href=&quot;https://git.github.io/rev_news/2018/06/20/edition-40/&quot;&gt;Git RevNews Edition #40&lt;/a&gt;)&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.linuxjournal.com/content/microsoft-buys-github-three-weeks-later&quot;&gt;Microsoft Buys GitHub: Three Weeks Later&lt;/a&gt; by Marcel Gagné&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.linuxjournal.com/content/opinion-github-vs-gitlab&quot;&gt;Opinion: GitHub vs GitLab&lt;/a&gt; by Matt Lee (with a bit of history)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wiki.gentoo.org/wiki/Project:Infrastructure/Incident_Reports/2018-06-28_Github&quot;&gt;Gentoo GitHub Organization hacking incident summary&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devops.com/gitlab-moves-to-automate-devops/&quot;&gt;GitLab Moves to Automate DevOps&lt;/a&gt; by Mike Vizard on DevOps.com&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://drewdevault.com/2018/07/02/Email-driven-git.html&quot;&gt;The advantages of an email-driven git workflow&lt;/a&gt; by Drew DeVault&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.atlassian.com/git/tutorials/syncing&quot;&gt;Git Syncing tutorial&lt;/a&gt; from Atlassian&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twobithistory.org/2018/07/07/cvs.html&quot;&gt;Version Control Before Git with CVS&lt;/a&gt; on Two-Bit History blog (though it missed the problem with repeated merges in CVS)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.theserverside.com/tutorial/Five-basic-Git-commands-every-beginner-needs-to-know&quot;&gt;The 5 basic Git commands every beginner needs to master&lt;/a&gt; by Cameron McKenzie&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.theserverside.com/tutorial/How-to-git-revert-a-commit-A-simple-undo-changes-example&quot;&gt;How to git revert a commit: A simple undo changes example&lt;/a&gt; by Cameron McKenzie&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/18/6/git-reset-revert-rebase-commands&quot;&gt;How to reset, revert, and return to previous states in Git&lt;/a&gt; by Brent Laster&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.linuxjournal.com/content/terrible-ideas-git&quot;&gt;Terrible Ideas in Git&lt;/a&gt; by Corey Quinn (tongue-in-cheek?), with some good Git tips&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/maxwell_dev/the-git-rebase-introduction-i-wish-id-had&quot;&gt;The Git Rebase Introduction I Wish I’d Had&lt;/a&gt; by Max Antonucci (2017)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/18/6/anatomy-perfect-pull-request&quot;&gt;Anatomy of a perfect pull request&lt;/a&gt; by Hugo Dias&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2018/06/15/introducing-gitlab-s-integrated-development-environment/&quot;&gt;Meet the GitLab Web IDE&lt;/a&gt; on GitLab Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dzone.com/articles/storing-encrypted-credentials-in-git&quot;&gt;Storing Encrypted Credentials in Git&lt;/a&gt; by Bozhidar Bozhanov, with a look at a possible solution;&lt;br /&gt;
see also &lt;a href=&quot;https://medium.freecodecamp.org/how-to-securely-store-api-keys-4ff3ea19ebda&quot;&gt;Best practices for securely storing API keys&lt;/a&gt; by Bruno Pedro (mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/05/16/edition-39/&quot;&gt;Git Rev News Edition #39&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rcraggs/gitruler&quot;&gt;GitRuler&lt;/a&gt; - Automated checking of the status of a repository, like unit testing for a git repo (that repo has specific state)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://gitgraphjs.com/&quot;&gt;Gitgraph.js&lt;/a&gt; is a simple JavaScript library meant to help you visually presenting git branching models, using HTML canvas&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://diffoscope.org/&quot;&gt;diffoscope&lt;/a&gt;: in-depth comparison of files, archives, and directories (will recursively unpack archives of many kinds and transform various binary formats into more human readable form)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gelstudios/gitfiti&quot;&gt;gitfiti&lt;/a&gt; is a tool for crafting graffiti in a GitHub commit history calendar; includes list of notable derivatives&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/features/pages/&quot;&gt;GitLab Pages&lt;/a&gt;: websites for your GitLab projects, user account or group&lt;/li&gt;
  &lt;li&gt;A new archive of linux-kernel mailing list (LKML) posts going back to 1998 &lt;a href=&quot;https://www.kernel.org/lore.html&quot;&gt;is now available&lt;/a&gt; at &lt;a href=&quot;https://lore.kernel.org/lkml/&quot;&gt;lore.kernel.org&lt;/a&gt;, which is based on &lt;a href=&quot;https://public-inbox.org/design_notes.html&quot;&gt;public-inbox&lt;/a&gt; (with Git-backed archival mechanism you can clone and pull)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Luca Milanesio and Derrick Stolee.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 40 (June 20th, 2018)</title>
      <link>https://git.github.io/rev_news/2018/06/20/edition-40/</link>
      <pubDate>Wed, 20 Jun 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/06/20/edition-40/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-40-june-20th-2018&quot;&gt;Git Rev News: Edition 40 (June 20th, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 40th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of May 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Microsoft acquires Github for $7.5 billion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On Monday, June 4th, Microsoft announced an agreement to acquire GitHub for $7.5 billion in an all-stock
deal. The acquisition is expected to close later this year. After &lt;a href=&quot;http://www.businessinsider.com/2-billion-startup-github-could-be-for-sale-microsoft-2018-5?IR=T&quot;&gt;Business Insider reported on
Friday&lt;/a&gt;
that Microsoft was in talks to acquire Github, Microsoft CEO &lt;a href=&quot;https://blogs.microsoft.com/blog/2018/06/04/microsoft-github-empowering-developers/&quot;&gt;Satya Nadella
made it
official&lt;/a&gt;
in a blog post.  After raising &lt;a href=&quot;https://www.crunchbase.com/funding_round/github-series-a--832c3557&quot;&gt;$100 million in
2012&lt;/a&gt; in
series A then &lt;a href=&quot;https://www.crunchbase.com/funding_round/github-series-b--49182d09&quot;&gt;$250 million in
2015&lt;/a&gt; for
its series B from Sequoia Capital and others, Github was last valued at $1.8
billion. The deal should be finalised before the end of this year. This
is Microsoft’s second big acquisition under Satya Nadella, two years after the
$26.2 billion acquisition of LinkedIn.&lt;/p&gt;

&lt;p&gt;In his blog post, Satya Nadella stated that “Microsoft is all-in on open
source”, reassured that “GitHub will remain an open platform, which any
developer can plug into and extend”, adding that his company is “the most
active organization on GitHub, with more than 2 million ‘commits’, or updates,
made to projects”. He also detailed “three opportunities” for both companies:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;“Empower developers at every stage of the development lifecycle – from
ideation to collaboration to deployment to the cloud”.&lt;/li&gt;
  &lt;li&gt;Use Microsoft’s “direct sales and partner channels” and its “global cloud
infrastructure” to “accelerate enterprise developers’ use of GitHub”.&lt;/li&gt;
  &lt;li&gt;Bring “Microsoft’s developer tools and services to new audiences”.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As for Github, its CEO and co-founder Chris Wanstrath, aka defunkt, also &lt;a href=&quot;https://blog.github.com/2018-06-04-github-microsoft/&quot;&gt;wrote
a blog post&lt;/a&gt; to confirm
the news. He explained that “collaborating on projects from Git LFS to
Electron” showed him that Microsoft and Github shared a common vision − “it’s all
about the developer”. Like Satya Nadella did in his post, he also emphasized
that “GitHub needs to remain an open platform for all developers”. He had
already announced in August 2017 that &lt;a href=&quot;http://www.businessinsider.fr/us/github-ceo-chris-wanstrath-to-step-down-become-executive-chairman-2017-8&quot;&gt;he intended to step down as
CEO&lt;/a&gt;,
and he confirmed that he would be replaced by Nat Friedman.&lt;/p&gt;

&lt;p&gt;Nat Friedman first founded &lt;a href=&quot;https://en.wikipedia.org/wiki/Ximian&quot;&gt;Ximian&lt;/a&gt; in
1999 with Miguel de Icaza, co-creator of the GNOME project. Both met at
Microsoft in 1997 when Friedman was an intern and de Icaza interviewed for
a job. Ximian goal was to develop free and proprietary software that relied on
GNOME. After Novell acquired Ximian in 2003, Ximian developed
&lt;a href=&quot;https://en.wikipedia.org/wiki/Mono_(software)&quot;&gt;Mono&lt;/a&gt;, which aimed at bringing
.NET tools to other platforms, especially Linux. As a Chief Technology and
Strategy Officer for Open Source at Ximian until 2010, Nat Friedman &lt;a href=&quot;https://en.wikipedia.org/wiki/Nat_Friedman&quot;&gt;reportedly
migrated 6,000 employees from Windows to
SUSE&lt;/a&gt; and from Microsoft Office to
OpenOffice. In 2011, de Icaza and him reunited to found
&lt;a href=&quot;https://en.wikipedia.org/wiki/Xamarin&quot;&gt;Xamarin&lt;/a&gt;, a company focused on
developing Mono. Xamarin was finally acquired by Microsoft in 2016. After
Xamarin’s acquisition, Friedman joined Microsoft as an employee, where he was
a vice-president of Developer Services.&lt;/p&gt;

&lt;p&gt;Nat Friedman recently gave a &lt;a href=&quot;https://www.reddit.com/r/AMA/comments/8pc8mf/im_nat_friedman_future_ceo_of_github_ama/&quot;&gt;Reddit
AMA&lt;/a&gt;
to answer questions about the future of Github. Among other comments, he stated
that:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Microsoft and Github will continue to &lt;a href=&quot;https://www.reddit.com/r/AMA/comments/8pc8mf/im_nat_friedman_future_ceo_of_github_ama/e0a2rss/&quot;&gt;expand GVFS support to macOS and
Linux&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Github will &lt;a href=&quot;https://www.reddit.com/r/AMA/comments/8pc8mf/im_nat_friedman_future_ceo_of_github_ama/e0a2b2e/&quot;&gt;continue to support Atom&lt;/a&gt; going forward, while Microsoft continues
to develop Visual Studio Code.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/AMA/comments/8pc8mf/im_nat_friedman_future_ceo_of_github_ama/e0a3ygb/&quot;&gt;No advertisement&lt;/a&gt; would be added to the platform, taking Sourceforge as an example of what not to do.&lt;/li&gt;
  &lt;li&gt;He would be interested to see if Github could &lt;a href=&quot;https://www.reddit.com/r/AMA/comments/8pc8mf/im_nat_friedman_future_ceo_of_github_ama/e0a51y1/&quot;&gt;provide financial incentives
to open source developers&lt;/a&gt; or fund &lt;a href=&quot;https://www.reddit.com/r/AMA/comments/8pc8mf/im_nat_friedman_future_ceo_of_github_ama/e0a8077/&quot;&gt;student programs&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Github will continue to &lt;a href=&quot;https://www.reddit.com/r/AMA/comments/8pc8mf/im_nat_friedman_future_ceo_of_github_ama/e0a33cv/&quot;&gt;limit employee access to private repos&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Among the many reactions to the acquisition, both positive and negative, some
developers began migrating their repos from Github to Gitlab. Gitlab declared
seeing a &lt;a href=&quot;https://twitter.com/gitlab/status/1003715180348338176&quot;&gt;dramatic increase in imports and
customers&lt;/a&gt;, while Nat
Friedman &lt;a href=&quot;https://www.reddit.com/r/AMA/comments/8pc8mf/im_nat_friedman_future_ceo_of_github_ama/e0a2ge2/&quot;&gt;noted&lt;/a&gt;
that “the set of users who have migrated […] is extremely small,
and this is more than made up for by the surge of new signups […]”. On an
&lt;a href=&quot;https://www.youtube.com/watch?v=VSk-QOEA8bU&amp;amp;t=1186s&quot;&gt;interview with Coder
Radio&lt;/a&gt;, Gitlab CEO Sid
Sijbrandij explained that upon hearing the rumors of Github’s acquisition, they
had prepared themselves for an increase in imports. As for their strategy going
ahead, he said that their priority in the short term is to focus on CI and CD
with “Auto DevOps”.&lt;/p&gt;

&lt;p&gt;He also declared that Gitlab would continue to try and please projects that
want an open source, self-hosted solution, like GNOME or Debian. At the same
time, he underlined that “Microsoft has shown it’s a new company, they’re not
pulling the tricks of the past”. According to him, the criterion for choosing
Gitlab over Github is not whether companies care about open source, but rather
if they want to trust somebody else’s company Software as a Service. “If you want to
self host, Gitlab is the logical choice, and we want to stimulate that as much
as we can”, he said to sum up the reasoning behind Gitlab’s strategy. He added
that 6% of the users of the open source edition converted to the paid edition.&lt;/p&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAAUqJDu_3DTyd1cFKaNRKOzo3AHosfxP1jjWpa=HGtyAyitTeA@mail.gmail.com/&quot;&gt;git rebase -i –exec and changing directory&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On May 19th Ondrej Mosnáček described an issue he had using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase -i --exec ...&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;He tried to pass something like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd &amp;lt;dir&amp;gt; &amp;amp;&amp;amp; git &amp;lt;cmd&amp;gt;&lt;/code&gt; to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--exec&lt;/code&gt; option and found that it didn’t behave as it should.&lt;/p&gt;

&lt;p&gt;Ondrej listed commands using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd src &amp;amp;&amp;amp; git status&lt;/code&gt; to reproduce the
issue which is that “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; reports as if all files in the
repository are deleted”.&lt;/p&gt;

&lt;p&gt;As no one had replied, Ondrej asked on May 27th if anyone had time to
look at this.&lt;/p&gt;

&lt;p&gt;Philip Oakley replied to Ondrej asking for more information about the
directories he had created and the directory he was in when he
launched the rebase command.&lt;/p&gt;

&lt;p&gt;Ondrej said that he had to be in the top level directory of the
repository for the rebase to work, and also that the commands he gave
can reproduce the issue even in a current directory without any
special name.&lt;/p&gt;

&lt;p&gt;Another Phillip (with two ‘l’ instead of one), Phillip Wood, chimed in
saying that he could reproduce the issue with the commands that Ondrej
had given, though he could also reproduce it outside a rebase using
only &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; when the GIT_DIR environment variable is set to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; directory of the repo. So Phillip thought that the problem came
from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; not behaving properly when GIT_DIR is set.&lt;/p&gt;

&lt;p&gt;Philip Oakley replied that he could also reproduce the issue. Though
after experimenting he suggested &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; could behave differently
when attached or not to a terminal.&lt;/p&gt;

&lt;p&gt;Junio Hamano, the Git maintainer, then chimed in to agree with Phillip
Wood’s previous suggestion pointing to the GIT_DIR environment
variable:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When GIT_DIR environment variable appears without GIT_WORKING_TREE,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; assumes that you are starting it at the root level of the
working tree. In your example, if there is README at the top-level
but dir/README is not there, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;status&lt;/code&gt; would report that you removed
it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Junio also suggested a work-around:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;You can unset GIT_DIR in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--exec&lt;/code&gt; script if you know that
Git would find the right repository when run from your script.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;developer-spotlight-nicolas-pitre&quot;&gt;Developer Spotlight: Nicolas Pitre&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I graduated with a software engineering degree from École Polytechnique de
Montréal. I’m currently a software architect on the OCTO team at Linaro.
I spent most of my professional life working on the Linux kernel for the ARM
architecture. And being a code tinkerer at heart, I am often looking at assembly
output from the compiler to see what it made of my code.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How did you get involved in Git?&lt;/p&gt;

    &lt;p&gt;When Linus Torvalds announced that he’d be taking a break from kernel work to
dedicate some time to the creation of a new code management system of his own
then I got intrigued. I expected this new system to have an impact on my kernel
work flow so I wanted to test it early on.  And of course I quickly got annoyed
by all the shortcomings Git had in those early days, so I started making
patches and became a regular contributor for a few years.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;Delta compression, and object packing heuristics. Getting git-repack to produce
smaller packs and do it faster became an obsession of mine for a while.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on something
in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;The git pack format version 2. This is something I worked on for a while, from
the format definition to the first proof-of-concept implementation. The initial
pack size reduction over the current format was really interesting (around 20%)
and the potential for significant runtime speed-ups was there in theory. In
practice that meant reworking most of git’s inner core code to benefit from all
the direct object references provided by that pack format. The existing proof
of concept simply implemented backward compatibility with the rest of git which
made it slower than the current pack format. And because the current format is
already quite efficient already, this project was facing diminishing returns
and I could no longer justify the required time to work on it. But… if
I could get a team for a year…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;As a git user, what functionality would you like to see implemented?&lt;/p&gt;

    &lt;p&gt;I really get annoyed when fetching a tracked repository and all the tags from
that remote repo are merged with my own tags, or with tags from another remote
repo. We have a separate namespace for remote branches but not for remote tags.
That makes it very hard to know where a particular tag comes from, and “git
remote rm” doesn’t get rid of them either. This also pollutes the git-describe
output.&lt;/p&gt;

    &lt;p&gt;I think remote tags should have separate namespaces by default just like remote
branches, with similar disambiguation rules when referring to a tag using
a partial path. That’s something I meant to implement myself for years now but
never got around to it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about backwards
compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Some of the early choices I made in the delta compression encoding format. But
that format is simply too widely used now to consider incompatible changes just
for the sake of being marginally more efficient.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;I’m pretty much a pure-git user and never got used to any of the associated
tools. I grew my git usage while I was also a git developer with a pretty good
knowledge of its internals and native capabilities.  Most tools on top of git
are meant to provide a different user experience that always gave me the
impression they were in the way of the actual basic git command I wanted to
use.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqefha5o9g.fsf@gitster-ct.c.googlers.com/&quot;&gt;v2.18.0-rc2&lt;/a&gt;, &lt;a href=&quot;https://public-inbox.org/git/xmqqwove4pzo.fsf@gitster-ct.c.googlers.com/&quot;&gt;v2.18.0-rc1&lt;/a&gt;, &lt;a href=&quot;https://public-inbox.org/git/xmqqr2lsdam9.fsf@gitster-ct.c.googlers.com/&quot;&gt;v2.18.0-rc0&lt;/a&gt;, &lt;a href=&quot;https://public-inbox.org/git/xmqqy3g2flb6.fsf@gitster-ct.c.googlers.com/&quot;&gt;v2.17.1, v2.13.7, v2.14.4, v2.15.2 and v2.16.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.17.1.windows.2&quot;&gt;v2.17.1(2)&lt;/a&gt;, &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.17.1.windows.1&quot;&gt;v2.17.1(1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.27.2&quot;&gt;v0.27.2&lt;/a&gt;, &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.27.1&quot;&gt;v0.27.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2sharp &lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.25.2&quot;&gt;v0.25.2&lt;/a&gt;, &lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.25.1&quot;&gt;v0.25.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Github Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.13.4&quot;&gt;v2.13.4&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.12.12&quot;&gt;v2.12.12&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.11.18&quot;&gt;v2.11.18&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.10.24&quot;&gt;v2.10.24&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.13.3&quot;&gt;v2.13.3&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.12.11&quot;&gt;v2.12.11&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.11.17&quot;&gt;v2.11.17&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.10.23&quot;&gt;v2.10.23&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gitlab &lt;a href=&quot;https://about.gitlab.com/2018/06/07/gitlab-10-8-4-released/&quot;&gt;v10.8.4&lt;/a&gt;, &lt;a href=&quot;https://about.gitlab.com/2018/06/01/gitlab-10-8-3-released/&quot;&gt;v10.8.3&lt;/a&gt;, &lt;a href=&quot;https://about.gitlab.com/2018/05/29/security-release-gitlab-10-dot-8-dot-2-released/&quot;&gt;v10.8.2, 10.7.5, 10.6.6&lt;/a&gt;, &lt;a href=&quot;https://about.gitlab.com/2018/05/24/gitlab-10-8-1-released/&quot;&gt;v10.8.1&lt;/a&gt;, &lt;a href=&quot;https://about.gitlab.com/2018/05/22/gitlab-10-8-released/&quot;&gt;v10.8&lt;/a&gt;, &lt;a href=&quot;https://about.gitlab.com/2018/05/22/gitlab-10-7-4-released/&quot;&gt;v10.7.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-5-11-release-notes-950274914.html&quot;&gt;v5.11&lt;/a&gt;, &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-5-10-release-notes-948214779.html&quot;&gt;v5.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;v3.6.3&lt;/a&gt;, &lt;a href=&quot;https://support.gitkraken.com/release-notes/current&quot;&gt;v3.6.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Github Desktop &lt;a href=&quot;https://desktop.github.com/&quot;&gt;v1.2.3&lt;/a&gt;, &lt;a href=&quot;https://desktop.github.com/&quot;&gt;v1.2.2&lt;/a&gt;, &lt;a href=&quot;https://desktop.github.com/&quot;&gt;v1.2.1&lt;/a&gt;, &lt;a href=&quot;https://desktop.github.com/&quot;&gt;v1.2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sourcetree &lt;a href=&quot;https://www.sourcetreeapp.com/&quot;&gt;v2.7.6 for Mac&lt;/a&gt;, &lt;a href=&quot;https://www.sourcetreeapp.com/&quot;&gt;v2.5.5 for Windows&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/05/29/announcing-the-may-2018-git-security-vulnerability/&quot;&gt;Remediating the May 2018 Git Security Vulnerability&lt;/a&gt; related to handling of submodule paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Microsoft acquires Github for $7.5 billion (see above)
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://news.microsoft.com/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/&quot;&gt;Microsoft to acquire GitHub for $7.5 billion&lt;/a&gt;, Microsoft News Center&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2018/06/microsoft-snaps-up-github-for-7-5-billion/&quot;&gt;Microsoft snaps up GitHub for $7.5 billion&lt;/a&gt; by Peter Bright on ArsTechnica&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2018/06/everyone-complaining-about-microsoft-buying-github-needs-to-offer-a-better-solution/&quot;&gt;Everyone complaining about Microsoft buying GitHub needs to offer a better solution&lt;/a&gt; by Peter Bright on ArsTechnica&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2018/06/microsofts-plan-for-github-make-github-better-at-being-github/&quot;&gt;Microsoft’s plan for GitHub: “Make GitHub better at being GitHub”&lt;/a&gt; by Peter Bright on ArsTechnica&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://devops.com/10-views-on-what-microsofts-github-deal-does-for-devops-users/&quot;&gt;10 Views on What Microsoft’s GitHub Deal Does for DevOps Users&lt;/a&gt; by Ericka Chickowski on DevOps.com&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.bloomberg.com/news/articles/2018-06-06/github-is-microsoft-s-7-5-billion-undo-button&quot;&gt;GitHub Is Microsoft’s $7.5 Billion Undo Button&lt;/a&gt; by Paul Ford on Bloomberg&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.informationweek.com/devops/why-microsofts-github-deal-isnt-a-sign-of-the-apocalypse/a/d-id/1331975&quot;&gt;Why Microsoft’s GitHub Deal Isn’t a Sign of the Apocalypse&lt;/a&gt; by John Edwards on InformationWeek&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.hansenpartnership.com/why-microsoft-is-a-good-steward-for-github/&quot;&gt;Why Microsoft is a good steward for GitHub&lt;/a&gt; by James Bottomley&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://jacquesmattheij.com/what-is-wrong-with-microsoft-buying-github&quot;&gt;What is wrong with Microsoft buying GitHub&lt;/a&gt; by Jacques Mattheij&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://joeyh.name/blog/entry/the_single_most_important_criteria_when_replacing_Github/&quot;&gt;the single most important criteria when replacing Github&lt;/a&gt; by Joey Hess&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://motherboard.vice.com/en_us/article/ywen8x/13000-projects-ditched-github-for-gitlab-monday-morning&quot;&gt;13,000 Projects Ditched GitHub for GitLab Monday Morning&lt;/a&gt; by Daniel Oberhaus on Motherboard&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.googleblog.com/2018/05/introducing-git-protocol-version-2.html&quot;&gt;Introducing Git protocol version 2&lt;/a&gt; on Google Open Source Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.gitlab.com/ee/user/project/import/github.html&quot;&gt;Import your project from GitHub to GitLab&lt;/a&gt;, a GitLab user documentation page&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2018/05/31/welcome-gnome-to-gitlab/&quot;&gt;GNOME, welcome to GitLab!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gerrit-review.googlesource.com/Documentation/note-db.html&quot;&gt;Gerrit Code Review - NoteDb Backend&lt;/a&gt;, which is new backend for storing change and account metadata in the same repository as code changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/01/11/microsofts-performance-contributions-to-git-in-2017/&quot;&gt;Microsoft’s Performance Contributions to Git in 2017&lt;/a&gt; by Derrick Stolee on Microsoft DevOps Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://begriffs.com/posts/2018-06-05-mailing-list-vs-github.html&quot;&gt;Mailing lists vs Github&lt;/a&gt; by Joe “begriffs” Nelson&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://begriffs.com/posts/2014-04-08-pilgrimage-report-structural-merging.html&quot;&gt;Tikhon Jelvis’ ideas about Structural Merging&lt;/a&gt; by Joe “begriffs” Nelson (2014)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.prototypr.io/abstract-vs-kactus-vs-plant-a-guide-of-version-control-solutions-for-sketch-7da0a8ab5105&quot;&gt;Abstract vs Kactus vs Plant: a guide of version control solutions for Sketch&lt;/a&gt; (2017)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@henrmota83/understanding-git-under-the-hood-b05b1dd52dec&quot;&gt;Understanding git under the hood&lt;/a&gt; by Henrique Mota&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://geeks.uniplaces.com/mastering-branches-in-git-f20cb2d0c51f&quot;&gt;Mastering git branches&lt;/a&gt; by Henrique Mota&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/15-tips-to-enhance-your-github-flow-6af7ceb0d8a3&quot;&gt;15 Tips to Enhance your Github Flow&lt;/a&gt; by Gabo Esquivel&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.oozou.com/commit-messages-matter-60309983c227&quot;&gt;Commit Messages Matter&lt;/a&gt; by Tino Thamjarat&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/04/19/release-flow-how-we-do-branching-on-the-vsts-team/&quot;&gt;Release Flow: How We Do Branching on the VSTS Team&lt;/a&gt; by Edward Thomson on Microsoft DevOps Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/danistefanovic/build-your-own-x#build-your-own-git&quot;&gt;Build your own &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Git&lt;/code&gt;&lt;/a&gt;, a part of &lt;a href=&quot;https://github.com/danistefanovic/build-your-own-x&quot;&gt;build-your-own-x&lt;/a&gt;, lists a few articles about reimplementing parts of Git functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Adam Spiers has developed a set of four tools supporting higher-level git
workflows:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;git-splice - (non-interactively) splices commits into/out of current
branch&lt;/li&gt;
      &lt;li&gt;git-transplant - (non-interactively) transplants commits from current
branch into/onto another&lt;/li&gt;
      &lt;li&gt;git-deps - automatically detects textual dependencies between commits&lt;/li&gt;
      &lt;li&gt;git-explode (recently released) - automatically explodes a linear
sequence of git commits into new independent topic branches&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Last month he presented demonstrations of these to the Git London
User Group.  &lt;a href=&quot;https://blog.adamspiers.org/2018/06/14/git-auto-magic/&quot;&gt;His blog post “git auto-magic”&lt;/a&gt;
provides links to the video and slides from the talk, and more
information about each tool.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;GitHub Evacuation Project: on &lt;a href=&quot;https://github.com/upend/IF_MS_BUYS_GITHUB_IMMA_OUT&quot;&gt;GitHub&lt;/a&gt; and on &lt;a href=&quot;https://gitlab.com/upend/github&quot;&gt;GitLab&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.scuttlebutt.nz/applications.html#git-ssb&quot;&gt;git-ssb&lt;/a&gt; is a totally decentralized git interface (decentralized version of GitHub / Bitbucket / GitLab), with familiar interface for raising issues, forking, opening pull requests, etc. It uses Secure Scuttlebut decentralized gossip protocol. Its development started on &lt;a href=&quot;https://github.com/clehner/git-ssb&quot;&gt;GitHub&lt;/a&gt;, but has been since moved to git-ssb itself (Repo ID: %n92DiQh7ietE+R+X/I403LQoyf2DtR3WQfCkDKlheQU=.sha256), and GitHub project is now in archived state. There exist online portals serving git-ssb over HTTP(S): &lt;a href=&quot;https://gitmx.com&quot;&gt;https://gitmx.com&lt;/a&gt;, &lt;a href=&quot;https://git-ssb.celehner.com&quot;&gt;https://git-ssb.celehner.com&lt;/a&gt;, &lt;a href=&quot;http://git.mixmix.io&quot;&gt;http://git.mixmix.io&lt;/a&gt;, &lt;a href=&quot;https://git.scuttlebot.io&quot;&gt;https://git.scuttlebot.io&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/noffle/git-ssb-intro&quot;&gt;git-ssb-intro&lt;/a&gt; - Learn git-ssb: a decentralized GitHub alternative&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bithublab.org/&quot;&gt;BitHubLab&lt;/a&gt;: Search for open source repositories on github, gitlab, and bitbucket all at once&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://nopullrequests.com/&quot;&gt;GitHub Pull Request Rejection Bot&lt;/a&gt; - effectively disable pull requests for your repo on GitHub&lt;/li&gt;
  &lt;li&gt;Continuous Integration for projects using a patch-based, mailing-list-centric git workflow:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://cfbot.cputube.org/&quot;&gt;PostgreSQL Patch Tester&lt;/a&gt; for patches submitted for Commitfests&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/ruscur/snowpatch&quot;&gt;snowpatch&lt;/a&gt; - CI for patches&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Distributed bug tracking
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/driusan/bug&quot;&gt;bug&lt;/a&gt;: distributed bug tracking with the filesystem and hg or git&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://bugseverywhere.org/&quot;&gt;Bugs Everywhere&lt;/a&gt; is a “distributed bugtracker”, designed to complement distributed revision control systems, supporting Arch, Bazaar, Darcs, Git, Mercurial, Monotone&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/isomorphic-git/isomorphic-git&quot;&gt;isomorphic-git&lt;/a&gt; (&lt;a href=&quot;https://isomorphic-git.github.io/&quot;&gt;homepage&lt;/a&gt;) is a pure JavaScript implementation of git for Node.js and browsers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Adam Spiers, Bryan Turner, Alyss Noland and Nicolas Pitre.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 39 (May 16th, 2018)</title>
      <link>https://git.github.io/rev_news/2018/05/16/edition-39/</link>
      <pubDate>Wed, 16 May 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/05/16/edition-39/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-39-may-16th-2018&quot;&gt;Git Rev News: Edition 39 (May 16th, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 39th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of April 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CAGZ79kbzFGn2-xcrWFi1+ZUgSGGHdUPEQOexu8Lan796LCsvBg@mail.gmail.com/&quot;&gt;GSoC students and mentors in 2018&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Stefan Beller announced to the mailing list that once again this year
the Git project will participate in &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer or Code&lt;/a&gt;!
“We’ll have &lt;a href=&quot;https://summerofcode.withgoogle.com/organizations/5376866043559936/#projects&quot;&gt;3 students&lt;/a&gt;
and 3 mentors, which is more than in recent years.”&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Pratik Karki, who will work on &lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#4981391490547712&quot;&gt;converting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; to C&lt;/a&gt;
and will be mentored by Stefan Beller and Christian Couder, started blogging about his project:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20180502033925.6744-1-predatoramigo@gmail.com/&quot;&gt;[GSoC] Info: new blog series of my work on Git GSoC ‘18&lt;/a&gt; - announcement on the mailing list&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://prertik.github.io/categories/git/&quot;&gt;(recur code) - posts with “git” category&lt;/a&gt; - the blog in question&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;&lt;br /&gt;&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Paul Ungureanu, who will work on &lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#5431410714738688&quot;&gt;converting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; to C&lt;/a&gt;)
and will be mentored by Johannes Schindelin, alias Dscho, is also starting a blog about it:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/7557a20a-a55e-e085-1aaa-3935000f643f@gmail.com&quot;&gt;[GSoC] A blog about ‘git stash’ project&lt;/a&gt; - announcement on the mailing list&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://ungps.github.io/&quot;&gt;Paul’s Blog - Google Summer of Code 2018&lt;/a&gt; - the blog in question&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;&lt;br /&gt;&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Alban Gruin, who will work on &lt;a href=&quot;https://summerofcode.withgoogle.com/projects/#4906232314331136&quot;&gt;converting interactive rebase to C&lt;/a&gt;
and will be mentored by Stefan Beller and Christian Couder, is like the other students starting a blog about it:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/917621a4-b46a-95aa-dccc-905c0cd32b1d@gmail.com/&quot;&gt;[GSoC] Yet another blog series about the GSoC&lt;/a&gt; - announcement on the mailing list&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://blog.pa1ch.fr/category/gsoc-2018.html&quot;&gt;Mon coin sur l’Internet - posts with “GSoC 2018” category&lt;/a&gt; - the blog in question, starting with &lt;a href=&quot;https://blog.pa1ch.fr/posts/2018/05/05/en/gsoc2018-week-1.html&quot;&gt;GSoC with git, week 1 : community bonding&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CA+55aFzLZ3UkG5svqZwSnhNk75=fXJRkvU1m_RHBG54NOoaZPA@mail.gmail.com/&quot;&gt;Optimizing writes to unchanged files during merges?&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Linus Torvalds emailed the mailing list that after merging XFS code
into the Linux kernel he was surprised “pretty much &lt;em&gt;everything&lt;/em&gt;” got
recompiled and the test build took 22 minutes instead of about a
minute.&lt;/p&gt;

    &lt;p&gt;When debugging this, Linus found that a core header file had been
changed by the patch series he had merged, but the changes were
already upstream and got merged away. Nevertheless the core header
file got written out with the same contents it had before the merge,
and as ‘make’ only looks at modification time, everything got rebuilt.&lt;/p&gt;

    &lt;p&gt;As he was still busy with the merge window, Linus hoped that someone
could look at making the merging logic optimize things and not even
write out the end result when a file doesn’t change.&lt;/p&gt;

    &lt;p&gt;Junio Hamano soon posted a fix for this issue but it appeared to Linus
that it was not a complete fix, so Linus started debugging further by
himself and updated the mailing list by regularly posting what he had
found. He even started one of his emails with “[ Talking to myself ]”
and the next one with “[ Still talking to myself. Very soothing. ]”&lt;/p&gt;

    &lt;p&gt;Elijah Newren eventually replied to Linus that he already had a fix
for that in one of his patch series that had been merged into the
master branch, but unfortunately the fix caused some
&lt;a href=&quot;https://public-inbox.org/git/xmqqefjm3w1h.fsf@gitster-ct.c.googlers.com/&quot;&gt;“impressively awful fireworks”&lt;/a&gt;,
so the fix had been reverted from master.&lt;/p&gt;

    &lt;p&gt;Fortunately Elijah wrote that he had already reworked his fix and
added many test cases, so that he would be able to resend his patch
series containing a fully working fix in a few days.&lt;/p&gt;

    &lt;p&gt;Linus replied by sending an alternative patch relying on “stupid brute
force” to fix his issue. Stefan Beller reviewed the patch and Linus
replied back to Stefan discussing other improvements and different
approaches.&lt;/p&gt;

    &lt;p&gt;Elijah also replied to Linus’ alternative patch by discussing
different approaches. And Junio agreed with the direction Elijah was
taking, though he had not as much time as he would have liked to think
this through at that time.  Junio discussed Linus’ alternative patch
anyway with Linus, and noted that it could cause problems in the case
of local dirty changes.&lt;/p&gt;

    &lt;p&gt;Then Lars Schneider chimed in by suggesting to add a cache to speed up
builds. Ævar Arnfjörð Bjarmason then replied to Lars and they
discussed this idea but concluded that it wouldn’t work.&lt;/p&gt;

    &lt;p&gt;Jacob Keller and Junio also discussed Lars’ idea. They suggested
alternative ideas or tools to address the underlying problem. Junio
especially mentioned &lt;a href=&quot;https://ccache.samba.org/&quot;&gt;ccache&lt;/a&gt;
which had been also suggested by Stefan Haller.&lt;/p&gt;

    &lt;p&gt;Phillip Wood replied to Lars by sending a Perl script he has been
using to save and restore mtimes to avoid rebuilds.&lt;/p&gt;

    &lt;p&gt;Elijah resent &lt;a href=&quot;https://public-inbox.org/git/20180419175823.7946-1-newren@gmail.com/&quot;&gt;his patch series&lt;/a&gt;
a few days later, and after a few minor fixes, the patch series was
merged to “next” on May 8.  The commit message of the final patch of
the series in particular documents the
&lt;a href=&quot;https://public-inbox.org/git/20180419175823.7946-37-newren@gmail.com/&quot;&gt;“long and blemished history”&lt;/a&gt;
of the can-working-tree-updates-be-skipped check and how it has been
fixed.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developer-spotlight-johannes-schindelin-alias-dscho&quot;&gt;Developer Spotlight: Johannes Schindelin (alias Dscho)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;That is a broad question ;-)&lt;/p&gt;

    &lt;p&gt;Professionally, I got a diploma (not a measly MSc) in mathematics
(specialty: number theory), graduated as a geneticist, dabbled with
psychology as a post-doc, then got heavily involved in scientific image
processing and light sheet microscopy. Nowadays, I work proudly as
software developer at Microsoft.&lt;/p&gt;

    &lt;p&gt;From Git’s perspective, I am the maintainer of
&lt;a href=&quot;https://gitforwindows.org&quot;&gt;Git for Windows&lt;/a&gt;, the “friendly fork” of
Git whose purpose in life is to bring Git to the platform with the
largest market share among professional software developers. As
maintainer, my goals are 1) to improve the Git user experience,
primarily on Windows, 2) to make the contribution process more
inclusive and friendly, and 3) to collaborate as effectively with the
Git project as I can muster.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;That is really hard to answer, because it depends on your perspective
which of my contributions you might consider the most important.&lt;/p&gt;

    &lt;p&gt;From the Git project’s point of view, it is probably that I started
porting Git to Windows, and that I started packaging end-user facing
installers after
&lt;a href=&quot;https://git.github.io/rev_news/2016/04/20/edition-14/#developer-spotlight-johannes-sixt&quot;&gt;Johannes Sixt&lt;/a&gt;
finished the initial port. Windows &lt;em&gt;is&lt;/em&gt; the OS most professional software
developers use, after all, and at the same time it is the OS least well
supported by Git.&lt;/p&gt;

    &lt;p&gt;From the perspective of power users, I guess the
&lt;a href=&quot;https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#_changing_multiple&quot;&gt;interactive rebase&lt;/a&gt;
is what most would deem my contribution with the highest impact.&lt;/p&gt;

    &lt;p&gt;Speaking for myself, I would deem my tenacity my most important
contribution, i.e. that I keep improving Git (both the software as well as
the project) and that I continue to care about the user experience, the
project and the code.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I am &lt;a href=&quot;https://github.com/git/git/pull/447&quot;&gt;working&lt;/a&gt; on teaching the
interactive rebase a mode where it recreates branch structure by rebasing
merge commits, too, rather than dropping them. Kind of a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase -p&lt;/code&gt;
Done Right.&lt;/p&gt;

    &lt;p&gt;Why? Because I need it to maintain Git for Windows (and
&lt;a href=&quot;https://github.com/Microsoft/git/commits/gvfs&quot;&gt;GVFS Git&lt;/a&gt; and Git for Windows’
&lt;a href=&quot;https://github.com/git-for-windows/msys2-runtime/&quot;&gt;fork of the MSYS2/Cygwin runtime&lt;/a&gt;,
and of &lt;a href=&quot;https://github.com/git-for-windows/busybox-w32/&quot;&gt;BusyBox-w32&lt;/a&gt;).
Simply rebasing a linear branch of ~500 patches is simply not good
enough for a big project like Git for Windows.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://xkcd.com/844/&quot;&gt;Technical debt&lt;/a&gt;. We have several metric tons of
that. I get that a mostly volunteer-driven project such as Git has a lot
of technical debt: who wants to work on technical debt, really?&lt;/p&gt;

    &lt;p&gt;One blatant example of our technical debt is the absence of a consistent
API. We have something we call libgit.a, but even that is pretty
inconsistent, and organically grown, and it is specifically intended only
for use by Git’s own commands (which is a shame, because it forces every
application using Git through the essentially ASCII-based command-line
stdin/stdout/stderr).&lt;/p&gt;

    &lt;p&gt;Another example is that so many central operations are still implemented
as Unix shell scripts (with the corresponding lack of performance, safe
error handling and portability). Some scripts are Perl scripts, which is
better from the performance and safe error handling perspective, but it
increases the number of languages you have to speak to contribute to Git,
and it still is not particularly portable.&lt;/p&gt;

    &lt;p&gt;We have a test suite where debugging a regression may mean that you &lt;em&gt;have&lt;/em&gt;
to run 98 test cases before the failing one every single time in the
edit/compile/debug cycle, because the 99th test case may depend on a side
effect of at least one of the preceding test cases. Git’s test suite is so
not &lt;a href=&quot;https://www.slideshare.net/BuckHodges/lessons-learned-doing-devops-at-scale-at-microsoft&quot;&gt;21st century best practices&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;We spawn many, many processes (e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pack-refs&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reflog&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repack&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pack-objects&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prune&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;worktree&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rerere&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git gc&lt;/code&gt;, or
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;remote-https&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;receive-pack&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;index-pack&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unpack-objects&lt;/code&gt; in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt;); it is sometimes really challenging to identify &lt;em&gt;which&lt;/em&gt;
process is the culprit of segmentation faults, file locking issues, or
even “BUG:” messages. Sometimes even Unix shell scripts are involved,
so you may very well end up having to go old-school by adding debug
statements (because modern techniques such as single-stepping are not
an option).&lt;/p&gt;

    &lt;p&gt;A lot of error code paths end in calls to die(). That might have seemed
convenient to the developer who used that, but every piece of useful code
will sooner or later be reused, and then such a sloppy “let’s just exit()
and not bother with releasing memory or closing file handles” mentality
really hurts. Of course, C’s lack of a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;finally&lt;/code&gt; construct makes proper
error handling quite a bit bothersome.&lt;/p&gt;

    &lt;p&gt;We use Asciidoc for our documentation. Worse: even after the rest of the
world settled safely on Markdown for pretty much everything new, we
decided that it would be a splendid idea to convert some ASCII document to
Asciidoc. This hinders fruitful exchanges with all kinds of user
documentation, say, in GitHub wikis.&lt;/p&gt;

    &lt;p&gt;Git assumes that filesystems are case-sensitive. That is true for Linux.
It is incorrect for Windows and macOS. And then we use the filesystem as a
backend e.g. for loose refs.&lt;/p&gt;

    &lt;p&gt;The Git index file was designed as a flat file with variable-size items,
intended to be read sequentially. The index’ purpose, however, is more
like a filesystem, where ideally random-access, concurrent reads and
writes should be possible, but the flat file nature prevents that. When
your idea of a large project looks like linux.git, that may seem a
reasonable design. Even going to the size of gcc.git puts a dent into that
impression, though. Most commercial software projects have larger
repositories. Sometimes by
&lt;a href=&quot;https://blogs.msdn.microsoft.com/bharry/2017/05/24/the-largest-git-repo-on-the-planet/&quot;&gt;a large margin&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;There is a lot of technical debt in Git.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;Submodules.&lt;/p&gt;

    &lt;p&gt;Their premise is that they can be treated essentially as if they were
files, which is a laughable notion after even a cursory consideration.
Files can be untracked, ignored, tracked (clean, modified, deleted).
Submodules can have combinations of those. Like, a submodule can be up to
date &lt;em&gt;and&lt;/em&gt; have untracked files. Oh, and try to detect renames on
submodules (including the case where a submodule was modified). I’ll be
waiting.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://github.com/git-for-windows/build-extra/blob/master/shears.sh&quot;&gt;Git garden shears&lt;/a&gt;
(i.e. the Unix shell script that will hopefully be mostly replaced by
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --interactive --rebase-merges&lt;/code&gt; before long). I am biased, of
course, as I wrote it myself. It is a major time saver for me, though.&lt;/p&gt;

    &lt;p&gt;I dibble-dabbled with many a Git-related tool from time to time, but at
the end of the day I often end up enhancing Git proper to my needs, or use
Git aliases or shell scripts (yes, I use shell scripts myself… Unix
shell scripting has its uses… although I find myself writing and using
&lt;a href=&quot;https://nodejs.org/&quot;&gt;node.js&lt;/a&gt; more and more, as it makes it a lot easier
to use object-oriented abstraction and exception-based error handling, not
to mention that it is waaaaaaaaay faster than shell script interpreters).
I do try to automate as much of my daily work as possible, and many
Git-related tools or libraries simply are not all that automatable.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-5-10-release-notes-948214779.html&quot;&gt;5.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2018/05/03/gitlab-10-7-3-released/&quot;&gt;10.7.3&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/04/30/security-release-gitlab-10-dot-7-dot-2-released/&quot;&gt;Security Release 10.7.2, 10.6.5, and 10.5.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/04/23/gitlab-10-7-1-released/&quot;&gt;10.7.1&lt;/a&gt;, and
&lt;a href=&quot;https://about.gitlab.com/2018/04/22/gitlab-10-7-released/&quot;&gt;10.7.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.13.2&quot;&gt;2.13.2&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.10&quot;&gt;2.12.10&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.11.16&quot;&gt;2.11.16&lt;/a&gt;, and
&lt;a href=&quot;https://enterprise.github.com/releases/2.10.22&quot;&gt;2.10.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current#v3-6-0&quot;&gt;3.6.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;GitHub is &lt;a href=&quot;https://boards.greenhouse.io/github/jobs/1121642?gh_src=cadcuf3r1&quot;&gt;hiring a Linux Kernel Engineer&lt;/a&gt;
to work on supporting &lt;a href=&quot;https://gvfs.io/&quot;&gt;GVFS&lt;/a&gt; (an extension of Git to support Git at Enterprise Scale).&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://skillsmatter.com/meetups/10863-gerrit-devops-analytics-and-git-auto-magic&quot;&gt;Next Git meetup in London&lt;/a&gt; is the 17th of May at 7:00 PM
and will be hosted by Skills Matter at CodeNode. There will be talks about Git auto-magic and Gerrit DevOps Analytics.&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://youtu.be/ntxEJ-mUVTU&quot;&gt;Gerrit Code Review Hackathon 2018&lt;/a&gt; has ended, leaving many innovative ideas to the project:
    &lt;ul&gt;
      &lt;li&gt;Improvements on the Mobile experience and a new dark theme&lt;/li&gt;
      &lt;li&gt;Ability to dynamically reload its configuration&lt;/li&gt;
      &lt;li&gt;Analytics, how to leverage and chart your Git and Code Review data&lt;/li&gt;
      &lt;li&gt;Extensible submit rules without having to be a Prolog expert&lt;/li&gt;
      &lt;li&gt;Gitiles command line, to invoke your code browser from your prompt&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Edward Thomson (co-maintainer of libgit2) talks about
&lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/04/19/release-flow-how-we-do-branching-on-the-vsts-team/&quot;&gt;the branching model of the team developing Visual Studio Team Services&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://engineering.salesforce.com/five-steps-toward-a-clean-commit-history-62f3019d8f60&quot;&gt;Five Steps Toward a Clean Commit History&lt;/a&gt; by Michael Osborn.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/git-it-together-some-tips-on-commit-etiquette-and-best-practices-for-junior-developers-1f147b8dfd56&quot;&gt;“Git” it together: Some tips on commit etiquette and best practices for junior developers&lt;/a&gt; by Jeremy Gunter.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.futurelearn.com/blog/telling-stories-with-your-git-history&quot;&gt;Telling stories with your Git history&lt;/a&gt; by Seb Jacobs.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=i08A2uTDoa8&quot;&gt;The Most Common Problem In Software Development And How To Fix It&lt;/a&gt; presentation by Tom Stuart at RubyConf 2017, especially the &lt;a href=&quot;https://www.youtube.com/watch?v=i08A2uTDoa8&amp;amp;feature=youtu.be&amp;amp;t=1046&quot;&gt;History hygiene.&lt;/a&gt; part.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.freecodecamp.org/how-to-securely-store-api-keys-4ff3ea19ebda&quot;&gt;Best practices for securely storing API keys&lt;/a&gt; by Bruno Pedro examines different tools and approaches, including:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/spwhitton/git-remote-gcrypt&quot;&gt;git-remote-gcrypt&lt;/a&gt; to encrypt whole repository using remote helpers mechanism,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://git-secret.io/&quot;&gt;git-secret&lt;/a&gt;, which is a Bash script to encrypt files using public GPG keys of all trusted users; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git secret&lt;/code&gt; was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/05/11/edition-15/#other-news&quot;&gt;Git Rev News Edition 15&lt;/a&gt;, and has since acquired webpage and logo,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.agwa.name/projects/git-crypt/&quot;&gt;git-crypt&lt;/a&gt;, which is a similar tool to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-secret&lt;/code&gt;, but it is a binary executable (it is written in C++), and instead of requiring secret files to be ignored and untracked it uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;filter&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt; gitattributes,&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/StackExchange/blackbox&quot;&gt;BlackBox&lt;/a&gt; by &lt;a href=&quot;https://github.com/StackExchange&quot;&gt;team behind StackOverflow&lt;/a&gt;, which is a tool to safely store secrets in Git/Mercurial/Subversion.  It also supports the encryption of small strings and not only entire files when working with &lt;a href=&quot;https://puppet.com/&quot;&gt;Puppet&lt;/a&gt; (via Puppet’s &lt;a href=&quot;https://docs.puppet.com/hiera/&quot;&gt;Hiera&lt;/a&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/5-git-fundamentals-ded819a34cfe&quot;&gt;5 Git Fundamentals&lt;/a&gt; by Jorge Yau (2016)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://nbviewer.jupyter.org/github/fperez/reprosw/blob/master/Version%20Control.ipynb&quot;&gt;Version control for fun and profit: the tool you didn’t know you needed. From personal workflows to open collaboration&lt;/a&gt;, a Jupyter notebook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://engineering.clever.com/2017/12/11/mo-repos-mo-problems-how-we-make-changes-across-many-git-repositories/&quot;&gt;Mo Repos, Mo Problems? How We Make Changes Across Many Git Repositories&lt;/a&gt; explains how Clever uses a
&lt;a href=&quot;https://github.com/Clever/microplane&quot;&gt;CLI tool called microplane&lt;/a&gt; they developed to make changes across many repos.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20180422205859.GA16261@syl.local/T/#u&quot;&gt;Some mutt(1) patches and scripts&lt;/a&gt; by Taylor Blau, posted on Git mailing list.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://itefix.net/gitwin&quot;&gt;Gitwin - Git Server for Windows&lt;/a&gt;, a packaging of Git, OpenSSH, Nginx and many other related tools to make it a ready-to-use solution as a secure Git repository on Windows.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mattbaker/git-vanity-sha&quot;&gt;git-vanity-sha&lt;/a&gt; will try to tweak the committer timestamp to produce vanity hex prefix for commit SHA; it is similar in function to &lt;a href=&quot;https://bitbucket.org/tpettersen/git-sham&quot;&gt;git-sham&lt;/a&gt; which does it and more by appending different random series of three emojis, and which was covered in &lt;a href=&quot;https://git.github.io/rev_news/2015/06/03/edition-4/&quot;&gt;Git Rev News Edition 4&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/drench/git-shame&quot;&gt;git-shame&lt;/a&gt; finds out to blame for stale remote branches.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tugboat.qa/&quot;&gt;Tugboat&lt;/a&gt; is a service allowing you to generate preview of your working website for every pull request, tag or branch and share it (and see visual regressions).  Works with GitHub, Bitbucket, and Gitlab.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bdpalladino/git-driven-refactoring&quot;&gt;git-driven-refactoring&lt;/a&gt; – sample code for “Git Driven Refactoring” presentation by Ashley Ellis Pierce at &lt;a href=&quot;https://www.youtube.com/watch?v=3OgbQOsW61Y&quot;&gt;RubyConf 2017&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=rK8yHl0cHoc&quot;&gt;GitHub Universe 2017&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=e9K1gHYIE2c&amp;amp;list=PL0lo9MOBetEGIifU90rTn5zQaX5NibX08&amp;amp;index=6&quot;&gt;Git Merge 2018&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Tools to prevent from accidentally storing secrets in repositories:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/awslabs/git-secrets&quot;&gt;git-secrets&lt;/a&gt;
is a tool to prevent from committing secrets and credentials into Git repositories,
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/03/15/edition-25/#other-news&quot;&gt;Git Rev News Edition 25&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/anshumanbh/git-all-secrets&quot;&gt;git-all-secrets&lt;/a&gt;
is a tool to capture all the Git secrets in multiple repositories by leveraging multiple open source Git searching tools (&lt;a href=&quot;https://github.com/dxa4481/truffleHog&quot;&gt;truffleHog&lt;/a&gt;, &lt;a href=&quot;https://github.com/auth0/repo-supervisor&quot;&gt;repo-supervisor&lt;/a&gt;),
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/06/14/edition-28/#other-news&quot;&gt;Git Rev News Edition 28&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/zricethezav/gitleaks&quot;&gt;GitLeaks&lt;/a&gt;
is a tool to “check Git repos for secrets and keys”.
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2018/02/21/edition-36/#other-news&quot;&gt;Git Rev News Edition 36&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/UKHomeOffice/repo-security-scanner&quot;&gt;repo-security-scanner&lt;/a&gt;
by &lt;a href=&quot;https://github.com/UKHomeOffice&quot;&gt;UKHomeOffice&lt;/a&gt;
is a command-line tool that finds secrets accidentally committed to a Git repo, e.g. passwords, private keys.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Tools to encrypt repositories, files in epositories, or fragments of files
(for example to safely store secrets):
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/spwhitton/git-remote-gcrypt&quot;&gt;git-remote-gcrypt&lt;/a&gt;
is a Git remote helper to push and pull from repositories encrypted with GnuPG (a shell script),
described in &lt;a href=&quot;https://medium.freecodecamp.org/how-to-securely-store-api-keys-4ff3ea19ebda&quot;&gt;Best practices for securely storing API keys&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://git-secret.io/&quot;&gt;git-secret&lt;/a&gt;
is a bash tool to store your private data inside a Git repository (encrypting files),
described in &lt;a href=&quot;https://medium.freecodecamp.org/how-to-securely-store-api-keys-4ff3ea19ebda&quot;&gt;Best practices for securely storing API keys&lt;/a&gt;;
was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/05/11/edition-15/#other-news&quot;&gt;Git Rev News Edition 15&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.agwa.name/projects/git-crypt/&quot;&gt;git-crypt&lt;/a&gt;
enables transparent encryption and decryption of files in a Git repository (written in C++),
described in &lt;a href=&quot;https://medium.freecodecamp.org/how-to-securely-store-api-keys-4ff3ea19ebda&quot;&gt;Best practices for securely storing API keys&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/StackExchange/blackbox&quot;&gt;BlackBox&lt;/a&gt;
is a tool to safely store secrets in Git/Mercurial/Subversion, encrypting files (and small strings when using Puppet),
described in &lt;a href=&quot;https://medium.freecodecamp.org/how-to-securely-store-api-keys-4ff3ea19ebda&quot;&gt;Best practices for securely storing API keys&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/elasticdog/transcrypt&quot;&gt;transcrypt&lt;/a&gt;
is a tool to transparently encrypt files within a Git repository (with OpenSSL’s symmetric cipher routines).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Johannes Schindelin, Elijah Newren and
Luca Milanesio.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 38 (April 18th, 2018)</title>
      <link>https://git.github.io/rev_news/2018/04/18/edition-38/</link>
      <pubDate>Wed, 18 Apr 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/04/18/edition-38/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-38-april-18th-2018&quot;&gt;Git Rev News: Edition 38 (April 18th, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 38th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of March 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/cover.1516225925.git.johannes.schindelin@gmx.de/&quot;&gt;rebase -i: offer to recreate merge commits&lt;/a&gt; (&lt;em&gt;written by Jacob Keller&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Johannes Schindelin has worked to replace &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--preserve-merges&lt;/code&gt;
functionality in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;, which has many known flaws, by a new
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--recreate-merges&lt;/code&gt;, which aims to replace the functionality of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--preserve-merges&lt;/code&gt; in a way that fixes the known issues.&lt;/p&gt;

&lt;p&gt;When the patch series was sent to the list, Sergey Organov brought up
that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--recreate-merges&lt;/code&gt; is still (true to its name) recreating the
merges from scratch, thus losing any content they might have contained,
such as fixes.&lt;/p&gt;

&lt;p&gt;He pointed to a strategy for cherry-picking the merge commit. Others
chimed in to state that they share concerns and would like to see the
ability to preserve the merge resolutions properly.&lt;/p&gt;

&lt;p&gt;Johannes replied that this does not make sense because the cherry-pick
solution does not work when you drop or re-order commits. The goal of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--recreate-merges&lt;/code&gt; is to allow the same level of freedom as with
regular interactive rebases. Using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--preserve-merges --first-parent&lt;/code&gt;
strategy of just cherry-picking the merge commit will
result in any changes before that merge being dropped.&lt;/p&gt;

&lt;p&gt;Junio Hamano, the Git maintainer, chimed in that Johannes was correct,
if for example the side branch you are merging dropped a commit during
the rebase, you absolutely do not want to use the simple &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick -m1&lt;/code&gt;
original.&lt;/p&gt;

&lt;p&gt;Sergey replied that he had only intended the use of cherry-pick as an
explanation facility, and that a proper strategy would be required to
actually implement and allow history editing.&lt;/p&gt;

&lt;p&gt;Some discussion about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--preserve-merges&lt;/code&gt; and compatibility with scripts
(i.e. should we change or fix it? – or should we deprecate it?)
followed.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/87y3jtqdyg.fsf@javad.com/&quot;&gt;Rebasing merges: a journey to the ultimate solution (Road Clear)&lt;/a&gt; (&lt;em&gt;written by Jacob Keller&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After the discussions in the above article Sergey posted an
outline of a potential method for actually rebasing a merge (as
opposed to recreating it from scratch) which used a process of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick -mN&lt;/code&gt; of the merge onto each topic branch being
merged, and then merging the result.&lt;/p&gt;

&lt;p&gt;Igor Djordjevic and Jacob Keller, alias Jake, chimed in hoping to
prove by example that the solution could work. Johannes replied that
he was skeptical and pointed out possible flaws.&lt;/p&gt;

&lt;p&gt;A few examples were tried, but it was proven that the original
algorithm did not work, as dropped commits could end up being replayed
into the merge commits, turning them into “evil” merges.&lt;/p&gt;

&lt;p&gt;Further suggestions to the strategy were proposed and tested,
ultimately resulting in Sergey proposing
&lt;a href=&quot;https://public-inbox.org/git/87r2oxe3o1.fsf@javad.com/&quot;&gt;a fix to his method&lt;/a&gt;,
specifically using the original merge commit as a merge base during
the final step.&lt;/p&gt;

&lt;p&gt;Some discussion occurred about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge -s ours&lt;/code&gt; and how any rebasing
strategy should avoid attempting to understand the semantics of the
merges.&lt;/p&gt;

&lt;p&gt;Phillip Wood suggested an alternative idea for keeping the merge
conflicts by merging the changes from each rebased branch back into
the parent merge branch. This was immediately understood by Johannes
and suggested as a potential for the default implementation.&lt;/p&gt;

&lt;p&gt;Sergey replied that he thinks the solution produces the same result as
his updated strategy, at least when none of the strategies produce any
conflicts.&lt;/p&gt;

&lt;p&gt;Johannes suggested that he was open to using Phillip’s strategy but
was worried about syntax. He did not want to introduce inconsistent
behavior of the new “merge” command.&lt;/p&gt;

&lt;p&gt;Despite Sergey believing that the two strategies were equivalent,
Johannes was not convinced.&lt;/p&gt;

&lt;p&gt;Discussion about the syntax for the new “rebase a merge” todo command
continued. Johannes landed on the idea of adding an option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-R&lt;/code&gt; to the
merge command line to indicate that it was rebasing a merge (vs creating
a new merge).&lt;/p&gt;

&lt;p&gt;Phillip suggested that we re-use “pick” but thought it might be a bit
too magical. He then adjoined that it is indeed too magical, and is
basically the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--preserve-merges&lt;/code&gt; mistake all over again. He suggested
it was a shame to have merge mean both recreate a merge and rebase a
merge, but didn’t have a good answer.&lt;/p&gt;

&lt;p&gt;Igor suggested that “pick” was more natural, and that we should extend
it to properly support picking merge commits in a way that was not
broken like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--perserve-merges&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Johannes stated he did not like the extension of “pick” because it makes
it harder to understand which lines are actually merges and which
are not.&lt;/p&gt;

&lt;p&gt;Johannes replied that Sergey’s strategy is actually worse than
Phillip’s from a functional point of view, because it has potential
to produce conflicts multiple times.
The discussion continued and became heated, with both Johannes and
Sergey unable to reach a consensus.&lt;/p&gt;

&lt;p&gt;Discussion about “pick” vs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge -R&lt;/code&gt; continued, with Igor and Sergey
stating that they thought extending “pick” syntax would be better than
introducing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge -R&lt;/code&gt; syntax.&lt;/p&gt;

&lt;p&gt;Some further discussion about backward compatibility of the todo list
format and of options for it followed.&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20180324183844.4565-1-kaartic.sivaraam@gmail.com/&quot;&gt;branch -l: print useful info whilst rebasing a non-local branch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kaartic Sivaraam sent a patch to the mailing list that fixed
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch -l&lt;/code&gt; output when an interactive rebase is performed
and when the interactive rebase was started from a remote branch
or when HEAD was detached.&lt;/p&gt;

&lt;p&gt;Eric Sunshine replied to Kaartic that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch -l&lt;/code&gt; is a
shortcut for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--create-reflog&lt;/code&gt; not for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--list&lt;/code&gt;, and suggested some
small improvements along with adding a couple of new tests.&lt;/p&gt;

&lt;p&gt;Kaartic then wondered why &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch -l&lt;/code&gt; prints a list of branch
names when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt; is not a shorthand for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--list&lt;/code&gt;, and agreed to
implement Eric’s suggestions.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, replied to Kaartic that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt; just sets the
“reflog” variable to 1, and then, as the command defaults to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--list&lt;/code&gt;
when there is no other command line option, the branch names are
printed, which just ignores the “reflog” variable.&lt;/p&gt;

&lt;p&gt;Peff also explained that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt; is probably never used in practice as it
is the default to create a reflog, so it’s “historical and quite
unfortunate” that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt; is a shortcut for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--create-reflog&lt;/code&gt; and not for
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--list&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Eric then suggested making &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt; mean sometimes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--create-reflog&lt;/code&gt; and
sometimes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--list&lt;/code&gt;, but Peff didn’t like that and suggested instead to
either complaining when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt; is used in list mode or deprecating and
dropping &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt; first and then maybe after a significant amount of time
repurposing it as a shortcut for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--list&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then Eric replied to Kaartic with a few small additional suggestions
and with a patch that adds the new tests which Eric had previously
suggested.&lt;/p&gt;

&lt;p&gt;Meanwhile Kaartic agreed to Peff’s suggestions. Those suggestions
were discussed a bit more by Jacob Keller, alias Jake, and Junio
Hamano, the Git maintainer, who agreed to the plan to deprecate
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-l&lt;/code&gt;, then to drop it, and eventually re-establish it as shortcut
for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--list&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Peff then sent a patch series &lt;a href=&quot;https://public-inbox.org/git/20180326072618.GA12530@sigill.intra.peff.net/&quot;&gt;doing all that&lt;/a&gt;.
The series was reviewed by Eric and Jake.&lt;/p&gt;

&lt;p&gt;Kaartic reworked his original patch to improve &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch --list&lt;/code&gt;
output and sent to the mailing list a
&lt;a href=&quot;https://public-inbox.org/git/3566c82c-114a-ec2d-286c-2851e4b2952d@gmail.com/&quot;&gt;second version of it&lt;/a&gt;
along with Eric’s patch adding new tests.&lt;/p&gt;

&lt;p&gt;Peff’s patch series has been merged into the ‘next’ branch and
Kaartic’s patch series will probably also be merged there, too.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-jiang-xin&quot;&gt;Developer Spotlight: Jiang Xin&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I am a Chinese, live in Beijing, China.  Almost at the same time when
Linus wrote the first line of code for Git, I started to work as a
self-employed open source consultant. At that time, I didn’t know Git
yet, so I chose SVN and Redmine as the main products to start my consultant
career.  After working as a Git consultant for Huawei for one year, I
accepted Huawei’s offer in Dec, 2015.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;As a developer, the most important contribution to Git is interactive
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clean&lt;/code&gt;. One day a guy (reader of my book) lost his work by running
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clean -f&lt;/code&gt; and asked me for help. I wanted to do something, so I
sent patches to Git, and it became this feature: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clean --interactive&lt;/code&gt;.&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://marc.info/?l=git&amp;amp;m=137217568306354&quot;&gt;http://marc.info/?l=git&amp;amp;m=137217568306354&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/git/git/commit/988f98f6&quot;&gt;https://github.com/git/git/commit/988f98f6&lt;/a&gt;&lt;br /&gt;
 &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;As a Huaweier, I also have contributed some fixes for corner cases I met
at work:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/git/git/commit/b112b14d&quot;&gt;fix on crash of git-receive-pack&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/git/git/commit/d445fda4&quot;&gt;fix on proxy issue&lt;/a&gt;&lt;br /&gt;
 &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;As a Chinese, the most important work I have done is that I wrote a
book on Git, and the book was published in 2011. As soon as I received
the first copy of my book, I sent one to Junio. :)  I open-sourced the
book in &lt;a href=&quot;https://github.com/gotgit/gotgit&quot;&gt;https://github.com/gotgit/gotgit&lt;/a&gt;,
and you can read it from
&lt;a href=&quot;http://www.worldhello.net/gotgit/&quot;&gt;http://www.worldhello.net/gotgit/&lt;/a&gt;.
Meanwhile, I wrote an e-book for GitHub:
&lt;a href=&quot;http://www.worldhello.net/gotgithub&quot;&gt;http://www.worldhello.net/gotgithub&lt;/a&gt;;
it is also written in Chinese, but did not publish it because I feel it is
hard to track changes of the GitHub UI, and the book might become obsolete
very quickly.&lt;/p&gt;

    &lt;p&gt;I became Git l10n coordinator to help Junio for l10n management in
early 2012. Now there are 11 fully supported language packs for Git,
and this work is very valuable for those who are not good at English.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;Now I am working in Huawei for the internal Git platform with multiple
data centers distributed in China. There are many cool features I am
working on.
For example: Git central workflow and Git-CDN.&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Git central workflow is something like Gerrit. No forking before
sending pull request, no special git hook on client side, no
“Change-ID” in the commit message, and we use pull request for
review. We also developed a client side program named “git-mm”
to help our users to manage multiple git modules, or just a single
git repository.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Git-CDN is a reverse proxy for Git. I wrote a program named
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-upload-pack-proxy&lt;/code&gt; to handle data syncing and data caching
across different data centers.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;We have also some enhancements on Git, and I wish I can
contribute them back to Git one day.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;When I was developing the Git reverse proxy, I found the Git protocol is a
bit complicated and not very efficient. For example, if a client wants
to fetch a single branch, the server still needs to send thousands of
references as refs-advertisement. We can improve it.&lt;/p&gt;

    &lt;p&gt;(EDIT: Stefan Beller pointed out that there would be great improvements
in protocol v2, a simpler and less wasteful protocol, which had already
been merged from the bw/protocol-v2 topic branch to Git next branch.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-gc&lt;/code&gt;, I think.  If a repository is as big as 10 GB, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-gc&lt;/code&gt; will be
quite slow.  If we designed a new storage model for Git without
garbage collection, it would be great.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Library: libgit2&lt;/li&gt;
      &lt;li&gt;L10n: Emacs po-mode&lt;/li&gt;
      &lt;li&gt;Git RPC: Gitaly&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq6059z9kz.fsf@gitster-ct.c.googlers.com&quot;&gt;v2.17.0&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqwoxw6kkk.fsf@gitster-ct.c.googlers.com&quot;&gt;v2.17.0-rc2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqtvt9nr7p.fsf@gitster-ct.c.googlers.com&quot;&gt;v2.17.0-rc1&lt;/a&gt;, and
&lt;a href=&quot;https://public-inbox.org/git/xmqq4ll7lq0r.fsf@gitster-ct.c.googlers.com&quot;&gt;v2.16.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://public-inbox.org/git/20180403123410.13300-1-johannes.schindelin@gmx.de&quot;&gt;2.17.0&lt;/a&gt; and
&lt;a href=&quot;https://public-inbox.org/git/20180323174044.14612-1-johannes.schindelin@gmx.de&quot;&gt;2.16.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;http://enterprise.github.localhost/releases/2.13.1&quot;&gt;2.13.1&lt;/a&gt;,
&lt;a href=&quot;http://enterprise.github.localhost/releases/2.12.9&quot;&gt;2.12.9&lt;/a&gt;,
&lt;a href=&quot;http://enterprise.github.localhost/releases/2.11.15&quot;&gt;2.11.15&lt;/a&gt;,
&lt;a href=&quot;http://enterprise.github.localhost/releases/2.10.21&quot;&gt;2.10.21&lt;/a&gt;,
&lt;a href=&quot;http://enterprise.github.localhost/releases/2.13.0&quot;&gt;2.13.0&lt;/a&gt;,
&lt;a href=&quot;http://enterprise.github.localhost/releases/2.12.8&quot;&gt;2.12.8&lt;/a&gt;,
&lt;a href=&quot;http://enterprise.github.localhost/releases/2.11.14&quot;&gt;2.11.14&lt;/a&gt;, and
&lt;a href=&quot;http://enterprise.github.localhost/releases/2.10.20&quot;&gt;2.10.20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2018/03/19/gitlab-10-5-5-released/&quot;&gt;10.5.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/03/22/gitlab-10-6-released/&quot;&gt;10.6&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/03/28/gitlab-10-6-1-released/&quot;&gt;10.6.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/03/29/gitlab-10-6-2-released/&quot;&gt;10.6.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/04/04/security-release-gitlab-10-dot-6-dot-3-released/&quot;&gt;Security Release 10.6.3, 10.5.7, and 10.4.7&lt;/a&gt;, and
&lt;a href=&quot;https://about.gitlab.com/2018/04/09/gitlab-10-6-4-released/&quot;&gt;10.6.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-5-9-release-notes-946029921.html&quot;&gt;5.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Github Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.1.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current#v3-5-0&quot;&gt;3.5.0&lt;/a&gt; and
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current#v3-5-1&quot;&gt;3.5.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.27.0-rc3&quot;&gt;0.27.0-rc3&lt;/a&gt; and
&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.27.0&quot;&gt;0.27.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit Code Review &lt;a href=&quot;https://www.gerritcodereview.com/2.15.html#2151&quot;&gt;2.15.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The &lt;a href=&quot;https://www.youtube.com/watch?v=MfIi3d7UAhs&amp;amp;list=PLTpLVrHJAlODA3qfvV-x_QBPTZtT5JT5q&quot;&gt;videos of the 2018 Git Merge talks&lt;/a&gt; have been released.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAP8UFD0WZ07EVER_HupcFLw4w-4H2hb2cp8wTaj2i9jOc_+pTA@mail.gmail.com&quot;&gt;Git developers contacted by an advanced alien species&lt;/a&gt;, a 1st of April announcement.&lt;/li&gt;
  &lt;li&gt;New YouTube Channel &lt;a href=&quot;https://youtube.com/gerritforgetv&quot;&gt;GerritForge TV&lt;/a&gt;, dedicating events and tutorials to the Gerrit Code Review community.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.github.com/2018-04-05-git-217-released/&quot;&gt;Git 2.17 is now available&lt;/a&gt; – a look at some of the most interesting new features from the last few versions of Git&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@andriesss/generating-a-changelog-based-on-merge-commits-b4b3445c9af3&quot;&gt;Generating a changelog based on merge commits&lt;/a&gt; by Andries&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://zwischenzugs.com/2018/03/26/git-log-the-good-parts/&quot;&gt;git log – the Good Parts&lt;/a&gt;, based on author’s material from the book &lt;a href=&quot;https://leanpub.com/learngitthehardway&quot;&gt;Learn Git the Hard Way&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.atlassian.com/blog/2015/12/tips-tools-to-solve-git-conflicts/&quot;&gt;14 tips and tools to resolve conflicts with Git&lt;/a&gt; by Nicola Paolucci, from 2015&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;There is a series of articles by Joe Neeman about mathematical underpinnings of &lt;a href=&quot;https://pijul.org/&quot;&gt;Pijul&lt;/a&gt; distributed version control system, which is based like &lt;a href=&quot;http://darcs.net/&quot;&gt;Darcs&lt;/a&gt; on theory of merges. Pijul was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2015/11/11/edition-9/&quot;&gt;Git Rev News #9&lt;/a&gt; and &lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/&quot;&gt;#24&lt;/a&gt;:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://jneem.github.io/merging/&quot;&gt;Merging and patches&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://jneem.github.io/pijul/&quot;&gt;Merging, patches, and pijul&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.blueapron.io/release-notes-using-fastlane-fba80240dc4d&quot;&gt;Release Notes using Fastlane&lt;/a&gt; by Tom Wilson, about how to deal with Android version code that is dynamically generated based on git revision history&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://stefan.saasen.me/articles/git-clone-in-haskell-from-the-bottom-up/&quot;&gt;Reimplementing “git clone” in Haskell from the bottom up&lt;/a&gt; by Stefan Saasen - March 2013&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.janestreet.com/putting-the-i-back-in-ide-towards-a-github-explorer/&quot;&gt;Putting the I back in IDE: Towards a Github Explorer&lt;/a&gt; - what Git and Github could look like with truly deep editor integration&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://daedtech.com/merging-done-right-semantic-merge/&quot;&gt;Merging Done Right: Semantic Merge&lt;/a&gt;, about Plastic SCM’s &lt;a href=&quot;https://www.semanticmerge.com/&quot;&gt;SemanticMerge&lt;/a&gt; paid tool, presented on Git Merge 2018 (event covered by &lt;a href=&quot;https://git.github.io/rev_news/2017/05/17/edition-27/&quot;&gt;Git Rev News Edition 37&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.guiffy.com/&quot;&gt;Guiffy&lt;/a&gt;, the advanced cross-platform diff/merge&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rocketraman/gitworkflow&quot;&gt;gitworkflow repository&lt;/a&gt; is a documentation repository for &lt;a href=&quot;https://mirrors.edge.kernel.org/pub/software/scm/git/docs/gitworkflows.html&quot;&gt;gitworkflows&lt;/a&gt;: see &lt;a href=&quot;https://hackernoon.com/how-the-creators-of-git-do-branches-e6fcc57270fb&quot;&gt;How the Creators of Git do Branching&lt;/a&gt;, by Raman Gupta (mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2017/05/17/edition-27/&quot;&gt;Git Rev News Edition 27&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jce-il/git-immersion&quot;&gt;git-immersion&lt;/a&gt; repository for &lt;a href=&quot;http://jce-il.github.io/git-immersion/index.html&quot;&gt;git-immersion exercise&lt;/a&gt; guided tour&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.1804041821420.55@ZVAVAG-6OXH6DA.rhebcr.pbec.zvpebfbsg.pbz/&quot;&gt;commit -&amp;gt; public-inbox link helper&lt;/a&gt; script by Johannes Schindelin was posted on git mailing list&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://kaizenboard.xyz/#/&quot;&gt;kaizenboard&lt;/a&gt; - GitHub issues on a Kanban board&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Jiang Xin, Jacob Keller, Luca Milanesio,
Sergey Organov and Kaartic Sivaraam.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 37 (March 21st, 2018)</title>
      <link>https://git.github.io/rev_news/2018/03/21/edition-37/</link>
      <pubDate>Wed, 21 Mar 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/03/21/edition-37/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-37-march-21st-2018&quot;&gt;Git Rev News: Edition 37 (March 21st, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 37th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened from the month of February 2018 up
to the &lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge&lt;/a&gt; conference on March 7th and 8th 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Git Merge 2018 conference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another exciting &lt;a href=&quot;https://git-merge.com/&quot;&gt;Git Merge&lt;/a&gt; happened this year, this time in the lovely city of Barcelona in Catalonia, Spain. Surrounded by crazy skaters, two days full of Git happened, with a couple of add-on events on both ends.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A few days before the conference Jeff King, alias Peff, posted a &lt;a href=&quot;https://public-inbox.org/git/20180306231609.GA1632@sigill.intra.peff.net/&quot;&gt;Git / Software Freedom Conservancy status report (2018)&lt;/a&gt; and a &lt;a href=&quot;https://public-inbox.org/git/20180306230419.GA1373@sigill.intra.peff.net/&quot;&gt;git-scm.com update&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;The usual Git Contributor Summit was held in parallel to the workshop day. Alex Vandiver provided a nice &lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.20.1803091557510.23109@alexmv-linux/&quot;&gt;write-up&lt;/a&gt; of the event, which felt more focused on concrete projects than in the last years. Be sure to read through the replies that add more information, still.&lt;/li&gt;
  &lt;li&gt;In his &lt;a href=&quot;https://git-merge.com/#brett-smith&quot;&gt;Opening Session&lt;/a&gt; of the Git Merge, Brett Smith from the Software Freedom Conservancy invited everyone to have a moment of silence in memory of Shawn Pearce (see &lt;a href=&quot;https://git.github.io/rev_news/2018/02/21/edition-36/&quot;&gt;edition 36&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Plastic SCM’s Semantic Merge was not only presented in a &lt;a href=&quot;https://git-merge.com/#pablo-santos-luaces&quot;&gt;talk&lt;/a&gt;, but made available as a bot called &lt;a href=&quot;https://gmaster.io/mergedroid&quot;&gt;“mergedroid”&lt;/a&gt; that applies the same merge conflict resolution to Pull Requests on GitHub.&lt;/li&gt;
  &lt;li&gt;A big theme this year was to apply Git to files other than source code:
    &lt;ul&gt;
      &lt;li&gt;Stephen Hathaway detailed how &lt;a href=&quot;https://git-merge.com/#stephen-hathaway&quot;&gt;designers use Git to work on visual design&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;William Chia described how &lt;a href=&quot;https://git-merge.com/#william-chia&quot;&gt;GitLab uses Git to collaborate on documents&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;The xltrail product makes it possible to use &lt;a href=&quot;https://www.xltrail.com&quot;&gt;Git to manage Excel files&lt;/a&gt; (this was demo’ed between talks by Felix Zumstein).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAE1pOi1XtrWqG7mOdrNt10YoZG0LOAB7i9cc1Gi8oWhULxE57A@mail.gmail.com/&quot;&gt;Is there any way to “interrupt” a rebase?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hilco Wijbenga explained to the mailing list that sometimes when a
rebase fails because of rebase/merge conflicts, he would like to
“rewind” the rebase to an earlier commit and restart from there. This
would be useful for example when the earlier commit is the right
commit where a conflict should be fixed.&lt;/p&gt;

&lt;p&gt;His current solution is to abort the rebase and start over with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --interactive&lt;/code&gt; and then “edit” commits. This doesn’t work
well though when a lot of conflicts have already been resolved before
the earlier commit he would “rewind” to, because, when the original
rebase is aborted, all the work that already went into resolving
conflicts is lost.&lt;/p&gt;

&lt;p&gt;Brian Carlson replied to Hilco that in this case he unstages all the
changes from the index, then makes the change that should have gone
into the earlier commit, uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --fixup&lt;/code&gt; (or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--squash&lt;/code&gt;),
and then restages the rest of the changes and continues with the
rebase. He can then use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase -i --autosquash&lt;/code&gt; afterwards to
insert the fixup commit into the right place.&lt;/p&gt;

&lt;p&gt;Hilco replied to Brian that he ends up doing that too, but it doesn’t
work well when the fixup commit is not easy to move to the right
place.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, replied to Hilco’s original email saying that
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rerere&lt;/code&gt; should help reapplying conflict resolutions. He also
suggested to “simply pick the resolved state at each step” when
repeating the rebase, using for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git tag failed&lt;/code&gt; to remember
the failed attempt, and then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout failed~4 --&lt;/code&gt; to pick
conflict resolutions from the failed attempt.&lt;/p&gt;

&lt;p&gt;Peff alternatively suggested “rewinding” using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset --hard&lt;/code&gt; and
then, after fixing the earlier commit, using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt; to
cherry-pick commits with conflict resolutions from the failed attempt.&lt;/p&gt;

&lt;p&gt;Johannes Schindelin, alias Dscho, also replied to Hilco. Dscho first
suggested basically the same workflow as Peff’s alternative
suggestion.&lt;/p&gt;

&lt;p&gt;He then suggested an alternative strategy which consists in copying
parts of the $GIT_DIR/rebase-merge/done file to the beginning of the
$GIT_DIR/rebase-merge/git-rebase-todo file, instead of cherry-picking
commits. This copying would in effect “rewind” the original rebase.&lt;/p&gt;

&lt;p&gt;Dscho mentioned that a new interactive rebase subcommand could be
created to facilitate using this strategy. The new subcommand could
“make use of the fact that the interactive rebase accumulates mappings
between the original commits and the rewritten ones” in the
$GIT_DIR/rebase-merge/rewritten-list file.&lt;/p&gt;

&lt;p&gt;Phillip Wood also replied to Hilco’s first email suggesting something
similar as Dscho’s alternative strategy. Phillip suggested using
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --pretty=&quot;pick %h %s&quot; &amp;lt;earlier_commit&amp;gt;..&lt;/code&gt; followed by
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --edit-todo&lt;/code&gt; to edit the git-rebase-todo file, and then
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout &amp;lt;earlier_commit&amp;gt;&lt;/code&gt; to rewind.&lt;/p&gt;

&lt;p&gt;In a subsequent email replying to himself Dscho elaborated on a
possible new subcommand. He proposed
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --replay-latest-commits 3&lt;/code&gt; and a slightly different way to
copy commits to the git-rebase-todo file so that it contains commits
with resolved merge conflicts.&lt;/p&gt;

&lt;p&gt;Phillip replied to Dscho that it’s the reason why he actually uses
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --pretty=&quot;pick %h %s&quot; &amp;lt;earlier_commit&amp;gt;..&lt;/code&gt; to get the lines
that should be pasted at the beginning of the git-rebase-todo file.&lt;/p&gt;

&lt;p&gt;Peff replied to Dscho suggesting a “general form” of Dscho’s proposal
that would be called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --rewind&lt;/code&gt; and that could “undo” the
prior rebase command whatever it is.&lt;/p&gt;

&lt;p&gt;Jacob Keller, alias Jake, chimed in to support Peff’s suggestion and
Hilco’s wish of “a --rewind that simply tracks the point of each
history and can reset back to each”.&lt;/p&gt;

&lt;!--- ## Developer Spotlight: --&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqwoyc3kir.fsf@gitster-ct.c.googlers.com&quot;&gt;v2.17.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.17.0-rc0.windows.1&quot;&gt;v2.17.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Github Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.9.23&quot;&gt;2.9.23&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.10.18&quot;&gt;2.10.18&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.10.19&quot;&gt;2.10.19&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.11.12&quot;&gt;2.11.12&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.11.13&quot;&gt;2.11.13&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.6&quot;&gt;2.12.6&lt;/a&gt;,
&lt;a href=&quot;https://enterprise.github.com/releases/2.12.7&quot;&gt;2.12.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gitlab &lt;a href=&quot;https://about.gitlab.com/2018/02/22/gitlab-10-5-released/&quot;&gt;10.5&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/02/22/gitlab-10-5-1-released/&quot;&gt;10.5.1&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/02/27/gitlab-10-5-2-released/&quot;&gt;10.5.2&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/03/06/security-10-5-3-plus-10-4-5-plus-10-3-8-1st-blog-post/&quot;&gt;10.5.3, 10.4.5, 10.3.8&lt;/a&gt;,
&lt;a href=&quot;https://about.gitlab.com/2018/03/09/gitlab-10-5-4-released/&quot;&gt;10.5.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Github Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://support.gitkraken.com/release-notes/current#v3-4-0&quot;&gt;3.4.0&lt;/a&gt;,
&lt;a href=&quot;https://support.gitkraken.com/release-notes/current#v3-4-1&quot;&gt;3.4.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.26.1&quot;&gt;0.26.1&lt;/a&gt;, &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.26.2&quot;&gt;0.26.2&lt;/a&gt;, &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.26.3&quot;&gt;0.26.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;LibGit2Sharp &lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.24.1&quot;&gt;0.24.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2018/03/building-windows-4-million-commits-10-million-work-items/&quot;&gt;Building Windows: 4 million commits, 10 million work items&lt;/a&gt;. Microsoft talks on Ars Technica about some of the work it’s done to move Windows development to VSTS (Visual Studio Team Services), the company’s source control, item tracking, integration and testing system (Git and GVFS is a part of it).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.github.com/2018-01-29-commit-together-with-co-authors/&quot;&gt;GitHub introduces support for committing together with co-authors&lt;/a&gt;, via “Co-authored-by:” trailers at the end of the commit message.&lt;/li&gt;
  &lt;li&gt;Git’s history simplification &lt;a href=&quot;https://docs.microsoft.com/en-us/vsts/git/concepts/history-simplification&quot;&gt;is explained nicely on Microsoft’s documentation site&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.eff.org/deeplinks/2018/01/code-review-not-evil-security-through-obscurity&quot;&gt;Code Review Isn’t Evil. Security Through Obscurity Is.&lt;/a&gt; by Sydney Li, Nate Cardozo, and Jeremy Malcolm&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://akkartik.name/post/comprehension&quot;&gt;Nobody’s just reading your code&lt;/a&gt; by Stephen Malina, about &lt;em&gt;guiding exploration&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://zdominguez.com/2018/03/03/commit-messages.html&quot;&gt;That Thing About Commit Messages&lt;/a&gt; by Zarah Dominguez&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gregoryszorc.com/blog/2017/12/11/high-level-problems-with-git-and-how-to-fix-them/&quot;&gt;High-level Problems with Git and How to Fix Them&lt;/a&gt; by Gregory Szorc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The &lt;a href=&quot;https://gvfs.io/&quot;&gt;GVFS&lt;/a&gt; effort (scaling Git to support massive repositories) starts developing &lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2018/03/15/gvfs-for-mac/&quot;&gt;MacOS support&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Michael Haggerty &lt;a href=&quot;https://public-inbox.org/git/CAMy9T_FaOdLP482YZcMX16mpy_EgM0ok1GKg45rE=X+HTGxSiQ@mail.gmail.com&quot;&gt;announced a new tool&lt;/a&gt;
called &lt;a href=&quot;https://github.com/github/git-sizer&quot;&gt;git-sizer&lt;/a&gt; to “compute various size-related metrics for your Git repository”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitkube.sh/&quot;&gt;Gitkube&lt;/a&gt; is a tool for building and deploying docker images on Kubernetes using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://nbdime.readthedocs.io/en/latest/&quot;&gt;nbdime&lt;/a&gt; –- diffing and merging of Jupyter Notebooks&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blogs.perl.org/users/steve_bertrand/2018/02/easily-back-up-your-github-repositories-andor-issues.html&quot;&gt;Easily back up your Github repositories and/or issues&lt;/a&gt; with &lt;a href=&quot;https://metacpan.org/pod/Github::Backup&quot;&gt;Github::Backup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.projectatomic.io/docs/os-updates/&quot;&gt;rpm-ostree&lt;/a&gt; update system, based on &lt;a href=&quot;https://ostree.readthedocs.io/en/latest/&quot;&gt;OSTree / libostree&lt;/a&gt;, which is described as “Git for operating systems” – where atomic versions are managed in a Git repository, &lt;a href=&quot;https://lwn.net/Articles/747576/&quot;&gt;used by Project Atomic from Red Hat and the Fedora Project&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://github.com/icefox/git-hooks&quot;&gt;git-hooks&lt;/a&gt; by Benjamin Meyer is a tool for &lt;a href=&quot;https://benjamin-meyer.blogspot.com/2010/06/managing-project-user-and-global-git.html&quot;&gt;managing project, user, and global git hooks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://books.goalkicker.com/GitBook/&quot;&gt;The Git® Notes for Professionals&lt;/a&gt; book, compiled from Stack Overflow Documentation dump (sunsetted project)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Johannes Schindelin and Patrick Steinhardt.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 36 (February 21st, 2018)</title>
      <link>https://git.github.io/rev_news/2018/02/21/edition-36/</link>
      <pubDate>Wed, 21 Feb 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/02/21/edition-36/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-36-february-21st-2018&quot;&gt;Git Rev News: Edition 36 (February 21st, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 36th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of January 2018.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.1801291031040.35@ZVAVAG-6OXH6DA.rhebcr.pbec.zvpebfbsg.pbz/&quot;&gt;Shawn Pearce has died&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On January 29th Johannes Schindelin, alias Dscho, announced Shawn’s
death on the mailing list. He had learned about it from
&lt;a href=&quot;https://twitter.com/cdibona/status/957822400518696960&quot;&gt;a tweet by Chris DiBona&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Chris’ post after telling that “Shawn Pearce, author and committer
and/or founder of Git, Jgit, libgit and Gerrit has died, stricken by
an aggressive cancer” points to a
&lt;a href=&quot;https://www.gofundme.com/shawn-pearce-memorial-fund&quot;&gt;“Shawn Pearce Memorial Fund” on gofundme&lt;/a&gt;,
but mostly asks people to join him in missing Shawn.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, wrote
&lt;a href=&quot;https://sfconservancy.org/blog/2018/jan/30/shawn-pearce/&quot;&gt;a “Remembering Shawn Pearce” post&lt;/a&gt;
on the Software Freedom Conservancy blog.&lt;/p&gt;

&lt;p&gt;Luca Milanesio, director of GerritForge and one of the maintainers of the Gerrit project, also wrote
&lt;a href=&quot;https://gitenterprise.me/2018/01/30/shawn-pearce-a-true-leader/&quot;&gt;a post called “Shawn Pearce: a true leader”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Dave Borowitz, leader of the Gerrit project, &lt;a href=&quot;https://groups.google.com/forum/#!topic/repo-discuss/B4P7G1YirdM/discussion&quot;&gt;informed the Gerrit community&lt;/a&gt; on their discussion forum, too.&lt;/p&gt;

&lt;p&gt;On the Git mailing list, following Dscho’s email, as can be expected
in this kind of circumstances, people expressed a lot of emotions,
like sadness, shock, sorrow and gratefulness. Some outlined how
important and significant his contributions were. Then a small thread
started about making “some sort of tribute to Shawn at the upcoming
developer meeting in Barcelona”. Even if it is not clear from the
thread what kind of tribute will be made, developers were supportive
of the idea, and something will very likely happen around the
&lt;a href=&quot;https://git-merge.com/&quot;&gt;upcoming Git Merge 2018 and associated Contributor Summit&lt;/a&gt;
on March 7-8 in Barcelona.&lt;/p&gt;

&lt;p&gt;Just before the closing talk of FOSDEM 2018, “the world largest
conference of its kind”, on February 4th in Brussels, a big round of
applause was given to Shawn.&lt;/p&gt;

&lt;p&gt;Shawn had been &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;interviewed in Git Rev News edition 30&lt;/a&gt;
published last August. He was also mentioned in 9 other editions, especially in
&lt;a href=&quot;https://git.github.io/rev_news/2016/01/13/edition-11/&quot;&gt;edition 11&lt;/a&gt; in an article about
&lt;a href=&quot;https://public-inbox.org/git/CAJo=hJvnAPNAdDcAAwAvU9C4RVeQdoS3Ev9WTguHx4fD0V_nOg@mail.gmail.com/&quot;&gt;“RefTree”, an alternate ref backend that Shawn proposed&lt;/a&gt;
and in &lt;a href=&quot;https://git.github.io/rev_news/2016/03/16/edition-13/&quot;&gt;edition 13&lt;/a&gt;
in an article about a &lt;a href=&quot;https://public-inbox.org/git/CAJo=hJtHgE_vye_1sPTDsvJ0X=Cs72HKLgRH8btpW-pMrDdk9g@mail.gmail.com/&quot;&gt;Resumable clone based on hybrid “smart” and “dumb” HTTP&lt;/a&gt;, another proposal from Shawn to significantly improve Git.&lt;/p&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqinaw7rat.fsf@gitster-ct.c.googlers.com&quot;&gt;v2.16.2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/xmqqy3kqmoax.fsf@gitster.mtv.corp.google.com&quot;&gt;v2.16.1&lt;/a&gt; and
&lt;a href=&quot;https://public-inbox.org/git/xmqqfu73r9tf.fsf@gitster.mtv.corp.google.com&quot;&gt;v2.16.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.16.2.windows.1&quot;&gt;2.16.2&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/20180207200157.17672-1-johannes.schindelin@gmx.de&quot;&gt;2.16.1(4)&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/20180206153802.14064-1-johannes.schindelin@gmx.de&quot;&gt;2.16.1(3)&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/0MFuWk-1eTyyv270g-00EthZ@mail.gmx.com&quot;&gt;2.16.1(2)&lt;/a&gt;,
&lt;a href=&quot;https://public-inbox.org/git/20180122170959.12528-1-johannes.schindelin@gmx.de&quot;&gt;2.16.1&lt;/a&gt; and
&lt;a href=&quot;https://public-inbox.org/git/20180118222154.15784-1-johannes.schindelin@gmx.de&quot;&gt;2.16.0(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;tig &lt;a href=&quot;https://public-inbox.org/git/CAFuPQ1L7AKp5UXzLxUhFWkmK2HPRZhOMbapqdT7bCpbHSHkUow@mail.gmail.com&quot;&gt;2.3.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-5-8-release-notes-943973059.html&quot;&gt;5.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Github Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.12.5&quot;&gt;2.12.5&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.11.11&quot;&gt;2.11.11&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.10.17&quot;&gt;2.10.17&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.9.22&quot;&gt;9.2.22&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Github Desktop &lt;a href=&quot;https://desktop.github.com/release-notes/&quot;&gt;1.0.13&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gitlab &lt;a href=&quot;https://about.gitlab.com/2018/02/16/gitlab-10-dot-4-dot-4-released/&quot;&gt;10.4.4&lt;/a&gt;, &lt;a href=&quot;https://about.gitlab.com/2018/02/07/gitlab-security-10-4-3-plus-10-3-7-plus-10-2-8-blog/&quot;&gt;10.3.7, 10.2.8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Jeff King &lt;a href=&quot;https://public-inbox.org/git/20180119001034.GA29172@sigill.intra.peff.net/&quot;&gt;announced the Git Merge Contributor’s Summit&lt;/a&gt;
in Barcelona on March 7, 2018.&lt;/li&gt;
  &lt;li&gt;Ed Thomson &lt;a href=&quot;https://public-inbox.org/git/CA+WKDT0rB0XV-99bnYYH7A7=a7doL2fqFR=FOq2DFuczUb9xDw@mail.gmail.com/&quot;&gt;announced the libgit2 2018 Summit&lt;/a&gt;
in Barcelona on March 9, 2018.&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://git-merge.com&quot;&gt;Git Merge web site&lt;/a&gt; has been updated and contains a lot more information.&lt;/li&gt;
  &lt;li&gt;Git has been &lt;a href=&quot;https://public-inbox.org/git/CAP8UFD0Qqf23Ya3BP4oL641G+EsZ9pP17iKpSEV4JFsEbEPPKQ@mail.gmail.com/&quot;&gt;accepted as a mentor organization&lt;/a&gt; for the Google Summer of Code 2018.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lennerd.github.io/git-for-beginners/&quot;&gt;Git for Beginners&lt;/a&gt; is “an interactive tutorial to learn and understand Git”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://brainlessdeveloper.com/2018/02/19/git-best-practices-atomic-commits/&quot;&gt;Thoughts on atomic commits and quality of life&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.amjith.com/git-open-a-small-git-hack&quot;&gt;git open&lt;/a&gt; is a blog post about a small git hack to open the latest files that have been worked on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitfinder.com&quot;&gt;GitFinder&lt;/a&gt; is a Git client for Mac that provides status badges and context menus directly into the Finder.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rgburke/grv&quot;&gt;GRV&lt;/a&gt; is a terminal interface for viewing git repositories.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cbdevnet/fugit&quot;&gt;fugit&lt;/a&gt; is “&lt;em&gt;really&lt;/em&gt; lightweight git access control”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/thoughtbot/gitsh&quot;&gt;gitsh&lt;/a&gt; is “an interactive shell for git”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zricethezav/gitleaks&quot;&gt;GitLeaks&lt;/a&gt; is a tool to “check git repos for secrets and keys”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Listening and Watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://allthingsgit.com/episodes/teaching_git_with_johan_abildskov.html&quot;&gt;All Things Git&lt;/a&gt; talks to Johan Abildskov
about how to teach Git to students and professional developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;
with help from Luca Milanesio, Edward Thomson and Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 35 (January 17th, 2018)</title>
      <link>https://git.github.io/rev_news/2018/01/17/edition-35/</link>
      <pubDate>Wed, 17 Jan 2018 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2018/01/17/edition-35/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-35-january-17th-2018&quot;&gt;Git Rev News: Edition 35 (January 17th, 2018)&lt;/h2&gt;

&lt;p&gt;Welcome to the 35th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of December 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20171214130933.GA18542@raven.inka.de/&quot;&gt;Need help migrating workflow from svn to git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Josef Wolf first described his current workflow which uses Subversion
(SVN).&lt;/p&gt;

&lt;p&gt;Josef has a number of machines that all have a working copy of the
same repository in a specific directory. A cron job updates the
working copies and then run scripts contained in the working copies.&lt;/p&gt;

&lt;p&gt;When using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;svn update&lt;/code&gt; to update those copies, the changes made
locally on the machines are automatically merged with the upstream
changes, usually without conflicts.&lt;/p&gt;

&lt;p&gt;Then Josef explained what would happen with Git:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;With git, by contrast, this won’t work. Git will refuse to pull
anything as long as there are ANY local modifications. The cron job
would need to&lt;/p&gt;
  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git stash
git pull
git stash pop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;
  &lt;p&gt;But this will temporarily remove my local modifications. If I happen
to do a test run at this time, the test run would NOT contain the
local modifications which I was about to test.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Randall S. Becker suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git fetch&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; to
be able to first tell if changes from upstream have to be applied to
the local copy, and also using a branch for each machine to better
track local changes and merge them with upstream changes.&lt;/p&gt;

&lt;p&gt;Josef replied to Randall by asking for a way to “properly check
whether a merge is actually needed” as it looks like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; or
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; are not very well suited for that purpose.&lt;/p&gt;

&lt;p&gt;Igor Djordjevic, alias Buga, wondered about the possibility, in the
original workflow, of running scripts that are being worked on. Buga
also said that using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; would probably have other issues, so
he suggested the “(scripted) creation of a temporary branch at fetched
remote branch position, and using something like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout --merge &amp;lt;temp_branch&amp;gt;&lt;/code&gt; to merge … local modifications
to latest changes fetched from remote”.&lt;/p&gt;

&lt;p&gt;In a later email Buga alternatively suggested “using
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree add &amp;lt;temp_copy_path&amp;gt;&lt;/code&gt; to create a temporary working tree
… alongside a temporary branch” and deleting those after having
committed, merged and pushed the local changes made there.&lt;/p&gt;

&lt;p&gt;Josef replied to Buga that some potential issues Buga worried about
are not relevant when using SVN because of the specifics of his work,
while others are indeed relevant when using Git.&lt;/p&gt;

&lt;p&gt;About the solutions Buga had suggested, Josef and Buga started to
discuss them, but at this point Junio Hamano, the Git maintainer,
suggested using just:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git fetch &amp;lt;remote&amp;gt; &amp;lt;branch&amp;gt;
git checkout -m -B &amp;lt;master&amp;gt; FETCH_HEAD
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;remote&amp;gt; &amp;lt;branch&amp;gt;: the branch at the remote you are pulling from
&amp;lt;master&amp;gt;: whatever branch you are using
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;After some tests and further discussion, Josef agreed that this was a
good solution. Buga also suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add -u&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset&lt;/code&gt;
after or before the above commands to avoid failures in case the
script runs many times and there are conflicts.&lt;/p&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqwp0nwwc6.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git v2.16.0-rc2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqbmi7ano1.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git v2.16.0-rc1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqfu7ui2af.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git v2.16.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/nycvar.QRO.7.76.6.1801131931550.31@ZVAVAG-6OXH6DA.rhebcr.pbec.zvpebfbsg.pbz/&quot;&gt;Git for Windows v2.16.0-rc2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://enterprise.github.com/releases/2.12.2&quot;&gt;GitHub Enterprise 2.12.2&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.11.8&quot;&gt;2.11.8&lt;/a&gt;, &lt;a href=&quot;https://enterprise.github.com/releases/2.10.14&quot;&gt;2.10.14&lt;/a&gt; and &lt;a href=&quot;https://enterprise.github.com/releases/2.9.19&quot;&gt;2.9.19&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com//2017/12/22/gitlab-10-3-released/&quot;&gt;GitLab 10.3&lt;/a&gt; and then &lt;a href=&quot;https://about.gitlab.com//2017/12/27/gitlab-10-3-1-released/&quot;&gt;10.3.1&lt;/a&gt;, &lt;a href=&quot;https://about.gitlab.com//2017/12/28/gitlab-10-3-2-released/&quot;&gt;10.3.2&lt;/a&gt; and &lt;a href=&quot;https://about.gitlab.com//2018/01/02/gitlab-10-3-3-released/&quot;&gt;10.3.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-5-7-release-notes-939918798.html&quot;&gt;Bitbucket Server 5.7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CA+WKDT3uKyEfzGvnkRUG7SEKy4ypz+Aa223UaVE8vyktcmgSvw@mail.gmail.com/&quot;&gt;Git London User Group: 16 January 2018&lt;/a&gt;: Edward Thomson announces the formation of the &lt;a href=&quot;http://londongit.org/&quot;&gt;Git London User Group&lt;/a&gt; and their first meeting on 16 January 2018.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Federico Kauffman blogs about &lt;a href=&quot;https://wyeworks.com/blog/2018/1/3/using-git-hooks-to-improve-your-day-to-day-workflow/&quot;&gt;using git hooks to improve your day-to-day workflow&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;A short post for Emacs users who want to &lt;a href=&quot;https://scripter.co/narrowing-the-author-column-in-magit/&quot;&gt;narrow the author column in Magit&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.algolia.com/master-git-rebase/&quot;&gt;Master the Rebase (and the Other Way Around)&lt;/a&gt; by Anthony Seure introduces &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase&lt;/code&gt; both as an alternative to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;merge&lt;/code&gt; and as a history rewriting tool.&lt;/li&gt;
  &lt;li&gt;A security write-up on &lt;a href=&quot;https://www.twistlock.com/2017/12/13/hiding-content-git-escape-sequence-twistlock-labs-experiment/&quot;&gt;Git and escape sequences&lt;/a&gt; by Ariel Zelivansky.&lt;/li&gt;
  &lt;li&gt;Dan Palmer explains &lt;a href=&quot;https://thread.engineering/teaching-non-engineers-how-to-contribute-code-2e85411ab464&quot;&gt;how and why they teach non-engineers to use GitHub at Thread&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gitplex.com/&quot;&gt;GitPlex&lt;/a&gt; is a tool to “browse code in git repository like in IDE”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mkchoi212/fac&quot;&gt;FAC&lt;/a&gt;, a command line tool to fix merge conflicts, has been &lt;a href=&quot;https://news.ycombinator.com/item?id=16056271&quot;&gt;discussed on Hacker News&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitexercises.fracz.com/&quot;&gt;Git exercises&lt;/a&gt; helps you “learn and practice Git” with exercises to “rapidly become a Git Master”. It has also &lt;a href=&quot;https://news.ycombinator.com/item?id=16107981&quot;&gt;been discussed on Hacker News&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/talshorer/git-dissect&quot;&gt;git-dissect: DIStributed biSECT&lt;/a&gt; is “an alternative to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt; that allows running tests on multiple hosts in order to bisect faster”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hoelzro/git-pisect&quot;&gt;git-pisect: Parallel regression finder&lt;/a&gt; is “an alternative to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect run&lt;/code&gt; that uses multiple concurrent tests to try to finish a bisect more quickly”, with an &lt;a href=&quot;https://hoelz.ro/blog/git-pisect&quot;&gt;explanatory blog post&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.sourced.tech/post/go-git-v4/&quot;&gt;go-git v4 was announced&lt;/a&gt;. &lt;a href=&quot;https://github.com/src-d/go-git&quot;&gt;go-git&lt;/a&gt; is “a highly extensible Git implementation in pure Go”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://trevordmiller.com/courses/real-world-git&quot;&gt;Real-world Git&lt;/a&gt; is an hour-long video free course on Git basics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;,
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt; and
Gabriel Alcaras &amp;lt;&lt;a href=&quot;mailto:gabriel.alcaras@telecom-paristech.fr&quot;&gt;gabriel.alcaras@telecom-paristech.fr&lt;/a&gt;&amp;gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 34 (December 20th, 2017)</title>
      <link>https://git.github.io/rev_news/2017/12/20/edition-34/</link>
      <pubDate>Wed, 20 Dec 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/12/20/edition-34/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-34-december-20th-2017&quot;&gt;Git Rev News: Edition 34 (December 20th, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 34th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of November 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Thank you Thomas and call for help!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From the beginning in March 2015, Thomas Ferris Nicolaisen very
actively contributed to many aspects of Git Rev News. He especially
was the main contributor and editor of the &lt;a href=&quot;#other-news&quot;&gt;Other News&lt;/a&gt;
and &lt;a href=&quot;#releases&quot;&gt;Releases&lt;/a&gt; sections. He also reviewed and merged a
large number of pull requests and did a lot to improve Git Rev News in
general.&lt;/p&gt;

&lt;p&gt;Unfortunately, as his daily work has been focusing on higher level
things like agile and DevOps for some time, he asked to be
de-installed from being an editor.&lt;/p&gt;

&lt;p&gt;As there is more and more to do to have a relevant, vibrant and
entertaining newsletter for the Git Community, we are thanking Thomas
for his huge contribution, and looking for other people to join our
small Git Rev News editor team.&lt;/p&gt;

&lt;p&gt;There is no need to even know Git well for that. It’s possible to
participate by just gathering articles about Git, or just checking
which are the latest releases for example. Please contact us (see our
emails &lt;a href=&quot;#credits&quot;&gt;at the bottom&lt;/a&gt;) if you are interested.&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/0102015fb02bb5be-02c77f83-5a20-4ca1-8bab-5e9519cbd758-000000@eu-west-1.amazonses.com/&quot;&gt;[PATCH] config: added --expiry-date type support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During the &lt;a href=&quot;https://www.techatbloomberg.com/blog/git-sprint-weekend-bloomberg-london/&quot;&gt;Bloomberg hackathon in London November 11 - 12&lt;/a&gt;
Haaris Mehmood prepared a patch to add an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--expiry-date&lt;/code&gt; option to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config&lt;/code&gt;, and then sent it to the mailing list.&lt;/p&gt;

&lt;p&gt;Kevin Daudt replied with usual advice to newcomers and the
suggestion to look at the
&lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/SubmittingPatches&quot;&gt;SubmittingPatches documentation&lt;/a&gt;.
Kevin also noticed that a commit message that should explain the
motivation for the patch was missing.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, replied to both Kevin and Haaris. Peff
explained to the mailing list that the patch had been made to complete
a task that was proposed during the hackathon, and that the patch has
been submitted using &lt;a href=&quot;https://submitgit.herokuapp.com/&quot;&gt;submitGit&lt;/a&gt;,
and that there were explanations in the
&lt;a href=&quot;https://github.com/git/git/pull/433&quot;&gt;merge request&lt;/a&gt; that Haaris had
created with submitGit.&lt;/p&gt;

&lt;p&gt;Peff also suggested some ways to improve the patch, and described the
motivation for such a patch:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We do parse expiration dates from config in a few places, like
gc.reflogexpire, etc. There’s no way for a script using git-config to do
the same (either adding an option specific to the script, or trying to
do some analysis on gc.reflogexpire)..&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Haaris replied to Peff saying about the hackathon “It was a pleasure
meeting everyone and a great experience!”, and discussing the
suggestions to improve the patch.&lt;/p&gt;

&lt;p&gt;He then came up a few days later with a version 2 of the patch. A few
more suggestions to improve it were discussed by Junio Hamano, Marc
Branchaud and Christian Couder.&lt;/p&gt;

&lt;p&gt;Haaris sent a version 3 a few days later which was reviewed again by
Junio who eventually agreed to queue the version 4 which has now been
merged into the master branch.&lt;/p&gt;

&lt;p&gt;A discussion between Peff, Stefan Beller and Heiko Voigt followed for
some time though. This was about clarifying why it is not a good idea,
as Junio had told Haaris, for functions that parse config files to die
in case of errors.&lt;/p&gt;

&lt;p&gt;It appears that those functions are also used to parse &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitmodules&lt;/code&gt;
files and that these files are often committed into Git repositories,
so that these files are not always easy to fix if they are malformed.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20171129171301.l3coiflkfyy533yz@NUC.localdomain/&quot;&gt;imap-send with gmail: curl_easy_perform() failed: URL using bad/illegal format or missing URL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doron Behar asked for help about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git imap-send&lt;/code&gt; which errored out
when he tried to use it with Gmail:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Password for &apos;imaps://doron.behar@gmail.com@imap.gmail.com&apos;:
sending 3 messages
curl_easy_perform() failed: URL using bad/illegal format or missing URL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Doron thought that it would work better with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imap.user = doron.behar&lt;/code&gt;
instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imap.user = doron.behar@gmail.com&lt;/code&gt; in his config file, but
the error was the same.&lt;/p&gt;

&lt;p&gt;Replying to Doron Jonathan Nieder asked him a few questions, suggested that
&lt;a href=&quot;https://github.com/git/git/commit/dbba42bb32f2e896a5413d401c61a0022652fe2b&quot;&gt;a recent commit that makes Git use curl by default for imap&lt;/a&gt;
might be responsible for the regression, and put Nicolas Morey-Chaisemartin, the commit author, in CC.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, followed up by suggesting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-curl&lt;/code&gt; as a
possible workaround and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_TRACE_CURL=1&lt;/code&gt; to get more debug
information.&lt;/p&gt;

&lt;p&gt;Peff warned that the trace output enabled by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_TRACE_CURL=1&lt;/code&gt; will
contain the IMAP password though. He then sent a patch to redact auth
information from the trace output, but wrote that the patch ended up
being “a lot more complicated” than he would have liked.&lt;/p&gt;

&lt;p&gt;Nicolas Morey-Chaisemartin replied to Jonathan saying that Doron’s
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imap.folder = &quot;[Gmail]/Drafts&quot;&lt;/code&gt; config option was causing the problem
as it appeared to work when he used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%5BGmail%5D/Drafts&lt;/code&gt; instead of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;[Gmail]/Drafts&quot;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;He further explained:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;curl is doing some fancy handling with brackets and braces. It make
sense for multiple FTP downloads like
ftp://ftp.numericals.com/file[1-100].txt, not in our case.  The curl
command line has a --globoff argument to disable this “regexp” support
and it seems to fix the gmail case.  However I couldn’t find a way to
change this value through the API…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Daniel Stenberg, the &lt;a href=&quot;https://curl.haxx.se&quot;&gt;curl&lt;/a&gt; maintainer, replied
to Nicolas that globbing isn’t part of libcurl which ‘actually “just”
expects a plain old URL’:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;But with the risk of falling through the cracks into the rathole that
is “what is a URL” (I’ve blogged about the topic several times in the
past and I will surely do it again in the future):&lt;/p&gt;

  &lt;p&gt;A “legal” URL (as per RFC 3986) does not contain brackets, such
symbols should be used URL encoded: %5B and %5D.&lt;/p&gt;

  &lt;p&gt;This said: I don’t know exactly why brackets cause a problem in this
case. It could still be worth digging into and see if libcurl could
deal with them better here…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nicolas replied that “it would make sense to have a way to ask libcurl
to URI encode for us”. But Daniel responded that using the existing
curl_easy_escape() function, which URL encodes a string, would not
work “on an entire existing URL or path since it would then also
encode the slashes etc”. Daniel suggested:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;You want to encode the relevant pieces and then put them together
appropriately into the final URL…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nicolas recently sent &lt;a href=&quot;https://public-inbox.org/git/18c9478b-19fc-69f2-229f-67c05a42d4f5@suse.com/&quot;&gt;a patch&lt;/a&gt;
to “URI encode the server folder string before passing it to libcurl”.&lt;/p&gt;

&lt;p&gt;Eric Sunshine replied that the commit message could be expanded to
include information like the error message and “legal” URL not
containing brackets. Junio Hamano agreed with Eric, but it looks like
Nicolas has not sent an updated patch yet.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-michael-haggerty&quot;&gt;Developer Spotlight: Michael Haggerty&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my distant past I spent a long time in academia doing theoretical
and computational physics. Around 2001, I switched to full-time
software development. I currently work at GitHub, where I get to spend
some of my time working on Git development and the rest keeping a
large fraction of the world’s Git repositories safe and
performant. I’m from the U.S., but now live in Berlin with my wife and
two kids.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How did you get involved in the Git project?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My first exposure to Git was as a maintainer of
&lt;a href=&quot;http://cvs2svn.tigris.org/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvs2svn&lt;/code&gt;&lt;/a&gt;, a tool for migrating CVS
repositories to Subversion. After working on that project for a while,
I thought it would be nice to teach it how to convert CVS repositories
to Git, too. Before that I had never even used Git.&lt;/p&gt;

&lt;p&gt;Soon I started contributing to Git itself, first by scratching my own
itches (e.g., the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fixup&lt;/code&gt; command in interactive rebase, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
check-attr --all&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git multimail&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; heuristics for
producing better diffs).&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At some point I was running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git filter-branch&lt;/code&gt;, and I discovered
that it had really terrible performance when processing a lot of
references (branches and tags). That led me deeper and deeper into
Git’s code for storing references, and by now it is probably fair to
say that I am the primary maintainer of that part of the code.&lt;/p&gt;

&lt;p&gt;For people who don’t know, Git stores references in two ways:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;“Loose” references are stored under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/refs/&lt;/code&gt;, as one small
file for each reference. These are very fast if you need to read
or update only a few references, but it is slow to read many loose
references.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“Packed” references are stored in a big text file called
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/packed-refs&lt;/code&gt;. It is quite fast to read all of the packed
references, but it is slow to change or delete a packed reference
because the whole file needs to be rewritten. And until recently,
to read even a single packed reference the whole file was read
into memory.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Git tries to store active references as “loose” references and the
rest as “packed” references. That’s a decent compromise, but it has
some corner cases with bad performance, and since it has to manage
multiple files, it is quite tricky to avoid data races.&lt;/p&gt;

&lt;p&gt;I’ve done a lot to improve the performance of the references code and
to support all-or-nothing reference update transactions. Along the way
I’ve fixed a bunch of bugs and data races (hopefully without adding
too many new ones).&lt;/p&gt;

&lt;p&gt;A big part of my work was abstracting out an internal references API
and modularizing the code. That effort is now paying off by making it
feasible to change fundamentally how references are handled. The first
of these changes just shipped in Git 2.15: now the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;packed-refs&lt;/code&gt; file
is mmapped to reduce memory usage, and only packed references that are
needed are actually read. This should give a noticeable speedup for
repositories with a lot of references, with another related speed
boost coming in Git 2.16.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I find some time, I hope to implement
&lt;a href=&quot;https://googlers.googlesource.com/sop/jgit/+/reftable/Documentation/technical/reftable.md&quot;&gt;“reftables”&lt;/a&gt;,
a new format for storing Git references, in Git. This would further
improve reference-handling performance, even for repositories with a
huge number of references.&lt;/p&gt;

&lt;p&gt;I’m also currently working on a little tool that computes various
statistics about a Git repository, to warn users about questionable
practices that might lead to performance problems. For example, many
people don’t realize that using Git to store a directory that has a
huge number of entries can lead to terrible performance. It is far
better to shard your files into multiple smaller, nested directories.
This tool hasn’t been open-sourced yet, but should be coming soon.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git feature?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ability to rewrite history, hands down. Thorough code review is
so hard that, in my opinion, code authors should do everything they
can to make their code easy to read. Part of that is breaking changes
down into logical, self-contained baby steps, and making it as obvious
as possible that each step is correct. Nobody wants to read your
stream of consciousness, including false trails and “Oops” commits.
Git has tools, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --interactive&lt;/code&gt;, that let you revise
your jumbled thoughts into a clear narrative. While I’m putting
together a complicated patch series, I sometimes rebase it dozens of
times before presenting it to the world. (And in the process I usually
discover bugs in my own changes that—thank you Git!—the rest of the
world never has to see.)&lt;/p&gt;

&lt;p&gt;If I encounter conflicts, I usually switch to my own tool,
&lt;a href=&quot;https://github.com/mhagger/git-imerge&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-imerge&lt;/code&gt;&lt;/a&gt;. This breaks
down complicated merge and rebase operations into smaller
“incremental” merges that are done one after the other. This, in my
opinion, makes merge conflicts easier to resolve.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First I’d have them spend some time modularizing other parts of the
Git codebase, adding docstrings, and improving internal libraries.
After that, it’d be easier to implement useful user-facing changes,
like making Git scale more gracefully to very large projects.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backward compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’d make the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt; command do only one thing.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqo9nl6g1v.fsf@gitster.mtv.corp.google.com/&quot;&gt;2.15.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.21.1.1711300238520.6482@virtualbox/&quot;&gt;2.15.1&lt;/a&gt; and &lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.21.1.1711300245250.6482@virtualbox/&quot;&gt;v2.15.1(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;tig &lt;a href=&quot;https://public-inbox.org/git/CAFuPQ1+JwRy11-NA=pRN38GHt5Bk+KswzYNTba=JRFoZZ62byA@mail.gmail.com/&quot;&gt;2.3.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2017/12/18/gitlab-10-2-5-released/&quot;&gt;10.2.5&lt;/a&gt;, &lt;a href=&quot;https://about.gitlab.com/2017/12/08/gitlab-10-dot-2-dot-4-security-release/&quot;&gt;10.1.5 and 10.0.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://enterprise.github.com/releases/2.12.1/notes&quot;&gt;2.12.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Server &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/bitbucket-server-5-6-release-notes-939918647.html&quot;&gt;5.6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2482-join-us-at-git-merge-2018-in-barcelona&quot;&gt;The next Git Merge conference&lt;/a&gt;
will be on March 8 in Barcelona, Spain. Hopefully there will be a
contributor summit on March 7 at the same venue.&lt;/li&gt;
  &lt;li&gt;Packt is doing every book for $5/€5 promo, which includes some books about Git, among others:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.packtpub.com/application-development/git-mastering-version-control&quot;&gt;Git: Mastering Version Control&lt;/a&gt; course, which is composed of:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.packtpub.com/application-development/git-essentials&quot;&gt;Git Essentials&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.packtpub.com/application-development/git-version-control-cookbook&quot;&gt;Git Version Control Cookbook&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://www.packtpub.com/application-development/mastering-git&quot;&gt;Mastering Git&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.packtpub.com/application-development/git-essentials-second-edition&quot;&gt;Git Essentials, 2nd Edition&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.packtpub.com/application-development/git-version-control-everyone&quot;&gt;Git: Version Control for Everyone&lt;/a&gt; (which was &lt;a href=&quot;https://git-blame.blogspot.com/2013/02/git-version-control-for-everyone.html&quot;&gt;reviewed&lt;/a&gt; by Junio C Hamano on his blog)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=15819033&quot;&gt;Discussions on Hacker News&lt;/a&gt;
about &lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/technical/hash-function-transition.adoc&quot;&gt;the hash transition plan&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lfit/itpol/blob/master/protecting-code-integrity.md&quot;&gt;Protecting code integrity with PGP&lt;/a&gt; (beta),
part of Useful IT Policies project&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://harrow.io/blog/effortlessly-maintain-a-high-quality-change-log-with-little-known-git-tricks/&quot;&gt;Effortlessly maintain a high quality change log with Git notes&lt;/a&gt; by Lee Hambley
    &lt;ul&gt;
      &lt;li&gt;In Git Rev News #6 there was link to &lt;a href=&quot;http://who-t.blogspot.de/2015/07/using-git-notes-for-marking-test-suite.html&quot;&gt;Using git-notes for marking test suite successes&lt;/a&gt; article on the similar topic, by Peter Hutterer&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://karl.kornel.us/2017/10/welp-there-go-my-git-signatures/&quot;&gt;Welp, there go my Git signatures&lt;/a&gt; by Karl Kornel, about what one can do about PGP signatures made with key affected by RoCA vulnerability
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://petertodd.org/2016/opentimestamps-git-integration&quot;&gt;Solving the PGP Revocation Problem with OpenTimestamps for Git Commits&lt;/a&gt; by Peter Todd&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Olga Telezhnaia, an &lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt; intern working on Git,
&lt;a href=&quot;https://medium.com/@olyatelezhnaya&quot;&gt;is blogging about her experience&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://vaibhavsagar.com/blog/2017/08/13/i-haskell-a-git/&quot;&gt;I Haskell a Git&lt;/a&gt; by Vaibhav Sagar, on Git being functional like Haskell and on implementing Git in Haskell, sharing how Git looks like from the inside out&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.adamspiers.org/2017/08/16/squash-merging-and-other-problems-with-github/&quot;&gt;Squash-merging and other problems with GitHub&lt;/a&gt; by Adam Spiers, who posits that “squash before submitting a PR” policy is a poor-man’s workaround for the lack of a real solution to the underlying problems&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.googleblog.com/2017/11/container-diff-for-comparing-container-images.html&quot;&gt;Introducing container-diff, a tool for quickly comparing container images&lt;/a&gt;, on Google Open Source Blog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://crbug.com/git&quot;&gt;A bug tracker for Git&lt;/a&gt; based on &lt;a href=&quot;https://chromium.googlesource.com/infra/infra/+/master/appengine/monorail&quot;&gt;Monorail&lt;/a&gt; has been &lt;a href=&quot;https://public-inbox.org/git/20171123011227.GM11671@aiede.mtv.corp.google.com/&quot;&gt;announced by Jonathan Nieder&lt;/a&gt; who volunteered to triage bugs. Contact him if you want to help on this.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jwiegley/git-undo-el&quot;&gt;git-undo-el&lt;/a&gt; – a command for Emacs to regress or “undo” a region back through its Git history&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://irreal.org/blog/?p=6754&quot;&gt;Magit Log for a File&lt;/a&gt;; &lt;a href=&quot;https://magit.vc&quot;&gt;Magit&lt;/a&gt; is &lt;em&gt;A Git Porcelain inside Emacs&lt;/em&gt; and was mentioned multiple times in Git Rev News&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/739578/&quot;&gt;Tools for porting drivers [LWN.net]&lt;/a&gt; by Jake Edge, describes &lt;a href=&quot;http://prequel-pql.gforge.inria.fr/&quot;&gt;Prequel&lt;/a&gt; tool (Patch Query Language) that mines the commit history of a code base, among others to help make both forward-porting and back-porting drivers easier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Listening and watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://allthingsgit.com/about.html&quot;&gt;All Things Git podcast&lt;/a&gt; with Edward Thomson
and Martin Woodward release two new episodes in November. One on
“Learning Git and Human factors” with Sara Ford, and one about
&lt;a href=&quot;https://github.com/blog/2453-mission-report-github-universe-2017&quot;&gt;GitHub Universe 2017&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from Michael Haggerty and Johan Abildskov.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 33 (November 22nd, 2017)</title>
      <link>https://git.github.io/rev_news/2017/11/22/edition-33/</link>
      <pubDate>Wed, 22 Nov 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/11/22/edition-33/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-33-november-22nd-2017&quot;&gt;Git Rev News: Edition 33 (November 22nd, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 33rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of October 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20171028000152.2760-1-jacob.e.keller@intel.com/&quot;&gt;rebase: exec leaks GIT_DIR to environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jacob Keller sent a patch adding a test that fails. He wrote in the
commit message that the “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;” interactive mode causes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exec&lt;/code&gt;
commands to be run with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_DIR&lt;/code&gt; set, and that afterwards running a git
command in a subdirectory fails because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_DIR=&quot;.git&quot;&lt;/code&gt;. He suspected
the regression was introduced in some recent &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase--helper&lt;/code&gt; changes to
speed up the interactive rebase and convert some shell scripts to C
code.&lt;/p&gt;

&lt;p&gt;Johannes Schindelin, alias Dscho, replied to Jacob and suggested a fix
as well as a number of improvements in Jacob’s patch. He also asked if
Jacob could take care of creating a proper patch for the fix. Jacob
agreed with Dscho’s comments and to create a proper patch.&lt;/p&gt;

&lt;p&gt;Phillip Wood then chimed in stating that Dscho’s suggested fix might not
be right:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Just clearing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_DIR&lt;/code&gt; does not match the behavior of the shell version
(tested by passing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-p&lt;/code&gt; to avoid &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase--helper&lt;/code&gt;) as that passes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_DIR&lt;/code&gt; to
exec commands if it has been explicitly set. I think that users that set
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_DIR&lt;/code&gt; on the command line would expect it to be propagated to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exec&lt;/code&gt;
commands.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At that point Junio Hamano, the Git maintainer, Jacob and Phillip
started discussing the possible impact of the bug and if it was worth
delaying the release to get a chance to properly test a fix for some
time.&lt;/p&gt;

&lt;p&gt;Then Dscho gave an explanation about where the bug could come
from:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When you look at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git_dir_init&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-sh-setup&lt;/code&gt;, you will see that
Unix shell scripts explicitly get their &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_DIR&lt;/code&gt; turned into an
absolute path.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He then suggested a fix in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase--helper&lt;/code&gt; code in C that has
replaced the shell code in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-sh-setup&lt;/code&gt;. The fix is about turning the
content of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_DIR&lt;/code&gt; environment variable into an absolute path
before running the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exec&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;Jacob agreed again to create a proper patch from Dscho’s fix and then
sent &lt;a href=&quot;https://public-inbox.org/git/20171031230733.18949-1-jacob.e.keller@intel.com/&quot;&gt;a patch with Dscho’s fix&lt;/a&gt;.
The patch has subsequently been merged into the master branch.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/D0A67AD8-2D63-4683-9F2A-20B0E8E65D4B@gmail.com/&quot;&gt;Consequences of CRLF in index?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lars Schneider realized after migrating a large repository to Git that
“all text files in the index of the repo have CRLF line endings”. He
then asked:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In general this seems not to be a problem  as the project is developed exclusively on Windows.&lt;/p&gt;

  &lt;p&gt;However, I wonder if there are any “hidden consequences” of this setup?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jonathan Nieder answered:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There are no hidden consequences that I’m aware of. If you later
decide that you want to become a cross-platform project, then you may
want to switch to LF endings, in which case I suggest the “single
fixup commit” strategy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He suggested though to declare explicitly all the files as non text
files in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitattributes&lt;/code&gt; using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-text&lt;/code&gt; flag, so that Git will not be
tempted to change line endings.&lt;/p&gt;

&lt;p&gt;Torsten Bögershausen agreed with Jonathan saying:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If you don’t specify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitattributes&lt;/code&gt;, then all people who have
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.autocrlf=true&lt;/code&gt; will suffer from a runtime penalty.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;because:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;At each checkout Git needs to figure out that the file has CRLF in
the repo, so that there is no conversion done.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and also:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Those who have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.autocrlf=false&lt;/code&gt; would produce commits with CRLF
for new files, and those developers who have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.autocrlf=true&lt;/code&gt; would
produce files with LF in the index and CRLF in the worktree.  This may
(most probably will) cause confusion later, when things are pushed and
pulled.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lars thanked Jonathan for the idea of using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-text&lt;/code&gt; flag but
wondered about its implications saying:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;For whatever reason I always thought this is the way to tell
Git that a particular file is binary with the implication that
Git should not attempt to diff it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To this Jonathan replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;No other implications.  You’re thinking of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-diff&lt;/code&gt;.  There is also a
shortcut “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;binary&lt;/code&gt;” which simply means &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-text -diff&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jonathan in his first email also asked his own related question:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I’d be interested to hear what happens when diff-ing across a line
ending fixup commit.  Is this an area where Git needs some
improvement?  “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git merge&lt;/code&gt;” knows an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-Xrenormalize&lt;/code&gt; option to deal with a
related problem — it’s possible that “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt;” needs to learn a
similar trick.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To that, Torsten replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;That is a tricky thing.
Sometimes you want to see the CLRF - LF as a diff, (represented as “^M”),
and sometimes not.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Junio Hamano then also gave his “knee-jerk reaction” on this, saying
that “the end user definitely wants to see preimage and postimage
lines are different in such a commit by default, one side has and the
other side lacks ^M at the end” and also that when one does not want
to see those changes “one of the ‘whitespace ignoring’ options […]
may suffice, but if not, it should be easy to invent a new one”.&lt;/p&gt;

&lt;p&gt;Junio then posted a sample patch to implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--ignore-cr-at-eol&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Stefan Beller reviewed this patch, which was further improved by Junio
and then discussed a few times, so that this new flag is likely to
appear is the next Git release.&lt;/p&gt;

&lt;p&gt;A sub thread of the discussion started about making big changes to the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xdiff&lt;/code&gt; code that was originally “borrowed” from a separate open source
project. There was no clear result from this discussion though.&lt;/p&gt;

&lt;p&gt;Johannes Sixt also replied directly to Lars’ first email:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I’ve been working on a project with CRLF in every source file for a
decade now. It’s C++ source, and it isn’t even Windows-only: when
checked out on Linux, there are CRs in the files, with no bad
consequences so far. GCC is happy with them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To that Johannes Schindelin, alias Dscho, replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I envy you for the blessing of such a clean C++ source that you do
not have any, say, Unix shell script in it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and posted an example showing “Unix shell not handling CR/LF gracefully”.&lt;/p&gt;

&lt;p&gt;In a separate reply to Torsten’s first email, Dscho also confirmed
that completely switching off line ending conversions can give “around
5-15% speed improvement”.&lt;/p&gt;

&lt;p&gt;A discussion then started about the merits of having an entry like
“&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*.sh text eol=lf&lt;/code&gt;” in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitattributes&lt;/code&gt; for shell scripts, compared
to having Git change strictly no file. In the end it looks like such an
entry could help, though there could be shell scripts that don’t use the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.sh&lt;/code&gt; extension.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-torsten-bögershausen&quot;&gt;Developer Spotlight: Torsten Bögershausen&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally a hardware developer, these days are filled with software
development for embedded systems.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The precomposeunicode feature for Mac Os was an important thing to go
cross-platform, but the Git users may have a different point of view.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last years it was CRLF handling, also known as EOL or line ending.
Mainly because I am using it myself.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Git code base is in a pretty good shape.
Improve the on-disk or even over-the-wire protocol to include
information if a file is binary or text with CRLF (2 bits).
Please let me know, when you have the team.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;“&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout -b&lt;/code&gt;” is certainly good for experienced people,
hard to understand for beginners.
“&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add -A&lt;/code&gt;” or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-all&lt;/code&gt; is certainly my favorite thing to be removed…
Don’t accept commit messages which are not unicode any more.
Remove the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.autocrlf&lt;/code&gt; from the code base, demand that people
set up a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitattributes&lt;/code&gt; file on Windows.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Probably Gerrit, even if I like the pull-request workflow which allows
people to collaborate.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqq60ax5fab.fsf@gitster.mtv.corp.google.com/&quot;&gt;v2.15.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.15.0.windows.1&quot;&gt;2.15.0&lt;/a&gt; and &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.14.3&quot;&gt;v2.14.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;nodegit &lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.20.3&quot;&gt;v0.20.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Gerrit &lt;a href=&quot;https://gitenterprise.me/2017/11/15/gerrit-user-summit-whats-new-in-2-15/&quot;&gt;2.15&lt;/a&gt; a summary from the recent Gerrit User Summit&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2017/11/15/gitlab-10-dot-1-dot-4-released/&quot;&gt;10.1.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Olga Telezhnaia’s “Unifying Git’s format languages” project has been accepted as part of the &lt;a href=&quot;https://www.outreachy.org/alums/&quot;&gt;December 2017 to March 2018 Outreachy internship round&lt;/a&gt;. Olga will be mentored by Jeff King and Christian Couder.&lt;/li&gt;
  &lt;li&gt;A useful &lt;a href=&quot;https://github.com/k88hudson/git-flight-rules&quot;&gt;“pre-flight list” for Git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Microsoft and GitHub &lt;a href=&quot;https://blogs.msdn.microsoft.com/devops/2017/11/15/updates-to-gvfs/&quot;&gt;cooperate on GVFS support&lt;/a&gt; to help Git scale up to very large repositories.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2017/11/microsoft-and-github-team-up-to-take-git-virtual-file-system-to-macos-linux/&quot;&gt;Microsoft and GitHub team up to take Git virtual file system to macOS, Linux&lt;/a&gt; article on ArsTechnica&lt;/li&gt;
      &lt;li&gt;The Atlassian Marketplace provides an &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/git-virtual-file-system-gvfs-939504980.html&quot;&gt;experimental add-on for Bitbucket for Git Virtual File System (GVFS)&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;A lot of Microsoft’s documentation (including MSDN) moved to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docs.microsoft.com&lt;/code&gt;, &lt;a href=&quot;https://docs.microsoft.com/en-us/contribute/help-crr/help-content/contribute/contribute-how-to-write-workflows-minor&quot;&gt;accepting contributions via Pull Requests on GitHub&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;2 new episodes of the podcast All Things Git: &lt;a href=&quot;http://www.allthingsgit.com/episodes/git_for_teams_with_emma_jane_hogbin_westby.html&quot;&gt;Git for Teams with Emma Jane Hogbin Westby&lt;/a&gt; and &lt;a href=&quot;http://www.allthingsgit.com/episodes/learning_git_and_human_factors_with_sara_ford.html&quot;&gt;Learning Git and Human Factors with Sara Ford&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://crypto.stanford.edu/~blynn/gitmagic/&quot;&gt;Git Magic&lt;/a&gt; is an extensive and great guide on Git by Ben Lynn. Also on his site, you’ll find the interesting article…&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www-cs-students.stanford.edu/~blynn/gg/race.html&quot;&gt;The git index race condition&lt;/a&gt;, also by Ben Lynn&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/understanding-git-fcffd87c15a3&quot;&gt;Understanding Git (part 1) — Explain it Like I’m Five&lt;/a&gt; by Kevin Cooper&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://tv.gerritforge.com&quot;&gt;Gerrit User Summit 2017 Talks going published on YouTube&lt;/a&gt;, to allow everyone to stay up-to-date on what’s new and what’s coming on Gerrit in 2018&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mail-archive.com/kernelnewbies@kernelnewbies.org/msg17988.html&quot;&gt;How do you format your [GIT PULL] emails to Linus&lt;/a&gt; post by Greg Kroah-Hartman&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Bloomberg recently hosted a &lt;a href=&quot;https://www.techatbloomberg.com/blog/git-sprint-weekend-bloomberg-london/&quot;&gt;Git hackathon over a weekend in London&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Two noteworthy tweets about Git: &lt;a href=&quot;https://twitter.com/ID_AA_Carmack/status/929389759624916992?s=09&quot;&gt;even John McCormack struggles with Git&lt;/a&gt;, and &lt;a href=&quot;https://twitter.com/mcclure111/status/929408829485473792?s=09&quot;&gt;a suggestion that “Git is hard” should not be accepted as status quo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://karl.kornel.us/2017/10/welp-there-go-my-git-signatures/&quot;&gt;Welp, there go my Git signatures&lt;/a&gt; due to the recently famous RoCA vulnerability, by Karl Kornel&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://kate.io/blog/git-bomb/&quot;&gt;Exploding Git Repositories&lt;/a&gt; is a neat and interesting experiment by Kate Murphy&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.adamspiers.org/2017/08/16/squash-merging-and-other-problems-with-github/&quot;&gt;Squash-merging and other problems with GitHub&lt;/a&gt; by Adam Spiers&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@bharatkulratan/a-better-way-to-look-your-git-logs-86abca5987b0&quot;&gt;A better way to look your git logs&lt;/a&gt; by Bharat Kul Ratan, follow-up to &lt;a href=&quot;https://coderwall.com/p/euwpig/a-better-git-log&quot;&gt;A better git log&lt;/a&gt; by Filipe Kiss&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://githubengineering.com/stretching-spokes/&quot;&gt;Stretching Spokes&lt;/a&gt;: GitHub’s Spokes system (&lt;a href=&quot;https://githubengineering.com/introducing-dgit/&quot;&gt;formerly DGit&lt;/a&gt;) stores multiple distributed copies of Git repositories; this article discusses how GitHub engineering team got Spokes replication to span widely separated datacenters&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@WebReflection/the-day-my-raspberry-pi-failed-at-faking-my-github-activity-5ed65d73dd06&quot;&gt;The day my Raspberry Pi failed at faking my GitHub activity&lt;/a&gt; on uselessness of “daily pushes to GitHub” metric for evaluating programmers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jreybert/vimagit/&quot;&gt;vimagit&lt;/a&gt; is a vim plugin
“inspired from magnificent emacs
&lt;a href=&quot;https://github.com/magit/magit&quot;&gt;Magit&lt;/a&gt; plugin”:
review your diffs, stage by hunk or even by line and write your commit message from a single buffer.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.mojotech.com/why-you-should-use-magit-git-porcelain-inside-emacs/&quot;&gt;Why you should use Magit: a Git porcelain inside Emacs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zzarcon/run-when&quot;&gt;run-when&lt;/a&gt; - Run tasks based on “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt;” changes&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/albertyw/git-reviewers&quot;&gt;git-reviewers&lt;/a&gt; is a tool to suggest code reviewers for your code depending on your diff&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sharkdp/fd&quot;&gt;fd&lt;/a&gt;, a simple, fast and user-friendly alternative to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;find&lt;/code&gt;, which ignores by default patterns from your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://githubengineering.com/github-debug/&quot;&gt;GitHub introduces GitHub Debug service&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from Torsten Bögershausen, Johannes Schindelin,
Luca Milanesio and Jérôme Reybert.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 32 (October 11th, 2017)</title>
      <link>https://git.github.io/rev_news/2017/10/11/edition-32/</link>
      <pubDate>Wed, 11 Oct 2017 08:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/10/11/edition-32/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-32-october-11th-2017&quot;&gt;Git Rev News: Edition 32 (October 11th, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 32nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of September 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code 2017&lt;/a&gt; Wrap Up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was only one student, &lt;a href=&quot;https://github.com/pratham-pc/&quot;&gt;Prathamesh Chavan&lt;/a&gt;,
mentored by Stefan Beller and Christian Couder, who participated this
year in the Google Summer of Code. Matthieu Moy and Jeff King were the
GSoC administrators for the Git project.&lt;/p&gt;

&lt;p&gt;Prathamesh has been working on an “Incremental rewrite of
git-submodules” whose goal was to port parts of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodule&lt;/code&gt;
command from shell to C code.&lt;/p&gt;

&lt;p&gt;Prathamesh wrote
&lt;a href=&quot;https://docs.google.com/document/d/1RmUvJBf4x8TI71Fltg8xWP-s7zkhz3bGPyEJMgRx91Y/edit&quot;&gt;a report about his work&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Prathamesh passed the GSoC final evaluation.&lt;/p&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAOZF3=Ouvk8ccME+fXr_T=GL1j4Gx3Hgj3ao_-GQng-noeOubg@mail.gmail.com/&quot;&gt;[idea] File history tracking hints&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pavel Kretov wrote to the mailing list:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Git, being “a stupid content tracker”, doesn’t try to keep an eye on
operations which happens to individual files; things like file renames
aren’t recorded during commit, but heuristically detected later.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and then stated that it would be “possible not only to do more
accurate ‘git blame’, but also merge revisions with fewer conflicts”
if Git better tracked what happens to files.&lt;/p&gt;

&lt;p&gt;So he suggested adding hints into the commit message like:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Tracking-hint: rename git-1.0.ebuild -&amp;gt; git-2.0.ebuild&lt;br /&gt;
   Tracking-hint: recreate LICENSE.txt&lt;br /&gt;
   Tracking-hint: split main.c -&amp;gt; main.c cmdline.c&lt;br /&gt;
   Tracking-hint: merge linalg.py &amp;lt;- vector.py matrix.py&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Stefan Beller first replied that this “was discussed a couple of times
on the mailing list (though not recently)” and pointed to
&lt;a href=&quot;https://public-inbox.org/git/Pine.LNX.4.58.0504141102430.7211@ppc970.osdl.org/&quot;&gt;an old email from Linus Torvalds&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this email from April 2005, when Git was a few week old, Linus
rejected the idea of Git tracking renames in other places than the
commit message. He wrote things like:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It’s fundamentally the git notion of “content determines objects”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;So, you really need to think of git as a filesystem. You can then
implement an SCM _on_top_of_it_ …&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;So the git header is an “inode” in the git filesystem, and like an
inode it has a ctime and an mtime, and pointers to the data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and he concluded with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There are too many messy SCM’s out there that do not have a
“philosophy”. Dammit, I’m not interested in creating another
one. This thing has a mental model, and we keep to that model.&lt;/p&gt;

  &lt;p&gt;The reason UNIX is beautiful is that it has a mental model of
processes and files. Git has a mental model of objects and certain
very very limited relationships. The relationships git cares about
are encoded in the C files, the “extra crap” (like rename info) is
just that - stuff that random scripts wrote, and that is just
informational and not central to the model.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jacob Keller, alias Jake, replied to Stefan to summarize Linus’
position in the old discussions.&lt;/p&gt;

&lt;p&gt;Jeff King replied to Pavel’s initial email agreeing that optional
annotations could be useful, but stressing that “there are some
complications” like:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;But of course somebody has to make those annotations. If we had a
tool to do it automatically, then we could apply the same tool at
run-time later.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Igor Djordjevic also replied to Pavel pointing him to
&lt;a href=&quot;https://public-inbox.org/git/Pine.LNX.4.58.0504150753440.7211@ppc970.osdl.org/&quot;&gt;another old email from Linus&lt;/a&gt;
and &lt;a href=&quot;https://public-inbox.org/git/xmqqr30qflk9.fsf@gitster.mtv.corp.google.com/&quot;&gt;a discussion in April this year&lt;/a&gt;
where Junio Hamano wrote that Linus’ email was “one of the most
important message in the list archive”.&lt;/p&gt;

&lt;p&gt;In this email, from the same discussion as above, Linus concluded
with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In other words, I’m right. I’m always right, but sometimes I’m more
right than other times. And dammit, when I say “files don’t matter”,
I’m really really Right(tm).&lt;/p&gt;

  &lt;p&gt;Please stop this “track files” crap. Git tracks &lt;em&gt;exactly&lt;/em&gt; what
matters, namely “collections of files”. Nothing else is relevant,
and even &lt;em&gt;thinking&lt;/em&gt; that it is relevant only limits your
world-view. Notice how the notion of CVS “annotate” always
inevitably ends up limiting how people use it. I think it’s a
totally useless piece of crap, and I’ve described something that I
think is a million times more useful, and it all fell out &lt;em&gt;exactly&lt;/em&gt;
because I’m not limiting my thinking to the wrong model of the
world.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Philip Oakley also replied directly to Pavel, suggesting him to use
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git interpret-trailers&lt;/code&gt; for standardising his hints locally (in his
team / workplace) “to see how it goes and flesh out what works and
what doesn’t”.&lt;/p&gt;

&lt;p&gt;Johannes Schindelin, alias Dscho, agreed with Philip and Pavel. He
explained that “&lt;em&gt;everybody&lt;/em&gt; who seriously worked on a massive code
base has seen that rename detection fail in the most inopportune ways”
and gave examples, especially this one:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;when rename detection would matter most, like, really a lot, to lift
the burden of the human beings in front of the computer pouring over
hundreds of thousands of files moved from one directory tree to
another, that’s exactly when Git’s rename detection says that there
are too many files, here are my union rights, I am going home, good
luck to you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and concluded with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;So I totally like the idea of introducing hints, possibly as
trailers in the commit message (or as refs/notes/rename/* or
whatever) that can be picked up by Git versions that know about
them, and can be ignored by Git versions that insist on the rename
detection du jour. With a config option to control the behavior,
maybe, too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Philip replied to Dscho suggesting a list of possible hints:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;So the hints could be (by type):&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;template;licence;boiler-plate;standard;reference :: copy&lt;/li&gt;
    &lt;li&gt;word-rename&lt;/li&gt;
    &lt;li&gt;regex for word substitution changes (e.g. which chars are within ‘Word-_0`)&lt;/li&gt;
    &lt;li&gt;regex for white-space changes (i.e. which chars are considered whitespace.)&lt;/li&gt;
    &lt;li&gt;move-dir path/glob spec&lt;/li&gt;
    &lt;li&gt;move-file path/glob spec
(maybe list each ‘group’ of moves, so that once found the rest of the rename detection follows the group.)&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;The discussion on this thread continued for a while also involving
Jeff Hostetler, Stefan and Junio who wrote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I actually like the idea to have a mechanism where the user can give
hint to influence, or instruction to dictate, how Git determines
“this old path moved to this new path” when comparing two trees.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But he stated that “it is a non starter” to have hints “baked in the
log message of a commit object”, though “the principle Linus lays out
in the message does not reject such hints stored outside baked-in data
structure, which allows mistakes to be corrected without affecting the
real history”.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/loom.20160331T143733-916@post.gmane.org/&quot;&gt;BUG in git diff-index&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In March 2016 Andy Lowry described what he believed to be a bug in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff-index&lt;/code&gt;.  After creating a file and then touching it, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
diff-index&lt;/code&gt; reports the file has changed, and reports “bogus
destination SHA”:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git diff-index HEAD
:100644 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
0000000000000000000000000000000000000000 M    A
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But then using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; followed by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff-index&lt;/code&gt; again reports
no changes:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git diff
$ git diff-index HEAD
$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Carlos Martín Nieto first replied to Andy that “this is expected and
matches the documentation”.&lt;/p&gt;

&lt;p&gt;Indeed the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff-index&lt;/code&gt; documentation tells that this command has
2 different operating modes. The “cached” mode, when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cached&lt;/code&gt; is
specified, makes Git trust the index file entirely. While the
“non-cached” mode also shows files that don’t match the stat state as
being “tentatively changed” using “the magic ‘all-zero’ sha1”.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, also pointed to the same documentation and
explained in more details how the command works and the historical
background:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Back when diff-index was written, it was generally assumed that
scripts would refresh the index as their first operation, and then
proceed to do one or more operations like diff-index, which would
rely on the refresh from the first step.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Peff wrote that running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; does refresh the index, which is
why Andy’s last step shows no diff.&lt;/p&gt;

&lt;p&gt;Andy thanked Peff, but replied that he is after “a tree-to-filesystem
comparison, regardless of index”:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I’ve currently got a “diff” thrown in as a “work-around” before
“diff-index”, but now I understand it’s not a workaround at all. If
there’s a better way to achieve what I’m after, I’d appreciate a
tip.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Peff suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git update-index --refresh&lt;/code&gt; rather than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
diff&lt;/code&gt; to just refresh the index.&lt;/p&gt;

&lt;p&gt;Andy appreciated this answer, though he described his use case in
details and asked:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;So I think now that the script should do “update-index --refresh”
followed by “diff-index --quiet HEAD”. Sound correct?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Junio confirmed that:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Yes. That always been one of the kosher ways for any script to make
sure that the files in the working tree that are tracked have not
been modified relative to HEAD (assuming that the index matches
HEAD).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and then described a few other “kosher ways” along with their
benefits.&lt;/p&gt;

&lt;p&gt;Recently Marc Herbert then chimed into this 18 month old discussion
adding the Linux kernel mailing list and a number of kernel developers
in CC. Saying:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Too bad kernel/scripts/setlocalversion didn’t get the memo&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Marc pointed to
&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cdf2bc632ebc9ef51&quot;&gt;a commit from 2013 in the Linux kernel repo&lt;/a&gt;
that removes a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git update-index&lt;/code&gt; call from the “setlocalversion”
script. And he added that “this causes a spurious ‘-dirty’ suffix when
building from a directory copy”.&lt;/p&gt;

&lt;p&gt;In the “PS:” part of his email Marc also wondered if there is a
“robots.txt” file in &lt;a href=&quot;https://public-inbox.org&quot;&gt;https://public-inbox.org&lt;/a&gt; that blocks indexing the
site contents as Google couldn’t find the thread he was replying to on
the site.&lt;/p&gt;

&lt;p&gt;Eric Wong, the creator and maintainer of public-inbox.org replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There’s no blocks on public-inbox.org and I’m completely against
any sort of blocking/throttling. Maybe there’s too many pages
to index?  Or the Message-IDs in URLs are too ugly/scary?  Not
sure what to do about that…&lt;/p&gt;

  &lt;p&gt;Anyways, I just put up a robots.txt with Crawl-Delay: 1, since I
seem to recall crawlers use a more conservative delay by default:&lt;/p&gt;

  &lt;p&gt;==&amp;gt; https://public-inbox.org/robots.txt &amp;lt;==&lt;br /&gt;
User-Agent: *&lt;br /&gt;
Crawl-Delay: 1&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;developer-spotlight-philip-oakley&quot;&gt;Developer Spotlight: Philip Oakley&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m a design engineer working in defence electro-optics, and have been
coding for nearly 50 years. I started at school with
&lt;a href=&quot;https://calculating.files.wordpress.com/2014/01/ibm-port-a-punch-1.jpg&quot;&gt;hand punched Hollerith cards&lt;/a&gt;
which were posted to Leeds University, and the print out returned a
week later - careful coding was important! I coded in Forth and PL/1
at university, along with most of the 8-bit microprocessors of the
time. I touched Unix in the 80’s, but since then it’s mostly been work
using Windows. Code has always been a support to my main work of
“Engineering”. More recently (last 5 years) I have been coding in C,
Matlab, and MathCAD. Unfortunately the latter isn’t that amenable to a
VCS.&lt;/p&gt;

&lt;p&gt;I discovered Git in 2011 when I saw a blog post, and immediately
realised that a tool that &lt;em&gt;distributed control to the user&lt;/em&gt; was the
holy grail I’d been looking for. Big engineering VCS systems are still
rooted in the 1900’s drawing office practices where protecting their
one unique master drawing from spillages of India ink was
everything. I was not, and still am not, allowed to quickly put code
into that VCS. Meanwhile zero cost duplication meant we should now be
using hash key verification, as shown by Git. The unique master is no
more. And with Git I can quickly get back to where I was 10 minutes
ago when developing code and exploring design concepts or data.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It probably has to be the trailer of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help&lt;/code&gt; that highlights that
there are not only man pages for the commands, but also a set of
guides for the various Git concepts, such as ‘revisions’. As yet it
doesn’t allow all the guides to be listed - it’s something I should
get back to. I do try to make sure that any man page changes are
included in patches - most folk read the man pages rather than the
code, so keeping the two aligned is important..&lt;/p&gt;

&lt;p&gt;On the flip side, I hope my help in responding to some of the issue on
Git for Windows has slightly eased the work of Dscho who has
tirelessly supported and maintained that rather important port of Git
to the wider world.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the moment I’m trying to follow the Partial / Narrow clone work of
Jonathan Tan and Ben Peart. I’m slightly concerned about how the
perceived always-connected approach to lazy fetching will work for
others. It’s fine for a large managed environment, but for small scale
users with unreliable connections it may need a tweak to pre-specify
what is narrowly downloaded/fetched, and how the gaps are shown in the
user’s worktree.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s been a long standing desire to find a way of allowing true Narrow
clones (remember I work in a ‘secure’ defence environment). This where
some server side hook would allow the enforcement of the partitioning
of the worktree between parts the user is expected to be working on,
and other independent areas they shouldn’t be touching, so won’t
have. It would be as if the worktree was partitioned into separate
‘submodules’ but with independence via the tree hashes, rather than
using submodule commit hashes. Importantly, it should be possible for
the user’s local server repo (is there a word for this ‘on-server
personal fork’?) to also be a narrow clone, as distinct from the
golden server which would always a full width, and able to serve narrow
packs.&lt;/p&gt;

&lt;p&gt;The other aspect of Git would be to include practical user examples on
the man pages, making them more than just reference pages for those
who already know what the pages mean.&lt;/p&gt;

&lt;p&gt;The one hypothetical fix I would love to find is the ideal word for
the cache / index / staging area / manifest / out-box, which
unfortunately has no equivalence in the regular world (that perfect
replication issue again).&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don’t notice what I don’t use, however there’s probably a lot of
early-days cruft such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;show-branch&lt;/code&gt; that could be dumped. A more
difficult area is the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--assume-unchanged&lt;/code&gt; (and similar) which is a
very confused promise. There appears to be a lot of code that fails to
distinguish expected promises by the user (“trust me, I’m a user”),
rather than actual promises by Git (trust me I’m software). Getting
rid (or at least very obviously documenting) of these misunderstood
promises would help many!&lt;/p&gt;

&lt;p&gt;The other area is the hidden Git-Linux workflows that are embedded in
the commands to catch the unwary, such as the
&lt;a href=&quot;https://public-inbox.org/git/xmqqa81njds0.fsf@gitster.mtv.corp.google.com/&quot;&gt;recent discussion&lt;/a&gt;
on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--fork-point&lt;/code&gt; option of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git merge-base&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tend to stick to Git, the git-gui, and gitk, as the core VC
tools. Between the viewer, the gui and the bash command line I can do
all that I need. Coming from a Windows environment, I found most of
the support tools there (e.g. TortoiseGit, GitExtensions) to be
somewhat backward looking and lead to bad habits and
misunderstandings.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqq7ewa87fw.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git v2.15.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqwp4m9ejl.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git v2.14.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqy3p29ekj.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git v2.13.6 and others&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.14.2.windows.1&quot;&gt;Git for Windows 2.14.2&lt;/a&gt; and &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.14.2.windows.2&quot;&gt;2.14.2(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03430.html&quot;&gt;JGit / EGit 4.9.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2017/09/22/gitlab-10-0-released/&quot;&gt;GitLab 10.0&lt;/a&gt; alongside patches &lt;a href=&quot;https://about.gitlab.com/2017/10/04/gitlab-9-dot-5-dot-8-released/&quot;&gt;9.5.8&lt;/a&gt; through &lt;a href=&quot;https://about.gitlab.com/2017/10/05/gitlab-10-dot-0-dot-3-released/&quot;&gt;10.0.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jonas/tig/releases/tag/tig-2.3.0&quot;&gt;Release tig-2.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/tower-win-1-2&quot;&gt;Tower for Windows 1.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;New podcast about Git: &lt;a href=&quot;http://www.allthingsgit.com/&quot;&gt;All Things Git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Old podcast: &lt;a href=&quot;http://episodes.gitminutes.com/2017/09/gitminutes-42-erik-from-atlassian-on.html&quot;&gt;GitMinutes #42: Erik from Atlassian on Clone Bundles&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://episodes.gitminutes.com/2017/10/gitminutes-43-johannes-schindelin-on.html&quot;&gt;GitMinutes #43: Johannes Schindelin on Contributing to Git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Thomas Wolf has been &lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03428.html&quot;&gt;accepted as a JGit/EGit Committer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@larsxschneider/talk-dont-fork-743a1253b8d5&quot;&gt;Talk, don’t Fork&lt;/a&gt; - on forking in companies&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://caiustheory.com/git-git-git-git-git/&quot;&gt;git git git git git&lt;/a&gt; from CaiusTheory.com&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://third-bit.com/2017/09/30/git-graphs-and-engineering.html&quot;&gt;Git, Graphs, and Software Engineering&lt;/a&gt; - more of a call to action&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.expressionsofchange.org/self-applicability/&quot;&gt;Self applicability&lt;/a&gt;, and how this idea can be applied to Version Control - about immutable record versus rewriting history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/autodesk/hubble&quot;&gt;Hubble Enterprise&lt;/a&gt; - Collaboration, usage, and health data visualization for GitHub Enterprise&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://keybase.io/blog/encrypted-git-for-everyone&quot;&gt;Keybase launches encrypted git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2437-announcing-github-desktop-1-0&quot;&gt;GitHub Desktop 1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://githubengineering.com/github-debug/&quot;&gt;GitHub Debug&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://endlessparentheses.com/it-s-magit-and-you-re-the-magician.html&quot;&gt;It’s Magit! And you’re the magician!&lt;/a&gt; by Artur Malabarba - &lt;a href=&quot;https://magit.vc/&quot;&gt;Magit&lt;/a&gt; is &lt;em&gt;A Git Porcelain inside Emacs&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/734018/&quot;&gt;Linking commits to reviews [LWN.net]&lt;/a&gt;; the &lt;a href=&quot;https://github.com/alexcourouble/email2git&quot;&gt;email2git&lt;/a&gt; tool was presented in &lt;a href=&quot;https://git.github.io/rev_news/2017/08/16/edition-30/&quot;&gt;Git Rev News #30&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from Philip Oakley and Lars Schneider.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 31 (September 20th, 2017)</title>
      <link>https://git.github.io/rev_news/2017/09/20/edition-31/</link>
      <pubDate>Wed, 20 Sep 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/09/20/edition-31/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-31-september-20th-2017&quot;&gt;Git Rev News: Edition 31 (September 20th, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 31st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of August 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20170808012554.186051-1-bmwill@google.com/&quot;&gt;clang-format: outline the git project’s coding style&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Brandon Williams posted an RFC patch to add a ‘.clang-format’ file
which “can be used with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clang-format&lt;/code&gt; to auto-format .c and .h files
to conform with Git’s style”.&lt;/p&gt;

&lt;p&gt;Brandon recalled the git-merge conference when he “mentioned how it
would be nice to not have to worry about style when reviewing patches
as that is something mechanical and best left to a machine (for the
most part)”, and also pointed &lt;a href=&quot;https://public-inbox.org/git/20150121220903.GA10267@peff.net/&quot;&gt;an email from a few years ago&lt;/a&gt;
from Jeff King, alias Peff to add a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clang-format-diff&lt;/code&gt;
command to properly format patches.&lt;/p&gt;

&lt;p&gt;He warned that, as “our code base isn’t consistent”, it is not
possible “to come up with a config which matches” it, but said that he
wanted to “see how people feel” about this topic.&lt;/p&gt;

&lt;p&gt;Johannes Schindelin, alias Dscho, first reacted with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Amen.&lt;/p&gt;

  &lt;p&gt;If I never have to see a review mentioning an unwrapped line, I am quite
certain I will be quite content.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Stefan Beller replied to Dscho proposing a “thought experiment” to
“take it one step further”:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If the code was formatted perfectly in one style such that a formatter for
this style would not produce changes when rerun again on the code, then
each individual could have a clean/smudge filter to work in their preferred
style, and only the exchange and storage of code is in a mutual agreed
style. If the mutually agreed style is close to what I prefer, I don’t have to
use clean/smudge filters.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He also suggested improving the documentation to “hint at how to use
this formatting to just affect the patch that is currently worked on
or rather a pre-commit hook”.&lt;/p&gt;

&lt;p&gt;Brandon later agreed to improve the documentation once his patch
would not be an RFC anymore.&lt;/p&gt;

&lt;p&gt;Junio Hamano, the Git maintainer, thanked Brandon for compiling a
sensible set of rules, though he stressed that developers should have
“a shared notion of how these rules are to be used” to avoid
“unpleasant consequences” like:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“unwanted code churn on existing codebase, only for the sake of
 satisfying the formatting rules”&lt;/li&gt;
  &lt;li&gt;“far more style-only critique to patches posted on the list” by
readers “running the tool to nitpick other people’s patches”&lt;/li&gt;
  &lt;li&gt;when “human aesthetics judgement” is necessary to overrule
mechanical rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Junio also commented the content of the patch especially the
“ColumnLimit: 80” settings to limit code lines to 80 columns where he
repeated that it is “important to give a guideline on what to do when
lines in your code exceed this limit”.&lt;/p&gt;

&lt;p&gt;Brandon replied to Junio that the unwanted code churn “is an issue
when you have an inconsistent code base such as ours” and that he
“would hope that use of such a tool would eventually completely
eliminate style-only critiques”.&lt;/p&gt;

&lt;p&gt;He also “would expect some of the penalties would need to be tweaked
over time before we rely too heavily on” the tool to avoid too many
cases where it conflicts with human aesthetics judgement.&lt;/p&gt;

&lt;p&gt;Junio and Brandon then further discussed some settings in the content
of the patch. This led Junio to talk about the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;checkpatch.pl&lt;/code&gt; script
from the Linux kernel project which he uses to automatically find
problems in patches.&lt;/p&gt;

&lt;p&gt;Then Jeff King chimed saying that he stopped pursuing adding a new
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clang-format-diff&lt;/code&gt; command because he “couldn’t find a way to
have it make suggestions for new code without nagging about existing
code”. He was also “worried that there would always be suggestions
from the tool that we don’t agree with (i.e., where the guiding
principle is “do what is readable”)”.&lt;/p&gt;

&lt;p&gt;Jeff also mentioned &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;go fmt&lt;/code&gt;, which is used by the Go language
community, stating that “it seems to at least work for them”.&lt;/p&gt;

&lt;p&gt;Ævar Arnfjörð Bjarmason, Ben Peart, Ramsay Jones, Brian Carlson and
Jonathan Nieder also chimed in at some points to discuss the tools and
how they should be used.&lt;/p&gt;

&lt;p&gt;In the end it looks like most of the Git developers are either neutral
or are happy with moving this topic forward, and an updated version of
Brandon’s patch has been merged in the “pu” (proposed updates) branch.&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20170827073732.546-1-martin.agren@gmail.com/&quot;&gt;pkt-line: re-‘static’-ify buffer in packet_write_fmt_1()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Martin Ågren sent a patch saying that a previous patch from October
2016 had silently dropped static-ness of a buffer, so that we allocate
and leak a buffer each time we call &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;packet_write_fmt_gently()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ouch. So this means that git since v2.11 is basically leaking every
non-byte pack sent by upload-pack (so all of the ref advertisement and
want/have negotiation).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Peff then agreed that Martin’s patch “is a good fix for now as it
takes as back to the pre-bug state”.&lt;/p&gt;

&lt;p&gt;Lars Schneider also agreed with Martin’s fix and asked him how he
found the leak.&lt;/p&gt;

&lt;p&gt;Martin replied “Valgrind found it for me”, and later explained that he
had patched the Valgrind script that can be used in the test suite to
run tests under Valgrind, so that Valgrind is launched with the added
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--leak-check=yes&lt;/code&gt; option. Then he had slowly run the tests one after
another under Valgrind adding items in a suppression list until he
found the leak.&lt;/p&gt;

&lt;p&gt;Peff then took a look at finding and fixing some leaks, too. He
especially posted &lt;a href=&quot;https://public-inbox.org/git/20170829185850.tfmjoa5u5sfuwpgi@sigill.intra.peff.net/&quot;&gt;a patch to use a static lock_file in the config&lt;/a&gt;
which started another thread about the limitations of the tempfile code.&lt;/p&gt;

&lt;p&gt;Stefan Beller and Junio Hamano also took part in the discussion. In
the end it looks like the discussion at least started some effort to
make it easier to check for and to fix memory leaks.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-ben-peart&quot;&gt;Developer Spotlight: Ben Peart&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I started programming professionally while completing my degree in Computer Science back in 1988.  I joined a startup for 6 years out of college and then joined Microsoft where I’ve been for the past 21 years.  All my professional programming has been in C/C++.  I’ve been an engineer, a lead, dev manager, PUM, GM and Architect.  About 10 years ago I went back to my first love of writing great software as an engineer/architect.&lt;/p&gt;

&lt;p&gt;I’ve had the opportunity to work on many interesting projects before git.  I spent a number of years working on Windows.  I was Architect for the Xbox One system OS for a few years and many other projects in between.  For the past 20 months or so I have been working on the Git Virtual File System (GVFS) which enables git to scale to the size of repos we have in our Windows and Office teams as well as many of our enterprise customers.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Probably delivering GVFS successfully and proving that git can be made to scale to huge repos.  Others had attempted this and given up so I’m pretty proud of this achievement.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For pragmatic reasons, we delivered GVFS via a separate process, file system filter driver and a fork of the git code (all open sourced but still a fork).  Our goal has been and continues to be that we take the core capabilities currently delivered via GVFS and make them integral features of git itself.  Ultimately, we’d like to get all of the scale enabling features into core git and no longer need a private fork.  I’m working on delivering that goal now.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scale, scale, scale!  Too many git operations are either O(size of repo) or O(size of working directory).  That simply doesn’t scale as things grow.  We need to push more and more for git to scale to O(size of what I care about).  For many operations that means O(# of modified files).&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’d replace the current index data structure with something more scalable.  Something sparse, hierarchical.  Something that can be incrementally read/written.  I’d probably split the “cache” features from the “staging” features as well.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m a hard core command line interface guy so don’t use much Git related beyond Git itself.  That said, I use Visual Studio as my editor/debugger, PerfView as my profiler, and Beyond Compare as my visual diff tool.  I also love using Visual Studio Online to review/approve pull requests.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.20.2&quot;&gt;nodegit v0.20.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2432-git-lfs-2-3-0-released&quot;&gt;Git LFS 2.3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2429-introducing-github-enterprise-2-11&quot;&gt;GitHub Enterprise 2.11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2017/08/22/gitlab-9-5-released/&quot;&gt;GitLab 9.5&lt;/a&gt; and patches &lt;a href=&quot;https://about.gitlab.com/2017/09/07/gitlab-9-dot-5-dot-4-security-release/&quot;&gt;9.5.4, 9.4.6, and 9.3.11&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitenterprise.me/2017/09/07/gerrit-user-summit-2017-2-3-oct-london/&quot;&gt;Gerrit User Summit 2017, 2-3 Oct, London&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@fredrikmorken/why-you-should-stop-using-git-rebase-5552bee4fed1&quot;&gt;Why you should stop using Git rebase&lt;/a&gt;, by Fredrik V. Mørken&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dpc.pw/blog/2017/08/youre-using-git-wrong/&quot;&gt;You’re using git wrong&lt;/a&gt;, by Dawid Ciężarkiewicz&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/gonedark/tweak-your-terminal-for-git&quot;&gt;Tweak your Terminal for Git&lt;/a&gt;, by Jason McCreary&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=15044264&quot;&gt;Developer accidentally deletes 3 months of work with Visual Studio Code&lt;/a&gt;, interesting discussion from HackerNews&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/17/8/recover-dropped-data-stash&quot;&gt;How to recover dropped data from stash&lt;/a&gt;, by Jose Guilherme Vanz&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.com/article/17/8/mentoring-your-path-immortality&quot;&gt;Mentoring: Your path to immortality.&lt;/a&gt; Secure your open source project’s survival with these four tips for encouraging strong, active contributors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://magit.vc&quot;&gt;Magit&lt;/a&gt;, currently at &lt;a href=&quot;https://emacsair.me/2017/09/13/magit-2.11/&quot;&gt;version 2.11&lt;/a&gt;,
is a Git user interface that is implemented as an Emacs package. It
is very popular among Emacs users and often considered to be one of
its killer features. Jonas Bernoulli, its maintainer, is currently
running a
&lt;a href=&quot;https://www.kickstarter.com/projects/1681258897/its-magit-the-magical-git-client?ref=bnkptt&quot;&gt;Kickstarter campaign&lt;/a&gt;
to support his work for a year. One of the goals is to make
it more accessible to non-Emacs users. Many of the
&lt;a href=&quot;https://emacsair.me/2017/09/01/campaign-articles&quot;&gt;articles that he has published&lt;/a&gt;
when he launched the campaign are specifically for
non-Emacs users.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://workingcopyapp.com/&quot;&gt;Working Copy&lt;/a&gt; is a Git client for iOS&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://unity.github.com/&quot;&gt;GitHub for Unity&lt;/a&gt; is an extension for the Unity game engine editor. They just released version &lt;a href=&quot;https://github.com/blog/2426-github-for-unity-0-19-alpha-released&quot;&gt;0.19-alpha&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tankerapp.github.io/tsrc/&quot;&gt;tsrc&lt;/a&gt; is a command-line tool that helps you manage several git repositories.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.linux.com/learn/intro-to-linux/2017/8/how-integrate-git-your-linux-desktop&quot;&gt;How to Integrate Git into Your Linux Desktop&lt;/a&gt;, by Jack Wallen&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;,
with help from Jonas Bernoulli and Ben Peart.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 30 (August 16th, 2017)</title>
      <link>https://git.github.io/rev_news/2017/08/16/edition-30/</link>
      <pubDate>Wed, 16 Aug 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/08/16/edition-30/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-30-august-16th-2017&quot;&gt;Git Rev News: Edition 30 (August 16th, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 30th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of July 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAJo=hJtyof=HRy=2sLP0ng0uZ4=S-DpZ5dR1aF+VHVETKG20OQ@mail.gmail.com/&quot;&gt;reftable: new ref storage format&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shawn Pearce sent an email describing a new format to store refs. The
email started with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We’ve been having scaling problems with insane number of references
(&amp;gt;866k), so I started thinking a lot about improving ref storage.&lt;/p&gt;

  &lt;p&gt;I’ve written a simple approach, and implemented it in JGit.
Performance is promising:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;62M packed-refs compresses to 27M&lt;/li&gt;
    &lt;li&gt;42.3 usec lookup&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is not the first time that someone proposes a new format to store
refs, and Shawn summarized a previous attempt by David Turner:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;David Turner proposed &lt;a href=&quot;https://public-inbox.org/git/1455772670-21142-26-git-send-email-dturner@twopensource.com/&quot;&gt;using LMDB&lt;/a&gt;, as LMDB is lightweight
(64k of runtime code) and is licensed under a GPL-compatible license.&lt;/p&gt;

  &lt;p&gt;A downside of LMDB is its reliance on a single C implementation. This
makes embedding inside JGit (a popular reimplementation of Git)
difficult, and hosting onto virtual storage (for JGit DFS) virtually
impossible.&lt;/p&gt;

  &lt;p&gt;A common format that can be supported by all major Git implementations
(git-core, JGit, libgit2) is strongly preferred.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Shawn also referenced a previous proposal he had worked on:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03073.html&quot;&gt;JGit Ketch&lt;/a&gt; proposed &lt;a href=&quot;https://public-inbox.org/git/CAJo=hJvnAPNAdDcAAwAvU9C4RVeQdoS3Ev9WTguHx4fD0V_nOg@mail.gmail.com/&quot;&gt;RefTree&lt;/a&gt;, an encoding of
references inside Git tree objects stored as part of the repository’s
object database.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He describes the reftable format like this:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A reftable file is a portable binary file format customized for
reference storage. References are sorted, enabling linear scans,
binary search lookup, and range scans.&lt;/p&gt;

  &lt;p&gt;Storage in the file is organized into blocks.  Prefix compression
is used within a single block to reduce disk space.  Block size is
tunable by the writer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are a lot more details in his email and the proposal looked very
advanced.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, was the first to reply to Shawn. He reviewed
the whole email and he summarized what he understood from Shawn’s
proposal:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The reftable file is a sequence of blocks, each of which contains a
finite set of heavily-compressed refs. You have to read each block
sequentially, but since they’re a fixed size, that’s still a
constant-time operation (I’m ignoring the “restarts” thing for now). You
find the right block by reading the index.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One of his concern was about updating refs:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Updates are where things get dicier. It looks like you just write a new
partial reftable file with your updates. And then if there are N
reftables present, readers actually have to do a list-merge of the
results they get from all of them (where the results from reftable.5
trump ones from reftable.4).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and another one was about reflogs:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;One thing I didn’t see is reflogs. They don’t strictly have to be part
of a ref-storage solution. But they do still consume at least one inode
per ref in the current system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But overall Peff seemed happy with the performance and the idea.&lt;/p&gt;

&lt;p&gt;Stefan Beller replied to Peff. As Stefan works at Google with Shawn,
he had already discussed the proposal and gave more details about some
points Peff had commented on. He also suggested Shawn give “the whole
thing in BNF format from top down” starting with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;initial-block
  content-blocks*
  (index-block)
  footer&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Peff replied to Stefan about some points especially regarding gzip
compression and agreed that “a high-level overview of the format would
have been nice”.&lt;/p&gt;

&lt;p&gt;Eric Wong then suggested using “an intrusive critbit tree” to store
refs as it could save space and speed up searching for a SHA-1.&lt;/p&gt;

&lt;p&gt;Shawn replied to Stefan. He agreed about describing the format using
BNF from top down. About gzip compression he showed some numbers and
wrote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The reftable format (for 64k block, 256 restart) is within spitting
distance (432 KB) of a default level gzip of packed-refs. We can get
fast lookup, and OK compression.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Shawn also replied to Peff’s first email. About reflog support, a
short subthread of the discussion started where Dave Borowitz chimed
in. The subthread concluded that the reftable format should indeed try
to support reflog entries.&lt;/p&gt;

&lt;p&gt;About updating refs which was Peff’s other big concern, Peff replied
to Shawn suggesting that each reftable points to previous
reftables. And then Shawn agreed that it “makes for a very safe atomic
reader view”.&lt;/p&gt;

&lt;p&gt;Peff eventually suggested to keep the list of reftables in a top-level
pointer file, and to rewrite that pointer file on update.&lt;/p&gt;

&lt;p&gt;Johannes Sixt agreed with Peff concerns over updates in Shawn’s
initial proposal saying:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;One of the failure modes is that on Windows a file cannot be deleted
while it is open in any process. It can happen that a compacting updater
wants to remove a reftable file that is still open in a reader.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Michael Haggerty also replied to Shawn’s initial proposal. Michael
first asked if pseudorefs, like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HEAD&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FETCH_HEAD&lt;/code&gt;, should also be
stored in reftables, or only the references under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;refs/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Micheal then commented on a lot of details. He suggested an algorithm
so that reference repacking can be done without blocking other
&lt;em&gt;writers&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Shawn replied to Michael. He agreed to use what the suggested
algorithm to repack without blocking, but he was not sure about
storing pseudo refs in reftables.&lt;/p&gt;

&lt;p&gt;Dave Borowitz and Junio Hamano, the Git maintainer, also commented on
parts of this discussion.&lt;/p&gt;

&lt;p&gt;While the discussion was going on with Michael, Shawn posted a
&lt;a href=&quot;https://public-inbox.org/git/CAJo=hJtTp2eA3z9wW9cHo-nA7kK40vVThqh6inXpbCcqfdMP9g@mail.gmail.com/&quot;&gt;second version&lt;/a&gt;
of his proposal. It started with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Biggest changes from the first proposal are:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;reflog is now integrated into reftable&lt;/li&gt;
    &lt;li&gt;block headers slightly different&lt;/li&gt;
    &lt;li&gt;Peff’s stack management idea is used&lt;/li&gt;
    &lt;li&gt;Michael’s compaction idea is used&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;The structure of the files was also better documented using the BNF.&lt;/p&gt;

&lt;p&gt;Stefan was the first to reply, followed by Junio. Shawn then answered
all of their comments. One point that Stefan and Junio both raised was
how modification time was stored in the reflog.&lt;/p&gt;

&lt;p&gt;Initially Shawn had planned to store them as seconds since the epoch
in a 32 bit integer, but that wouldn’t have worked after 2038. So
Shawn agreed after also discussing with Michael to have them in an 8
byte field storing microseconds since the epoch which will work
“through year 9999”.&lt;/p&gt;

&lt;p&gt;Ævar Arnfjörð Bjarmason though chimed in to suggest using 64 bit
nanosecond resolution which would “only be good up until the year
2554”, but has other benefits like keeping a one-to-one mapping
between file modification time and reflog entries and standardizing on
fewer time formats.&lt;/p&gt;

&lt;p&gt;Shawn then posted &lt;a href=&quot;https://public-inbox.org/git/CAJo=hJvxWg2J-yRiCK3szux=eYM2ThjT0KWo-SFFOOc1RkxXzg@mail.gmail.com/&quot;&gt;a third version&lt;/a&gt;
of his proposal starting with the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Significant changes from v2:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;efficient lookup by SHA-1 for allow-tip-sha1-in-want.&lt;/li&gt;
    &lt;li&gt;type 0x4 for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FETCH_HEAD&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MERGE_HEAD&lt;/code&gt;.&lt;/li&gt;
    &lt;li&gt;file size up (27.7 M in v1, 34.4 M in v3)&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;The file size increase is due to lookup by SHA-1 support. By using
unique abbreviations its adding about 7 MB to the file size for
865,258 objects behind 866,456 refs. Average entry for this direction
costs 8 bytes, using a 6 byte/12 hex unique abbreviation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There were more comments from Stefan and Michael, which after short
discussions resulted in improvements. So Shawn posted
&lt;a href=&quot;https://public-inbox.org/git/CAJo=hJv7scc1L0_MdRkFeLAJGjYm2UkTFNOgj2e4+9Zj7KSiiQ@mail.gmail.com/&quot;&gt;a fourth version&lt;/a&gt;
starting with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Significant changes from v3:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Incorporated Michael Haggerty’s update_index concept for reflog.&lt;/li&gt;
    &lt;li&gt;Explicitly documented log-only tables.&lt;/li&gt;
    &lt;li&gt;Magic changed to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;REFT&apos;&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;Symlinks now use type 0x3 with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;ref: &quot;&lt;/code&gt; prefix.&lt;/li&gt;
    &lt;li&gt;Ref-like files (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FETCH_HEAD&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MERGE_HEAD&lt;/code&gt;) also use type 0x3.&lt;/li&gt;
    &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;restart_count&lt;/code&gt; simplified, obj &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;block_count&lt;/code&gt; simplified&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;This round led to a lot of discussion. Michael proposed another format
altogether. Junio commented on a few things and was worried about the
impact of the new format on clients were reading a single ref
currently need to open at most 2 files. Dave Borowitz asked about the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; implementation.&lt;/p&gt;

&lt;p&gt;Michael’s proposal started a significant subthread where Peff, Junio
and Dave chimed in.&lt;/p&gt;

&lt;p&gt;Shawn recently posted &lt;a href=&quot;https://public-inbox.org/git/CAJo=hJsOHF0KVmXvbSBiBgxq4zRdt7v7sj_GuKvcpbu8tkujFA@mail.gmail.com/&quot;&gt;a 5th version&lt;/a&gt;
with the following changes:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Significant changes from v4:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Supported Michael Haggerty’s multi-level index.&lt;/li&gt;
    &lt;li&gt;Restart table now appears at start of block, instead of end.&lt;/li&gt;
    &lt;li&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;restart_offset&lt;/code&gt; is now 3-bytes, instead of 4-bytes.&lt;/li&gt;
    &lt;li&gt;Footer stores &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;obj_id_len&lt;/code&gt; abbreviation used by obj blocks.&lt;/li&gt;
    &lt;li&gt;Clarified log-only files can exist.&lt;/li&gt;
    &lt;li&gt;Clarified use of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;position&lt;/code&gt; for byte in file, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;offset&lt;/code&gt; for byte in block.&lt;/li&gt;
    &lt;li&gt;Clarified &lt;em&gt;peeling&lt;/em&gt;, and reference name encoding as bag of bytes.&lt;/li&gt;
    &lt;li&gt;Corrected extensions.reftable value to be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;The comments on this round were mostly about LMDB, as Ævar found a
Java binding that could be used. These discussions involved Peff,
David Turner and Howard Chu, the Chief Architect of OpenLDAP and LMDB
creator.&lt;/p&gt;

&lt;p&gt;It turned out that LMDB might not work well on NFS. Also Google (for
which Shawn is working) needs something that can be virtualized onto a
different filesystem in user space, and it looks like LMDB doesn’t fit
this requirement.&lt;/p&gt;

&lt;p&gt;So Shawn posted &lt;a href=&quot;https://public-inbox.org/git/CAJo=hJtg0PAVHT1phbArdra8+4LfnEEuaj3fBid==BXkZghi8g@mail.gmail.com/#r&quot;&gt;a 6th version&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Changes from v5:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extensions.refStorage = reftable&lt;/code&gt; is used to select this format.&lt;/li&gt;
    &lt;li&gt;Log records can be explicitly deleted (for refs/stash).&lt;/li&gt;
    &lt;li&gt;Log records may use Michael Haggerty’s chained idea to compress before zlib.
This saved ~5.8% on one of my example repositories.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;There were a few comments by Stefan, Peff and Junio, but it looks like
there is an overall agreement on the design at this point.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-shawn-pearce&quot;&gt;Developer Spotlight: Shawn Pearce&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am an open source developer who really loves working on developer
tools. I like making others more happy and productive, making it that
much easier for them to change the world.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three things come to mind:  git fast-import, git gui, and the offshoot
projects I started: libgit2, JGit, EGit, Gerrit Code Review. Sorry,
it’s hard to choose just one.&lt;/p&gt;

&lt;p&gt;git fast-import format became the lingua franca of version control
systems, helping users to move history between CVS, Subversion, Hg,
Bazaar, BitKeeper, and of course Git. I originally created the format
to help Jon Smirl import the Mozilla repository from CVS into Git. It
was so versatile that its adoption has exploded.&lt;/p&gt;

&lt;p&gt;git gui has stuck around as a compliment to the awesome gitk, helping
users to manage their working directory. I wound up abandoning the
project due to lack of time, but several others like Pat Thoyts
stepped in and continued fixing bugs. I love open source. :)&lt;/p&gt;

&lt;p&gt;I’m most proud of establishing some offshoot projects: JGit, EGit and
Gerrit Code Review. These are 3 separate open source projects in their
own right, with their own communities of contributors and users.
Gerrit Code Review in particular has seen a lot of adoption in the
enterprise, and by only supporting Git, has certainly helped to bring
Git into many organizations.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I spend most of my time on JGit and Gerrit Code Review, but this past
month I started drafting a proposal for a new file format called
reftable, which I hope will replace the existing $GIT_DIR/refs and
$GIT_DIR/packed-refs with a more scalable format.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a trick question! My $DAY_JOB at Google is to manage a team of
developers who work on JGit, Gerrit Code Review, and of course
git-core. Google has been investing in the Git ecosystem for many
years, and we look forward to continuing our contributions.&lt;/p&gt;

&lt;p&gt;This year, part of my team has been working on two focus areas: git
submodule improvements (Stefan Beller, Brandon Williams) and lazy
clone (Jonathan Tan, Jonathan Nieder). For the latter project we’ve
also been working with Ben Peart, and his co-workers at Microsoft.&lt;/p&gt;

&lt;p&gt;I’d like to see Git upgrade its hash function. SHA-1 has had a good
run for us, but it’s time to start thinking about the next decade.
Jonathan Nieder has written an excellent proposal of how to make the
transition. I think it’s a matter of implementation effort at this
point.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The !*@!*! wire protocol. The server speaks first with an ASCII
listing of all of its references is causing scaling bottlenecks for
enterprise uses.&lt;/p&gt;

&lt;p&gt;There are plans afoot to fix this. Jeff “Peff” King has some ideas, as
does Jonathan Tan.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://www.gerritcodereview.com/&quot;&gt;Gerrit Code Review&lt;/a&gt;, of course. :)&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Recent security vulnerabilities triggered the releases of &lt;a href=&quot;https://public-inbox.org/git/xmqqh8xf482j.fsf@gitster.mtv.corp.google.com/T/&quot;&gt;Git v2.14.1, v2.13.5, and others&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows major release &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.14.0.windows.1&quot;&gt;2.14.0&lt;/a&gt; patched to &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.14.1.windows.1&quot;&gt;2.14.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab major release &lt;a href=&quot;https://about.gitlab.com/2017/07/22/gitlab-9-4-released/&quot;&gt;9.4&lt;/a&gt; plus lots of patches up till the recent &lt;a href=&quot;https://about.gitlab.com/2017/08/10/gitlab-9-dot-4-dot-4-released/&quot;&gt;9.4.4, 9.3.10, 9.2.10, 9.1.10, 9.0.13, and 8.17.8 Critical Security Release&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bitbucket Cloud: &lt;a href=&quot;https://blog.bitbucket.org/2017/07/27/4-features-in-4-weeks-heres-whats-new-in-bitbucket-cloud/&quot;&gt;4 new features in 4 weeks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub: &lt;a href=&quot;https://github.com/blog/2407-quickly-review-changed-methods-and-functions-in-your-pull-requests&quot;&gt;New function/method navigation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Recurity’s recent discovery of the SCM vulnerabilities: &lt;a href=&quot;http://blog.recurity-labs.com/2017-08-10/scm-vulns&quot;&gt;Compromise On Checkout - Vulnerabilities in SCM Tools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Shawn Pearce explains &lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03389.html&quot;&gt;DFS reftable at Google&lt;/a&gt; for the JGit developers&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/727550/&quot;&gt;Emacs and Magit&lt;/a&gt;, by Jonathan Corbet on LWN&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.alexkras.com/git-grep-multiline-repos-at-once/&quot;&gt;Git grep multiline repos at once&lt;/a&gt;, by Alex Kras&lt;/li&gt;
  &lt;li&gt;Old, but worth showing again: Interactive online &lt;a href=&quot;http://learngitbranching.js.org/&quot;&gt;Learn Git Branching&lt;/a&gt;, by Peter M. Cottle&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://gilesbowkett.blogspot.de/2017/08/drive-refactors-with-git-pre-push-hook.html&quot;&gt;Drive Refactors with a Git Pre-Push Hook&lt;/a&gt;, by Giles Bowkett&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mtyurt.net/2017/08/08/git-using-advanced-rebase-features-for-a-clean-repository/&quot;&gt;Using Advanced Rebase Features for a Clean Repository&lt;/a&gt;, by M. Tarık Yurt&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.ffwll.ch/2017/08/github-why-cant-host-the-kernel.html&quot;&gt;Why Github can’t host the Linux Kernel Community&lt;/a&gt;, by Daniel Vetter&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/wearehive/project-guidelines#git&quot;&gt;A set of best practices for JavaScript projects: Git&lt;/a&gt;, from Hive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Visual Studio’s resources for learning Git: &lt;a href=&quot;https://www.visualstudio.com/learn-git/&quot;&gt;What is Git? Tutorials and Best Practices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.thegeekstuff.com/2017/06/git-branch/&quot;&gt;15 Git Branch Command Examples to Create and Manage Branches&lt;/a&gt;, by Ramesh Natarajan&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rwmj.wordpress.com/2017/07/06/patch-review-and-message-brokers/&quot;&gt;Patch review and message brokers&lt;/a&gt;, by Richard WM Jones: creating multi-machine test framework for emailed patches, using RabbitMQ message broker&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://tom.preston-werner.com/2009/05/19/the-git-parable.html&quot;&gt;The Git Parable&lt;/a&gt;, by Tom Preston-Werner (2009)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hyperia-sk/remote-branch-housekeeping&quot;&gt;remote-branch-housekeeping&lt;/a&gt;: Simple and efficient way to delete remote branches from git repository.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.codemadness.org/stagit/file/README.html&quot;&gt;stagit&lt;/a&gt;: static git page generator&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ghrst/git-books&quot;&gt;git-books&lt;/a&gt;: All books (free and non-free) that have been ever published about Git&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.linux.com/blog/email2git-matching-linux-code-its-mailing-list-discussions&quot;&gt;Email2git&lt;/a&gt;: Matching Linux Code with its Mailing List Discussions&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dataversioncontrol.com/&quot;&gt;Data Version Control&lt;/a&gt;: Make your data science projects reproducible and shareable
    &lt;ul&gt;
      &lt;li&gt;And a related article: &lt;a href=&quot;https://medium.com/towards-data-science/how-to-version-control-your-machine-learning-task-cad74dce44c4&quot;&gt;How to Version Control your Machine Learning task&lt;/a&gt;, by Kumar Shridhar&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://htmlpreview.github.io/&quot;&gt;GitHub &amp;amp; BitBucket HTML Preview&lt;/a&gt;, given blob URL&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.passwordstore.org/&quot;&gt;Pass: The Standard Unix Password Manager&lt;/a&gt;; several commands rely on or provide additional functionality if the password store directory is also a git repository (done with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pass git init&lt;/code&gt;), with commmunity-provided &lt;a href=&quot;https://github.com/languitar/pass-git-helper&quot;&gt;git credential helper integration&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://the.exa.website/&quot;&gt;exa - A modern replacement for ls&lt;/a&gt; in Rust, with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--git&lt;/code&gt; option to list each file’s Git status&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from Stefan Beller &amp;lt;&lt;a href=&quot;mailto:sbeller@google.com&quot;&gt;sbeller@google.com&lt;/a&gt;&amp;gt;
and Shawn Pearce &amp;lt;&lt;a href=&quot;mailto:spearce@spearce.org&quot;&gt;spearce@spearce.org&lt;/a&gt;&amp;gt;.&lt;/p&gt;

</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 29 (July 19th, 2017)</title>
      <link>https://git.github.io/rev_news/2017/07/19/edition-29/</link>
      <pubDate>Wed, 19 Jul 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/07/19/edition-29/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-29-july-19th-2017&quot;&gt;Git Rev News: Edition 29 (July 19th, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 29th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of June 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20170531214417.38857-1-bmwill@google.com/&quot;&gt;[PATCH 00/31] repository object&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last month Brandon Williams sent a long patch series about a big
internal refactoring of the Git code called “repository object”.&lt;/p&gt;

&lt;p&gt;This work was based on an &lt;a href=&quot;https://public-inbox.org/git/20170518232134.163059-1-bmwill@google.com/&quot;&gt;RFC patch series&lt;/a&gt;
he had sent in May that started with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When I first started working on the git project I found it very
difficult to understand parts of the code base because of the
inherently global nature of our code.  It also made working on
submodules very difficult.  Since we can only open up a single
repository per process, you need to launch a child process in order
to process a submodule.  But you also need to be able to communicate
other stateful information to the children processes so that the
submodules know how best to format their output or match against a
pathspec … it ends up feeling like layering on hack after hack.
What I would really like to do, is to have the ability to have a
repository object so that I can open a submodule in-process.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Brandon had worked previously on opening a submodule in-process in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git ls-files&lt;/code&gt; which is “a pretty simple command and doesn’t have
&lt;em&gt;too&lt;/em&gt; many dependencies”, so he based his RFC patch series on this
previous work.&lt;/p&gt;

&lt;p&gt;He finished the cover letter of his RFC patch series with the
following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is still very much in a WIP state, though it does pass all
tests.  What I’m hoping for here is to get a discussion started
about the feasibility of a change like this and hopefully to get the
ball rolling.  Is this a direction we want to move in?  Is it worth
the pain?&lt;/p&gt;

  &lt;p&gt;Thanks for taking the time to look at this and entertain my insane
ideas :)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Many Git developers, like Jeff Hostetler, Ben Peart, Stefan Beller,
Jacob Keller, Brian Carlson, Johannes Schindelin (alias Dscho), Jeff
King (alias Peff), Duy Nguyen, Ævar Arnfjörð Bjarmason and Junio
Hamano (the Git maintainer) commented and agreed that the patch series
would improve things at least from a code readability point of view.&lt;/p&gt;

&lt;p&gt;There was even hope expressed that it could in the end yield the
following benefits:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;enable threading&lt;/li&gt;
  &lt;li&gt;implement submodules without the need to spawn processes&lt;/li&gt;
  &lt;li&gt;increase developer velocity by diminishing the number of global states&lt;/li&gt;
  &lt;li&gt;avoid really ugly hacks such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;save_env_before_alias()&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;improve libgit.a to possibly make it compete with libgit2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Following the above reaction from his RFC patch series, Brandon
started the improved non RFC patch series with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Given the vast interest expressed when I sent out my RFC series I
decided it would be worth it to invest more time to making a
repository object a reality.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The big difference from the RFC series is that I went through and
did the work to migrate key repository state from global variables in
‘environment.c’ to being stored in a repository object itself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;though there was also:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I do think that we need to be slightly cautious about moving global
state into the repository object though, I don’t want ‘struct repo’
to simply become a kitchen sink where everything gets dumped.  But
this is just a warning for the future.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To the above Stefan Beller replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Or in other words:
You want to have another struct e.g. ‘the_command_line_arguments’,
which would carry the verbosity/color options for example as they
are not related to a repo object, but to the current command being
run?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Brandon answered:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Yes exactly.  Library code that needs to operate on a repository would
then be able to take arguments like:&lt;/p&gt;

  &lt;p&gt;some_library_function(struct repo *repo, struct lib_opts *ops)&lt;/p&gt;

  &lt;p&gt;Much like how the grep machinery takes a grep_opts struct.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Dscho and Peff also participated in reviewing the series.&lt;/p&gt;

&lt;p&gt;Brandon then followed up with
&lt;a href=&quot;https://public-inbox.org/git/20170608234100.188529-1-bmwill@google.com/&quot;&gt;a version 2 of the series&lt;/a&gt;
which generated many discussions.&lt;/p&gt;

&lt;p&gt;Among them one was started by Jonathan Tan replying to the cover
letter of the series:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I am concerned that “struct repository” will end up growing without
bounds as we store more and more repo-specific concerns in it. Could
it be restricted to just the fields populated by repo_init()?
repo_read_index() will then return the index itself, instead of using
“struct repository” as a cache. This means that code using
repo_read_index() will need to maintain its own variable holding the
returned index, but that is likely a positive - it’s better for code to
just pass around the specific thing needed between functions anyway, as
opposed to passing a giant “struct repository” (which partially defeats
the purpose of eliminating the usage of globals).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This was followed up by Peff who used the following example:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git config core.quotepath true
git -C submodule config core.quotepath false
git ls-files --recurse-submodules
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;to say that “the repository object has to become a kitchen sink of
sorts”, because in a single process we’d need one copy of the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;quote_path_fully&lt;/code&gt; variable (associated with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core.quotepath&lt;/code&gt; config
option) for each repo object.&lt;/p&gt;

&lt;p&gt;Brandon later replied to Peff saying that the config should be removed
from the repository object:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;what should happen is you pass a pair of objects to the ls-files
machinery (or any other command’s machinery) (1) the repository
object being operated on and (2) an options struct which can be
configured based on the repository. So when recursing you can do
something like the following:&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  repo_init(submodule, path_to_submodule);
  configure_opts(sub_opts, submodule, super_opts);
  ls_files(submodule, sub_opts);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;To Stefan who suggested the same thing in another subthread of the
discussion, Peff replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Right, I think you could have a separate kitchen sink struct that
isn’t the “repo” one. But now you have to pass both of those around,
which is going to get cumbersome. Almost every function is going to
end up passing around the context struct.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The v2 series also prompted Ævar to suggest a new macro to both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;free()&lt;/code&gt;
a pointer variable and set it to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt;, which generated a subthread.&lt;/p&gt;

&lt;p&gt;Brandon then sent &lt;a href=&quot;https://public-inbox.org/git/20170620191951.84791-1-bmwill@google.com/&quot;&gt;a version 3&lt;/a&gt;
and &lt;a href=&quot;https://public-inbox.org/git/20170622184348.56497-1-bmwill@google.com/&quot;&gt;a version 4&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These versions were reviewed by Jonathan Nieder, Jonathan Tan, Junio,
Stefan and Jeff Hostetler, but the comments were small and technical,
so version 4 got merged into master.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;!---
## Developer Spotlight:
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git/git/blob/v2.13.2/Documentation/RelNotes/2.13.2.txt&quot;&gt;Git v2.13.2&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.13.1.windows.2&quot;&gt;Git for Windows v2.13.1(2)&lt;/a&gt;, &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.13.2.windows.1&quot;&gt;Git for Windows v2.13.2&lt;/a&gt; and 
&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.13.3.windows.1&quot;&gt;Release Git for Windows 2.13.3&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2384-git-lfs-2-2-0-released&quot;&gt;Git LFS 2.2.0 released&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.26.0&quot;&gt;libgit2 v0.26.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.26.0&quot;&gt;libgit2/rugged v0.26.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/pygit2/releases/tag/v0.26.0&quot;&gt;libgit2/pygit2 v0.26.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.24&quot;&gt;libgit2/LibGit2Sharp v0.24&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2017/06/22/gitlab-9-3-released/&quot;&gt;GitLab 9.3&lt;/a&gt; through &lt;a href=&quot;https://about.gitlab.com/2017/07/11/gitlab-9-dot-3-dot-6-released/&quot;&gt;Patch Release: 9.3.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.bitbucket.org/2017/07/18/bitbucket-server-5-2-compliance-meets-devops/&quot;&gt;Bitbucket Server 5.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.simuldocs.com/blog/ben-morris/version-control-for-microsoft-word&quot;&gt;Simul - Version Control for Microsoft Word: Bringing the features of Git and GitHub to Microsoft Word&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://free-electrons.com/blog/elixir/&quot;&gt;Elixir Cross Referencer: new way to browse kernel sources&lt;/a&gt;; source is available &lt;a href=&quot;https://github.com/free-electrons/elixir&quot;&gt;on GitHub&lt;/a&gt;, Free Electrons &lt;a href=&quot;http://elixir.free-electrons.com&quot;&gt;hosted Elixir service&lt;/a&gt; provides reference for Linux, Busybox and U-Boot, replacing old LXR-based service&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/724986/&quot;&gt;Alioth moving toward pagure [LWN.net]&lt;/a&gt; - &lt;a href=&quot;https://alioth.debian.org/&quot;&gt;Alioth&lt;/a&gt; is a server hosting Debian’s source code version control systems, running &lt;a href=&quot;http://www.fusionforge.org/&quot;&gt;FusionForge&lt;/a&gt;; &lt;a href=&quot;https://pagure.io/pagure&quot;&gt;pagure&lt;/a&gt; is a free-software “Git-centered forge” written in Python for the Fedora project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@rkz_io/making-a-clutter-free-git-diff-on-gettext-translation-files-9c0c1bb1d8aa&quot;&gt;Making a clutter-free git diff on Gettext translation files&lt;/a&gt; by Raphaël Kolm, on using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;textconv&lt;/code&gt; filter for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*.po&lt;/code&gt; files&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.freecodecamp.org/git-please-a182f28efeb5&quot;&gt;Git Please: how to force push without being a jerk&lt;/a&gt; by Buddy Reno, about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--force-with-lease&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@Gryff/bash-tips-easier-git-branch-deleting-d93da0f0acec&quot;&gt;Bash tips: easier git branch deleting&lt;/a&gt; by Liam Griffin, on how to delete branch knowing only part of its name (though the solution itself could be improved)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://redfin.engineering/two-commits-that-wrecked-the-user-experience-of-git-f0075b77eab1&quot;&gt;Two Commits That Wrecked the User Experience of Git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/git-does-not-have-branches-add468b5b4a0&quot;&gt;Git Does Not Have Branches&lt;/a&gt; by Omri Spector&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gerrit.googlesource.com/gitiles/&quot;&gt;gitiles&lt;/a&gt;: A simple browser for Git repositories from Google.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitnotifier.io/&quot;&gt;GitNotifier&lt;/a&gt; Get email notifications when someone stars or forks one of your GitHub repos and follows/unfollows you.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/csurfer/gitsuggest&quot;&gt;gitsuggest&lt;/a&gt;: A tool to suggest GitHub repositories based on the repositories you have shown interest in.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/paulirish/git-open&quot;&gt;git-open&lt;/a&gt;: Type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git open&lt;/code&gt; to open the GitHub page or website for a repository in your browser.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alixander/Ceruleum&quot;&gt;Ceruleum&lt;/a&gt;: OSX app to track the changes to your code going towards your next commit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 28 (June 14th, 2017)</title>
      <link>https://git.github.io/rev_news/2017/06/14/edition-28/</link>
      <pubDate>Wed, 14 Jun 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/06/14/edition-28/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-28-june-14th-2017&quot;&gt;Git Rev News: Edition 28 (June 14th, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 28th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of May 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://public-inbox.org/git/CAE5=+KX57KM+6n9NpePw9KYPXFy7UH-WRgSwaJDnvRofYFXm7Q@mail.gmail.com/&quot;&gt;git push recurse.submodules behavior changed in 2.13&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;John Shahid sent an email saying:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Currently with 2.13 you cannot run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push --recurse-submodules=on-demand&lt;/code&gt;
if the parent repo is on a different branch than the sub repos, e.g. parent
repo is on “develop” and sub-repo on “master”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;John pointed to &lt;a href=&quot;https://gist.github.com/jvshahid/b778702cc3d825c6887d2707e866a9c8&quot;&gt;a test case he had created&lt;/a&gt;
to show the problem, and he also had bisected it to
&lt;a href=&quot;https://github.com/git/git/commit/06bf4ad1db92c32af38e16d9b7f928edbd647780&quot;&gt;a recent commit by Brandon Williams&lt;/a&gt;
that teaches &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push --recurse-submodules&lt;/code&gt; to recursively propagate
the remote and refspec it is passed to the pushes performed in the
submodules.&lt;/p&gt;

&lt;p&gt;Junio Hamano, the Git maintainer, couldn’t tell from the report if the
new behavior was a regression or a good thing, so he asked Brandon
about his opinion on this.&lt;/p&gt;

&lt;p&gt;Stefan Beller then explained that before Brandon’s patch, Git “just
invoked &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; in the submodule, assuming the user had setup a
remote tracking branch and a push strategy such that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; would
do the right thing”.&lt;/p&gt;

&lt;p&gt;John then described in more details the previous behavior:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We have a parent repo on a branch called “develop” and a submodule on
a branch called “master”. Prior to git version 2.13 if we had an
unpushed commit in the submodule and ran &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push origin develop --recurse-submodules=on-demand&lt;/code&gt;
git would happily push the “develop” branch of the parent repo and the
“master” branch of the submodule&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and the new one:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;After the change mentioned in my previous email, git would propagate
the refspec from the parent repo to the submodule, i.e. it would try
to push a branch called “develop” in the submodule which would error
since no branch with that name exist in the submodule.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Brandon replied that:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Yeah my patches would definitely break that kind of workflow because
they assumed that if you actually provided a refspec + &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--recurse&lt;/code&gt; that
you would want it propagated down.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jonathan Nieder then replied to John’s original email by explaining in
details the context of Brandon’s patch, the goal of many of the recent
submodule patch series from Brandon and others being “to allow
thinking of a repository as a single unit, including submodules, most
of the time”.&lt;/p&gt;

&lt;p&gt;Jonathan also asked John:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Can you say more about how this change affects you? Would you be able
to push without a refspec, or do you e.g. have scripting that was
relying on the existing loose behavior?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;John replied that he “loves the idea of having tools treat the repo as
a unit”, but he “thinks propagating the refspec when no refspec is
passed on the CLI is very surprising action that should be corrected”.&lt;/p&gt;

&lt;p&gt;He also wrote that pushing without a refspec would work for him (if no
refspec is propagated).&lt;/p&gt;

&lt;p&gt;Unfortunately after that email at the end of May, it looks like not
much happened, so recently John replied to his own mail:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;bump. it’s been a while and I’m still not clear what the next steps
are. I’m happy to send a patch but I would like to get a consensus
first.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://public-inbox.org/git/CA+zRj8X3OoejQVhUHD9wvv60jpTEZy06qa0y7TtodfBa1q5bnA@mail.gmail.com/&quot;&gt;git rebase regression: cannot pass a shell expression directly to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--exec&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eric Rannaud emailed the mailing list:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It used to be possible to run a sequence like:&lt;/p&gt;

  &lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  foo&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;echo &lt;/span&gt;X&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; foo
  git rebase &lt;span class=&quot;nt&quot;&gt;--exec&lt;/span&gt; foo HEAD~10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;Since upgrading to 2.13.0, I had to update my scripts to run:&lt;/p&gt;

  &lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  git rebase &lt;span class=&quot;nt&quot;&gt;--exec&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;bash -c foo&quot;&lt;/span&gt; HEAD~10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;Eric had bisected this to a commit that switched
&lt;a href=&quot;https://github.com/git/git/commit/18633e1a22a68bbe8e6311a1039d13ebbf6fd041&quot;&gt;the interactive rebase to use the rebase–helper builtin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;An interactive rebase is usually a rebase that is passed the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-i&lt;/code&gt; or
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--interactive&lt;/code&gt; option, though the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--exec&lt;/code&gt; option automatically
switches on an interactive rebase too.&lt;/p&gt;

&lt;p&gt;The interactive rebase used to be implemented with a
“git-rebase–interactive.sh” shell script, but, since the commit that
Eric found, in most cases the interactive rebase would use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
rebase--helper&lt;/code&gt; builtin command.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase--helper&lt;/code&gt; builtin command had been made by porting
shell code from “git-rebase–interactive.sh” to C.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, replied to Eric that a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --exec STRING&lt;/code&gt;
command still uses a shell to run STRING, but that the behavior change
may come from an optimization that was made in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prepare_shell_cmd()&lt;/code&gt;
function in “run-command.c” to skip shell invocations for “simple”
commands.&lt;/p&gt;

&lt;p&gt;So Peff asked Eric to add an extraneous semi-colon in the STRING part
to confirm that the problem comes from the optimization, as, with a
semi-colon in it, the STRING part would not be considered a “simple”
command.&lt;/p&gt;

&lt;p&gt;Peff then explained that the optimization in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prepare_shell_cmd()&lt;/code&gt; is
quite old, but it affects &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --exec&lt;/code&gt; only now because it is
now using C code. And this optimization fails only when people are
using exported functions which is not so common, as not all shells
support them.&lt;/p&gt;

&lt;p&gt;Peff also suggested, and later sent a patch, to look for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BASH_FUNC_*&lt;/code&gt;
in the environment and disable the optimization in this case, though
that wouldn’t work in all cases.&lt;/p&gt;

&lt;p&gt;Junio Hamano replied to Peff, describing Peff’s analysis as
“brilliant” and suggesting documenting the semi-colon trick.&lt;/p&gt;

&lt;p&gt;Peff agreed with Junio on documenting it along with the optimization
to skip shell invocations for “simple” commands, if it was decided not
to try to fix the problem.&lt;/p&gt;

&lt;p&gt;Meanwhile Johannes Schindelin, alias Dscho, who authored the patch
that made the interactive rebase use the rebase–helper builtin,
replied to Eric, saying that relying on exported functions to work in
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --exec&lt;/code&gt; was relying on an implementation detail.&lt;/p&gt;

&lt;p&gt;But Peff later disagreed with Dscho saying that the user “expected the
user-provided &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--exec&lt;/code&gt; command to be run by a shell, which seems like
a reasonable thing for Git to promise (and we already make a similar
promise for most user-provided commands that we run)”.&lt;/p&gt;

&lt;p&gt;Dscho also sent a long reply to Junio about the reason he has been
working on porting shell scripts like “git-rebase–interactive.sh” to
C, which contained the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;But the real truth is: shell scripting is not portable.&lt;/p&gt;

  &lt;p&gt;Shell scripting is never only shell scripting, of course. A quite
undocumented set of utilities is expected to be present for our scripts to
run, too: sed, awk, tr, cat, expr, just to name a few.&lt;/p&gt;

  &lt;p&gt;It does not end there. For example, sed is not equal to sed. BSD sed has
different semantics than GNU sed, and we jump through hoops to try to
ensure that our shell scripts run with both versions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Eric then replied to Peff to “clarify if there was any doubt, the
semicolon trick does indeed work fine”. He also asked for consistency
writing that with an exported foo function the current behavior was:&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;  git bisect run foo     #&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;works
&lt;span class=&quot;gp&quot;&gt;  git bisect run &apos;foo;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;  # doesn&apos;&lt;/span&gt;t work
&lt;span class=&quot;go&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;gp&quot;&gt;  git rebase --exec foo master^^      #&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;fails
&lt;span class=&quot;gp&quot;&gt;  git rebase --exec &apos;foo;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos; master^^   # OK
&lt;/span&gt;&lt;span class=&quot;gp&quot;&gt;  git rebase --exec &apos;foo 1&apos; master^^  #&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;OK
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the meantime Jonathan Nieder, Brandon Williams and then Kevin Daudt
chimed in to discuss with Peff and Eric a suggestion by Peff to
“speculatively run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo&lt;/code&gt; without the shell, and if execve fails to
find it, then fall back to running the shell”. They also discussed a
bit Peff’s suggestion to look for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BASH_FUNC_*&lt;/code&gt; in the environment, but
it was clear that both of these solutions had a number of problems.&lt;/p&gt;

&lt;p&gt;Then Linus Torvalds chimed in too. He suggested to just lookup in
$PATH for the first word passed in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--exec&lt;/code&gt; string, as this test
is better than looking for special characters like semi-colons, to
decide if we can avoid calling a shell.&lt;/p&gt;

&lt;p&gt;He also suggested using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vfork()&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fork()&lt;/code&gt; if we “really want
to optimize the code that executes an external program (whether in
shell or directly)”.&lt;/p&gt;

&lt;p&gt;It looks like Linus’ suggestions might be the best indeed, but it
doesn’t look like much has been done to implement them yet.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-brandon-williams&quot;&gt;Developer Spotlight: Brandon Williams&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m a Software Engineer currently working on a team at Google focused on
improving git, particularly making git behave better on large
repositories (both mono-repos and repositories with many submodules).&lt;/p&gt;

&lt;p&gt;Until about a year or so ago I never really thought I’d be a Software
Engineer.  Back in high school I took a physics class and a simple C
programming class and I became fascinated with circuits and how
computers worked.  That led me to study Electrical Engineering during my
undergrad followed by grad work in Computer Science focusing on Computer
Architectures.  Due to that schooling, I had various jobs in
micro-processor design, varying from doing post-silicon power
characterization, to ASIC design developing hardware modules in Verilog,
to being an Architect modeling different micro-architectures in
simulation.&lt;/p&gt;

&lt;p&gt;Once I started at Google I pivoted my focus and now I’m a happy git
contributor, though I still love discussing Computer Architecture!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Though I haven’t been around the project long I think some of my most
important contribution has been to add submodule support to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls-files&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of my contributions (and Stefan’s) are aimed at improving the
submodule experience, which means adding submodule support to more and
more git commands.  Adding that support to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls-files&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt; was a bit
challenging in that our code base isn’t able to handle working on more
than 1 repository at a time, so when you want to do any operation on a
submodule you need to kick off a child-process to do the work for you.
This ends up being very clunky to communicate needed information between
the two processes, it would be so much easier if we could just operate
on more than 1 repository in a single process.&lt;/p&gt;

&lt;p&gt;So I’m aiming to solve this issue by introducing a ‘Repository Object’
to git.  So instead of relying on global state, a reference to a ‘struct
repository’ can be passed around allowing for multiple repositories to
be open in a single process.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the biggest pain points for working in git is the large amount of
hard-coded or global state we have.  So I’d have a team work on
redesigning large parts of the code base to make things more object
oriented and to ensure there were good abstractions in place to
facilitate changes down the line.  This way transitioning to a new
hash function, for example, would be less painful.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’d like to drop anything that makes it difficult to scale git well with
large repositories.  One big one that has been discussed is
improving the protocol to drop the initial ref advertisement.
Unfortunately a change like that has the potential for breaking lots of
old git clients.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I haven’t really used any git-related tools besides git itself.  Though
I have written a couple of tools myself to help with developing with
git.  One to view and explore a blame layer in vim, one to apply patches
to a local branch from my mail client, and one to print out some
information about a stack of commits I’m working on.  I don’t think any
of my tools are particularly well written, but they’ve been able to get
the job done.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git/git/blob/v2.13.1/Documentation/RelNotes/2.13.1.txt&quot;&gt;Git v2.13.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.13.1.windows.1&quot;&gt;Git for Windows v2.13.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.deveo.com/whats-new-in-deveo-3-19/&quot;&gt;What’s new in Deveo 3.19&lt;/a&gt; (git hosting site)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/windows/release-notes#1.1.0&quot;&gt;Git Tower 1.1.0 for Windows Release Notes&lt;/a&gt; (proprietary multiplatform Git GUI)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blogs.perl.org/users/yuki_kimoto/2017/06/portable-github-system-gitprep-26-is-released---wiki-system-is-added-you-can-write-documentation.html&quot;&gt;Portable GitHub system “GitPrep 2.6” is released&lt;/a&gt; (opensource git hosting software, in Perl)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03360.html&quot;&gt;JGit / EGit release 4.7.1.201706071930-r&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03337.html&quot;&gt;Release review JGit/EGit 4.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.26.0-rc1&quot;&gt;Release libgit2 v0.26.0 RC1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2373-introducing-github-enterprise-2-10-build-tools-with-the-new-github-graphql-api-organize-with-topics-and-level-up-your-project-management&quot;&gt;GitHub Enterprise 2.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2017/05/22/gitlab-9-2-released/&quot;&gt;GitLab 9.2&lt;/a&gt; with patches for &lt;a href=&quot;https://about.gitlab.com/2017/06/07/gitlab-9-dot-2-dot-5-security-release/&quot;&gt;9.2.5, 9.1.7, and 9.0.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.atlassian.com/blog/bitbucket/bitbucket-server-5-1-signed-commits-and-more&quot;&gt;Bitbucket Server 5.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gerritusersummit.eventbrite.com&quot;&gt;Gerrit User Summit 2017 registration is now open&lt;/a&gt; and is hosted for the first time in Europe, London, 2-3rd October 2017.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/bharry/2017/05/24/the-largest-git-repo-on-the-planet/&quot;&gt;The largest Git repo on the planet&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/30/optimizing-git-beyond-gvfs/&quot;&gt;Beyond GVFS: more details on optimizing Git for large repositories&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://arstechnica.com/information-technology/2017/05/90-of-windows-devs-now-using-git-creating-1760-windows-builds-per-day/&quot;&gt;Windows switch to Git almost complete: 8,500 commits and 1,760 builds each day&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://sdtimes.com/giter-done-scm-system-keeps-developers-projects-track/&quot;&gt;Git’er done: SCM system keeps developers and projects on track&lt;/a&gt;
an SD Times article&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://csswizardry.com/2017/05/little-things-i-like-to-do-with-git/&quot;&gt;Little Things I Like to Do with Git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.internetwache.org/dont-publicly-expose-git-or-how-we-downloaded-your-websites-sourcecode-an-analysis-of-alexas-1m-28-07-2015/&quot;&gt;Don’t publicly expose .git or how we downloaded your website’s sourcecode - An analysis of Alexa’s 1M&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.kenneth-truyers.net/2016/10/13/git-nosql-database/&quot;&gt;Git as a NoSql database&lt;/a&gt; by Kenneth Truyers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitorials.com/&quot;&gt;Gitorials: Tutorials as Git Repos&lt;/a&gt; - a GitLab companion site for publishing paid programming tutorials ($3 per tutorial with 70% going to the author); &lt;em&gt;note: the idea of a gitorial itself is not new&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/StackExchange/blackbox&quot;&gt;BlackBox&lt;/a&gt; - Safely store secrets in a VCS repo (i.e. Git, Mercurial, Subversion or Perforce)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/larryhastings/blurb&quot;&gt;blurb&lt;/a&gt; is a tool designed to rid CPython core development of the scourge of Misc/NEWS conflicts; an alternative to ChangeLog / NEWS merge driver&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aserg-ufmg/refdiff&quot;&gt;RefDiff&lt;/a&gt; - A tool to compare different versions of Java source code to find refactoring changes between them&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/anshumanbh/git-all-secrets&quot;&gt;git-all-secrets&lt;/a&gt; - A tool to capture all the git secrets by leveraging multiple open source git searching tools&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cookiengineer/git-ddiff&quot;&gt;git-ddiff&lt;/a&gt; - a better git diff for humans with lack of memory&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from Brandon Williams, Johannes Schindelin,
Stefan Beller and Luca Milanesio.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 27 (May 17th, 2017)</title>
      <link>https://git.github.io/rev_news/2017/05/17/edition-27/</link>
      <pubDate>Wed, 17 May 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/05/17/edition-27/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-27-may-17th-2017&quot;&gt;Git Rev News: Edition 27 (May 17th, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 27th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of April 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://public-inbox.org/git/8ef4c833-45bd-6831-0683-6d01f30aa518@web.de/&quot;&gt;introduce SWAP macro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the end of last January, René Scharfe sent a 5 patch long patch
series to the mailing list. The goal of this series was to make a swap
macro available to the entire code base, and to use it to simplify
existing code.&lt;/p&gt;

&lt;p&gt;As “exchanging the value of two variables requires declaring a
temporary variable and repeating their names”, the new macro would
swap the value of two variables, but “reduce repetition and hide the
declaration of temporary variables”.&lt;/p&gt;

&lt;p&gt;The actual implementation that René wanted to make globally available
was the following one:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#define SWAP(a, b) do {						\
	void *_swap_a_ptr = &amp;amp;(a);				\
	void *_swap_b_ptr = &amp;amp;(b);				\
	unsigned char _swap_buffer[sizeof(a)];			\
	memcpy(_swap_buffer, _swap_a_ptr, sizeof(a));		\
	memcpy(_swap_a_ptr, _swap_b_ptr, sizeof(a) +		\
	       BUILD_ASSERT_OR_ZERO(sizeof(a) == sizeof(b)));	\
	memcpy(_swap_b_ptr, _swap_buffer, sizeof(a));		\
} while (0)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It looks complex and maybe slower than using a temporary variable of
the same type as the type of the two variables that we want to swap,
but René wrote that it “makes sure that the storage sizes of its two
parameters are the same” while “its memcpy() calls are optimized away
by current compilers”.&lt;/p&gt;

&lt;p&gt;To that last statement Johannes Schindelin, alias Dscho, who is the
Git for Windows maintainer, replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;How certain are we that “current compilers” optimize that away? And about
which “current compilers” are we talking? GCC? GCC 6? Clang? Clang 3?
Clang 3.8.*? Visual C 2005+?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;René pointed Dscho to &lt;a href=&quot;https://godbolt.org/g/F4b9M9&quot;&gt;a web site showing the assembler generated by gcc and clang&lt;/a&gt;
which shows that on x86-64 they “compile the macro to the same object code as a manual swap”,
and guessed that as Dscho &lt;a href=&quot;https://github.com/git/git/commit/e5a94313c0&quot;&gt;had introduced the original macro using memcpy() in the first place&lt;/a&gt;,
it should be optimized by Microsoft compilers.&lt;/p&gt;

&lt;p&gt;In the meantime Dscho also sent a simpler looking implementation saying:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It may seem as a matter of taste, or maybe not: I prefer this without the
_swap_a_ptr (and I would also prefer not to use identifiers starting with
an underscore, as section 7.1.3 Reserved Identifiers of the C99 standard
says they are reserved)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To the above René replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We can move the underscore to the end, but using a and b directly
will give surprising results if the parameters have side effects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Johannes Sixt, alias Hannes, agreed on that with René saying that his
implementation “avoid that the macro arguments are evaluated more than
once”.&lt;/p&gt;

&lt;p&gt;To Hannes, Dscho replied that as the macro arguments are passed to
sizeof(), he mistakenly thought that arguments with side effects would
be rejected by compilers:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It is curious, though, that an expression like “sizeof(a++)” would not be rejected.&lt;/p&gt;

  &lt;p&gt;Further, what would SWAP(a++, b) do? Swap a and b, and &lt;em&gt;then&lt;/em&gt; increment a?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;René answered that gcc and clang warn or error out in that last case,
and Dscho further commented that anyway “it does not make much sense
to support SWAP(a++, b), as it is confusing at best”.&lt;/p&gt;

&lt;p&gt;Brandon Williams then chimed in to suggest placing a comment at the
definition of the macro to “disallow a side-effect operator in the
macro”.&lt;/p&gt;

&lt;p&gt;In response René further noticed that while “SWAP(a++, …) is caught by the
compiler, SWAP(*a++, …) works fine”.&lt;/p&gt;

&lt;p&gt;The above in turn prompted Jeff King, alias Peff, to suggest having
the macro “take pointers-to-objects, making it look more like a real
function (i.e., SWAP(&amp;amp;a, &amp;amp;b) instead of SWAP(a, b))”. But Junio Hamano
and Dscho were not sure that it would improve things.&lt;/p&gt;

&lt;p&gt;Meanwhile Dscho agreed that his commit, which introduced such a macro in
the first place, was not a good idea:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The commit you quoted embarrasses me, and I have no excuse for it. I
would love to see that myswap() ugliness fixed by replacing it with a
construct that is simpler, and generates good code even without any
smart compiler.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;René benchmarked a test program using the macro and found that indeed
when not enabling all the optimizations there could be some
performance regression.&lt;/p&gt;

&lt;p&gt;Dscho then suggested a macro with a type parameter:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#define SIMPLE_SWAP(T, a, b) do { T tmp_ = a; a = b; b = tmp_; } while (0)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;stating:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It would be trivially “optimized” out of the box, even when compiling with
Tiny C or in debug mode.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The discussion further continued in February on related topics like:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;git built using Tiny C not passing the test suite,&lt;/li&gt;
  &lt;li&gt;pros and cons of SIMPLE_SWAP(T, a, b), SWAP(a, b), SWAP(&amp;amp;a, &amp;amp;b) or no swap macro at all,&lt;/li&gt;
  &lt;li&gt;compiler optimizations and relying on them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;but René’s SWAP macro got merged.&lt;/p&gt;

&lt;p&gt;In April though the discussion restarted about what should happen with
“SWAP(foo[i], foo[j])” when i == j, and when swapping overlapping memory.&lt;/p&gt;

&lt;p&gt;These later discussions involved only René, Duy Nguyen and Peff who
sent a patch to avoid swapping an element with itself, and another one
to avoid calling memcpy on overlapping objects in the macro.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://public-inbox.org/git/CAELgYhf1s43p62t6W14S=nDt-O247cPqsPMUDfye1OTnDND3Gg@mail.gmail.com/&quot;&gt;Index files autocompletion too slow in big repositories (w / suggestion for improvement)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Carlos Pita sent an email to the Git mailing list starting with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I’m currently using ‘git annex’ to manage my entire file collection
(including tons of music and books) and I noticed how slow
autocompletion has become for files in the index (say for git add).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then Carlos presented some changes to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;__git_index_files()&lt;/code&gt;
function in “git-completion.bash” that appear to speed up this
function from 0.83 seconds to 0.35 seconds in his repository.&lt;/p&gt;

&lt;p&gt;In a latter email he suggested a further change that reduce the time
further to only 0.08 seconds, that is 10 times faster than the
original time.&lt;/p&gt;

&lt;p&gt;The changes Carlos showed use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt; instead of “a while-read-case-echo
bash loop” though, and he wondered if the Git developers wanted to
avoid depending on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ævar Arnfjörð Bjarmason replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It’s fine to depend on sed, these shell-scripts are POSIX compatible,
and so is sed, we use sed in a lot of the built-in shell scripts.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and then encouraged Carlos to submit a patch with his improvements.&lt;/p&gt;

&lt;p&gt;Jacob Keller, alias Jake, seconded Ævar’s opinion. Junio Hamano, the
Git maintainer, agreed, too – “as long as the use of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt; is in line
with POSIX.1”. Junio then suggested using sed’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-e&lt;/code&gt; option instead of
its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-r&lt;/code&gt; to improve portability.&lt;/p&gt;

&lt;p&gt;Johannes Sixt, alias Hannes, though replied to Carlos that:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is about command line completion. We go a long way to avoid forking
processes there. What is 10x faster on Linux despite of forking a
process may not be so on Windows.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jake then suggested using different implementations on Windows and
Linux to get the best speed on each platform, while Junio replied that
the speed of the different implementation also depends on how many
paths have to be processed which depends on the repository size:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If there are only a few paths, the loop in shell would beat a pipe
into sed even on Linux, I suspect, and if there are tons of paths, at
some number, loop in shell would become slower than a single spawning
of sed on platforms with slower fork, no?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hannes agreed with Junio saying:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Absolutely. I just want to make sure a suggested change takes into
account the situation on Windows, not only the “YESSSS!” and “VERY
WELL!” votes of Linux users ;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The discussion stopped at that point, but hopefully it will lead to
some auto completion improvements soon.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-rené-scharfe&quot;&gt;Developer Spotlight: René Scharfe&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m a hobbyist programmer living in Bochum, Germany.  I learned
programming in C mostly by reading Linux kernel diffs and trying to
keep up with its mailing list.  Not long after Linus announced Git there
in 2005 I started contributing patches.  In my day job as a DBA I
started to actually use Git only this year.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Probably git-tar-tree, which later became git archive, had the highest
impact.  It allows users to easily package their work for non-Git-users.
And as my first patch it got me hooked!&lt;/p&gt;

&lt;p&gt;I’m also quite fond of the -W/–function-context options of git diff and
git grep, even though they still get comments wrong.  Meaningful context
(as opposed to a fixed number of lines) makes the most sense to me, but
I don’t know how widely these options are used when there are IDEs,
websites like GitHub and tools like cscope.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a modest pile of cleanup patches fermenting on my PC that I’d
like to get rid of.  Sometimes I get into a cleanup frenzy, but not all
of the patches make sense on the next morning and some conflict with
“real” changes in flight, so usually I don’t send them right away.&lt;/p&gt;

&lt;p&gt;I’m creating semantic patches for some of them to let Coccinelle do the
actual cleanup work, in the hope that the addressed issues are then
basically fixed for good.  That could easily backfire if the automatic
rules are wrong; so since there are not many others active in this area
it may be a good idea to tread a bit more carefully here.&lt;/p&gt;

&lt;p&gt;I installed OpenBSD recently and found a few issues in our tests caused
by limitations of that platform.  Similarly I saw a few issues on 32-bit
Linux.  Expect some patches soonish.&lt;/p&gt;

&lt;p&gt;Eventually I’d like to find the time to improve handling of comments
with –function-context (to show the comment before a function as part
of its context) and for giving users better control over meta data (like
time stamps) in git archive.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If there wasn’t already multiple such teams at work then I’d answer
“whatever users need – see Jakub’s survey”. :)&lt;/p&gt;

&lt;p&gt;The test suite and in particular the perf part could be improved.  The
latter should indicate how reliable its results are.  A statistically
significant number of measurements should be made – three is probably
not enough, but I’m really bad at statistics.  A higher number of runs
would necessitate a lower complexity of the tests to keep the runtime
bearable, which might be a bit tricky.&lt;/p&gt;

&lt;p&gt;In addition to (wall-clock and CPU) time it would be interesting to
measure I/O and memory (allocations, peak usage).&lt;/p&gt;

&lt;p&gt;It would be nice if tests could be run automatically against repos with
different shapes and sizes, and if the results would then indicate the
how git scales per operation (e.g. a graph showing that log scales
linearly with the number of commits).&lt;/p&gt;

&lt;p&gt;Or perhaps that’s all a bit much and it would be better to add a
performance log or warnings for operations that take longer than a
few milliseconds.  And some place to aggregate them (voluntarily).&lt;/p&gt;

&lt;p&gt;In short: Better insight into git’s performance profile and how it
changes from version to version.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hard-coded use of SHA1, I guess.  Work is underway already, but
the mentioned backward compatibility makes it tricky.&lt;/p&gt;

&lt;p&gt;And similarly I wish we wouldn’t treat all-zero hashes specially.  The
odds of a real object having that hash value may be negligible, but I
feel it’s untidy, like using 0 instead of NULL for a pointer..&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Visual Studio Code supports Git out of the box and seems to be quite
nice in general, but I only installed it this month.  Apart from that
I don’t use any Git-related tools.&lt;/p&gt;

&lt;p&gt;Not really related, but my favorite developer tool of the last months is
&lt;a href=&quot;https://godbolt.org/&quot;&gt;Matt Godbolt’s compiler explorer&lt;/a&gt;.  It makes it
really easy to check the effect of optimizations across different
compilers and their versions, and share the result.  E.g.
&lt;a href=&quot;https://godbolt.org/g/8H9pfJ&quot;&gt;here you can see gcc removing a NULL check&lt;/a&gt;
based on the fact that calls of memcpy(3) with a NULL pointer are
undefined.  Fun!&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git/git/blob/v2.13.0/Documentation/RelNotes/2.13.0.txt&quot;&gt;Git v2.13.0&lt;/a&gt; (and &lt;a href=&quot;https://github.com/git/git/blob/v2.12.3/Documentation/RelNotes/2.12.3.txt&quot;&gt;v2.12.3&lt;/a&gt;, &lt;a href=&quot;https://github.com/git/git/blob/v2.11.2/Documentation/RelNotes/2.11.2.txt&quot;&gt;v2.11.2&lt;/a&gt;, &lt;a href=&quot;https://github.com/git/git/blob/v2.10.3/Documentation/RelNotes/2.10.3.txt&quot;&gt;v2.10.3&lt;/a&gt;, &lt;a href=&quot;https://github.com/git/git/blob/v2.9.4/Documentation/RelNotes/2.9.4.txt&quot;&gt;v2.9.4&lt;/a&gt;, &lt;a href=&quot;https://github.com/git/git/blob/v2.8.5/Documentation/RelNotes/2.8.5.txt&quot;&gt;v2.8.5&lt;/a&gt;, &lt;a href=&quot;https://github.com/git/git/blob/v2.7.5/Documentation/RelNotes/2.7.5.txt&quot;&gt;v2.7.5&lt;/a&gt;, &lt;a href=&quot;https://github.com/git/git/blob/v2.6.7/Documentation/RelNotes/2.6.7.txt&quot;&gt;v2.6.7&lt;/a&gt;, &lt;a href=&quot;https://github.com/git/git/blob/v2.5.6/Documentation/RelNotes/2.5.6.txt&quot;&gt;v2.5.6&lt;/a&gt;, and &lt;a href=&quot;https://github.com/git/git/blob/v2.4.12/Documentation/RelNotes/2.4.12.txt&quot;&gt;v2.4.12&lt;/a&gt;).
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2360-git-2-13-has-been-released&quot;&gt;Git 2.13 has been released&lt;/a&gt; on GitHub Blog by peff&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.13.0.windows.1&quot;&gt;Git for Windows v2.13.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAFuPQ1KSfKT+UKEdjcQ60sWL-yBGPWUZxhAAQ1AdrAr=VMdGfQ@mail.gmail.com/t/#u&quot;&gt;tig 2.2.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/pygit2/releases/tag/v0.25.1&quot;&gt;libgit2/pygit2 v0.25.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.19.0&quot;&gt;nodegit v0.19.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2353-git-lfs-2-1-0-released&quot;&gt;Git LFS 2.1.0 released&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.deveo.com/whats-new-in-deveo-3-18/&quot;&gt;What’s new in Deveo 3.18?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2017/04/22/gitlab-9-1-released/&quot;&gt;GitLab 9.1&lt;/a&gt;, with minor releases &lt;a href=&quot;https://about.gitlab.com/2017/05/08/gitlab-9-dot-1-dot-3-security-release/&quot;&gt;9.0.7, 8.17.6&lt;/a&gt; and &lt;a href=&quot;https://about.gitlab.com/2017/05/15/gitlab-9-1-4-released/&quot;&gt;9.1.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitenterprise.me/2017/05/09/gerrit-v2-14-brings-new-features-and-ux/&quot;&gt;Gerrit v2.14&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Prathamesh Chavan’s &lt;a href=&quot;http://public-inbox.org/git/CAME+mvXtA6iZNfErTX5tYB-o-5xa1yesAG5h=iP_Z2_zL_kOnQ@mail.gmail.com/&quot;&gt;“Incremental rewrite of git-submodules” project&lt;/a&gt; has been accepted as part of the &lt;a href=&quot;https://developers.google.com/open-source/gsoc/&quot;&gt;Google Summer of Code 2017&lt;/a&gt;. Prathamesh will be mentored by Stefan Beller and Christian Couder.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PL0lo9MOBetEGRAJzoTCdco_fOKDfhqaOY&quot;&gt;Videos of the Git Merge 2017 presentations&lt;/a&gt; are now online; this event was covered in &lt;a href=&quot;https://git.github.io/rev_news/2017/02/22/edition-24/&quot;&gt;Git Rev News Edition 24&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/desktop/dugite&quot;&gt;Dugite&lt;/a&gt; - node.js bindings for Git&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/how-the-creators-of-git-do-branches-e6fcc57270fb&quot;&gt;How the Creators of Git do Branching&lt;/a&gt;, by Raman Gupta&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/code-reviews-considered-harmful-a4cc9b2323dc&quot;&gt;Code Reviews Considered Harmful: 6 Signs Your Code Reviews are Toxic and Poisoning Your Team&lt;/a&gt;, by MTaylor&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://githubengineering.com/integrating-git-in-atom/&quot;&gt;Integrating Git in Atom&lt;/a&gt; on GitHub Engineering blog (among others moving from using libgit2 to shelling out to git)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://spin.atomicobject.com/2017/04/23/maintain-clean-git-history/&quot;&gt;Four Steps To Maintaining a Clean Git History&lt;/a&gt;, by Ryan Abel&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/rpalo/plan-your-commits&quot;&gt;Plan Your Commits&lt;/a&gt;, by Ryan Palo&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://everyogi.in/misc/fear_of_git/&quot;&gt;Fear of Git&lt;/a&gt;, by Yogeswaran Thulasidoss&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitpitch.com/&quot;&gt;GitPitch: Markdown Presentations For Everyone on GitHub, GitLab and Bitbucket&lt;/a&gt; ; its introduction for then only GitLab was covered in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News Edition 20&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cregit/cregit&quot;&gt;cregit&lt;/a&gt;, a tool for helping to find and analyse code credits (unify identities, find contribution by token, extract metadata into a SQLite database, etc.); this tool, unnamed at that time, was mentioned in &lt;a href=&quot;https://git.github.io/rev_news/2016/09/14/edition-19/&quot;&gt;Git Rev News Edition 19&lt;/a&gt; (&lt;a href=&quot;https://www.youtube.com/watch?v=iXZV5uAYMJI&amp;amp;index=4&amp;amp;list=PLGeM09tlguZQyemL0Y5CdpEFrBs-hGGM8&quot; title=&quot;&apos;Who Authored the Kernel? Recovering Token-Level Authorship Information from Git&apos; by Daniel German - YouTube&quot;&gt;video&lt;/a&gt;, &lt;a href=&quot;https://lwn.net/Articles/698425/&quot; title=&quot;&apos;Token-based authorship information from Git&apos; by Jake Edge - LWN.net&quot;&gt;LWN article&lt;/a&gt;) as a tool to recover token-based authorship information, among other reports from LinuxCon North America 2016.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://events.linuxfoundation.org/sites/events/files/slides/cregit-2.pdf&quot;&gt;cregit: identifying contributors of source code&lt;/a&gt;, PDF presentation slides by Daniel M German, Kate Stewart and Bram Adams &lt;!-- needed because the tool is seriously under-documented --&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://cregit.linuxsources.org/&quot;&gt;cregit-Linux: how code gets into the kernel&lt;/a&gt;, an example of use&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/razzius/git-tricks&quot;&gt;git-tricks&lt;/a&gt;: Useful git commands and config&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nickolasburr/git-follow&quot;&gt;git-follow&lt;/a&gt;: Follow lifetime changes of a pathspec through the history of a Git repository&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cookiengineer/git-ddiff&quot;&gt;git-ddiff&lt;/a&gt;: a better git diff for humans with lack of memory&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from René Scharfe, Raman Gupta and Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 26 (April 19th, 2017)</title>
      <link>https://git.github.io/rev_news/2017/04/19/edition-26/</link>
      <pubDate>Wed, 19 Apr 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/04/19/edition-26/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-26-april-19th-2017&quot;&gt;Git Rev News: Edition 26 (April 19th, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 26th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of March 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://public-inbox.org/git/CACBZZX6F47uC9jLxppgkUnwVpGV2jpzzP4kwTuqKgayCevomeA@mail.gmail.com/&quot;&gt;Will OpenSSL’s license change impact us?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ævar Arnfjörð Bjarmason sent an email saying that OpenSSL is
&lt;a href=&quot;https://www.openssl.org/blog/blog/2017/03/22/license/&quot;&gt;changing its license&lt;/a&gt;
to the Apache 2 license, which is
&lt;a href=&quot;https://www.gnu.org/licenses/license-list.html#apache2&quot;&gt;considered incompatible with the GPL v2&lt;/a&gt;
that Git uses for most of its code.&lt;/p&gt;

&lt;p&gt;By default Git uses OpenSSL both for its implementation of the SHA-1
algorithm and in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git imap-send&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Yves Orton replied by quoting the
&lt;a href=&quot;https://www.apache.org/licenses/GPL-compatibility.html&quot;&gt;GPL compatibility page on the Apache web site&lt;/a&gt;
which is not very clear about the incompatibilities between the Apache
2 and the different GPL versions.&lt;/p&gt;

&lt;p&gt;Theodore Ts’o then chimed in to “suggest that we not play amateur
lawyer on the mailing list” and leave it to the distributions to
decide on their own.&lt;/p&gt;

&lt;p&gt;Ævar agreed on that but proposed a new flag to the Makefile to declare
“yes I’m OK with combining AL2 + GPLv2”.&lt;/p&gt;

&lt;p&gt;Brian Carlson wrote “that most distros don’t link against OpenSSL”
already, and suggested using
&lt;a href=&quot;https://en.wikipedia.org/wiki/Nettle_(cryptographic_library)&quot;&gt;Nettle&lt;/a&gt;,
an LGPL crypto library that also has SHA-3 which could be used to
replace SHA-1 in the long run.&lt;/p&gt;

&lt;p&gt;But Ævar replied that we also use OpenSSL in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git imap-send&lt;/code&gt; for its
TLS implementation, so it is not enough to use a different SHA-1
implementation.&lt;/p&gt;

&lt;p&gt;About that Jeff King, alias Peff, wrote that, when building with
NO_OPENSSL, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git imap-send&lt;/code&gt; uses the curl IMAP implementation instead
of our custom IMAP implementation that can optionally use
OpenSSL. Curl itself may be compiled to use either OpenSSL or GnuTLS.&lt;/p&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://public-inbox.org/git/201703101100.15214.bernhard.reiter@intevation.de&quot;&gt;Stable GnuPG interface, git should use libgpgme&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bernhard Reiter emailed the Git mailing list, with the gnupg-devel
mailing list in Cc, to suggest using libgpgme for interfacing to
GnuPG, instead of using “an pipe-and-exec approach to running a GnuPG
binary”.&lt;/p&gt;

&lt;p&gt;He referred to the
&lt;a href=&quot;https://github.com/git/git/blob/3bc53220cb2dcf709f7a027a3f526befd021d858/Documentation/config.txt#L1572-L1581&quot;&gt;documentation of the “gpg.program” config option&lt;/a&gt;
and warned that “the gpg command-line interface is not considered an
official API to GnuPG by the GnuPG-devs and thus potentially
unstable”, though “Git is only using a small part of the interface, so
the risk when keeping the current way is small.”&lt;/p&gt;

&lt;p&gt;Bernhard, who is involved in GnuPG development, anyway wrote that “using
libgpgme is the way what GnuPG-devs would recommend” as can be seen on
the &lt;a href=&quot;https://wiki.gnupg.org/APIs&quot;&gt;GPGME API web page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;He also reported a problem with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg2&lt;/code&gt; vs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg&lt;/code&gt;. He has both gpg and
gpg2 installed, but his “.gnupg” configuration file is gpg2 specific,
and Git by default uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg&lt;/code&gt; for signing, which fails with his
“.gnupg”.&lt;/p&gt;

&lt;p&gt;Ævar Arnfjörð Bjarmason asked for more information about the actual
bug and the versions of gpg and gpg2 involved, hoping that it could
be possible to write patches to fix compatibility problems.&lt;/p&gt;

&lt;p&gt;To that Michael J Gruber later replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The problem is the “difficult” upgrade path and mixed installations with
gpg and gpg2.1+ that some distributions force upon you…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and after describing possible problems:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In short: Users will run into problems anyway; git provides the quick
way out (git config gpg.program gpg2), users won’t be as lucky with
other things that require gpg.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Michael also wrote that “while - technically speaking - the command
line is not a stable API for gpg, it does work across versions of gpg”,
though maybe this will change with gpg 2.2.&lt;/p&gt;

&lt;p&gt;Linus Torvalds replied to Bernhard with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Quite frankly, I will NAK this just based on previous bad experiences
with using “helpful” libraries.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and then explained what “the problems with libraries in this context
tend to be”. For each problem: “hard to personalize”, “existing
configuration”, “UI” and “library versioning”, he gave interesting
explanations and examples.&lt;/p&gt;

&lt;p&gt;He concluded with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Of course, maybe gpgme is a world first, and actually does read your
.gnupg/config file trivially, and has all the gpg agent integration
that it picks up automatically, and allows various per-user
configurations, and all my worries are bogus.&lt;/p&gt;

  &lt;p&gt;But that would literally be the first time I’ve ever seen that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;About the “library versioning”, Linus wrote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I don’t know why, but I’ve never &lt;em&gt;ever&lt;/em&gt; met a library developer who
realized that libraries were all about stable APIs, and the library
users don’t want to fight different versions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;but Ted Ts’o replied to the above:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Actually, you have.  (Raises hand :-)&lt;/p&gt;

  &lt;p&gt;libext2fs has a stable API &lt;em&gt;and&lt;/em&gt; ABI.  We add new functions instead of
changing function parameters (so ext2fs_block_iterate2() is
implemented in terms of ext2fs_block_iterate3(), and so on).  And
structures have magic numbers that have served as versioning signal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I do have to agree with your general point, that most developers tend
to be &lt;em&gt;incredibly&lt;/em&gt; sloppy with their interfaces.  That being said, not
all library developers are as bad as GNOME.  :-)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Brian Carlson also replied to Bernhard, asking “whether gpgme supports
&lt;a href=&quot;https://linux.die.net/man/1/gpgsm&quot;&gt;gpgsm&lt;/a&gt;”, and wondering “what
happens to the git verify-* –raw output” as this output can be used
when scripting signature verification.&lt;/p&gt;

&lt;p&gt;Brian further explained his concerns with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is not an idle consideration; we have automated systems at work
that update software automatically and submit it for human review,
including verifying signatures and hashes. This saves hundreds of hours
of staff time and results in better security.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The possibilities to write a wrapper script around gpg, to mimic the gpg
API, and to filter the gpg output worried him too.&lt;/p&gt;

&lt;p&gt;Following all the above discussions Bernhard replied first to
AEvar. He gave the requested information about the versions he has
been using, and the error messages displayed when gpg accessed his
“~/.gnupg/gpg.conf” that contains gpg2-only config options.&lt;/p&gt;

&lt;p&gt;Bernhard suggested using a “~/.gnupg/gpg.conf-2” config file, or Git
to “try &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg2&lt;/code&gt; first and then fall back to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpgv&lt;/code&gt; in case
only these versions are available” as workarounds, but he still thought
that it is was worth using libgpgme.&lt;/p&gt;

&lt;p&gt;To Linus, Bernhard wrote that “it is too early to say that libgpgme
would be right choice for git”, but “it should be seriously
considered”, and:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Grateful that you have written down some of your concern, let me try
to give you some pointers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bernhard then replied to each of the points Linus had raised. About
“library versioning” his reply was:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In my experience Werner (the lead GnuPG developers) is quite reasonable about
keeping APIs stable (he often goes out of his way to keep even the command
line version stable, maybe he shouldn’t do that to the command line options
so you are more motivated to go to this official API gpgme. &amp;gt;:) )&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and he concluded with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Your concerns are understandable, I’ve seen similar problems with “library vs
program” and the unix tools box approach gives a number of lessons on how to
loosely couple components. Thanks again for taking the time and writing them
down. I’ve given you some pointers why gpgme indeed could be different and
may be an improvement for git (or other applications). I guess one of the
next steps would be for someone to look for specific points or try gpgme for
git purposes. Me and gnupg-devel@ are happy to take your questions or get
feedback.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bernhard also replied to Brian and Michael, addressing at least some
of their concerns.&lt;/p&gt;

&lt;p&gt;But Jeff King, alias Peff, in turn replied to Bernhard, stressing that
“the existing config option will have to stay” to avoid breaking
existing “exotic” setups.&lt;/p&gt;

&lt;p&gt;Bernhard, Michael as well as Christian Neukirchen, Peter Lebbing and
Werner Koch, the lead GnuPG developer, further discussed some points,
but in the end it doesn’t look like things will change much in this
area for the foreseeable future.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-ævar-arnfjörð-bjarmason&quot;&gt;Developer Spotlight: Ævar Arnfjörð Bjarmason&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m a programmer currently working at Booking.com in Amsterdam since 2010.
I’ve worn a lot of hats there, but most of it’s had to do with
core infrastructure, I’m currently a senior dev there in an SRE role.&lt;/p&gt;

&lt;p&gt;I’m originally from Iceland, self-taught, 31, got an 18 month old son
with my girlfriend, and a daughter on the way. My hobbies aside from
programming include power-lifting.&lt;/p&gt;

&lt;p&gt;Unlike a lot of self-taught programmers I started relatively late.  I
had access to computers since I was a kid, but wasn’t using them to
program. Mostly to play &amp;amp; tweak games (e.g. StarCraft map
“programming”).&lt;/p&gt;

&lt;p&gt;I eventually got tired of gaming, got a Gentoo Linux install CD from
someone. It took me around a month and a half to install it. I only
had access to some really old Mac monitor whose refresh configuration
XFree86 didn’t support, so I had to go from knowing nothing at all
about Linux to debugging X bugs with intermittent Internet access
before I could start X.&lt;/p&gt;

&lt;p&gt;I still wasn’t doing any non-trivial programming, but I became a very
active editor on Wikipedia, both in Icelandic &amp;amp; English, and very
interested in the free software movement. I taught myself a lot of
topics by translating articles from English to Icelandic, and
eventually started running bots to update Wikipedia itself. That led
to needing to shell-script, use Perl, and eventually I started
contributing to MediaWiki itself (the software that runs Wikipedia).&lt;/p&gt;

&lt;p&gt;Initially I mostly worked on translation-related code, mostly bugs
that hurt the Icelandic UX translation, but eventually became more
interested in the core software itself. I worked on a lot of things,
but the one most people will recognize is that I wrote the software
plugin powering the “Notes and references” section at the bottom of
pretty much every Wikipedia article.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How did you get started in Git development?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was back in 2010. I’d started my first software development job
at f-prot.com and become mostly inactive in MediaWiki development, but
I was very interested in source control &amp;amp; was involved with that at
work. I added the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --allow-empty-message&lt;/code&gt; feature to use in
snerp-vortex, a Subversion to Git migration script I was using to
migrate the MediaWiki repository to Git.&lt;/p&gt;

&lt;p&gt;Shortly after that I started maintaining a mirror of the main
MediaWiki Subversion repositories on Github using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git svn&lt;/code&gt;. The
MediaWiki project eventually did end up migrating to Git about a year
later, but someone else drove that effort.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Definitely adding localization support. The git command-line client is
translated to over 10 languages now. I don’t use that feature myself,
I wrote it because adding translation support was a very effective way
to get to know the code-base, but hopefully that’s very useful to many
users, particularly complete newbies.&lt;/p&gt;

&lt;p&gt;Jiang Xin gets all the credit for actually maintaining and
coordinating that effort, I just drive-by added the initial support.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I was quite active in 2010 &amp;amp; 2011 but had a long period of inactivity
since then, and have only recently started submitting patches again:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git log --author=Ævar --date=format:%Y --pretty=format:%ad @{u}|sort|uniq -c
        121 2010
        152 2011
          8 2012
          1 2013
          7 2016
         29 2017
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;My main contribution for the last couple of years has been indirect.
I’m one of the two main people responsible for the Git infrastructure
at Booking.com (along with Dennis Kaarsemaker, interviewed in a
&lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;previous iteration of Git Rev News&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;In late 2015 I made the case internally at Booking.com that we should
contribute time directly to Git development, which we’re doing by
contracting Git performance to Christian Couder, who’s maintaining
this newsletter &amp;amp; doing this interview, and no I didn’t put him up to
interviewing me :)&lt;/p&gt;

&lt;p&gt;I manage that project at Booking.com, which mainly consists of
occasionally touching base with Christian on what performance-related
thing he and I think is worthwhile to do next.&lt;/p&gt;

&lt;p&gt;Then I send the occasional patches myself, mainly small isolated
things to scratch this or that itch I personally run into, or that
someone reports as a bothersome misfeature or bug at work.&lt;/p&gt;

&lt;p&gt;But to actually answer the question: Right now I have a series in the
works to support PCRE v2, some other related fixes to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt;, and a
couple of miscellaneous code cleanup submissions I need to pick up
again.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Git data model is so much more flexible in theory than any of the
Git clients out there allow for.&lt;/p&gt;

&lt;p&gt;Microsoft’s made the first real step to advancing that with
&lt;a href=&quot;https://github.com/Microsoft/GVFS&quot;&gt;GVFS&lt;/a&gt;. I’d have my hypothetical team
work on something like that, but on steroids.&lt;/p&gt;

&lt;p&gt;I.e. a git client/server pair that could trade off as much work
between the client &amp;amp; server as you wanted, and which could scale to
cloning &amp;amp; working on something like the result of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git merge&lt;/code&gt;-ing
every single repository on GitHub into one ginormous project, with
every command that needed to walk/search/checkout a large part of that
set able to either download the data it needed locally or ask a server
to produce the results it needed.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now support for anything except PCRE regular expressions, but
that’s just because right now I’m hacking in PCRE v2 support to grep
and supporting POSIX regexes going forward for some of the things I’d
like to do is a pain.&lt;/p&gt;

&lt;p&gt;More generally, more than deprecating any one thing I think Git could
really use deprecation cycles as part of its release process. I.e. we
should make an exhaustive list of things we have now which suck, then
at some point we break all of those, release v3.0, and start the
process again by accumulating things we’ll break in v4.0.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The git-rebase.el plugin for Emacs, which is the the only non-core Git
interface I use which I’d miss enough to personally write a
replacement for myself if it didn’t exist.&lt;/p&gt;

&lt;p&gt;It’s sort of like a little &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add --interactive&lt;/code&gt;, except for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt;,
which of course has an –interactive option already, but
which isn’t very interactive at all. It would be neat to add something
like git-rebase.el to Git itself, but we’d have to call it
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --actually-interactive&lt;/code&gt;, which I brings us back to the backwards
compatibility discussion.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;http://public-inbox.org/git/xmqqa88a74pg.fsf@gitster.mtv.corp.google.com/&quot;&gt;v2.12.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.12.2.windows.1&quot;&gt;2.12.2&lt;/a&gt; and &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.12.2.windows.2&quot;&gt;2.12.2(2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab released a major &lt;a href=&quot;https://about.gitlab.com/2017/03/22/gitlab-9-0-released/&quot;&gt;9.0&lt;/a&gt; along with patches &lt;a href=&quot;https://about.gitlab.com/2017/04/05/gitlab-9-dot-0-dot-4-security-release/&quot;&gt;9.0.4, 8.17.5, and 8.16.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03332.html&quot;&gt;JGit / EGit Release 4.7&lt;/a&gt; and &lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03333.html&quot;&gt;v4.5.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;ObjectiveGit &lt;a href=&quot;https://github.com/libgit2/objective-git/releases/tag/0.13.0&quot;&gt;0.13.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Stefan Beller sent
&lt;a href=&quot;http://public-inbox.org/git/20170331235947.20010-1-sbeller@google.com/&quot;&gt;“[RFC PATCH] git-news: obtain latest news for your favorite VCS”&lt;/a&gt;
on April 1st :-)&lt;/li&gt;
  &lt;li&gt;Microsoft is &lt;a href=&quot;https://blogs.msdn.microsoft.com/bharry/2017/03/31/shutting-down-codeplex/&quot;&gt;Shutting down CodePlex&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blather.michaelwlucas.com/archives/2913&quot;&gt;New novel: “git commit murder”&lt;/a&gt;, by Michael Lucas&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://tonsky.me/blog/reinventing-git-interface/&quot;&gt;Reinventing Git interface&lt;/a&gt;, by Nikita Prokopov&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2338-sha-1-collision-detection-on-github-com&quot;&gt;SHA-1 collision detection on GitHub.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=13906804&quot;&gt;The beginning of Git supporting other hash algorithms&lt;/a&gt;, as discussed on Hacker News&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.scottnonnenberg.com/better-git-configuration/&quot;&gt;Better Git configuration&lt;/a&gt;, by Scott Nonnenberg&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/gonedark/using-git-bisect&quot;&gt;Using git bisect&lt;/a&gt;, by Jason McCreary&lt;/li&gt;
  &lt;li&gt;Longest answer for a Git question I’ve seen on StackOverflow here: &lt;a href=&quot;http://stackoverflow.com/questions/38427050/how-to-change-the-starting-point-of-a-branch/38430972#38430972&quot;&gt;How to change the starting point of a branch?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://eklitzke.org/how-to-how-your-own-private-git-repositories&quot;&gt;How To Host Your Own Private Git Repositories&lt;/a&gt;, by Evan Klitzke&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.danieldeaguiar.com/git-pair/&quot;&gt;Configure Git Pairs with Magit&lt;/a&gt;, by Daniel De Aguiar&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.afoolishmanifesto.com/posts/adding-features-to-git-the-easy-way/&quot;&gt;Adding Features to Git the Easy Way&lt;/a&gt;, by fREW Schmidt (added by using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt; wrapper; some of those features could have been implemented as hooks)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.ffwll.ch/2017/04/review-howto.html&quot;&gt;Review, not Rocket Science&lt;/a&gt;: Daniel Vetter discusses how to get people to review code&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.ntpsec.org/2017/03/24/saved-history.html&quot;&gt;In the bright new future of today&lt;/a&gt; - a history of using history, on NTPsec Project Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.oreilly.com/ideas/how-to-use-pull-requests-to-improve-your-code-reviews&quot;&gt;How to use pull requests to improve your code reviews&lt;/a&gt;, by Brent Beer and Peter Bell&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/clehner/git-ssb&quot;&gt;git-ssb: Decentralized git repo hosting and issue tracking on secure-scuttlebutt (SSB).&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gsylvie/git-reverse.sh&quot;&gt;git-reverse.sh: Bash script to reverse a git repo.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sjurba/rebase-editor&quot;&gt;rebase-editor: Simple terminal based sequence editor for git interactive rebase.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GalvanizeOpenSource/git_local&quot;&gt;git_local: A lightweight git command line wrapper in Ruby&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tomschlick.com/2017/03/20/git-forget&quot;&gt;git forget: cleanup your local git branches&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/InternetGuru/omgf/&quot;&gt;omgf: Use Git Flow with ease&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/git/comments/5z73w3/gitfinder_git_client_for_macos_with_finder/&quot;&gt;GitFinder - Git client for macOS with Finder integration&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gerrit.googlesource.com/gitiles/&quot;&gt;Gitiles - A simple JGit repository browser&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/diff-tools-windows/&quot;&gt;Diff Tools on Windows&lt;/a&gt;, by Tobias Günther, on Git Tower GUI tool blog&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from Ævar Arnfjörð Bjarmason and Michael J Gruber.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 25 (March 15th, 2017)</title>
      <link>https://git.github.io/rev_news/2017/03/15/edition-25/</link>
      <pubDate>Wed, 15 Mar 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/03/15/edition-25/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-25-march-15th-2017&quot;&gt;Git Rev News: Edition 25 (March 15th, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 25th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of February 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20170223164306.spg2avxzukkggrpb@kitenet.net/&quot;&gt;SHA1 collisions found&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;On February 23rd it was &lt;a href=&quot;https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html&quot;&gt;publicly announced&lt;/a&gt;
that a collision had been found against SHA-1, the cryptographic hash
function that Git uses to identify Git objects (blobs, trees, commits,
annotated tags).&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://shattered.it/&quot;&gt;Details&lt;/a&gt; about the collision, how it was
performed, as well as algorithms and &lt;a href=&quot;https://github.com/cr-marcstevens/sha1collisiondetection&quot;&gt;code&lt;/a&gt;
to detect such a collision attack were published simultaneously.&lt;/p&gt;

    &lt;p&gt;This caused numerous news articles related to Git and SHA-1 in many
places, for example LWN.net:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/715621/&quot;&gt;Linus on Git and SHA-1 [LWN.net]&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/715716/&quot;&gt;Moving Git past SHA-1 [LWN.net]&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;as well as many discussions on the mailing list.&lt;/p&gt;

    &lt;p&gt;There have also been patch series flowing around. Moreover, plans to move Git
away from SHA-1 have been shared and discussed.&lt;/p&gt;

    &lt;p&gt;Linus Torvalds for example sent a
&lt;a href=&quot;https://public-inbox.org/git/CA+55aFxYs1zp2c-UPe8EfshNNOxRVxZ2H+ipsnG489NBsE+DLQ@mail.gmail.com/&quot;&gt;Typesafer git hash patch&lt;/a&gt;
as a first step on fixing SHA-1 implicit dependencies. This one big
patch approach, though, is not consistent with the way Brian Carlson has
been working on the same issue for a long time. Junio Hamano has
not commented on this patch yet. Hence, for the time being it is not sure at all that
this topic will move much faster.&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;http://public-inbox.org/git/20170223230536.tdmtsn46e4lnrimx@sigill.intra.peff.net/&quot;&gt;Some work on integrating&lt;/a&gt;
the code to detect a collision attack into a new
SHA-1 implementation in Git was started by Jeff King,
adding a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;USE_SHA1DC&lt;/code&gt; knob &lt;a href=&quot;https://github.com/git/git/blob/beadf5ede3bfd3c1564af299b89c7c8474385247/Makefile#L145&quot;&gt;to the Makefile&lt;/a&gt;,
and
then &lt;a href=&quot;http://public-inbox.org/git/alpine.LFD.2.20.1702281621050.22202@i7.lan/&quot;&gt;picked up by Linus&lt;/a&gt;.
The original code was written by Marc Stevens, working for
&lt;a href=&quot;https://www.cwi.nl/research-groups/Cryptology&quot;&gt;CWI&lt;/a&gt; and Dan Shumow,
working for Microsoft. Interestingly, both Marc and Dan chimed into the
discussion. Dan agreed to work on adaptations and performance
improvements for Git, and on upstreaming this work into the original
code base.
Junio participated in the discussions, too, and it looks as if the
resulting patch series could be merged for the next Git release;
currently the ‘jk/sha1dc’ is in the ‘pu’ branch.&lt;/p&gt;

    &lt;p&gt;One of the plans to move Git away from SHA-1 was contributed by
Jonathan Nieder, Stefan Beller, Jonathan Tan and Brandon
Williams, who are all working in the same team at Google. The latest
version of this plan is available in
&lt;a href=&quot;https://goo.gl/gh2Mzc&quot;&gt;a Google document&lt;/a&gt; where it can be commented
on. It has also been discussed in the following threads:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20170304011251.GA26789@aiede.mtv.corp.google.com/&quot;&gt;RFC: Another proposed hash function transition plan&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20170307001709.GC26789@aiede.mtv.corp.google.com/&quot;&gt;RFC v3: Another proposed hash function transition plan&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;&lt;a href=&quot;http://public-inbox.org/git/22708.8913.864049.452252@chiark.greenend.org.uk/&quot;&gt;Another plan&lt;/a&gt;
was posted by Ian Jackson; it also generated some discussion.&lt;/p&gt;

    &lt;p&gt;It’s interesting to note that Git is not the only version control
system to be affected by the issue. Here are a few related posts:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.mercurial-scm.org/wiki/mpm/SHA1&quot;&gt;SHA1 and Mercurial security&lt;/a&gt;, or why you shouldn’t panic yet (Feb 2017)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://blogs.collab.net/subversion/subversion-sha1-collision-problem-statement-prevention-remediation-options&quot;&gt;Subversion SHA1 Collision Problem Statement&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/20170216174924.GB2625@localhost/&quot;&gt;body-CC-comment regression&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Johan Hovold noticed that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt; in Git v2.10.2 does not
accept anymore patches with a commit message that contain lines like:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Cc: &amp;lt;stable@vger.kernel.org&amp;gt;	# 4.4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;Apparently it parses the above as “stable@vger.kernel.org#4.4” and
then aborts.&lt;/p&gt;

    &lt;p&gt;Researching the problem, Johan found
&lt;a href=&quot;https://public-inbox.org/git/vpqmvi8n71g.fsf@anie.imag.fr/&quot;&gt;a mailing list thread&lt;/a&gt;
which resulted in some “fixes” that seem to be the root cause of the
problem.&lt;/p&gt;

    &lt;p&gt;He claimed the format of the line that trigger the problem
“has been documented at least since 2009” in the Linux kernel and “has
been supported by git since 2012”. It is used to tag commits that
should be backported into the “stable” Linux kernel versions.&lt;/p&gt;

    &lt;p&gt;Johan then asked for a way for Git to revert to the old behavior.&lt;/p&gt;

    &lt;p&gt;Junio wondered if installing the &lt;a href=&quot;http://search.cpan.org/search?query=Mail%3A%3AAddress&amp;amp;mode=module&quot;&gt;Mail::Address&lt;/a&gt; Perl module
would make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt; work by avoiding the
“non-parsing-but-paste-address-looking-things-together code” that Git
uses when Mail::Address is not installed. Johan replied that it
doesn’t work.&lt;/p&gt;

    &lt;p&gt;Matthieu Moy, who worked on the patch that is responsible for the
problem, remarked that “a proper fix is far from obvious”, because we
want our own parser to work the same way as Mail::Address does,
and we don’t want to regress for people who want to get back
two email addresses from lines like:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Cc: &amp;lt;foo@example.com&amp;gt; # , &amp;lt;boz@example.com&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;as this has been working since September 2015.&lt;/p&gt;

    &lt;p&gt;Anyway, in another email Matthieu suggested that we should always use our
own parser, as “we now have something essentially as good as
Mail::Address”, and changing our parser to discard anything after “&amp;gt;”
in the email address. Matthieu’s email also contained a patch
implementing the latter.&lt;/p&gt;

    &lt;p&gt;Johan agreed with Matthieu’s plan, tested the patch and found that it
worked. Unfortunately he found another breakage when the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--suppress-cc=self&lt;/code&gt; option is used if more than one email address in
each line is allowed.&lt;/p&gt;

    &lt;p&gt;It looked as if the discussion was going to continue for some time, but
Linus replied to Matthieu stating that Cc: lines in commit messages are
not like Cc: lines in email headers. Consequently, we should not accept
more than one email address in them. He concluded as follows:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;So this notion that the bottom of the commit message is some email
header crap is WRONG.&lt;/p&gt;

      &lt;p&gt;Stop it. It caused bugs. It’s wrong. Don’t do it.&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Finally, after Junio had discussed possible breakages with Matthieu’s
patch, Matthieu agreed that it was safer to just revert to not
accepting many email addresses in the Cc: lines. Junio then accepted a
patch submitted by Johan implementing this proposal.
In the meantime, this patch was merged to the “next” branch,
so it is very likely to appear in the next Git release.
Let’s just hope that no one will complain about it.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;http://public-inbox.org/git/xmqqd1e72xs5.fsf@gitster.mtv.corp.google.com/&quot;&gt;v2.12.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git LFS &lt;a href=&quot;https://github.com/blog/2328-git-lfs-2-0-0-released&quot;&gt;v2.0.0&lt;/a&gt; released&lt;/li&gt;
  &lt;li&gt;GitHub Enterprise &lt;a href=&quot;https://github.com/blog/2326-github-enterprise-2-9-is-here-with-pull-request-improvements-organization-wide-projects-and-google-cloud-platform-support&quot;&gt;2.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2017/02/22/gitlab-8-17-released/&quot;&gt;8.17&lt;/a&gt; through &lt;a href=&quot;https://about.gitlab.com/2017/03/10/gitlab-8-dot-17-dot-3-released/&quot;&gt;8.17.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;nodegit &lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.18.0&quot;&gt;v0.18.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;JGit / EGit &lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03301.html&quot;&gt;4.6.1.201703071140-r&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;This year Git &lt;a href=&quot;http://public-inbox.org/git/CAP8UFD1+Yn8W3YXF6Wn3=7Kiim9h6WtK7cqDu1G0uF8+CuORQg@mail.gmail.com/&quot;&gt;was accepted again&lt;/a&gt; as
&lt;a href=&quot;https://summerofcode.withgoogle.com/organizations/5465129203269632/&quot;&gt;one of organizations in GSoC 2017&lt;/a&gt;.
Students started to work on &lt;a href=&quot;https://git.github.io/SoC-2017-Microprojects/&quot;&gt;microprojects&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;CWI Institute Amsterdam and Google presented
&lt;a href=&quot;https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html&quot;&gt;a practical technique for generating SHA-1 collisions&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Dennis Kaarsemaker &lt;a href=&quot;http://public-inbox.org/git/1488208102.10235.3.camel@kaarsemaker.net/&quot;&gt;provides daily snapshots of git’s master and next tree&lt;/a&gt;
as packages for Ubuntu, Debian, Fedora and CentOS on Launchpad and OpenSUSE build service:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://launchpad.net/~dennis/+archive/ubuntu/git-master&quot;&gt;master on Launchpad&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://launchpad.net/~dennis/+archive/ubuntu/git-next&quot;&gt;next on Launchpad&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/project/show/home:seveas:git-master&quot;&gt;master on OpenSUSE&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/project/show/home:seveas:git-next&quot;&gt;next on OpenSUSE&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;London has been chosen as
&lt;a href=&quot;https://gitenterprise.me/2017/03/09/london-to-host-gerrit-user-summit-2017/&quot;&gt;location of the Gerrit User Summit 2017&lt;/a&gt;.
The 10th edition of the historical “GitTogether” at Google will take
place for the first time in a different location, hosted by
&lt;a href=&quot;https://www.google.com/maps/search/Skills+Matter+%7C+CodeNode,+10+South+Place,+London,+EC2M+7EB,+GB/@51.5185967,-0.0882515,17z/data=!3m1!4b1&quot;&gt;SkillsMatter at CodeNode&lt;/a&gt;
from September 30th to October 3rd.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;O’Reilly Radar: &lt;a href=&quot;https://www.oreilly.com/ideas/how-to-use-pull-requests-to-improve-your-code-reviews&quot;&gt;How to use pull requests to improve your code reviews&lt;/a&gt; by Brent Beer and Peter Bell;&lt;br /&gt;
advertising that you can find more in their &lt;a href=&quot;http://shop.oreilly.com/product/0636920067634.do&quot;&gt;Introducing GitHub&lt;/a&gt; book (also &lt;a href=&quot;https://www.safaribooksonline.com/library/view/introducing-github/9781491949801/&quot;&gt;on Safari Books Online&lt;/a&gt;)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The Myers diff algorithm: &lt;a href=&quot;https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm-part-1/&quot;&gt;part 1&lt;/a&gt;, &lt;a href=&quot;https://blog.jcoglan.com/2017/02/15/the-myers-diff-algorithm-part-2/&quot;&gt;part 2&lt;/a&gt;, &lt;a href=&quot;https://blog.jcoglan.com/2017/02/17/the-myers-diff-algorithm-part-3/&quot;&gt;part 3&lt;/a&gt; by James Coglan;&lt;br /&gt;
this was part of his ongoing work on a book explaining the internals of Git through implementation: &lt;a href=&quot;https://building-git.launchrock.com/&quot;&gt;Building Git&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.git-tower.com/learn/git/ebook/&quot;&gt;Learn Version Control with Git: A step-by-step course for the complete beginner&lt;/a&gt; ebook by Tobias Günther &lt;em&gt;(Git Tower GUI)&lt;/em&gt;: &lt;a href=&quot;https://www.git-tower.com/learn/git/ebook/en/command-line/introduction&quot;&gt;free online book&lt;/a&gt; and &lt;a href=&quot;https://www.git-tower.com/learn/git/videos&quot;&gt;video course&lt;/a&gt; (partially free)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;It appears that WikiLeaks has captured the super secret &lt;a href=&quot;https://wikileaks.org/ciav7p1/cms/page_1179773.html&quot;&gt;Git Tips &amp;amp; Tricks&lt;/a&gt; from the CIA!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;In today’s world of Github and other competing services, it’s easy to overlook how simple it is to &lt;a href=&quot;https://www.alexkras.com/private-git-repository-on-any-computer/&quot;&gt;set up (unlimited) private repos on any network connected computer&lt;/a&gt;, as explained by Alex Kras&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How to have a proper &lt;a href=&quot;https://pedronveloso.com/proper-git-client-android/&quot;&gt;Git client on Android&lt;/a&gt;, by Pedro Veloso&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Adding a SHA1 collision vulnerability test &lt;a href=&quot;https://news.ycombinator.com/item?id=13725093&quot;&gt;hoses WebKit’s source repository&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitly.io/&quot;&gt;Gitly&lt;/a&gt;, a new git hosting service&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/k4m4/terminals-are-sexy&quot;&gt;Terminals Are Sexy: A curated list of Terminal frameworks, plugins &amp;amp; resources for CLI lovers.&lt;/a&gt; includes list of shell prompts for Git&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/larsxschneider/scotty&quot;&gt;Scotty&lt;/a&gt;, a collection of helper scripts for GitHub Enterprise administrators&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zeeshanu/git-profile&quot;&gt;git-profile&lt;/a&gt;, a utility that helps you switch git configurations with ease&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gotgit&quot;&gt;GotGit&lt;/a&gt; is a book about Git in Chinese&lt;/li&gt;
  &lt;li&gt;If you use Composer to manage PHP dependencies, you may enjoy &lt;a href=&quot;https://github.com/BrainMaestro/composer-git-hooks&quot;&gt;composer-git-hooks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/awslabs/git-secrets&quot;&gt;git-secrets&lt;/a&gt; Prevents you from committing secrets and credentials into git repositories&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/neithernut/git-dit&quot;&gt;git-dit&lt;/a&gt;, a decentralized (proof-of-concept) issue tracker for Git&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from Lars Schneider, Luca Milanesio
and Junio Hamano.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 24 (February 22nd, 2017)</title>
      <link>https://git.github.io/rev_news/2017/02/22/edition-24/</link>
      <pubDate>Wed, 22 Feb 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/02/22/edition-24/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-24-february-22nd-2017&quot;&gt;Git Rev News: Edition 24 (February 22nd, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 24th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of January 2017 and
the &lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge 2017&lt;/a&gt; conference which happened in Brussels on February 2nd and 3rd 2017.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Git Contributor Summit&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;http://git-merge.com&quot;&gt;Git Merge 2017&lt;/a&gt; conference took place in
Brussels on February 2nd (workshops and contributor summit) and 3rd
(main conference day). Quite some of the attendees seamlessly joined
the &lt;a href=&quot;https://fosdem.org/2017/&quot;&gt;FOSDEM&lt;/a&gt; think tank right after the
Git Merge after-party. For those interested in the “runtime side of
life”, the &lt;a href=&quot;http://cfgmgmtcamp.eu&quot;&gt;Config Management Camp&lt;/a&gt; in Ghent
offered yet another 2 days to get exhausted.&lt;/p&gt;

    &lt;p&gt;On February 2nd, as part of the Git Merge, a Git Contributor Summit
had been organized. While both Lars Kruse’s and Ed Thomson’s blogs,
listed in the “Events” section below, very nicely express the great
atmosphere at the summit, and Johannes Schindelin, alias Dscho,
&lt;a href=&quot;http://public-inbox.org/git/alpine.DEB.2.20.1702021007460.3496@virtualbox/&quot;&gt;sent&lt;/a&gt;
a &lt;a href=&quot;https://docs.google.com/document/d/1KDoSn4btbK5VJCVld32he29U0pUeFGhpFxyx9ZJDDB0/edit&quot;&gt;collaborative report&lt;/a&gt;
written by the contributors, here are the unconference’s agenda items:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Erik van Zijst presented Atlassian’s “clone bundles”
approach, which had been added to Mercurial some years ago,
was later included in Bitbucket.&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;Atlassian would like to add it to Git, but would
like to discuss the approach first.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Stefan Saasen had sent
&lt;a href=&quot;http://public-inbox.org/git/CADoxLGPFgF7W4XJzt0X+xFJDoN6RmfFGx_96MO9GPSSOjDK0EQ@mail.gmail.com/&quot;&gt;an email about it&lt;/a&gt;
a few days before the Summit.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;The main motivation for this feature are CPU and I/O
usage on the server side.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;The feature would be good for large collections of
repos, e.g. the set for Android; the Google “repo”
tool would be an alternative.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;One alternative would be the design of the Git
protocol version 2, with capabilities negotiation
first.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Jeff King, alias Peff, suggested to keep the
solution as simple as possible (as an example, a
sliced history etc. would be nice to have, but
things could get quite complicated).&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;One downside is that it could take twice the disk
space if the bundle is not generated on the fly.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;At present, the Atlassian client is a script
mimicking &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt;, while a proper solution would
involve the Git client.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Peff expressed his willingness to help Atlassian on
this subject.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;The solution is experienced as more efficient, but
no real statistics / conclusions for real world
repos are available yet.&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Jeff King, alias Peff, presented a “1 minute version” of the
current status of the Software Freedom Conservancy; details
available &lt;a href=&quot;http://public-inbox.org/git/20170202024501.57hrw4657tsqerqq@sigill.intra.peff.net/&quot;&gt;on the mailing list&lt;/a&gt;.
(See also the next article in this edition of Git Rev News.)&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;The SFC acquired git-scm.com, maintained by Peff.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Most effort is spent on trademark/policy work.&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Christian Couder and Ævar Bjarmason presented “Big repos”.&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;The topic is very related to the „references database“
item below, and deals with improved rebase / staging
(split index).&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;The main idea is to make the git client faster for
some index related operations (that is, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt;).&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Some work on a daemon for file system notifications
in the background (inotify) has been done by Duy
Nguyen and David Turner, and a rework was planned,
but the present contributor is currently busy with
other things.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;On Windows, there is no inotify feature available
(also applies to some Unix flavours).&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Some discussion arose whether the Windows journal
feature or
&lt;a href=&quot;https://facebook.github.io/watchman/&quot;&gt;Watchman&lt;/a&gt; was
the appropriate road to follow.&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;The participants with really large repos shared their
experience.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Stefan Beller presented the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodule&lt;/code&gt; state.&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;Instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodules&lt;/code&gt;, Android with its 1000
Git repos uses the &lt;a href=&quot;https://code.google.com/p/git-repo/&quot; title=&quot;repo - The multiple repository tool&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repo&lt;/code&gt;&lt;/a&gt; tool; the Android
repositories are somewhat unrelated, and most
contributors just work in 1 or 2 repos.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Regarding submodules, actually the fetch is
parallelized, checkout is being worked on, next are
worktree and submodules.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Inside Git, there is no real module awareness for
submodules yet, so each and every Git module needs
to be made „submodule ready“.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;At present, one Git process is spawned for each
repo, which is quite slow on Windows.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;The submodules design is considered not to be
optimal yet; as an example, subsets are not
possible.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Within Gerrit, project changes lead to superproject
changes, which might collide, and end up in
superproject merge conflict mess.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;David Turner considered merge conflict helpers for
submodules.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Johannes Schindelin remarked that offloading such
issues to tools like Gerrit looks suboptimal.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;The topic was concluded with a short discussion on
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt; with submodules.&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Jacob Vosmaer presented the GitLab solution for &lt;a href=&quot;https://gitlab.com/gitlab-org/gitaly/&quot;&gt;Gitaly&lt;/a&gt;, aka
„Git RPC“.&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;GitLab tries to get away from NFS, and would like to
see a LRU disk cache, as the NFS cache not good
enough for heavy use.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;The question is how far only GitLab is affected
(vs. the general community).&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Use case example are bad refs and storing diffs.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;The work on the Git cache started, but is stalled at
present; it will be MIT licensed (uses both Git and
Mercurial code).&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Johannes Schindelin started a brainstorming session about
“Better tools for reviews and contributions”; see also
his post &lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.20.1702151215570.3496@virtualbox/&quot;&gt;Clarification about “Better tooling for reviews”, was Re: Google Doc about the Contributors’ Summit&lt;/a&gt;&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;The mailing list currently drops contributions via
mailers which produce HTML or mixed code. It is too
difficult for people to supply patches by mail; the
“it worked for me, should work for others, too” approach
(“and then everybody failing is stupid”) is considered
simply wrong. One of the rejected clients is
Microsoft Outlook, the other is Gmail, the main
problem being the handling of white space. Perhaps
some tool might help with transmitting code
corrections with white space. In general, patches
would be better attached to mails than just placed
inline.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;It is problematic to follow long threads (e.g. one
thread stalling for 8 months), while the state of
patches discussed is sometimes unclear.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Often, reviewers’ suggestions are lost in the clutter
of the mailing list threads, and no tool helps us to
catch those issues.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;It happens from time to time that the latest iteration
of a patch series was not picked up before merging to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;master&lt;/code&gt;, and we have no tools that help us prevent that.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;The &lt;a href=&quot;https://github.com/git/git/blob/v2.11.1/Documentation/SubmittingPatches#L384-L386&quot;&gt;“What’s cooking” emails&lt;/a&gt;
are sent only to the mailing list, but none of the original
contributors are Cc:ed in that email. At present, the
“what’s cooking” email is mostly generated in an automated
way from the &lt;a href=&quot;https://github.com/git/git/commits/todo&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;todo&lt;/code&gt; branch&lt;/a&gt;
using special-purpose shell scripts.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Is there a way to get from the mail client directly
into the mentioned source code?&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;The Git terminology is sometimes strange (“outside this
room, &lt;em&gt;nobody&lt;/em&gt; uses the term ‘re-roll’”), the Git
glossary is hard to find, and could be improved; using
terms only the email community uses does not improve
readability for others outside the list
“inhabitants”.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Johannes regularly submits other peoples’ patches,
and would like to see better tool support for this
use case. Peff asked whether we need different
terms, or better concepts?&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;Regarding patches, the maintainer decides when and where they are merged / implemented.
The maintainer workflow may prevent us from just using GitHub Pull Requests.
Whether to merge or rebase is then finally a manual decision of the maintainer,
independently of what the author intended.
A longer discussion arose around this subject; Stefan Beller
mentioned that a similar problem appeared in the Linux Kernel
world (especially on the Intel side), and now the Kernel
community says “it can be ok to attach patches if you cannot
do otherwise”.
Johannes emphasized his willingness to establish tools which help to improve the situation.
It was mentioned that code/commit notes should point to mailing list where appropriate.
Josh Triplett steered the discussion toward distributed review tools, and mentioned that
there is already a data format for that purpose: ReviewDB. This format, however,
would need to be extended to allow for addressing the issues raised in the discussion.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Carlos Martín Nieto presented the state of the references
database, to get them away from the file system.&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;A recurring problem seems to be that usable
databases do not have a Java implementation
(e.g. &lt;a href=&quot;https://symas.com/offerings/lightning-memory-mapped-database/&quot; title=&quot;Lightning Memory-mapped Database&quot;&gt;lmdb&lt;/a&gt; last tried); this would help GitHub but
still have the potential to split the Git
community.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;According to Peff, Git currently reads the whole
packref file into memory – mmap could help but would
need a lot of refactoring.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;An important question is whether it is a client or a
GitHub hosting problem; some workflows could cause
unhealthy numbers of refs on a client, too.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;At present, not all race conditions fixed yet. The
final solution should be portable to JGit / libgit2.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;After the efforts of David Turner, there is now an
appropriate ref API within Git.&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Brendan Forster presented the gitignore „spec“.&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;The goal is to be more standardized and robust (that
is, understandable).&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Docs should be more structured.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;One problem is that different implementations of
Git, and other tools use gitignore, but implement
the stuff differently.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;An interesting question would be if we could have a
common minimal implementation of gitignore in a
generally reusable library.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Git attributes has similar problems (reading
attributes from files in the Index is a nightmare,
in some case with read / change / read / change /
read sequences (or the like) involved).&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Josh Triplett presented “Git commit refs, tag refs, and
compatibility (future of &lt;a href=&quot;https://github.com/git-series/git-series&quot; title=&quot;git-series: Track changes to a patch series over time&quot;&gt;git-series&lt;/a&gt;)”.&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;Junio has suggested a different type of Git refs
(in-tree, like hard links).&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Compatibility: support old clients / libgit either
on repo level, or unless an operation hits an object
type unknown for the old version (the latter being
more complicated).&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Use cases should be implemented as easy as possible.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Would be great to disallow the capability per repo.&lt;/p&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Other topics:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;Planned Open Source Hackathons in London and New
York in April/May. The intent is to get some stuff
in on that day, also recruitment of future
contributors. Libgit2 should perhaps be included
there. Appropriate contributors should be on board
guiding the process.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://public-inbox.org/git/20170202024501.57hrw4657tsqerqq@sigill.intra.peff.net/&quot;&gt;Git / Software Freedom Conservancy status report&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;At the previous Git Contributor Summits which were also part of the
previous Git Merge conferences, Jeff King, alias Peff, used to give a
talk about the status of the Git project as part of the
&lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Software Freedom Conservancy&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;It used to be a detailed talk about the different aspects of what the
Git “Project Leadership Committee” (PLC) which represents Git in
the Conservancy and the Conservancy itself are doing.&lt;/p&gt;

    &lt;p&gt;This is an important report as the PLC consists only of Junio Hamano,
Shawn Pearce, and Peff, so most the community otherwise doesn’t know
what happens in some areas of the Git project, like legal and money
related things.&lt;/p&gt;

    &lt;p&gt;This year, though, Peff sent detailed reports in emails to the mailing
list just before the Contributor Summit, and at the Summit his one
minute long talk consisted in referring everyone to these emails.&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;http://public-inbox.org/git/20170202024501.57hrw4657tsqerqq@sigill.intra.peff.net/&quot;&gt;main report&lt;/a&gt;
gives a bit of background, and then details the financials of the project.
There is not a lot of news there, as the Git project is not much
interested in raising fund as it has not a lot of expenses.
The main report also talks a bit about mentoring, but for the git-scm.com domain
and trademark activities, it refers to separate emails that Peff sent
at around the same time as the main one.&lt;/p&gt;

    &lt;p&gt;The &lt;a href=&quot;http://public-inbox.org/git/20170202023349.7fopb3a6pc6dkcmd@sigill.intra.peff.net/&quot;&gt;“git-scm.com status report” email&lt;/a&gt;
is indeed quite long and informative. It was surprising to learn that
the Git project got control of the git-scm.com and git-scm.org domains
and the associated web site this year, and interesting to know what
technologies and hosting services the web site has been using.&lt;/p&gt;

    &lt;p&gt;This report was then &lt;a href=&quot;https://news.ycombinator.com/item?id=13554065&quot;&gt;posted and discussed&lt;/a&gt;
on Hacker News. This in turn seems to have attracted a number of new people toward the project.
Some of them replied to Peff’s email and proposed to help him maintain
and improve the web site.&lt;/p&gt;

    &lt;p&gt;Other people seem to have been the reason why Peff subsequently sent an email about
&lt;a href=&quot;http://public-inbox.org/git/20170208183444.wlk4vjveg7cmmi5a@sigill.intra.peff.net/&quot;&gt;Software Freedom Conservancy donations&lt;/a&gt;
telling that “a lot of people offered financial assistance” and that
“we &lt;em&gt;don’t&lt;/em&gt; have a dire need for money to keep hosting the site”, and
pointing people back to the main report he previously sent, as well as
suggesting people donate directly to &lt;a href=&quot;https://sfconservancy.org/donate/&quot;&gt;Conservancy’s general fund&lt;/a&gt;
or &lt;a href=&quot;https://sfconservancy.org/supporter/&quot;&gt;become Conservancy Supporters&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;The email that Peff sent about
&lt;a href=&quot;http://public-inbox.org/git/20170202022655.2jwvudhvo4hmueaw@sigill.intra.peff.net/&quot;&gt;“Git trademark status and policy”&lt;/a&gt;
had also a lot of interesting details, but has not attracted much public interest.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Git Merge 2017 — General Sessions&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;“Intro &amp;amp; Welcome - Software Freedom Conservancy”&lt;br /&gt;
Karen Sandler, &lt;em&gt;Software Freedom Conservancy&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;Karen wrote about her intro talk in &lt;a href=&quot;https://sfconservancy.org/blog/2017/feb/17/git-merge-fosdem/&quot;&gt;Git Merge and FOSDEM 2017!&lt;/a&gt;:&lt;/p&gt;

        &lt;blockquote&gt;
          &lt;p&gt;For me, FOSDEM this year started two days early with Git Merge, the annual Git conference. Git Merge is organized by GitHub, and so far in all three years of its organization the conference has donated the proceeds from ticket sales to Conservancy! I’d been hoping to get to Git Merge one of these years, so I was very excited with the organizing team asked me to do an talk introducing Conservancy.&lt;/p&gt;
        &lt;/blockquote&gt;

        &lt;blockquote&gt;
          &lt;p&gt;I got to kick off the conference, and introduced myself by explaining how investigating my heart condition and defibrillator caused me to become passionate about software freedom. I then delved into what Conservancy does and in particular talked about some of the work we’ve done with Git. The talk had a good impact, and all day long I was able to speak with people who were excited about Conservancy and thinking about the ethics of all of our software. It’s always especially thrilling to speak at our member projects’ conferences. I love meeting up with leadership committee members and also putting faces to the names that we see go by while monitoring the activities of our projects.&lt;/p&gt;
        &lt;/blockquote&gt;

        &lt;p&gt;Karen has a pacemaker (implanted defibrillator) and was worried
about what software it runs on.  Everyone knows that software is
potentially buggy.  She asked to see the source code, but was
refused, as the software is proprietary.&lt;/p&gt;

        &lt;p&gt;That was the kick-off for starting
the &lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Software Freedom Conservancy&lt;/a&gt;.
The conservancy does legal work, handle foundations and
fundraising. They give advise on licensing and trademark
protections.  Git is one of SFC member projects.&lt;/p&gt;

        &lt;p&gt;Karen’s defibrillator is a metaphor for all the software out there
that we rely on - as she said:&lt;/p&gt;

        &lt;blockquote&gt;
          &lt;p&gt;&lt;strong&gt;We’re only as free as the software that we use.&lt;/strong&gt;&lt;/p&gt;
        &lt;/blockquote&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Top Ten Worst Repositories to host on GitHub”&lt;br /&gt;
Carlos Martin Nieto, &lt;em&gt;GitHub&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;Carlos give insights into some of the challenges that GitHub meets
when hosting their 14 million user infrastructure. What makes repo
“the worst” varies: a huge amount of files, data, forks, tags,
contributors or pushes.&lt;/p&gt;

        &lt;p&gt;Here are some of the worst Carlos showcased:&lt;/p&gt;

        &lt;ul&gt;
          &lt;li&gt;
            &lt;p&gt;An everyday example is a community that is organizing commit
wars; thousands of users committing to the same repo, at the
same time, so see who gets in:
&lt;a href=&quot;https://github.com/commitwars/commitwars&quot;&gt;commitwars/commitwars&lt;/a&gt;&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Another is repository hosting mirror of 9gag, with 365GB of
data, and 300-400MB pushed every 10 minutes:
&lt;a href=&quot;https://github.com/gambuzzi/gambuzzi.github.io&quot;&gt;gambuzzi/gambuzzi.github.io&lt;/a&gt;&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;Others are just large networks:
            &lt;ul&gt;
              &lt;li&gt;&lt;a href=&quot;https://github.com/torvalds/linux&quot;&gt;torvalds/linux&lt;/a&gt; is forked
16K times; note that it also shows “∞ contributors”.&lt;/li&gt;
              &lt;li&gt;&lt;a href=&quot;https://github.com/octocat/Spoon-Knife&quot;&gt;octocat/Spoon-Knife&lt;/a&gt;
is GitHub’s sample repo, used to illustrate what forking is
all about - it’s forked 88K times&lt;/li&gt;
              &lt;li&gt;&lt;a href=&quot;https://github.com/barryclark/jekyll-now&quot;&gt;barryclark/jekyll-now&lt;/a&gt;,
where each fork is someone’s website, forked 13K times&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;There are projects that are just large, with long history
and/or large number of files,
like &lt;a href=&quot;https://github.com/torvalds/linux&quot;&gt;torvalds/linux&lt;/a&gt;, with
42GB data on disk.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;p&gt;Other just go to the extreme with the use of GitHub-based
workflow, that is with extensive use of pull-requests and
issues, like &lt;a href=&quot;https://github.com/kubernetes/kubernetes&quot;&gt;kubernetes/kubernetes&lt;/a&gt;
with 24K pull requests in total, and 5K+ open issues, plus 12K
closed.&lt;/p&gt;
          &lt;/li&gt;
          &lt;li&gt;Some have just large number of commits,
like &lt;a href=&quot;https://github.com/CocoaPods/Specs&quot;&gt;CocoaPods/Specs&lt;/a&gt; –
160K commits; though it is nothing on Linux, with 650K commits.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;Carlos has this to say about first two:&lt;/p&gt;

        &lt;blockquote&gt;
          &lt;p&gt;Please don’t&lt;/p&gt;
        &lt;/blockquote&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Scaling Git at Microsoft”&lt;br /&gt;
Saeed Noursalehi, &lt;em&gt;Microsoft&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;Saeed talked about scaling Git at Microsoft with more that 30K
developers.  When they started with the &lt;a href=&quot;https://arstechnica.com/information-technology/2017/02/microsoft-hosts-the-windows-source-in-a-monstrous-300gb-git-repository/&quot;&gt;humongous Windows repository&lt;/a&gt;
it would literally take (almost) days to clone the repository.
Git’s assumptions generally work well for reasonable
repositories - but it is still a problem to be solved.
It was beyond help of Git LFS and similar solutions.&lt;/p&gt;

        &lt;p&gt;They have implemented &lt;a href=&quot;https://blogs.msdn.microsoft.com/visualstudioalm/2017/02/03/announcing-gvfs-git-virtual-file-system/&quot;&gt;GVFS - Git Virtual File System&lt;/a&gt;;
which is an &lt;a href=&quot;https://github.com/Microsoft/GVFS&quot;&gt;open-source project&lt;/a&gt;,
just released by Microsoft.  This helped them a lot with this
Windows repo:&lt;/p&gt;

        &lt;blockquote&gt;
          &lt;p&gt;Git experience on Windows repo (with GVFS)&lt;/p&gt;

          &lt;p&gt;&lt;del&gt;12 hrs&lt;/del&gt; 5 mins    - clone&lt;br /&gt;
  &lt;del&gt;3 hrs&lt;/del&gt; 30 secs    - checkout&lt;br /&gt;
  &lt;del&gt;8 mins&lt;/del&gt; 4 secs    - status&lt;br /&gt;
  &lt;del&gt;30 mins&lt;/del&gt; 13 secs  - commit&lt;/p&gt;
        &lt;/blockquote&gt;

        &lt;p&gt;GVFS is basically a file system driver combined with a read-object
hook in Git, and a persistent daemon process driving said hook.
The read-object hook is a new concept that Microsoft has
introduced to Git.  This solution allows for (their fork of) Git
to populate files and download objects (commits, trees, blobs) on
demand.&lt;/p&gt;

        &lt;p&gt;Saeed started a live demo on a VSO.  He has shown how the files
got populated (“hydrated”), that is their content downloaded, on
first access (on first use).  You could also see live the
JSON-based protocol used to communicate with GVFS daemon
(service).&lt;/p&gt;

        &lt;p&gt;The trees doesn’t grow in to the skies - when asked about
searching globally in your repo - answer was “&lt;em&gt;Yes, that will
still be very painful&lt;/em&gt;”.  Browsing history was also a problem, as
it would “hydrate” objects; though in Q&amp;amp;A session there was a
suggestion of running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; on server, like for centralized
version control systems.&lt;/p&gt;

        &lt;p&gt;Currently GVFS is limited to MS Windows, and requires hacked Git.
Microsoft also cares about other platforms: the message is “&lt;em&gt;We’re
hiring - especially if you know file systems on Mac and Linux&lt;/em&gt;”.
Microsoft is also working on core Git integration: see the
discussion in thread started by Ben Peart
&lt;a href=&quot;https://public-inbox.org/git/20170113155253.1644-1-benpeart@microsoft.com/&quot;&gt;[RFC] Add support for downloading blobs on demand&lt;/a&gt;.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“What’s Wrong With Git?”&lt;br /&gt;
Santiago Perez De Rosso, &lt;em&gt;Software Design Group, MIT&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;According to Santiago, Git is hard to learn and the documentation
is scary.  He presented one after another slides from an on-line
version of &lt;a href=&quot;https://www.kernel.org/pub/software/scm/git/docs/&quot;&gt;the Git documentation&lt;/a&gt;,
and from &lt;a href=&quot;https://git-man-page-generator.lokaltog.net/&quot;&gt;the fake Git-manpage generator&lt;/a&gt;.
There was also a jokingly provoking slide on how commits can
easily be represented as a manifold in a multi dimensional space.&lt;/p&gt;

        &lt;p&gt;In his PhD work, Santiago has been surveying user response to the
usability of Git, and experimenting with fundamental improvements
to the Git experience.  In his talk, he covered a new theory of
top-down design, focusing on the purposes and concepts underlying
software; the material expanding on
&lt;a href=&quot;http://people.csail.mit.edu/sperezde/pre-print-oopsla16.pdf&quot;&gt;Purposes, Concepts, Misfits, and a Redesign of Git&lt;/a&gt;
paper - covered in &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News: Edition 20&lt;/a&gt;.
Santiago showed the complexity of understanding concepts like
&lt;em&gt;stash&lt;/em&gt;, &lt;em&gt;detached head&lt;/em&gt;, and &lt;em&gt;untracked files&lt;/em&gt;, and how they
relate (or not) to concepts and purposes of a VCS.&lt;/p&gt;

        &lt;p&gt;In his experiment of improving Git usage, he
presented &lt;a href=&quot;http://gitless.com/&quot;&gt;Gitless&lt;/a&gt;, an experimental version
control system built on top of Git (also covered in edition 20).
In this DVCS, a branch includes it’s working dir, so dirty files
never prevent a branch switch. Other similar changes were made to
the other identified confusing topics. Gitless was then used to
run parallel experiments with non-expert and expert Git users to
compare how learning Gitless compared to Git.&lt;/p&gt;

        &lt;p&gt;Gitless was just an experiment, but Santiago suggested that the
world might be ready for new VCSs, or at least a new porcelain or
GUI on top of Git, based on this research.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Git: The Tool Loved and (sometimes) Feared”&lt;br /&gt;
Caren Garcia, &lt;em&gt;BazaarVoice&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;Caren was sharing her experiences teaching Git.  According to
Caren, Git conflicts induces panic states in students. The command
order confuses them, but they love the utility of having
everything in Git.&lt;/p&gt;

        &lt;p&gt;Caren recommends the web site &lt;a href=&quot;http://ohshitgit.com/&quot;&gt;OhShitGit&lt;/a&gt;
the get help to get out of panic situations.  There is always a
possibility of screwing up, and this site would help you to figure
how to fix your mistakes.  (This site was covered in
&lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-19/&quot;&gt;Git Rev News: Edition 19&lt;/a&gt;)).
Her students has had great success using Git CLI for learning Git.&lt;/p&gt;

        &lt;p&gt;She also wants everyone to use Git - writers, governments and
school.  Git is more than a software; a concept, a way of
thinking, and because of that it can be used outside the IT
field.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Scaling Mercurial at Facebook: Insights from the Other Side”&lt;br /&gt;
Durham Goode, &lt;em&gt;Facebook&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;Durham talked about how Mercurial (Hg) has been scaled at
Facebook, and about the way software version control is organized
there.  (Reasons for choosing Mercurial can be found in
&lt;a href=&quot;https://code.facebook.com/posts/218678814984400/scaling-mercurial-at-facebook/&quot;&gt;Scaling Mercurial at Facebook&lt;/a&gt;
blog post from 2014 by Durham Goode and Siddharth P. Agarwal;
&lt;a href=&quot;https://groups.google.com/forum/#!topic/mozilla.dev.version-control/nh4fITFlEMk&quot;&gt;an update&lt;/a&gt;
on how they are using it internally was covered
in &lt;a href=&quot;https://git.github.io/rev_news/2016/11/16/edition-21/&quot;&gt;Git Rev News: Edition 21&lt;/a&gt;.)&lt;/p&gt;

        &lt;p&gt;The Facebook development environment is composed of monorepos, no
feature branches, rebases and no merges, single commits per
push.  They assume that all developers work online, that “&lt;em&gt;everyone
commits on master&lt;/em&gt;” (in order to overcome their tremendous size),
and that “&lt;em&gt;every commit is pushed&lt;/em&gt;”.  The size of their version
control support team is very small compared to the large number of
developers they employ - therefore they need a simple workflow, and
the amount of time for teaching version control is limited.&lt;/p&gt;

        &lt;p&gt;To solve the issue of push conflicts, they have implemented
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PushRebase&lt;/code&gt;, which basically allows the server to perform your
rebase for you in some conditions, eliminating the problem of push
being rejected because the local repository is not up to date
(someone pushed first).&lt;/p&gt;

        &lt;p&gt;They tend to assume their developers are online; thus they
implemented &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;InifinityPush&lt;/code&gt;, which assures that every commit ever
is pushed (helped with new scalable way of storing data).  This
solves many problems of error recovery.&lt;/p&gt;

        &lt;p&gt;The implementation (fork) of Mercurial that Facebook uses allows
to check out only part of the code that is actually needed.  This
is especially needed for the monorepos.  The feature is similar to
Git’s sparse checkout; the important difference is a far better
UX.  Their implementation allows for example easy switching
between predefined (via in-repository file with known format)
sets of files, selected for well-defined tasks.  This is something
worth porting to Git, to improve its sparse checkout feature.&lt;/p&gt;

        &lt;p&gt;The question of User Experience (UX) is very important for
Facebook.  Durham asks: “&lt;em&gt;Why isn’t the default behavior of the
git log useful? - Why do we all have to go through hoops to
customize the log enough to make it useful?&lt;/em&gt;”.  They have made
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SmartLog&lt;/code&gt;, which allows to see only useful commits for a given
developers.  It also allows to easily recover for instance commits
that are not reachable from any branches, without need for extra
knowledge and to reach for any advanced features.  This is
something worth borrowing; &lt;a href=&quot;https://mackyle.github.io/git-log-compact/&quot;&gt;git-log-compact&lt;/a&gt;
is a project that implements something similar (covered in detail
by &lt;a href=&quot;https://git.github.io/rev_news/2016/10/19/edition-20/&quot;&gt;Git Rev News: Edition 20&lt;/a&gt;).&lt;/p&gt;

        &lt;p&gt;Durham has emphasized the need to focus on the UX, the need to
enable new users to do power user moves. He uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hg unamend&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hg uncommit&lt;/code&gt; as good examples for that.&lt;/p&gt;

        &lt;p&gt;At the end, the critical crowd asked “&lt;em&gt;Why isn’t this Open
Source&lt;/em&gt;” to which the one acceptable answer came… “&lt;em&gt;It is!&lt;/em&gt;”.
Facebook runs the latest stable Mercurial build and hereby catches
a lot of Mercurial bugs before they hit others.  Not everything is
contributed back to hg-core, mostly due to the fact that not all
contributions they make are backward compatible.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Git LFS at Light Speed”&lt;br /&gt;
Lars Schneider, &lt;em&gt;Autodesk&lt;/em&gt; and Taylor Blau, &lt;em&gt;GitHub&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;This was a two part presentation, about a way to dramatically
improve performance in a popular Git extension - LFS (Large File
Storage) - that required changes in both Git Core, and the
extension itself.&lt;/p&gt;

        &lt;p&gt;In first part Lars walked through how to contribute to Git.  You
can find description of (part of) his experience, namely
developing and reviewing the “Git filter protocol” feature, in
&lt;a href=&quot;https://git.github.io/rev_news/2016/08/17/edition-18/&quot;&gt;Git Rev News: Edition 18&lt;/a&gt;.
“Developer Spotlight: Lars Schneider” can be also found in this
edition.&lt;/p&gt;

        &lt;p&gt;It’s not just about implementing the feature; it needs to be
documented, and tested as well.  The commit message should be
self-contained, meaning among others that you need no external
dependencies to figure out what the commit does.  There are many
steps that one has to go through, and for such far reaching
feature (with the need for backward compatibility) also usually
many iterations.  As an example of the friction in this approach,
Lars gave us the example: this patch series gave a very hefty
performance improvement… and it took him 6 months and 380 emails
to get it approved.&lt;/p&gt;

        &lt;blockquote&gt;
          &lt;p&gt;Git is used by millions all over the world, you don’t want to be
the one breaking it.&lt;/p&gt;
        &lt;/blockquote&gt;

        &lt;p&gt;In second part Taylor took over to talk a bit about the server
side of Git LFS.  Go was used as a language of choice for
implementing it.  Here using the Scanner pattern in Go turned out
to be a perfect match for the way Git plumbing passes information
to the Git-LFS process on the server.  He shared a description of
the refactoring performed to speed up the operation.&lt;/p&gt;

        &lt;p&gt;All this of course needed to be synchronized across different
projects, different programming languages, and different
developers.&lt;/p&gt;

        &lt;p&gt;At the end, Taylor shared the ideas for next steps for Git-LFS
server, namely: Promise capability, file-path exchange, and work
on figuring out how to make Git-LFS even faster.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Git Aliases of the Gods!”&lt;br /&gt;
Tim Pettersen, &lt;em&gt;Atlassian&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;Aliases are not just about saving time and keystrokes, though as
Tim said the most basic and common example of using aliases is to
create shortcuts, for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git co&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt;, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
st&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt;.  It is also about reducing cognitive burden.
Whenever you find yourself googling the same thing over and over
(or browsing manpages, or searching StackOverflow) - you should
consider making an alias.&lt;/p&gt;

        &lt;p&gt;As an example of the latter, Tim took us through the tour of four
different ways that you can create a stash, and how that interacts
with the index and the working directory. The option names are not
easy to remember; because of the way they were developed there is
no commonality of names between them.  Therefore he had made 3
aliases, so that the more &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a&lt;/code&gt;s you have in your command the more
you stash: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stsh&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stash&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;staash&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;staaash&lt;/code&gt;.&lt;/p&gt;

        &lt;p&gt;He created a funny alias called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;standup&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lazy standup&lt;/code&gt;:&lt;/p&gt;
        &lt;pre&gt;&lt;code class=&quot;language-INI&quot;&gt;[alias]
standup = !git log --all \
                   --author=$USER \
                   --since=&apos;9am yesterday&apos; \
                   --format=%s
lazy-standup = !git standup | say
&lt;/code&gt;&lt;/pre&gt;

        &lt;p&gt;Tim also described how to create more involved aliases; how to
join more than one command together, and how to pass parameters to
the inside of such a pipeline.  He showed both the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sh -c &apos;...&apos; -&lt;/code&gt;
trick and the immediately invoked shell function trick, while
reminding us that if an alias gets too complicated, it is better to
just create a new git command (by putting a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-sth&lt;/code&gt; executable
shell script, for example, in your PATH), rather that worrying
about appropriate escaping and quoting.&lt;/p&gt;

        &lt;p&gt;Tim also presented an awesome, and very silly way, to spoof
Git SHA-1’s with the help of emojis and raw processing power.  As
an example with &lt;a href=&quot;https://bitbucket.org/tpettersen/git-sham&quot;&gt;git-sham&lt;/a&gt;
you can make it so that subsequent commits have SHA-1 identifiers
beginning with subsequent numbers.&lt;/p&gt;

        &lt;p&gt;Atlassian’s Bitbucket has joined the Continuous Development (CD)
world for real, providing a lot services like those GitLab and
Travis are doing, called there “pipelines”.  They have enabled
&lt;a href=&quot;https://bitbucket.org/product/features/pipelines&quot;&gt;pipelines&lt;/a&gt;
in Bitbucket - to allow you to build any branch.&lt;/p&gt;

        &lt;p&gt;Tim expertly finished by combining Bitbucket Pipeline with an
alias, so he can do with it an equivalent of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt; by just
running all the bisection steps in parallel - that is
brute-forcing tests.  All this without the need to involve the
developer, at the cost of CPU time (though possibly not wallclock
time, assuming sufficient parallelism and small number of commits
to test).  The CPU time is worth less than the developer’s time.&lt;/p&gt;

        &lt;p&gt;You can find aliases used in this presentation in Tim’s
&lt;a href=&quot;https://bitbucket.org/tpettersen/git-aliases&quot;&gt;git-aliases&lt;/a&gt;
repository.  (MediaWiki has also a
&lt;a href=&quot;https://www.mediawiki.org/wiki/Git/aliases&quot;&gt;wiki page with the list of useful aliases&lt;/a&gt;.)&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Lightning Talk / Lessons Learned: Transforming from ClearCase to Git”&lt;br /&gt;
Tamir Gefen, &lt;em&gt;ALMtoolbox&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;This lightning talk presented a case study on moving to Git from
IBM Rational ClearCase.  Tamir described challenges they faced
(among others time to switch and the amount of support, and the
impedance mismatch between ClearCase and Git) and how they
resolved them, plus some technical tips and insights.  The
solution chosen was to adjust ClearCase views one at a time, and
then dump content on new branches in Git.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Lightning Talk / Git: The Original Blockchain”&lt;br /&gt;
Meredith L. Patterson, &lt;em&gt;Mautinoa Technologies&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;Meredith showed how Git was chosen as the underlying platform for
implementing a money-less transaction exchange ledge system.
This implemented an actual monetary system in Sierra Leone, where
&lt;em&gt;phone minutes&lt;/em&gt; is actually considered a viable FX currency, since
otherwise the national bank would go bankrupt.&lt;/p&gt;

        &lt;p&gt;Bitcoin and other blockchain-based distributed ledger systems are
“gossip protocols”, and require always-on Internet access, not
available in much of Africa.  What is needed is a way to perform
transactions off-line, with later reconciliation step.  This
means that the system needs to store timestamps in its
blockchain… Meredith noticed that this is what Git does!  The
presented solution uses a &lt;a href=&quot;http://www.ledger-cli.org/&quot;&gt;ledger-cli&lt;/a&gt; / &lt;a href=&quot;http://hledger.org/&quot;&gt;hledger&lt;/a&gt;
&lt;a href=&quot;http://plaintextaccounting.org/&quot;&gt;plain text accounting&lt;/a&gt; format as a format
for storing transactions, Git commits for blockchain, remotes as
wallets / accounts, and GPG keys with short expiration dates for
signing.&lt;/p&gt;

        &lt;p&gt;This shows how technologies, such as Git, that do one thing well
can change the world by doing the thing they do well in unexpected
places.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Lightning Talk / go-git: A Pure Go Implementation of Git”&lt;br /&gt;
Santiago M. Mola, &lt;em&gt;source(d)&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;&lt;a href=&quot;http://sourced.tech/&quot;&gt;source{d}&lt;/a&gt; wants to clone all open-source
projects from major Git hosting sites (17M repositories planned,
6M repositories archived), and then analyze all code history using
AI techniques.&lt;/p&gt;

        &lt;p&gt;For this they needed a special-purposes Git implementation.
Santiago introduced the &lt;a href=&quot;https://github.com/src-d/go-git&quot;&gt;go-git&lt;/a&gt;
project, a Git library written entirely in Go, designed to be
developer-friendly and highly extensible.  He shared some of
source{d} use cases, and also problems storing (archiving) such a
large number of repositories, many of which are forks.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Git for Pair Programming”&lt;br /&gt;
Cornelius Schumacher, &lt;em&gt;SUSE Linux&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;Cornelius started the presentation by describing in detail the
pair programming workflow; why it is used, and how it is done.
The important issue is that in this workflow commit has more than
one author - developers often change even during the writing of a
commit message.  Pairs are not forever; the pairing change quite
often.&lt;/p&gt;

        &lt;p&gt;He described the solution used by the
&lt;a href=&quot;https://github.com/git-duet/git-duet&quot;&gt;git-duet&lt;/a&gt; project, which utilizes
committer and author to show the identity of both contributors in
the pair, optionally rotating them.  This tool has its advantages
and disadvantages; among others it is less useful for mob
programming.&lt;/p&gt;

        &lt;p&gt;Cornelius then went into details of the multiple authors problem
using anything from emails, commit messages and headers.  The
sketch of a proposed solution and discussion how Git could get
native support for pair programming can be found on git mailing
list as
&lt;a href=&quot;https://public-inbox.org/git/1485713194-11782-1-git-send-email-schumacher@kde.org/&quot;&gt;[RFC] Proof of concept: Support multiple authors&lt;/a&gt;.
The thread didn’t end in an accepted solution, though when one
would be created it would most probably follow
&lt;a href=&quot;https://public-inbox.org/git/xmqqinowuvd7.fsf@gitster.mtv.corp.google.com/&quot;&gt;Junio’s advice&lt;/a&gt;
there of utilizing “Co-Authored-by: “ trailers in the commit
message, and extending &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git shortlog&lt;/code&gt; and other commands as
needed.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;“Trust But Verify”&lt;br /&gt;
Thordur Bjornsson, &lt;em&gt;Yubico&lt;/em&gt;&lt;/p&gt;

        &lt;p&gt;The last talk covered the details on how to
cryptographically sign your work.  Thordur started with PGP
fundamentals and best practices (among others the need for setting
an expiration date of PGP keys, to one year at most).  Then he
went through what can get signed in Git: commits (including merge
commits), tags and pushes (the last requiring help from the
server) - though the concept of mergetags was missing from the
talk.  Then Thordur described how to verify those signatures,
explaining possible impacts (and the amount of work required), and
benefits to one’s workflow.&lt;/p&gt;

        &lt;p&gt;As one way of verifying signatures, Thordur took a look at GitHub’s
interface changes from &lt;a href=&quot;https://github.com/blog/2144-gpg-signature-verification&quot;&gt;earlier this year&lt;/a&gt;
that added visual cues to highlight the verification status of commits
and tags.&lt;/p&gt;

        &lt;p&gt;The slides from this talk (and links to other related resources are
available at &lt;a href=&quot;https://github.com/thorduri/git-merge-2017&quot;&gt;thorduri/git-merge-2017&lt;/a&gt;
repository.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-michael-j-gruber&quot;&gt;Developer Spotlight: Michael J Gruber&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am a mathematical physicist - I do research on mathematical problems
in quantum physics, and I teach mathematics as a lecturer. Sharing and
free exchange of knowledge are fundamental for that. Consequently, being
involved in open source software projects feels like just another side
of the same medal.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How did your introduction to Git come about?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a larger project with multiple moving parts (habilitation thesis) I
had used Subversion (that thesis started before git). It made two things
clear: I could not have done this without a version control system; and
I needed something else (a VCS with actual merges, to say the least).&lt;/p&gt;

&lt;p&gt;Git had some geek appeal, but I couldn’t get it to compile on my first
attempts (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;configure &amp;amp;&amp;amp; make...&lt;/code&gt;, on a system with libs without headers,
no root). So I went with Mercurial since I was getting into Python
anyway. Only to be confused by Hg’s mantra “to clone is to branch and to
branch is to clone” when there were two commands &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clone&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;branch&lt;/code&gt;
which did something completely different and - in the case of the latter -
not very useful, it appeared to me. (Hg has the more useful
“bookmarks” these days.)&lt;/p&gt;

&lt;p&gt;In the end, it was the branch concept and the tone on the respective
mailing lists at that time that drove me to Git. I had learned not to
use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;configure&lt;/code&gt; for Git by now, and have been compiling it happily ever
after.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no single big topic. Mostly, I try to make Git easier and less
surprising to use by doing stuff here and there. The rev-list options
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--min-parent&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--max-parent&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cherry-mark&lt;/code&gt; were fun to do. I
also consider “–textconv” a killer feature and was very successful in
getting Peff to do most things in that area that I wanted to have, and
did a few things “myself” - which is really the wrong term, given how
collaborative our development on git.git is.&lt;/p&gt;

&lt;p&gt;Strangely, I was involved in several GPG-related things. I do not use
signed tags nor signed commits myself, but I care about GPG and about
git making the right calls when it comes to notions like “trust” etc.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What: almost nothing; why: work&lt;/p&gt;

&lt;p&gt;During term breaks, I try to follow up an lingering topics and to
participate more actively in the Git mailing list.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;refs namespace: have tags, notes, replace etc. under
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;remotes/&amp;lt;remote&amp;gt;&lt;/code&gt; with proper merging so that those features learn
to fly; requires a transition plan&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;rework the UI and make it less surprising: e.g. unify short option
names, introduce pseudorefs for the index and worktree and the
like; requires a transition plan&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would do the above without the need for a transition plan :)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anything that makes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;textconv&lt;/code&gt; fly (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unoconv&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pdftotext&lt;/code&gt;); &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt; when
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;log --graph&lt;/code&gt; is ambiguous; I should use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tig&lt;/code&gt; more ;)&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://github.com/git/git/blob/v2.11.1/Documentation/RelNotes/2.11.1.txt&quot;&gt;v2.11.1&lt;/a&gt; was released&lt;/li&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqtw8bdjtf.fsf@gitster.mtv.corp.google.com/&quot;&gt;v2.12.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.11.1.windows.1&quot;&gt;v2.11.1&lt;/a&gt; was released&lt;/li&gt;
  &lt;li&gt;libgit2/rugged &lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.26.0b2&quot;&gt;v0.26.0b2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;nodegit &lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.17.0&quot;&gt;v0.17.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2017/02/16/gitlab-8-dot-15-dot-7-security-release/&quot;&gt;8.15.7 - 8.14.10 &lt;/a&gt; and &lt;a href=&quot;https://about.gitlab.com/2017/02/17/gitlab-8-dot-16-dot-6-released/&quot;&gt;8.16.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitKraken &lt;a href=&quot;https://blog.axosoft.com/2017/01/25/gitkraken-v2/&quot;&gt;v2.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Git Merge 2017&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apparently, an increasing number of excellent bloggers attend the conference
(this material was used in Git Merge 2017 general sessions writeup above):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2317-git-merge-2017-recap&quot;&gt;Git Merge 2017 recap&lt;/a&gt; on GitHub Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.bitbucket.org/2017/02/01/well-git-merge-2017/&quot;&gt;We’ll be at Git Merge 2017!&lt;/a&gt; on Bitbucket Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.praqma.com/stories/work-on-git-merge-2017/&quot;&gt;Report from Git Merge 2017&lt;/a&gt; by Lars Kruse, &lt;em&gt;Praqma&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.recast.ai/git-merge-2017/&quot;&gt;Git Merge 2017 – what you missed&lt;/a&gt; on Recast.AI Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://neoshops.de/2017/02/04/review-git-merge-2017/&quot;&gt;Review – Git Merge 2017&lt;/a&gt; - short impressions by Carmen Bremen, Magento freelancer&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://hryniuk.pl/post/git-merge-2017/&quot;&gt;Git Merge 2017&lt;/a&gt;, a short read from Łukasz Hryniuk&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sfconservancy.org/blog/2017/feb/17/git-merge-fosdem/&quot;&gt;Git Merge and FOSDEM 2017!&lt;/a&gt; by Karen Sandler from the Software Freedom Conservancy&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.edwardthomson.com/blog/git_contributor_summit.html&quot;&gt;The Git Contributor Summit&lt;/a&gt; - Ed Thomson’s impressions&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.google.com/document/d/1KDoSn4btbK5VJCVld32he29U0pUeFGhpFxyx9ZJDDB0/edit&quot;&gt;Git Contributor Summit collaborative report&lt;/a&gt; by Johannes Schindelin and other contributors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Extensive ebook on &lt;a href=&quot;https://trunkbaseddevelopment.com/&quot;&gt;Trunk Based Development&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/bharry/2017/02/03/scaling-git-and-some-back-story/&quot;&gt;Scaling Git (and some back story)&lt;/a&gt; by Brian Harry&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2312-how-to-run-a-google-summer-of-code-project-on-github&quot;&gt;How to run a Google Summer of Code project on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A bit old, but here is &lt;a href=&quot;https://github.com/torvalds/subsurface-for-dirk/commit/b6590150d68df528efd40c889ba6eea476b39873&quot;&gt;Linus Torvalds about properly formatted commit messages&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Also quite old &lt;a href=&quot;https://chris.beams.io/posts/git-commit/&quot;&gt;How to Write a Git Commit Message&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://zabanaa.github.io/notes/mind-blowing-git-tips.html&quot;&gt;Mind-blowing git tips for beginners&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.destroyallsoftware.com/blog/2017/the-biggest-and-weirdest-commits-in-linux-kernel-git-history&quot;&gt;The Biggest and Weirdest Commits in Linux Kernel Git History&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.scottnonnenberg.com/top-ten-pull-request-review-mistakes/&quot;&gt;Top ten pull request review mistakes&lt;/a&gt; by Scott Nonnenberg&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@gerstenzang/the-next-billion-programmers-wont-use-git-5e8b0ea57886#.qt9zcct4k&quot;&gt;The next billion programmers (won’t use Git)&lt;/a&gt; by Sam Gerstenzang&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/visualstudioalm/2017/02/03/announcing-gvfs-git-virtual-file-system/&quot;&gt;Microsoft’s GVFS (Git Virtual File System)&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;ArsTechnica wrote about it in &lt;a href=&quot;https://arstechnica.com/information-technology/2017/02/microsoft-hosts-the-windows-source-in-a-monstrous-300gb-git-repository/&quot;&gt;Microsoft hosts the Windows source in a monstrous 300GB Git repository&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/Microsoft/GVFS&quot;&gt;Git Virtual File System&lt;/a&gt; on GitHub&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pagure.io/pagure&quot;&gt;Overview - pagure - Pagure&lt;/a&gt; - a git-centered forge, python based using pygit2&lt;/li&gt;
  &lt;li&gt;Not a Git tool, but an interesting challenger on the DVCS arena: &lt;a href=&quot;https://pijul.org/&quot;&gt;Pijul&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://rawgit.com/&quot;&gt;&lt;strong&gt;RawGit&lt;/strong&gt; serves raw files directly from GitHub with proper &lt;strong&gt;Content-Type&lt;/strong&gt; headers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/RobinBressan/json-git&quot;&gt;json-git: A pure JS local Git to versionize any JSON&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/src-d/go-git&quot;&gt;go-git: A highly extensible Git implementation in pure Go&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Fakerr/git-recall&quot;&gt;git-recall: Handy tool to easily recall what you’ve done&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/larsxschneider/git-list-helper&quot;&gt;Git List Helper&lt;/a&gt; - A few helpers to interact with the Git mailing list&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.2git.io/&quot;&gt;The 2git conversion engine&lt;/a&gt; - The 2git project is an SCM migration engine that enables you to migrate to git using a Groovy DSL&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.catb.org/esr/reposurgeon/&quot;&gt;reposurgeon&lt;/a&gt; is a tool for editing version-control repository history (including &lt;a href=&quot;http://www.catb.org/~esr/reposurgeon/dvcs-migration-guide.html&quot;&gt;improving DVCS migration&lt;/a&gt;, working with any version control system that can export and import git fast-import streams, and with Subversion dump files; source code repository &lt;a href=&quot;https://gitlab.com/esr/reposurgeon&quot;&gt;available on GitLab&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from Michael J Gruber.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 23 (January 25th, 2017)</title>
      <link>https://git.github.io/rev_news/2017/01/25/edition-23/</link>
      <pubDate>Wed, 25 Jan 2017 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2017/01/25/edition-23/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-23-january-25th-2017&quot;&gt;Git Rev News: Edition 23 (January 25th, 2017)&lt;/h2&gt;

&lt;p&gt;Welcome to the 23rd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of December 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20161227082922.8B7A813893D@mail.altsci.com/&quot;&gt;Gitview Shell Injection Vulnerability&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Javantea reported on the list:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I have found a shell injection vulnerability in contrib/gitview/gitview.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Gitview executes shell commands using string concatenation with user
supplied data, filenames and branch names. Running Gitview and
interacting with the user interface with a malicious filename or
branch name in the current repository results in malicious commands
being executed as the current user.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/git/git/tree/v2.11.0/contrib/gitview&quot;&gt;gitview&lt;/a&gt; is
a GTK based repository browser for git, according to its
documentation. It is part of the ‘contrib’ directory of the Git
codebase which contains scripts and utilities that are not maintained
by Junio Hamano and the developers on the Git mailing list. It looked
like its implementation in Python was indeed lacking.&lt;/p&gt;

&lt;p&gt;Stefan Beller, while cc’ing Aneesh Kumar, the gitview author, replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Maybe it’s time for a spring cleanup and remove some old (dead?)
projects from contrib?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jeff King, alias Peff, agreed with Stefan saying that gitview “hasn’t
had a substantive commit since 2007”, so Stefan sent a patch that
removes gitview from the Git codebase.&lt;/p&gt;

&lt;p&gt;Javantea, Peff and Junio all agreed that it was a good solution, but
Peff and Junio wanted to hear first from Aneesh before removing his work.
Aneesh sent his “Acked-by:” to agree with the change.&lt;/p&gt;

&lt;p&gt;Following these events, Stefan sent a separate
&lt;a href=&quot;https://public-inbox.org/git/20161228180205.29213-1-sbeller@google.com/&quot;&gt;patch to remove git-convert-objects from the ‘contrib’ directory&lt;/a&gt;.
This other tool “originally named git-convert-cache, was used in early
2005 to convert to a new repository format, e.g. adding an author
date”.&lt;/p&gt;

&lt;p&gt;Philip Oakley also recently sent a small
&lt;a href=&quot;https://public-inbox.org/git/20170112213240.7972-1-philipoakley@iee.org/&quot;&gt;patch series to update the git-gui and gitk documentation&lt;/a&gt;
as this documentation was referencing gitview and needed a few other improvements.&lt;/p&gt;

&lt;p&gt;So it looks like a spring cleanup is indeed happening.&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1482946838-28779-1-git-send-email-ehabkost@redhat.com/&quot;&gt;am: add am.signoff add config variable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eduardo Habkost sent a short patch to add an “am.signoff” configuration
option to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt;. This option would automatically add a
“Signed-off-by: author name &lt;a href=&quot;mailto:author_email@address&quot;&gt;author_email@address&lt;/a&gt;” line to the end of
the commit message, when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; creates a commit.&lt;/p&gt;

&lt;p&gt;It looked like a very straightforward thing to do as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--signoff&lt;/code&gt;
command line option already does that, and many other command line
options like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--message-id&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--3way&lt;/code&gt; have configuration option to
automatically enable their action.&lt;/p&gt;

&lt;p&gt;Stefan Beller agreed that it was a good idea, but asked for
documentation and a test, which Eduardo agreed to provide.&lt;/p&gt;

&lt;p&gt;Eduardo indeed sent
&lt;a href=&quot;https://public-inbox.org/git/20161228183501.15068-1-ehabkost@redhat.com/&quot;&gt;a version 2 of the patch&lt;/a&gt;
with the requested improvements, and this version was then reviewed by
Stefan Beller, Andreas Schwab and Pranit Bauva.&lt;/p&gt;

&lt;p&gt;Eduardo followed up with
&lt;a href=&quot;https://public-inbox.org/git/20161228225544.16388-1-ehabkost@redhat.com/&quot;&gt;a version 3 of the patch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But in the mean time Eric Wong replied to the original patch:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I’m not sure this is a good idea.  IANAL, but a sign-off
has some sort of legal meaning for this project (DCO)
and that would be better decided on a patch-by-patch basis
rather than a blanket statement.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By DCO, Eric refers to the &lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/SubmittingPatches#L251-L301&quot;&gt;Developer Certificate of Origin&lt;/a&gt;
which is the reason why people are adding these “Signed-off-by:”
lines, also called “SoB”. The DCO practice originates from the
&lt;a href=&quot;https://tinylab.gitbooks.io/elinux/content/en/dev_portals/Legal_Issues/Developer_Certificate_Of_Origin/Developer_Certificate_Of_Origin.html&quot;&gt;Linux kernel development&lt;/a&gt;
and is now used by many other projects.&lt;/p&gt;

&lt;p&gt;Junio Hamano, the Git maintainer, agreed with Eric’s reply, saying he
has been striving to avoid “adding more publicized ways to add SoB
without thinking” as it could be a legal risk for projects.&lt;/p&gt;

&lt;p&gt;To the above Eduardo replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This sounds completely reasonable to me. I now see that the
config option was already proposed in 2011 and the same arguments
were discussed. Sorry for the noise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But Stefan replied to Junio saying that there is already the
“format.signOff” configuration to automatically add a SoB when using
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; and that “thinking and typing things is orthogonal
(the more you type, doesn’t imply that you think harder or even at
all)”.&lt;/p&gt;

&lt;p&gt;Junio though replied that “format.signOff” was a mistake that should
be corrected in the future.&lt;/p&gt;

&lt;p&gt;Stefan then came up with a many steps plan to remove “format.signOff”,
while saying he is not fully convinced it is bad, as he finds
“format.signoff” &lt;em&gt;very&lt;/em&gt; useful.&lt;/p&gt;

&lt;p&gt;As there has been no further discussion on this, and removing
“format.signOff” does not look simple nor user friendly, the current
situation, which is a bit awkward, may last for a long time.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20161231081433.3zo6lrsjsu2qho4u@glandium.org/&quot;&gt;Rebasing multiple branches at once&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mike Hommey asked whether &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; should be enhanced to support
rebasing multiple branches at once, or if it should go in a separate
tool.&lt;/p&gt;

&lt;p&gt;Junio Hamano mentioned a workaround people are using (for the specific example
Mike described in his original post), while explaining its limitations.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;What people seem to do is to teach [one] branch […] that
its upstream is the [other] local branch […], so that they can
be lazy when rebasing a branch that knows its upstream.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jeff King mentioned his own personal &lt;a href=&quot;https://github.com/peff/git/blob/meta/rebase&quot;&gt;meta/rebase&lt;/a&gt;
tool, using a topological sort to order rebases, which solves Mike’s
problem. Johannes Sixt reminded us about the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-garden-shears&lt;/code&gt; tool
that Johannes Schindelin posted to git mailing list in
&lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.20.1609111027330.129229@virtualbox/&quot;&gt;Git garden shears, was Re: [PATCH 13/22] sequencer: remember the onelines when parsing the todo file&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/58688C9F.4000605@adelielinux.org/&quot;&gt;Test failures when Git is built with libpcre and grep is built without it&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A. Wilcox (&lt;a href=&quot;https://github.com/awilfox&quot;&gt;awilfox&lt;/a&gt;) wrote that an attempt to package Git for a new Linux
distribution (&lt;a href=&quot;http://adelielinux.org&quot;&gt;Adélie Linux&lt;/a&gt;) with their PowerPC builder had run 
into a failure while running the test suite. 
After a bit of back and forth to clarify where this test failure
occurs, and what it was caused by, it turned out that the problem was
caused by the use of the &lt;a href=&quot;https://www.musl-libc.org/&quot;&gt;musl&lt;/a&gt; library for providing the regex functionality.
Specifically, the test suite was expecting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;regcomp()&lt;/code&gt; to complain
about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\x{2b}&lt;/code&gt; while trying to check that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep -P -E&lt;/code&gt; overrides
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-P&lt;/code&gt; &lt;a href=&quot;http://pcre.org/&quot;&gt;PCRE&lt;/a&gt; option with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-E&lt;/code&gt;, which should not accept the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\x&lt;/code&gt;
regex extension.
Unlike the standard POSIX libc, &lt;a href=&quot;https://www.musl-libc.org/&quot;&gt;musl&lt;/a&gt; has implemented &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\x&lt;/code&gt;
the same way as &lt;a href=&quot;http://pcre.org/&quot;&gt;PCRE&lt;/a&gt;, which unexpectedly causes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep -E&lt;/code&gt;
to understand the regex, and thus the test to fail.&lt;/p&gt;

&lt;p&gt;POSIX simply declares the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\x&lt;/code&gt; regex construct as “undefined”,
which leaves implementations such as &lt;a href=&quot;https://www.musl-libc.org/&quot;&gt;musl&lt;/a&gt; and &lt;a href=&quot;http://pcre.org/&quot;&gt;PCRE&lt;/a&gt;
free to extend the standard if they choose; as a consequence,
one should not rely on whatever assumption in this direction.
Jeff King, alias Peff, found that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[\d]&lt;/code&gt; strictly matches a literal &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;d&lt;/code&gt;
in POSIX ERE, but behaves like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[0-9]&lt;/code&gt; in &lt;a href=&quot;http://pcre.org/&quot;&gt;PCRE&lt;/a&gt;. 
POSIX implementations are not free to change this behaviour,
so we should be able to rely on it.
Peff finally fixed the test suite in &lt;a href=&quot;https://public-inbox.org/git/20170111111055.j3hgijpaabvy6kyg@sigill.intra.peff.net/&quot;&gt;[PATCH] t7810: avoid assumption about invalid regex syntax&lt;/a&gt; accordingly.&lt;/p&gt;

&lt;p&gt;Anyway, recent versions of Git won’t build with musl’s regex at all,
because it doesn’t support the non-standard &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;REG_STARTEND&lt;/code&gt; which Git
relies on since &lt;a href=&quot;https://git.kernel.org/cgit/git/git.git/commit/?id=b7d36ffca&quot;&gt;b7d36ffca (regex: use regexec_buf(), 2016-09-21)&lt;/a&gt;.
In this case, the build would fall back to regex code included in Git (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_REGEX&lt;/code&gt;).
We hope that more regex support libraries, including musl,
will implement this extension one day…&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/visualstudioalm/2016/12/01/whats-new-in-git-for-windows-2-11/&quot;&gt;What’s new in Git for Windows 2.11?&lt;/a&gt; (this slipped through the net of RevNews #22)&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.11.0.windows.3&quot;&gt;version v2.11.0(3)&lt;/a&gt; was released&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.25.1.1&quot;&gt;rugged v0.25.1.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/pygit2/releases/tag/v0.25.0&quot;&gt;pygit v0.25.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.23.1&quot;&gt;LibGit2Sharp v0.23.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.25.1&quot;&gt;libgit2 v0.25.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03245.html&quot;&gt;JGit / EGit Release 4.6.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2017/01/22/gitlab-8-16-released/&quot;&gt;GitLab 8.16&lt;/a&gt; through security releases &lt;a href=&quot;https://about.gitlab.com/2017/01/23/gitlab-8-dot-16-dot-1-security-release/&quot;&gt;8.16.1, 8.15.5, 8.14.7, and 8.13.12&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2294-git-merge-2017-the-full-agenda-is-now-live&quot;&gt;Git Merge 2017: the full agenda is now live&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/git-in-2016-fad96ae22a15#.hyxehnc7l&quot;&gt;Git in 2016&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.to/gonedark/when-to-make-a-git-commit&quot;&gt;When to make a Git Commit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@gerstenzang/the-next-billion-programmers-wont-use-git-5e8b0ea57886#.xg5ptwuoe&quot;&gt;The next billion programmers (won’t use Git)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://andrey.nering.com.br/2016/git-submodules-vs-subtrees/&quot;&gt;Git: submodules vs. subtrees&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.plover.com/prog/git-tastrophe.html&quot;&gt;The Universe of Discourse: Another Git catastrophe cleaned up&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mokacoding.com/blog/your-git-log-should-tell-a-story/&quot;&gt;Your Git Log Should Tell A Story&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@yairchu/how-git-mediate-made-me-stop-fearing-merge-conflicts-and-start-treating-them-like-an-easy-game-of-a2c71b919984#.b52n3ysjw&quot;&gt;How git-mediate made me stop fearing merge conflicts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://justinhileman.info/article/changing-history/&quot;&gt;Changing history, or How to Git pretty&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.freecodecamp.com/bash-shortcuts-to-enhance-your-git-workflow-5107d64ea0ff#.pza61nb9p&quot;&gt;Bash Shortcuts to Enhance Your Git Workflow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://perladvent.org/2016/2016-12-07.html&quot;&gt;Writing git hooks with Git::Hooks&lt;/a&gt; from Perl Advent Calendar 2016&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://githubengineering.com/how-we-made-diff-pages-3x-faster/&quot;&gt;How we made diff pages three times faster&lt;/a&gt; on GitHub Engineering blog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cloudson/gitql&quot;&gt;Gitql - A git query language&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/larsxschneider/git-repo-analysis&quot;&gt;Git Repo Analysis - Scripts to identify possible culprits for slow/large repositories&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://public-inbox.org/git/1341c01a-aca7-699c-c53a-28d048614bfe@alum.mit.edu/&quot;&gt;git-test - A script for running automated tests across some commits and keeping track of the results&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/arzzen/git-quick-stats/&quot;&gt;git-quick-stats - access various statistics in git repository&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/icefox/git-map&quot;&gt;git-map - execute git commands in multiple Git repositories&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mnafees/git-snap-commit&quot;&gt;git-snap-commit - take snapshots of your index.html as it changes from time to time&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-annex.branchable.com/tips/peer_to_peer_network_with_tor/&quot;&gt;git-annex on peer to peer network with tor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/glandium/git-cinnabar&quot;&gt;git-cinnabar - a remote helper to interact with mercurial repositories&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dxa4481/truffleHog&quot;&gt;truffleHog - searches through git repositories for high entropy strings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.syntevo.com/deepgit/&quot;&gt;Archaeology Tool DeepGit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitea.io/en-US/&quot;&gt;Gitea&lt;/a&gt; is a community managed fork of Gogs, a lightweight code hosting solution written in Go.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Peaker/git-mediate&quot;&gt;git-mediate - a tool resolving trivial conflicts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://donnemartin.com/viz/&quot;&gt;Viz - Visualize GitHub’s Newest, Most Popular Repos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://physics.oregonstate.edu/~roundyd/fac/&quot;&gt;Fac&lt;/a&gt; is a general-purpose build system ensuring that all source files are added to a (git) repo&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/perl6/whateverable/wiki/Bisectable&quot;&gt;Bisectable&lt;/a&gt; is IRC bot on #perl6 helping to find &lt;em&gt;when&lt;/em&gt; something was broken in Perl6 (Rakudo) codebase&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blogs.perl.org/users/ovid/2016/11/easily-clean-up-a-teams-remote-git-branches.html&quot;&gt;Easily clean up a team’s remote git branches&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;, and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;,
with help from Lars Schneider &amp;lt;&lt;a href=&quot;mailto:larsxschneider@gmail.com&quot;&gt;larsxschneider@gmail.com&lt;/a&gt;&amp;gt; and Johannes Schindelin &amp;lt;&lt;a href=&quot;mailto:johannes.schindelin@gmx.de&quot;&gt;johannes.schindelin@gmx.de&lt;/a&gt;&amp;gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 22 (December 14th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/12/14/edition-22/</link>
      <pubDate>Wed, 14 Dec 2016 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/12/14/edition-22/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-22-december-14th-2016&quot;&gt;Git Rev News: Edition 22 (December 14th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 22nd edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of November 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAHd499AjXh1YnVgBj_8j0fgvOgOn53y+sPBBy6y7mSM-+dCyVw@mail.gmail.com/&quot;&gt;v2.11 new diff heuristic?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eight days before the v2.11.0 Git release, Robert Dailey asked on the
mailing list if there would be a new diff heuristic in the new release:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I dug into the git diff documentation here:&lt;/p&gt;

  &lt;p&gt;https://git-scm.com/docs/git-diff&lt;/p&gt;

  &lt;p&gt;It mentions a “–compaction-heuristic” option. Is this the new
heuristic outlined by the release notes? If not, which is it? Is the
compaction heuristic compatible with the histogram diff algorithm? Is
there a config option to turn this on all the time? For that matter,
is this something I can keep on all the time or is it only useful in
certain situations?&lt;/p&gt;

  &lt;p&gt;There’s still so much more about this feature I would like to know.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Stefan Beller answered most of Robert’s questions saying that indeed
the “–compaction-heuristic” option is the new heuristic, and it is
compatible with the histogram diff algorithm “as the compaction
heuristic is applied after the actual diff is performed”.&lt;/p&gt;

&lt;p&gt;Stefan also said that ‘diff.compactionHeuristic’ is the config option
to turn this heuristic on and that “the background story (and what
this new compaction heuristic is doing) is found at
&lt;a href=&quot;https://github.com/mhagger/diff-slider-tools&quot;&gt;Michael Haggerty’s diff-slider-tools repository&lt;/a&gt;”.&lt;/p&gt;

&lt;p&gt;But Jeff King, alias Peff, who works with Michael for GitHub, replied
that the above ‘compaction heuristic’ is about “the ‘old’ attempt at a
similar feature from v2.9. The ‘new’ one goes by the name
‘–indent-heuristic’ (and ‘diff.indentHeuristic’ in the config)”.&lt;/p&gt;

&lt;p&gt;Peff added that “more discussion about how it works” can be found in
the commit message of
&lt;a href=&quot;https://github.com/git/git/commit/433860f3d0beb0c6f205290bd16cda413148f098&quot;&gt;Michael’s commit that introduces the ‘indent heuristic’&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This commit message indeed looks impressive and shows that a lot of
work has been going on for a long time to improve the diff
heuristics. It can make one wonder if Git developers are soon going to
use artificial intelligence algorithms to train a neural network to
yield the best possible diffs.&lt;/p&gt;

&lt;p&gt;Anyway Jacob Keller also answered saying that the config option is
undocumented and that:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Currently it is being evaluated and likely we want to make it default
in the near future once we are certain that it helps and doesn’t make
any difference worse.&lt;/p&gt;

  &lt;p&gt;So long term you will not need any special knobs to benefit.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Peff agreed that “it is not the default in v2.11, but it probably
will become so in a future version”.&lt;/p&gt;

&lt;p&gt;Later in the &lt;a href=&quot;https://github.com/blog/2288-git-2-11-has-been-released&quot;&gt;GitHub blog post about the v2.11 release&lt;/a&gt;,
Peff mentioned this new (undocumented but testable) feature.&lt;/p&gt;

&lt;p&gt;It’s interesting to see that users are interested in better diff
algorithms, and that Git developers provide them with new advanced
options to play with before hopefully improving the default
algorithms.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAD03jn5PAZcFeesaq2osjo7cYd1frWZeN0odNqTh+AMxSEmLgQ@mail.gmail.com/&quot;&gt;trustExitCode doesn’t apply to vimdiff mergetool&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dun Peal wrote that he is using vimdiff as his mergetool, and has the
‘mergetool.vimdiff.trustExitCode’ configuration option set to ‘true’
in his ~/.gitconfig file. Nevertheless when he makes vimdiff exit
with code 1 (to mean failure), Git still acts as if the merge had
succeeded.&lt;/p&gt;

&lt;p&gt;From the documentation of ‘mergetool.vimdiff.trustExitCode’ he
expected that with such an exit code Git would consider that the merge
hadn’t been successful.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, replied that the configuration variable “is
used only for a ‘user’ tool, not for the builtin tool profiles”. And,
while vimdiff has a builtin tool profile, Peff suggested a workaround
that configured vimdiff as a user tool.&lt;/p&gt;

&lt;p&gt;Dun then wrote that he would find more sensible that by default Git
would rely on the exit code from the tool, and that he hopes the
developers change this default, or at least let users override it for
the builtin invocations.&lt;/p&gt;

&lt;p&gt;Peff replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Yeah, I’m inclined to agree. But like I said, I’m not too familiar with
this area, so maybe there are subtle things I’m missing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Junio Hamano later explained that “some tools are known to give unusable
exit codes, so we ignore their exit codes by default”.&lt;/p&gt;

&lt;p&gt;As Peff had said that he doesn’t use mergetools, Dun also asked:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Finally, if you’re not using mergetools, how do you resolve conflicts?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Peff replied that he just edits the conflicted sections in vim and
uses &lt;a href=&quot;https://github.com/git/git/tree/master/contrib/git-jump&quot;&gt;git-jump&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the meantime, David Aguilar, who has previously contributed a lot to
mergetool, sent a patch to allow “tools to opt-in to
trustExitCode=true”. He warned though that for tkdiff and kdiff3, his
patch has “a subtle change in behavior, but not one that should be
problematic”.&lt;/p&gt;

&lt;p&gt;Later, David sent another patch that “allow tools to advertise their
own default value for trustExitCode, so that users do not need to
opt-in to the original behavior”.&lt;/p&gt;

&lt;p&gt;Peff and Junio reviewed the patches and found them mostly good, though
they suggested some small improvements.&lt;/p&gt;

&lt;p&gt;David has since posted
&lt;a href=&quot;https://public-inbox.org/git/20161129093807.24637-1-davvid@gmail.com/&quot;&gt;new patches&lt;/a&gt;
that have been found “sensible”, so it looks very likely that this
area of Git will improve in the next feature version.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-david-aguilar&quot;&gt;Developer Spotlight: David Aguilar&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Who are you and what do you do?&lt;/p&gt;

    &lt;p&gt;I’m a software developer living in Los Angeles, CA. I work at
&lt;a href=&quot;https://www.disneyanimation.com/&quot;&gt;Walt Disney Animation Studios&lt;/a&gt;
where I &lt;a href=&quot;https://www.engadget.com/2016/03/04/fur-technology-makes-zootopias-bunnies-believable/&quot;&gt;develop tools&lt;/a&gt;
that are used for creating computer-generated animated films.&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/davvid&quot;&gt;My Github page&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.imdb.com/name/nm2143013/&quot;&gt;My IMDB page&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;WDAS is a Linux shop. When I started there in 2004 we were using an
SCM system that was slow and not too easy to use, so there was a desire
to find a better solution. Git started to gain momentum just as we were
looking to reimagine our development workflow, so I took a bet on Git.&lt;/p&gt;

    &lt;p&gt;We started migrating the studio’s software teams to Git in 2008, and I
soon became the person you’d find in git.txt as described in xkcd/1597.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What would you name your most important contribution to Git?&lt;/p&gt;

    &lt;p&gt;Within the Git project itself, my most important contributions are the
addition of “git difftool” and on-going maintenance of its sibling
“git mergetool” merge-resolution helper tool.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git difftool&lt;/code&gt; is a natural extension of Git’s rich diff capabilities.
difftool was created when a co-worker suggested that Git needed better
tools for inspecting changes, and that they preferred visual tools such
as tkdiff and xxdiff. I had hacked together a script that we were using
daily at work, so I
&lt;a href=&quot;http://public-inbox.org/git/20081226013021.GA15414@gmail.com/&quot;&gt;shared it&lt;/a&gt;
with the mailing list. Folks almost immediately started suggesting
improvements. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git difftool&lt;/code&gt; matured in contrib/ for a few months and
became part of Git’s core toolset in v1.6.3.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What are you doing on the Git project these days, and why?&lt;/p&gt;

    &lt;p&gt;I still help maintain and review code related to difftool and mergetool.
When users report issues I always try to distill the problem down into a
testcase, add it to Git’s test suite, and come up with a patch to
fix the problem.&lt;/p&gt;

    &lt;p&gt;Outside of the Git project, but still within the Git community,
I wrote and continue to maintain
&lt;a href=&quot;https://github.com/git-cola/git-cola&quot;&gt;Git Cola&lt;/a&gt;, a free and
cross-platform graphical user interface for Git that was designed around
my unix-centric, keyboard-focused user interface sensibilities.
I still improve and add new features to Git Cola when time permits.&lt;/p&gt;

    &lt;p&gt;Git has helped me immensely in my daily workflow so I think it’s
important to contribute back in any way I can.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

    &lt;p&gt;I would like to see a focus on scalability and better support for working
with large files and repositories. There are existing projects in this
area that would benefit from help:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;pluggable ref backends&lt;/li&gt;
      &lt;li&gt;git-annex&lt;/li&gt;
      &lt;li&gt;watchman support&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

    &lt;p&gt;From a usability angle, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset --{soft,mixed,merge,keep,hard}&lt;/code&gt;
is a lot to understand for beginners.&lt;/p&gt;

    &lt;p&gt;I always thought it would be good for Git to fully adopt the
“staging area” metaphor instead of its traditional “index” and “cache”
jargon, but I would not go so far as to remove support for old flags.
At most, I’d stop advertising them in the documentation, but would
still support them.  Backwards compatibility is a big deal in Git.&lt;/p&gt;

    &lt;p&gt;Lower hanging fruit:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;color.ui could default to auto.&lt;/li&gt;
      &lt;li&gt;log.decorate could default to short.&lt;/li&gt;
      &lt;li&gt;rebase.autostash and rebase.autosquash could default to true.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://github.com/git-cola/git-cola&quot;&gt;Git Cola&lt;/a&gt; ;-)&lt;/p&gt;

    &lt;p&gt;A few more of my favorites are,&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Git’s shell completions and prompt (contrib/completion/ in git.git)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/tpope/vim-fugitive&quot;&gt;vim-fugitive&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://gitolite.com/gitolite/&quot;&gt;gitolite&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://git-annex.branchable.com/&quot;&gt;git-annex&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/whats-new-in-git-2-11-64860aea6c4f#.dzf3wjhco&quot;&gt;What’s new in Git 2.11?&lt;/a&gt; by Atlassian’s Tim Pettersen&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.deveo.com/whats-new-in-git-2-11/&quot;&gt;What’s new in Git 2.11&lt;/a&gt; from Deveo’s Ilmari Kontulainen&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2288-git-2-11-has-been-released&quot;&gt;Git 2.11 has been released&lt;/a&gt; by GitHub’s Peff&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jonas/tig/releases/tag/tig-2.2.1&quot;&gt;tig-2.2.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.25.0-rc1&quot;&gt;libgit2 v0.25.0 RC1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03236.html&quot;&gt;jgit-dev approaching 4.6 release&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/11/22/gitlab-8-14-released/&quot;&gt;GitLab 8.14&lt;/a&gt; with patches to &lt;a href=&quot;https://about.gitlab.com/2016/12/08/gitlab-8-dot-14-dot-4-released/&quot;&gt;8.14.4, 8.13.9, and 8.12.12&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2287-git-merge-2017-tickets-are-now-available&quot;&gt;Git Merge 2017 tickets are now available&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitenterprise.me/2016/11/23/gerrit-user-summit-2016-report/&quot;&gt;Gerrit User Summit 2016 Report&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.atlassian.com/blog/2016/04/stop-foxtrots-now/&quot;&gt;Protect our Git Repos, Stop Foxtrots Now!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/12/08/git-tips-and-tricks/&quot;&gt;Git Tips &amp;amp; Tricks from GitLab&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jeroenthora.be/post/git-tips-and-tricks-for-everyday-use&quot;&gt;Git tips &amp;amp; tricks for everyday use&lt;/a&gt; by Jeroen Thora&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.visualstudio.com/learn/what-is-git/&quot;&gt;What is Git? From Visual Studio&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dieter.plaetinck.be/post/restoring-accidental-git-force-push-overwrite-on-github-if-dont-have-needed-commits-locally/&quot;&gt;Restoring accidental git force push overwrite on GitHub if you don’t have the needed commits locally&lt;/a&gt; by Dieter Plaetinck&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://erikbern.com/2016/12/05/the-half-life-of-code.html&quot;&gt;The half-life of code &amp;amp; the ship of Theseus&lt;/a&gt; by Erik Bernhardsson&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.eclipsecon.org/2013/sites/eclipsecon.org.2013/files/Scaling%20Up%20JGit%20-%20EclipseCon%202013.pdf&quot;&gt;Scaling Up JGit - a “classic” presentation from EclipseCon 2013.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2293-resolve-simple-merge-conflicts-on-github&quot;&gt;Resolve simple merge conflicts on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.pmease.com/gitplex&quot;&gt;New Git repository manager: GitPlex&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kimmobrunfeldt/git-hours&quot;&gt;git-hours: Estimate time spent on a git repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by
Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;,
Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt; and
Markus Jansen &amp;lt;&lt;a href=&quot;mailto:mja@jansen-preisler.de&quot;&gt;mja@jansen-preisler.de&lt;/a&gt;&amp;gt;
with help from David Aguilar.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 21 (November 16th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/11/16/edition-21/</link>
      <pubDate>Wed, 16 Nov 2016 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/11/16/edition-21/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-21-november-16th-2016&quot;&gt;Git Rev News: Edition 21 (November 16th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 21st edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of October 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://sites.google.com/site/2016gsocmentorsummit/home&quot;&gt;Git related discussions at the Google Summer of Code Mentor Summit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There were a number of Git related discussions at the Google Summer of
Code (GSoC) Mentor Summit that took place in Google offices in
Sunnyvale California from October 29th to October 30th.&lt;/p&gt;

&lt;p&gt;298 mentors from 149 organizations attended the event. There were some
talks that had been planned by the GSoC team at Google to talk mostly
about the past GSoC and the future one. But most of the event was
organized in an “unconference” style by the mentors who were there.&lt;/p&gt;

&lt;p&gt;The first “unconference” style Git related talk was led by
&lt;a href=&quot;https://github.com/shiftkey&quot;&gt;Brendan Forster&lt;/a&gt; and
&lt;a href=&quot;https://github.com/parkr&quot;&gt;Parker Moore&lt;/a&gt; from GitHub.
Their goal was to get input from mentors about what they like and
don’t like about GitHub.&lt;/p&gt;

&lt;p&gt;Most of the GitHub features discussed were related to GitHub pages and
to discussion threads in issues and pull requests. Parker, who is also
the &lt;a href=&quot;http://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; maintainer, often replied to
requests with “you’ll be happy… soon”. So it looked like GitHub
has been working on a number of new features in those areas and has
been planning to release some of them soon, though Parker said they
couldn’t promise anything concrete.&lt;/p&gt;

&lt;p&gt;Some people specifically asked if it would be possible to have a
better integration between email and discussion threads in issues and
pull requests. Discussions about this subject often happen on the Git
mailing list, for example there was a long one last August under the
title &lt;a href=&quot;http://public-inbox.org/git/CAGZ79kasebzJb=b2n=JQiVMrSfJKaVfZaaoaVJFkXWuqKjfYKw@mail.gmail.com/&quot;&gt;“Working with public-inbox.org”&lt;/a&gt;.
But it looks like it is complex and sensitive subject and it is not
likely that good solutions will appear soon.&lt;/p&gt;

&lt;p&gt;Ironically the next unconference talk, led by Martin Braun from
&lt;a href=&quot;http://gnuradio.org/&quot;&gt;GNU Radio&lt;/a&gt; in the same room, called
“The Closed-Source Proliferation”, was about the fact that many open
source projects now use and depend on closed source tools like GitHub
and Slack.&lt;/p&gt;

&lt;p&gt;A number of mentors said that they are using GitHub because of the
network effect and also because they don’t want to spend time, and
maybe money, managing their own servers and a number of different
tools on them.&lt;/p&gt;

&lt;p&gt;Some people replied that it should be possible to have projects hosted
by university related organizations like
&lt;a href=&quot;http://osuosl.org/&quot;&gt;OSU Open Source Lab&lt;/a&gt; using open source tools. It
also appears that Canadian universities are now required to host their
software on servers located in Canada, which excludes GitHub, so some
universities there have started to setup solutions.&lt;/p&gt;

&lt;p&gt;People mentioned that &lt;a href=&quot;https://gitlab.com/gitlab-org/gitlab-ce/&quot;&gt;GitLab-CE&lt;/a&gt;,
the GitLab Community Edition, was a good solution for them, but others
were not happy that there is &lt;a href=&quot;https://gitlab.com/gitlab-org/gitlab-ee/&quot;&gt;GitLab-EE&lt;/a&gt;,
the GitLab Enterprise Edition, which is not open source.&lt;/p&gt;

&lt;p&gt;The last Git related talk called “Git/Gerrit” had been planned by the
Google team and was given by Shawn Pearce. Shawn used to work on Git a
lot, and has created JGit, EGit and
&lt;a href=&quot;https://www.gerritcodereview.com/&quot;&gt;Gerrit&lt;/a&gt;. He is now leading a
large team at Google working on version control related things. Four
members of his team have been contributing to Git. Stefan Beller and
Jonathan Nieder have been contributing for a long time, while Brandon
Williams and Jonathan Tan started contributing more recently.&lt;/p&gt;

&lt;p&gt;In his talk, Shawn described how Git has been developing a big test
suite since it’s beginning in 2005 and that it’s “worth its weight
when you have 1438 contributors”. It has helped Junio set a
“consistent bar about quality” and has been a “huge success” that has
“prevented too many regressions to be counted”.&lt;/p&gt;

&lt;p&gt;On the contrary Shawn said that he started Gerrit in 2008, but they
didn’t really test its REST API until 2013, and didn’t do any UI tests
until 2016, “shame on me”.&lt;/p&gt;

&lt;p&gt;For a long time Gerrit tests relied on “monkeys testing everything”
and there were a lot of regressions. It was hard to get confidence on
releases.&lt;/p&gt;

&lt;p&gt;There are 284 contributors, and now 1847 junit tests and 524 polymer
tests. The tests give confidence in the quality of the new
releases. They are run on every commit which is easy to do with Gerrit
as it can be linked with tools like Travis CI, Circle CI or Jenkins
and the result of the tests can be displayed in the interface along
with the review of each commit.&lt;/p&gt;

&lt;p&gt;He said though that automation has its limits as it difficult to test
all configurations.&lt;/p&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/80919456-7563-2c16-ba23-ce4fcc2777de@pelly.co/&quot;&gt;Expanding Includes in .gitignore&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aaron Pelly asked for a new feature on the mailing list:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I want git to be able to include, in its gitignore files, sub-files of
ignores or have it understand a directory of ignore files. Or both.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He wanted to be able to pull from https://github.com/github/gitignore
and “include relevant bits project by project and/or system wide”,
without having to “update many projects manually if that, or any other,
repo changes”.&lt;/p&gt;

&lt;p&gt;And after discussing possible implementations, he asked:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I would like to know the desirability/practicality/stupidity of such a
feature as I believe it is within my skillset to implement it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Stefan Beller suggested to (sym)link .git/info/exclude to an up to
date version of the gitignore repo as a hack. But Aaron said he would
still need to copy stuff from one file to another by hand as there
would be sections that are project, language, editor, machine,
whatever, specific.&lt;/p&gt;

&lt;p&gt;Then Alexei Lozovsky, Jacob Keller, Jeff King, Duy Nguyen and Aaron
discussed possible implementations. One possibility was to add
“include” directives in .gitignore files, but that was considered
complex and dangerous.&lt;/p&gt;

&lt;p&gt;The other possibility, favored by the reviewers, was to add either
“.gitignore.d” or “.git/info/exclude.d” directories that would contain
many files. The content of those files would be concatenated by Git to
get the actual information about what should be ignored.&lt;/p&gt;

&lt;p&gt;Jacob Keller, alias Jake, said that the reading of files in such a
directory should “exclude reading .git or other hidden files in some
documented manor so as to avoid problems when linking to a git
directory for its contents”.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, said that the “.git/info/exclude.d” approach
could be implement without any changes by doing:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  path=.git/info/exclude
  cat $path.d/* &amp;gt;$path
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and if we actually implement something like that, then&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  cd .git/info
  git clone /my/exclude/repo exclude ;# or exclude.d
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;should work.&lt;/p&gt;

&lt;p&gt;Duy replied that there could be complications with negative patterns
though.&lt;/p&gt;

&lt;p&gt;Junio Hamano wrote that he does “not see the point of making in-tree
.gitignore to a forest of .gitignore.d/ at all, compatibility
complications is not worth even thinking about”. But it looks like the
possibility of having a “.git/info/exclude.d” directory is still open.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-jacob-keller-alias-jake&quot;&gt;Developer Spotlight: Jacob Keller, alias Jake&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My name is Jake, I’m an avid contributor to various open source
projects. I currently work for Intel doing Linux network programming
for their 10GbE/40GbE Ethernet networking driver. I have contributed
to Git to help resolve specific issues I’ve had in the past, and
continue to contribute as I like to give back to the communities that
I depend on as a software developer.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would say my most important contribution was modifying the refspec
globs for fetching to allow globbing past / (slash) boundaries.
However, the largest contribution is probably the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff
--submodule=inline-diff&lt;/code&gt; format for displaying the full diff between a
submodule change.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently I have mostly spent time trying to find areas where my
review could be helpful. There are a few projects I wouldn’t mind
working on, but as my employer has not hired me directly to work on
Git, that limits the amount of time that I spend during work hours.
I’m certainly open to new opportunities to contribute in the future.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hmm. This is a tough question. I think the biggest things I would work
towards is implementing something like git-series as a core part of
git, at the very least providing the tools needed to make storing the
meta-history easier. For example, using git series today is pretty
good, but I often mess up and use regular git commands to look at
branches or status, and it can tend to make the experience very
brittle. Additionally there is the effort to implement
&lt;a href=&quot;https://public-inbox.org/git/xmqqa8dfdt6y.fsf@gitster.mtv.corp.google.com/&quot;&gt;gitrefs&lt;/a&gt;
for storing reachability information about objects. Having this sort
of tool built into git would allow more commands and areas to
recognize them easily, making the entire experience much smoother.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honestly? I would re-write much of the interface to be more
consistent, removing aspects which aren’t consistent with some of our
more modern design. A good example, was a colleague of mine who is not
very fluent in git recently tried to checkout a new branch from our
main remote, and ended up doing something like:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git branch -a
# copy the &quot;remotes/origin/branch&quot;
$ git checkout &amp;lt;copied text&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;which unfortunately didn’t actually end up doing what she had
intended. She then accidentally included commits into a release tag
without realizing they weren’t on that particular branch. These sort
of pain points exist in a lot of places. Most of the time, they exist
because the tool provides additional express ability and power at some
expense of cost. It may also be simply a documentation issue.&lt;/p&gt;

&lt;p&gt;However, there are many warts on the user interface that I would love
to be able to deprecate and remove as they cause issues for co-workers
who are new to Git. I love using Git, and I think the extra tools that
we have created are very beneficial, but I have many coworkers who
haven’t gotten over that initial road block.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think right now it is git-series. I have also extensively used
Stacked Git in the past. Both of these tools help to manage a patch
series, and this is something that I think core git is currently
lacking in.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are your favorite Git features?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Definitely interactive addition, and the ability to rebase local
history. Ever since I realized that I could re-write history, I have
changed my development model to develop and commit fast, then re-write
to look good later. Additionally, I aim to make my work easily
bisectable, since I have used git-bisect “run” to varying degrees of
success. The number of times that I’ve tried to do some history
archeology and ended up on an “Import from CVS” commit that meant
nothing to my issue, has led me to heavily make use of tools to make
my history as presentable as possible.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your preferred Git development model?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think pull-requests, with avid local rebasing and squashing of
commits. Followed shortly by the use of a tool like Gerrit or a
mailing list for review.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How did you get involved in the Git project?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, at my job, we used to use CVS to store our project history. We
have a lot of tooling around this history, including build servers. We
eventually migrated to Git, but one of the funny things that we did
carried over. When you have to compare to “versions” in  CVS, the only
reasonable way to do so is to tag, since tags are the only thing
combining multiple files together.&lt;/p&gt;

&lt;p&gt;So, the people who migrated tools for Git decided that Git builds
would create the same style of tags of the form
“&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tag_&amp;lt;YYMMDD&amp;gt;_&amp;lt;HHMMSS&amp;gt;&lt;/code&gt;”, which are these ridiculous tags that we need
for CVS comparing of different build versions.&lt;/p&gt;

&lt;p&gt;I tried to make them change the tool, but they refused. I found out
that I could exclude certain refs when fetching, by not fetching tags
and instead fetching specific “refs/tags/*”. However, this would still
fetch all these tags I didn’t care about. So I modified Git to allow
using * with less than a full section, so I could say fetch
“refs/tags/driver-*” which would fetch human readable tags that were
meaningful without fetching hundreds of tags created by nightly
builds.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqd1ijwu3s.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git v2.10.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.20.1611022158140.3108@virtualbox/&quot;&gt;Git for Windows 2.10.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqbmxl1tsb.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git v2.11.0-rc1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Prerelease: Git for Windows &lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.20.1611051025030.3108@virtualbox/&quot;&gt;v2.11.0-rc0&lt;/a&gt;, &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.11.0-rc1.windows.1&quot;&gt;v2.11.0-rc1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.24.3&quot;&gt;libgit2 v0.24.3 Maintenance Release&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/pygit2/releases/tag/v0.24.2&quot;&gt;libgit2/pygit2 v0.24.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2280-github-enterprise-2-8-is-now-available-with-code-review-project-management-tools-and-jupyter-notebook-rendering&quot;&gt;GitHub Enterprise 2.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/10/22/gitlab-8-13-released/&quot;&gt;GitLab 8.13&lt;/a&gt; through &lt;a href=&quot;https://about.gitlab.com/2016/11/09/gitlab-8-dot-13-dot-5-released/&quot;&gt;8.13.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A &lt;a href=&quot;https://opensource.googleblog.com/2016/11/google-summer-of-code-2016-blog-posts.html&quot;&gt;Google Summer of Code 2016 blog post round-up&lt;/a&gt;
on the &lt;a href=&quot;https://opensource.googleblog.com/&quot;&gt;Google Open Source Blog&lt;/a&gt; quotes an article from the previous Git Rev News edition.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://page.gitlab.com/2016-Developer-Survey_2016-Developer-Survey.html&quot;&gt;GitLab’s 2016 Global Developer Survey Report&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2268-top-open-source-launches-on-github&quot;&gt;GitHub iterates through the most popular open source projects on their service&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://devfreebooks.github.io&quot;&gt;DevFreeBooks&lt;/a&gt; includes a section on &lt;a href=&quot;https://devfreebooks.github.io/git/&quot;&gt;free Git books&lt;/a&gt;; the site itself is hosted on GitHub Pages, and you can submit other free books &lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSeXsmlLo3S7lJF82LGTOMoMpA4vg_T38Ez47gQoU6P6KaFwQg/viewform&quot;&gt;via Google Forms&lt;/a&gt; or via pull request&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/KleoPetroff/dev-log&quot;&gt;Kliment Petrov’s dev-log&lt;/a&gt; includes section with &lt;a href=&quot;https://github.com/KleoPetroff/dev-log/blob/master/source/git.md&quot;&gt;Git-related links&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.davidecoppola.com/2016/11/10-free-resources-to-learn-how-to-use-git/&quot;&gt;10 free resources to learn how to use git&lt;/a&gt; by Davide Coppola&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Git User’s Survey 2016 has been closed on 22 October 2016; you can find &lt;a href=&quot;https://survs.com/report/nz2odu1spl&quot;&gt;Report from Git User’s Survey 2016&lt;/a&gt; on &lt;a href=&quot;https://git.wiki.kernel.org/index.php/GitSurvey2016&quot;&gt;GitSurvey2016&lt;/a&gt; Git Wiki page.&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge 2017&lt;/a&gt; will happen in Brussels on February 2nd (workshops) and 3rd (conference). For those considering a presentation, the &lt;a href=&quot;https://cfp.githubapp.com/events/git-merge-2017&quot;&gt;CfP&lt;/a&gt; deadline is November 21st 12:00am PST. For (S)CM/Open Source/conference addicts, the &lt;a href=&quot;https://fosdem.org/2017/&quot;&gt;FOSDEM&lt;/a&gt; (Brussels, February 4th and 5th) and the &lt;a href=&quot;http://cfgmgmtcamp.eu/gent-2017/&quot;&gt;Config Management Camp&lt;/a&gt; (Ghent, February 6th and 7th) provide additional fora.&lt;/li&gt;
  &lt;li&gt;There will be a &lt;a href=&quot;http://public-inbox.org/git/20161025162829.jcy6fmnmdjual6io@sigill.intra.peff.net/&quot;&gt;Contributor’s Summit&lt;/a&gt; on the first day of Git Merge (February 2nd). This is a small, informal meeting of people who are involved in the development of Git or related tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A poem &lt;a href=&quot;https://mobile.twitter.com/craig552uk/status/793131545989087232&quot;&gt;written in Git&lt;/a&gt; (&lt;a href=&quot;https://github.com/craig552uk/git-poem&quot;&gt;repo URL&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;GitLab show off a workflow based on some of their new features &lt;a href=&quot;https://about.gitlab.com/2016/10/25/gitlab-workflow-an-overview/&quot;&gt;in this overview&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.acolyer.org/2016/10/24/whats-wrong-with-git-a-conceptual-design-analysis/&quot;&gt;What’s wrong with Git? A conceptual design analysis&lt;/a&gt; - another summary of a research paper mentioned in the previous edition, by Adrian Colyer.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.axosoft.com/2016/09/29/git-for-fantasy-football/&quot;&gt;GitKraken and Fantasy Football FTW&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;From the competition: &lt;a href=&quot;https://groups.google.com/forum/#!topic/mozilla.dev.version-control/nh4fITFlEMk&quot;&gt;Facebook provided the Mercurial community an update on how they are using it internally&lt;/a&gt;, some interesting ideas in there for sure.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://lwn.net/Articles/705228/&quot;&gt;Group maintainership models&lt;/a&gt; article on LWN.net, a report from &lt;a href=&quot;http://lwn.net/Articles/KernelSummit2016/&quot;&gt;2016 Kernel Summit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codewords.recurse.com/issues/two/git-from-the-inside-out&quot;&gt;Git from the inside out&lt;/a&gt; by Mary Rose Cook (with a very nice visualization schema), from March 2015&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.sbf5.com/~cduan/technical/git/&quot;&gt;Understanding Git Conceptually&lt;/a&gt; tutorial by Charles Duan&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://larsxschneider.github.io/2016/09/21/large-git-repos&quot;&gt;Large Git Repositories&lt;/a&gt; by Lars Schneider, about different types of “large” repositories, and how one can handle them in Git&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.davidecoppola.com/2016/10/how-to-traverse-git-repository-using-libgit2-and-cpp/&quot;&gt;How to traverse a git repository using libgit2 and C++&lt;/a&gt; by Davide Coppola&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Watching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.codechannels.com/video/github/git/tips-tricks-gotta-git-them-all-github-universe-2016/&quot;&gt;Tips &amp;amp; Tricks: Gotta Git Them All – GitHub Universe 2016&lt;/a&gt; on CodeChannels, published on September 28, 2016 by GitHub&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RPvXWYdpbAs&amp;amp;feature=youtu.be&amp;amp;t=35s&quot;&gt;How to become a Git power user&lt;/a&gt;, a webinar by Deveo, streamed live on 10 Nov 2016 on YouTube&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/guyzmo/git-repo&quot;&gt;Git-Repo: CLI utility to manage Git services from your workspace&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/windows/&quot;&gt;Git Tower, a git client, is available for Windows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://melpa.org/#/git-blamed&quot;&gt;git-blamed&lt;/a&gt; - Emacs minor mode for &lt;em&gt;incremental&lt;/em&gt; blame for Git; a part of &lt;a href=&quot;https://github.com/tsgates/git-emacs&quot;&gt;https://github.com/tsgates/git-emacs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://gitian.org/&quot;&gt;Gitian: a secure source-control oriented software distribution method for trusted binaries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Jakub Narębski &amp;lt;&lt;a href=&quot;mailto:jnareb@gmail.com&quot;&gt;jnareb@gmail.com&lt;/a&gt;&amp;gt;
with help from Jacob Keller, Johannes Schindelin, Markus Jansen, Gábor Szeder and Jeff King.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 20 (October 19th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/10/19/edition-20/</link>
      <pubDate>Wed, 19 Oct 2016 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/10/19/edition-20/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-20-october-19th-2016&quot;&gt;Git Rev News: Edition 20 (October 19th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 20th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of September 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
---&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://public-inbox.org/git/CA+55aFy0_pwtFOYS1Tmnxipw9ZkRNCQHmoYyegO00pjMiZQfbg@mail.gmail.com/&quot;&gt;Changing the default for “core.abbrev”?&lt;/a&gt; (&lt;em&gt;written by Jakub Narębski&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Linus Torvalds asked for increasing the default value for number of
characters in SHA-1 abbreviations.  The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default_abbrev = 7&lt;/code&gt; was
reasonable in the early days of Git, but a project of the size of the
Linux kernel needs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config --global core.abbrev 12&lt;/code&gt;. While Git
will extend the seven hex digits until the object name is unique,
that only reflects the &lt;em&gt;current&lt;/em&gt; situation in the repository. It gets
annoying when a commit message has a short git ID that is no longer
unique a few months later when one needs to go back and try to figure
out what went wrong in that commit.&lt;/p&gt;

&lt;p&gt;Jeff King, alias Peff, answered the &lt;em&gt;“it gets annoying”&lt;/em&gt; part in the
&lt;a href=&quot;https://public-inbox.org/git/20160926115720.p2yb22lcq37gboon@sigill.intra.peff.net/&quot;&gt;[PATCH 0/10] helping people resolve ambiguous sha1s&lt;/a&gt;
patch series (merged in &lt;a href=&quot;https://git.kernel.org/cgit/git/git.git/commit/?id=66c22ba6fbe0724ecce3d82611ff0ec5c2b0255f&quot;&gt;66c22ba6&lt;/a&gt;).
This patch series taught Git to help in the situation where only
ambiguous shortened identifier is available, by listing the SHA-1s
of the objects it found, along with a few bits of information that
may help the user decide which one they meant.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  $ git rev-parse b2e1
  error: short SHA1 b2e1 is ambiguous
  hint: The candidates are:
  hint:   b2e1196 tag v2.8.0-rc1
  hint:   b2e11d1 tree
  hint:   b2e1632 commit 2007-11-14 - Merge branch &apos;bs/maint-commit-options&apos;
  hint:   b2e1759 blob
  hint:   b2e18954 blob
  hint:   b2e1895c blob
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem of Git providing SHA-1 abbreviation which would soon be
invalid was solved in different way than proposed by Linus.  Instead
of increasing the default abbrev length for all projects, making abbrevs
longer and more unwieldy also for small projects that don’t need it,
Peff &lt;a href=&quot;https://public-inbox.org/git/20160929092204.eod2cvtrqg5whu6h@sigill.intra.peff.net/&quot;&gt;proposed&lt;/a&gt;
to make default abbrev length be dynamically based on the number of objects
in the repository.  Linus sent &lt;a href=&quot;https://public-inbox.org/git/CA+55aFwbCNiF0nDppZ5SuRcZwc9kNvKYzgyd_bR8Ut8XRW_p4Q@mail.gmail.com/&quot;&gt;rough implementation&lt;/a&gt;
of this idea, which after a few iterations (and cleanups of related code)
got merged into ‘next’ as &lt;a href=&quot;https://github.com/git/git/commit/bb188d00f7&quot;&gt;bb188d00f7&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://public-inbox.org/git/cover.1472457609.git.johannes.schindelin@gmx.de/&quot;&gt;Prepare the sequencer for the upcoming rebase -i patches&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Johannes Schindelin, alias Dscho, is the maintainer of Git for
Windows. He is working for Microsoft and, on top of his maintainer
role, he has been working whenever time allowed since February this
year to speed up interactive rebase (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase -i&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Since when it was created in 2005, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; command has been
implemented using shell scripts that are calling other git commands.&lt;/p&gt;

&lt;p&gt;The interactive rebase that Dscho implemented in 2007 calls different
commands than the regular, non interactive, rebase. The regular rebase
uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt; to create a patch series from some commits,
and then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; to apply this patch series on top of a different
commit, while the interactive rebase calls &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cherry-pick&lt;/code&gt;
repeatedly for the same purpose.&lt;/p&gt;

&lt;p&gt;Neither of these approaches has been very efficient though, and the
main reason behind that is that repeatedly calling a git command has a
significant overhead. Even the regular &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; would do that as
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; had been implemented by launching &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git apply&lt;/code&gt; on each of the
patches.&lt;/p&gt;

&lt;p&gt;The overhead is especially big on Windows where creating a new process
is quite slow, but even on other OSes it requires setting up
everything from scratch, then reading the index from disk, and then,
after performing some changes, writing the index back to the disk.&lt;/p&gt;

&lt;p&gt;In case of the regular rebase,
&lt;a href=&quot;https://github.com/git/git/commit/81358dc238372793b1590efa149cc1581d1fbd98&quot;&gt;a patch series has been merged recently&lt;/a&gt;
to the ‘master’ branch that makes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; call &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git apply&lt;/code&gt;’s internal
functions without spawning the latter as a separate process. So the
regular rebase will be significantly faster especially on Windows and
for big repositories in the next Git feature release.&lt;/p&gt;

&lt;p&gt;Dscho’s work achieves the same kind of results for the interactive
rebase. The work, which has been distilled to the mailing list has a
series of patch series, greatly improves and then uses a mechanism
called the sequencer.&lt;/p&gt;

&lt;p&gt;The sequencer had been from it’s beginning
&lt;a href=&quot;https://git.wiki.kernel.org/index.php/SoC2008Ideas#Implement_git-sequencer&quot;&gt;in 2008 as a GSoC (Google Summer of Code) project&lt;/a&gt;
envisioned as a low-level patch-application engine written in C that
would “take the ‘todo’ file format used by git-rebase -i and extend it
to also support applying patches split out of mbox files”, so that
“frontends like git-am, git-rebase, etc. can then setup the ‘todo’
script and pass it to git-sequencer, which does the actual patch
application, editing, etc.”&lt;/p&gt;

&lt;p&gt;Of course it was a too much ambitious project for a GSoC project, so
the work that Stephan Beyer, the GSoC student at that time, did to
implement it was not merged. A lot of great related work by Stephan
had been merged though, and the sequencer idea as well as Stephan’s
code were still considered valuable, so that in 2011
&lt;a href=&quot;https://git.wiki.kernel.org/index.php/SoC2011Ideas#git_cherry-pick_--continue.2F--abort.2F--skip_and_git_sequencer&quot;&gt;another GSoC project was attempted&lt;/a&gt;
to further the idea and Stephan’s code. This time the goal was to
first use the sequencer to improve cherry-picking, and reverting, many
commits, and Ramkumar Ramachandra, alias Ram, succeeded. The sequencer
code got merged and it was now possible to “continue”, “abort” or
“skip” when cherry-picking or reverting many commits.&lt;/p&gt;

&lt;p&gt;Despite this success, Dscho has had to improve a lot of things to make
it possible to reuse the sequencer in the interactive rebase. For
example he had to create a git-rebase–helper in C that ported a lot
of the functionality from the git-rebase–interactive.sh shell
script.&lt;/p&gt;

&lt;p&gt;As Dscho explains &lt;a href=&quot;http://public-inbox.org/git/alpine.DEB.2.20.1609021432070.129229@virtualbox/&quot;&gt;in an answer to a question by Jakub Narębski&lt;/a&gt;,
who asked about the status of the patch series, 10 of his patch series
had already been accepted, 5 were in flight and 1 had not yet been
submitted at the beginning of September.&lt;/p&gt;

&lt;p&gt;These patch series, will speed up the interactive rebase, but are not
enough to fully replace the rebase implementation in shell by one in
C. According to Dscho such a result is “&lt;em&gt;far, far, far&lt;/em&gt; in the future”:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;…my hope is that the rebase–helper work is only an initial step,
opening the door for other contributors to tackle independent parts
of making git-rebase a builtin&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Though the patch series have been reviewed by a large number of
experienced Git developers like Junio Hamano, Johannes Sixt, Torsten
Bögershausen, Jeff King, Jakub Narębski, Dennis Kaarsemaker, Eric
Sunshine, Kevin Daudt and Stefan Beller, they are not fully merged
into Git yet. But Dscho already “integrated the whole shebang into Git
for Windows 2.10.0 and 2.10.1” that were released recently, and “it
has been running without complaints (and some quite positive
feedback)”.&lt;/p&gt;

&lt;p&gt;About the performance improvements, Dscho wrote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The end game of this patch series is a git-rebase–helper that makes
rebase -i 5x faster on Windows (according to t/perf/p3404). Travis says
that even MacOS X and Linux benefit (4x and 3x, respectively).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Such performance improvements as well as the code consolidations
around the sequencer are of course very nice. It is interesting and
satisfying to see that they are the result of building on top of
previous work over the years by GSoC students, mentors and reviewers.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/visualstudioalm/2016/09/03/whats-new-in-git-for-windows-2-10/&quot;&gt;What’s new in Git for Windows 2.10?&lt;/a&gt; (&lt;em&gt;written by Jakub Narębski&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dscho wrote about making &lt;em&gt;interactive rebase&lt;/em&gt; much faster in a recent
&lt;a href=&quot;https://blogs.msdn.microsoft.com/visualstudioalm/2016/09/03/whats-new-in-git-for-windows-2-10/&quot;&gt;blog post&lt;/a&gt;
(linked to in previous Git Rev News), repeating and extending information
from his answer mentioned in the above article. Among others, he wrote
how can he be sure that the code is ready:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The answer: I verified it. Inspired by &lt;a href=&quot;http://githubengineering.com/scientist/&quot;&gt;GitHub’s blog post on their
Scientist library&lt;/a&gt;, I taught
my personal Git version to cross-validate each and every interactive
rebase that I performed since the middle of May. That is, each and every
interactive rebase I ran was first performed using the original shell
script, then using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase--helper&lt;/code&gt;, and then the results were
confirmed to be identical (modulo time stamps).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And further:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Full disclosure: the cross-validation did find three regressions that
were not caught by the regression test suite (which I have subsequently
adjusted to test for those issues, of course). So it was worth the effort.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One can find which regressions were there in the &lt;a href=&quot;http://public-inbox.org/git/alpine.DEB.2.20.1609111010440.129229@virtualbox/&quot;&gt;followup on git mailing list&lt;/a&gt;.
It is interesting to find the use of the &lt;a href=&quot;https://github.com/github/scientist&quot;&gt;Scientist library&lt;/a&gt;
for ensuring the quality of Git code refactoring.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/git-log-times@mackyle-at-gmail-com/&quot;&gt;[PATCH/RFC] git log –oneline alternative with dates, times and initials&lt;/a&gt; (&lt;em&gt;written by Jakub Narębski&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kyle J. McKay had have been wanting a compact one line output format that
included dates, times and initials, and is compatible with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--graph&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  === 2015-09-17 ===
* ee6ad5f4 12:16 jch (tag: v2.5.3) Git 2.5.3
  === 2015-09-09 ===
* b9d66899 14:22 js  am --skip/--abort: merge HEAD/ORIG_HEAD tree into index
|   === 2015-09-04 ===
| * 27ea6f85 10:46 jch (tag: v2.5.2) Git 2.5.2
* 74b67638 10:36 jch (tag: v2.4.9) Git 2.4.9
                     ..........
* ecad27cf 10:32 jch (tag: v2.3.9) Git 2.3.9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://gist.githubusercontent.com/mackyle/4c33e4802a8269b3f200f2c00352ce6a/raw/815de4ef4142e13ac0b5c7b55112afdf13391eee/git-log-times.gif&quot; alt=&quot;see above&quot; title=&quot;git log-times --graph --date-order --decorate --no-merges -n 5 v2.5.3&quot; /&gt;&lt;/p&gt;

&lt;p&gt;To have all this, Kyle proposed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-log-times&lt;/code&gt; script for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contrib/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Jeff King was surprised to see this as a separate script, and proposed a
&lt;a href=&quot;https://public-inbox.org/git/20160929083315.vwb3aurwbyjwlkjn@sigill.intra.peff.net/&quot;&gt;patch series&lt;/a&gt;
adding support for features like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--commit-header&lt;/code&gt; option for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;,
making it possible to come close to what &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-log-times&lt;/code&gt; provided.&lt;/p&gt;

&lt;p&gt;Junio Hamano &lt;a href=&quot;https://public-inbox.org/git/xmqqy42afvy1.fsf@gitster.mtv.corp.google.com/&quot;&gt;reminded&lt;/a&gt;
that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contrib/&lt;/code&gt; area is not the place for random git-related things.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Unlike the earlier days of Git, if a custom command that uses Git is
very useful, it can live its own life and flourish within the much
larger Git userbase we have these days.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The proposed script was then therefore published as
&lt;strong&gt;&lt;a href=&quot;https://mackyle.github.io/git-log-compact/&quot;&gt;git-log-compact&lt;/a&gt;&lt;/strong&gt; project.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20161004150848.GA7949@brightrain.aerifal.cx/&quot;&gt;Regression: git no longer works with musl libc’s regex impl&lt;/a&gt; (&lt;em&gt;written by Jakub Narębski&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rich Felker complained that compiling Git with &lt;a href=&quot;https://www.musl-libc.org/&quot;&gt;musl libc&lt;/a&gt;
no longer works out of the box (that is, without setting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_REGEX&lt;/code&gt;
build configuration variable) after commit &lt;a href=&quot;https://github.com/git/git/commit/2f8952250a84313b74f96abb7b035874854cf202&quot;&gt;2f895225&lt;/a&gt;.
The proposed workaround unfortunately didn’t work on Windows, as pointed
out by Jeff King and Johannes Schindelin.&lt;/p&gt;

&lt;p&gt;There was a bit of derail about which are main Git platforms, and whether
Git code should be able to rely on POSIX features.  Jakub Narębski reminded
that &lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/CodingGuidelines#L4&quot;&gt;CodingGuidelines&lt;/a&gt;
specifically state that:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;p&gt;Most importantly, we never say “It’s in POSIX; we’ll happily
ignore your needs should your system not conform to it.”
We live in the real world.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;p&gt;However, we often say “Let’s stay away from that construct,
it’s not even in POSIX”.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;p&gt;In spite of the above two rules, we sometimes say “Although
this is not in POSIX, it (is so convenient | makes the code
much more readable | has other good characteristics) and
practically all the platforms we care about support it, so
let’s use it”.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;The commit in question, making Git require to use regexp engine with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;REG_STARTEND&lt;/code&gt; support, while providing fallback implementation
(turned on with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_REGEX&lt;/code&gt;), matches 3rd point in the list above.  This
extension to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;regexec()&lt;/code&gt;, introduced by the NetBSD project, is present
in all major regex implementation… though not in musl.&lt;/p&gt;

&lt;p&gt;There was yet another proposed fix for the problem, namely adding
padding so that end of mmap-ed file doesn’t fall on the page boundary,
if regex implementation doesn’t support &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;REG_STARTEND&lt;/code&gt;.  One one hand,
the workaround relied on undocumented (but sane) assumptions about
operating system behavior, on the other hand it was faster than the
workaround in original patch, that is copying contents to NUL-terminated
buffer.  Nevertheless, any workaround would mean additional code that
needs to be maintained, and it was not accepted.&lt;/p&gt;

&lt;p&gt;Also, it turned out that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;configure&lt;/code&gt; script detects if regex engine
support &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;REG_STARTEND&lt;/code&gt; and sets &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_REGEX&lt;/code&gt; if necessary, it was just
badly described.  It was &lt;a href=&quot;https://github.com/git/git/commit/842a516cb02a53cf0291ff67ed6f8517966345c0&quot;&gt;since corrected&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Though Git doesn’t yet set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_REGEX&lt;/code&gt; automatically based on information
from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uname&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAM_5GX48gDAZSvAWnxO5n8uhYf8vmfAJ88_31_ewsQxyPfF7iA@mail.gmail.com/&quot;&gt;Why are there multiple ways to get the manual in Git?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Andrew Johnson asked on the mailing list:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;While reading Pro Git 2nd Ed. I came across these three methods:&lt;/p&gt;

  &lt;p&gt;$ git help &amp;lt;verb&amp;gt;&lt;br /&gt;
$ git &amp;lt;verb&amp;gt; –help&lt;br /&gt;
$ man git-&amp;lt;verb&amp;gt;&lt;br /&gt;&lt;/p&gt;

  &lt;p&gt;I tested all three to confirm they were equivalent.&lt;/p&gt;

  &lt;p&gt;What was the motivation behind the complication, if any? I presume
most developers would not provide multiple commands that do the same
thing for absolutely no reason, so I led myself to ask this question.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fredrik Gustafsson was the first to answer. He first said that the
three commands are not actually equivalent on Windows as:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;$ man git-&amp;lt;verb&amp;gt;&lt;/p&gt;

  &lt;p&gt;does not work and&lt;/p&gt;

  &lt;p&gt;$ git help &amp;lt;verb&amp;gt;&lt;/p&gt;

  &lt;p&gt;opens a webbrowser instead of a man page.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Philip Oakley then answered that the three different methods were
added at different times for different reasons. The man methods was
first added because “historically git was a set of shell scripts named
git-*, so each stood alone”.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--help&lt;/code&gt; was the result from “the modern &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git &amp;lt;cmd&amp;gt;&lt;/code&gt; approach, with
every command normally having &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-h&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--help&lt;/code&gt; options for short form
usage and long form man pages”. Meanwhile “a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help &amp;lt;cmd&amp;gt;&lt;/code&gt; command
was created” which “allowed selection of display type, so that on
Unix/Linux man was the norm, while an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--html&lt;/code&gt; (or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--web&lt;/code&gt;) option is
available for those who like the pretty browser view”.&lt;/p&gt;

&lt;p&gt;Your own Christian Couder chimed in saying that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help&lt;/code&gt; makes it
possible to teach people one command that will do something sensible
on every system, and that it also “provides more configurability and
more features like its -a and -g options”.&lt;/p&gt;

&lt;p&gt;Jakub Narębski added that there are also help pages that are about
“concepts (gitcli, gitrevisions, githooks, gitrepository-layout,
gitglossary), or about files (gitignore, gitattributes, to some extent
githooks)” and they are “only accessible with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help &amp;lt;concept&amp;gt;&lt;/code&gt; or,
on OS with installed ‘man’, also &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;man &amp;lt;gitconcept&amp;gt;&lt;/code&gt;”.&lt;/p&gt;

&lt;p&gt;Philip replied to the above saying that “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git revisions --help&lt;/code&gt; does
work”, but Junio Hamano clarified things by saying that this was a bug
that had been recently fixed.&lt;/p&gt;

&lt;p&gt;It would indeed seem wrong to have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git &amp;lt;concept&amp;gt; --help&lt;/code&gt; working, as
concepts are not the same things as commands.&lt;/p&gt;

&lt;p&gt;Anyway this shows that it is not so simple to design a good help
system, especially one that is both full featured on different
platforms and looking simple to users.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-dennis-kaarsemaker&quot;&gt;Developer Spotlight: Dennis Kaarsemaker&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m Dennis Kaarsemaker, I do scalability and security things for
Booking.com, part of which includes hacking on our git infrastructure
together with Ævar Arnfjörð Bjarmason. I also maintain
perl5.git.perl.org and do a lot of user support.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Spending a lot of time in #git and #github on freenode solving people’s
git problems. Occasionally this leads to bug reports or even patches,
but mostly I’m trying to create make users understand git and make them
smile.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Besides user support, I do read the mailing-list and try to review
patches or pick up smaller bugs as time permits. Time however is scarce
with a fearless 14 month old girl crawling around the house trying to
get into trouble :)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I had a team of developers, their core focus would be scalability
for very big repositories. Things like a protocol that is efficient
with hundreds of thousands of refs and can be load-balanced properly, or
more efficient storage for refs, external files and other data. Or a
peer to peer continuous sync protocol for the object store.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Oh, if only I could remove submodules. They’re almost universally used
for the wrong reason, are easy to get confused about and use wrong, and
they complicate many parts of git.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Definitely GitHub. I appreciate that Git is made for distributed
version control, and regularly use it in that way; but the social
benefits of having a single place to discover, maintain and collaborate
on projects that GitHub offers really helps in getting the most out of
my open source experience. I even made a command line API client for
Github, GitLab and BitBucket :)&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqvax93w1c.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git 2.10.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.10.1.windows.1&quot;&gt;Git for Windows 2.10.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.24.2&quot;&gt;libgit2 v0.24.2 Maintenance Release&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.25.0b10&quot;&gt;libgit2/rugged v0.25.0b10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/09/22/gitlab-8-12-released/&quot;&gt;GitLab 8.12&lt;/a&gt; released and patched up to &lt;a href=&quot;https://about.gitlab.com/2016/10/17/gitlab-8-dot-12-dot-7-released/&quot;&gt;8.12.7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://survs.com/survey/3cop1kt5eg&quot;&gt;Git User’s Survey 2016&lt;/a&gt; ends soon, on 20 October 2016&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitenterprise.me/2016/10/10/gerrit-summit-2016-is-coming/&quot;&gt;Gerrit Summit 2016 is coming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Here is &lt;a href=&quot;https://github.com/book/git-test-repository&quot;&gt;git-test-repository: A Git repository full of special cases, for testing purposes&lt;/a&gt; - very handy when you’re testing out a new Git GUI or repository manager.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://marklodato.github.io/visual-git-guide/index-en.html&quot;&gt;A Visual Git Reference&lt;/a&gt; by Mark Lodato&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackaday.com/2016/09/13/automate-git-and-upgrade-your-battle-station-with-a-custom-peripheral/&quot;&gt;Automate Git and Upgrade Your Battle Station With a Custom Peripheral&lt;/a&gt; by Gerrit Coetzee&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.deveo.com/list-of-equivalent-commands-in-git-mercurial-and-svn/&quot;&gt;Command equivalents in Git, Mercurial, and Subversion&lt;/a&gt; by Antti Kirmanen&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.skilstak.io/github-as-text-book-and-work-book-828ffada9542#.vy1vivkrq&quot;&gt;GitHub Classroom as Textbook and Workbook&lt;/a&gt; by Rob Muhlestein&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://larsxschneider.github.io/2016/09/21/large-git-repos&quot;&gt;What is a “large” Git repository?&lt;/a&gt; by Lars Schneider&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://neverworkintheory.org/2016/09/30/rethinking-git.html&quot;&gt;Purposes, Concepts, Misfits, and a Redesign of Git&lt;/a&gt; is a research paper, here discussed by Greg Wilson. It lead to a &lt;a href=&quot;https://public-inbox.org/git/ce42f934-4a94-fa29-cff0-5ebb0f004eb5@gmail.com/T/#e95875b7940512b432ab2e29b3dd50ca448df9720&quot;&gt;discussion on the Git mailing list&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://gitless.com/&quot;&gt;Gitless&lt;/a&gt; is the experimental reworking of Git based on the research in the previous link&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://kamalmarhubi.com/blog/2016/10/07/git-core/&quot;&gt;Poking around /usr/lib/git-core&lt;/a&gt; by Kamal Marhubi&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hackernoon.com/lesser-known-git-commands-151a1918a60#.jwubgvjwe&quot;&gt;Lesser known Git commands&lt;/a&gt; by Tim Pettersen&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://lwn.net/Articles/702177/&quot;&gt;Why kernel development still uses email&lt;/a&gt; by Jonathan Corbet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://gittup.org/gittup/&quot;&gt;gittup.org&lt;/a&gt; is a Linux distribution based on Git and Tup&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pinterest/git-stacktrace&quot;&gt;git-stacktrace: Easily figure out which git commit caused a given stacktrace&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.git-legit.org/&quot;&gt;Legit (Git Workflow for Humans)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.git-tower.com/blog/tower-for-windows-public-beta/&quot;&gt;Tower for Windows - Public Beta has Started&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://i.got.nothing.to/code/on/git-repo:_the_utility_for_services/&quot;&gt;Git-Repo The ultimate utility for managing services&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jk.ozlabs.org/projects/patchwork/&quot;&gt;patchwork&lt;/a&gt; - a web-based patch tracking system designed to facilitate the contribution and management of contributions to an open-source project.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.burntsushi.net/ripgrep/&quot;&gt;ripgrep&lt;/a&gt; is arguably the fastest grep-replacement out there, and it respects your .gitignore files.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/10/03/gitpitch-slideshow-presentations-for-developers-on-gitlab/&quot;&gt;GitPitch&lt;/a&gt; from GitLab lets you create slideshow presentations in Markdown and host them in a Git repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt; and
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;, with help from Jakub Narębski, Dennis Kaarsemaker,
Johannes Schindelin, Lars Schneider and Jeff King.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 19 (September 14th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/09/14/edition-19/</link>
      <pubDate>Wed, 14 Sep 2016 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/09/14/edition-19/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-19-september-14th-2016&quot;&gt;Git Rev News: Edition 19 (September 14th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 19th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of August 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=68XsuXlWiWU&amp;amp;index=23&amp;amp;list=PLGeM09tlguZQyemL0Y5CdpEFrBs-hGGM8&quot;&gt;git-series presentation at the LinuxCon North America&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There were a significant number of Git related presentations at the
&lt;a href=&quot;http://events.linuxfoundation.org/events/linuxcon-north-america&quot;&gt;LinuxCon North America 2016 in Toronto&lt;/a&gt;
from August 22 to August 24, and they happened to be recorded:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=iXZV5uAYMJI&amp;amp;index=4&amp;amp;list=PLGeM09tlguZQyemL0Y5CdpEFrBs-hGGM8&quot;&gt;Who Authored the Kernel? Recovering Token-Level Authorship Information from Git by Daniel German&lt;/a&gt;, see also the &lt;a href=&quot;http://lwn.net/Articles/698425/&quot;&gt;LWN article&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=68XsuXlWiWU&amp;amp;index=23&amp;amp;list=PLGeM09tlguZQyemL0Y5CdpEFrBs-hGGM8&quot;&gt;Versions All the Way Down: Versioning Commits and Patches with Git-Series by Josh Triplett, Intel&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yuKAV5cCcTw&amp;amp;list=PLGeM09tlguZQyemL0Y5CdpEFrBs-hGGM8&amp;amp;index=24&quot;&gt;Tracking Huge Files with Git LFS by Tim Pettersen, Atlassian&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Wr7ulql0Exo&amp;amp;index=25&amp;amp;list=PLGeM09tlguZQyemL0Y5CdpEFrBs-hGGM8&quot;&gt;Terrible Ideas in Git by Corey Quinn, FutureAdvisor&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=TcgyVWBg8EQ&amp;amp;list=PLGeM09tlguZQyemL0Y5CdpEFrBs-hGGM8&amp;amp;index=26&quot;&gt;Git and Testing by your own Christian Couder&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the most attended was Josh’s presentation
(&lt;a href=&quot;http://events.linuxfoundation.org/sites/events/files/slides/git-series.pdf&quot;&gt;slides&lt;/a&gt;,
&lt;a href=&quot;https://www.youtube.com/watch?v=68XsuXlWiWU&amp;amp;index=23&amp;amp;list=PLGeM09tlguZQyemL0Y5CdpEFrBs-hGGM8&quot;&gt;video&lt;/a&gt;)
about git-series. Josh had already
&lt;a href=&quot;https://public-inbox.org/git/20160729064055.GB25331@x/&quot;&gt;announced git-series on the mailing list&lt;/a&gt;
which had generated some amount of discussion about how the different
efforts to store more data and meta-data related to patch series using
git itself could collaborate.&lt;/p&gt;

&lt;p&gt;In his talk Josh started by explaining the problems with the current
way of handling a patch series.&lt;/p&gt;

&lt;p&gt;One problem is that when you get feedback, you have to rework your
patch series, so you create another version of your patch series. But
then what happens to the previous version of the series?&lt;/p&gt;

&lt;p&gt;You have to keep it, because people can tell you that they liked
better what your previous version did, and because some people are
actually interested in the real history of your code.&lt;/p&gt;

&lt;p&gt;You could use the reflog to keep it, but it is ephemeral by default
and it is not easy to push or pull. You could also dig an email from
your sent-mail folder or a mailing list archive.&lt;/p&gt;

&lt;p&gt;So a fundamental problem is that Git tracks only curated history
but we need more than that, we need the history of history.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodule&lt;/code&gt; could be used to track that but people generally have
a bad experience with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git submodule&lt;/code&gt;. It’s also possible to manage
patches outside Git. There are tools like for example quilt that can
be used for this purpose, but then you lose the power of working with
Git.&lt;/p&gt;

&lt;p&gt;Another possibility is to use branches with version names like
feature-v1, feature-v2 and so on. But soon you could have names like
feature-v8-rebased-on-3-4-alice-fix and then “everybody who worked in
a corporate environment would feel right at home”.&lt;/p&gt;

&lt;p&gt;Such solutions anyway don’t solve the problem of managing the cover
letter and the base commit which is the commit you started your patch
series from.&lt;/p&gt;

&lt;p&gt;They also don’t solve the problem of collaboration. One rule of
collaboration is to never rewrite published history, but then how do
you collaborate on history that needs rewriting?&lt;/p&gt;

&lt;p&gt;Emailing patches back and forth is not a good solution for some kinds
of work like back-porting a feature, preparing a distribution package,
rebasing stacks of patches sitting on top of upstream code.&lt;/p&gt;

&lt;p&gt;‘git-series’ has been developed to fix all those problems. It tracks
the history of a patch series, and also tracks its cover letter and its
base.&lt;/p&gt;

&lt;p&gt;Then Josh gave a demo.&lt;/p&gt;

&lt;p&gt;To create a series called “feature” based on v4.7, you would run for
example:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git series start feature
-&amp;gt; HEAD is now detached at fa8410b Linux 4.8-rc3
git checkout v4.7
-&amp;gt; HEAD is now at 523d939... Linux 4.7
git series base v4.7
-&amp;gt; Set patch series base to 523d939 Linux 4.7
vim README
git commit -a -m &apos;Change A&apos;
vim README
git commit -a -m &apos;Change B&apos;
git series status
-&amp;gt; On series feature
-&amp;gt;
-&amp;gt; Initial series commit
-&amp;gt; Changes not staged for commit:
-&amp;gt;   (use &quot;git series add &amp;lt;file&amp;gt;...&quot; to update what will be committed)
-&amp;gt;
-&amp;gt;         Added:         base
-&amp;gt;         Added:         base
-&amp;gt;
-&amp;gt; no changes added to commit (use &quot;git series add&quot; or &quot;git series commit -a&quot;)
git series add series
git series add base
git series commit
-&amp;gt; [feature 5eca363] Initial version of feature
git series cover
-&amp;gt; Updated cover letter
git series commit -a -m &quot;Add cover letter&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The following commands were also part of Josh’s demo:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git series log&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git series rebase -i&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git series rebase v4.8-rc3&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git series format&lt;/code&gt;                                   # to format patches like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git format-patch&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git series req ~/remote-location/linux feature&lt;/code&gt;      # to send a pull request like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git request-pull&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git series checkout another-feature&lt;/code&gt;                 # to work on another patch series&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then Josh went back to the presentation to talk about how git-series
works.&lt;/p&gt;

&lt;p&gt;The internals are described in INTERNALS.md in the git-series repo.&lt;/p&gt;

&lt;p&gt;After reviewing the Git objects (blobs, trees, commits, tags) and
refs, Josh noticed that trees can refer to commits and such an entry
in a tree is called a “gitlink”. Gitlinks are already used by git
submodule. git-series uses them to track the series and the base.&lt;/p&gt;

&lt;p&gt;One of the requirements for git-series was that every object
referenced by git-series has to be reachable by Git, otherwise it
might get deleted, and you want to be able to push and pull the
objects, but you can do this only if they are reachable.&lt;/p&gt;

&lt;p&gt;The way git-series is implemented is that a series is like a branch
prefixed with ‘git-series’, for example:&lt;/p&gt;

&lt;p&gt;refs/heads/git-series/feature&lt;/p&gt;

&lt;p&gt;This branch points to a commit for example called series-v2, that
itself has commit series-v1 as its first parent.&lt;/p&gt;

&lt;p&gt;The tree pointed to by these commit has the following entries:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;series:  a gitlink pointing to the top commit of the series&lt;/li&gt;
  &lt;li&gt;base:    a gitlink pointing to the base commit of the series&lt;/li&gt;
  &lt;li&gt;cover:   a blob containing the cover letter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem with this is that Git by default doesn’t follow gitlinks
for reachability or push/pulls.&lt;/p&gt;

&lt;p&gt;To fix that, an extra parent commit is added to the series-v1 and
series-v2 commits for reachability. git-series ignore that parent when
traversing the commits.&lt;/p&gt;

&lt;p&gt;Josh then gave more “minor details” about how it works.&lt;/p&gt;

&lt;p&gt;Your current branch is referred by HEAD and the current series is
referred by refs/SHEAD, in which ‘refs/’ is needed for reachability.&lt;/p&gt;

&lt;p&gt;The working and staged states are respectively in:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;refs/git-series-internals/working/feature&lt;/li&gt;
  &lt;li&gt;refs/git-series-internals/staged/feature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;which both points to temporary commits. This is needed for
reachability of a not yet committed cover letter.&lt;/p&gt;

&lt;p&gt;Then Josh talked about his experience designing and developing
git-series.&lt;/p&gt;

&lt;p&gt;He found on multiple occasions that avoiding to need big errors
messages was a good strategy. Often a long and complex error messages
suggested he might have a design flaw, so he redesigned to make the
error impossible.&lt;/p&gt;

&lt;p&gt;One example of that is what happens when we detach from a series or
check out a new series with uncommitted changes. First he had designed
git-series to use only one staged and working version for a
repository, so in this case he would have needed an error message to
explain that you could lose some data and perhaps something like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git series checkout --force&lt;/code&gt; to checkout anyway.&lt;/p&gt;

&lt;p&gt;Then he realized that if each series had its own working and staged
version there would be no need for such an error message and for a
force option.&lt;/p&gt;

&lt;p&gt;Another example is what happens when you have created a new series and
made some change to it, but have not yet committed anything, and you
want to detach from it or checkout a new series.&lt;/p&gt;

&lt;p&gt;Git has the notion of an “unborn branch”, as, when you create a repo,
the “master” is created and HEAD points to it, but “master” doesn’t
point to anything. This means many special cases.&lt;/p&gt;

&lt;p&gt;Instead of having to write error messages when we detach from a series
or when we checkout another one, as soon as you start a series the
working and staged versions are created and a message says: “new no
commit yet”. So unlike git you can create new series with nothing on
them yet.&lt;/p&gt;

&lt;p&gt;Josh then explained that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git series rebase&lt;/code&gt; was interesting to
implement because libgit2, which was used to implement git-series, has
no support for rebase.&lt;/p&gt;

&lt;p&gt;Git saves state when it fails in the middle of a rebase and you have
to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --continue&lt;/code&gt; to continue when the problem has been
fixed.&lt;/p&gt;

&lt;p&gt;So a temporary measure Josh used, while working on implementing rebase
in libgit2, is to write out all the necessary state that Git would
save if it failed, and then exec &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase --continue&lt;/code&gt;. This way Git
resumes a rebase that it never started.&lt;/p&gt;

&lt;p&gt;The last things Josh talked about are the tools he used to build
git-series. Josh used Rust and libgit2 with its Rust bindings. He
highly recommends libgit2 and Rust. He said libgit2 was essential and
is really effective to play with a repository.&lt;/p&gt;

&lt;p&gt;git-series has been the project he used to learn how to use Rust. As
it is still a very young language, he had to submit patches to the
libgit2 Rust bindings and to a few other Rust libraries to make them
do what he needed. But it was really fun experience especially because
he didn’t have to deal with memory management.&lt;/p&gt;

&lt;p&gt;Next year the “LinuxCon” will be renamed “Open Source Summit” and in
North America it will happen in Los Angeles, September 11-13. Perhaps
the name change hints that it could become an even more relevant place
for Git related presentations.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code 2016&lt;/a&gt; Wrap Up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was only one student, &lt;a href=&quot;https://github.com/pranitbauva1997/&quot;&gt;Pranit Bauva&lt;/a&gt;,
mentored by Lars Schneider and Christian Couder, who participated this
year in the Google Summer of Code. Matthieu Moy and Jeff King were the
GSoC administrators for the Git project.&lt;/p&gt;

&lt;p&gt;Pranit has been working on an “Incremental rewrite of git-bisect”
which goal was to port parts of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt; command from shell to
C code.&lt;/p&gt;

&lt;p&gt;Pranit wrote
&lt;a href=&quot;https://docs.google.com/document/d/1Uir0a8cRYlWANuzoU4iTDtEvPukvtTJcC_dB3KJUgqM/edit#heading=h.mipx2w79za4f&quot;&gt;a report about his work&lt;/a&gt;
and uploaded
&lt;a href=&quot;https://drive.google.com/drive/folders/0B2SBIDYEkAaiV2xhNWZNSUdWOVE&quot;&gt;the last version of the patches he wrote before the end of the GSoC&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Pranit passed the GSoC final evaluation.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://survs.com/survey/3cop1kt5eg&quot;&gt;Git User’s Survey 2016&lt;/a&gt;&lt;/strong&gt; is open till &lt;strong&gt;20 October 2016&lt;/strong&gt; (&lt;em&gt;written by Jakub Narębski&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This year we will see the return of Git User’s Survey (the last one was
in 2012).  The goal of the survey is mainly to help to understand who is
using Git, how and why.&lt;/p&gt;

&lt;p&gt;The results will be published to the Git wiki on the
&lt;a href=&quot;https://git.wiki.kernel.org/index.php/GitSurvey2016&quot;&gt;GitSurvey2016&lt;/a&gt;
page and discussed on the git mailing list.&lt;/p&gt;

&lt;p&gt;The survey would be open from &lt;strong&gt;12 September&lt;/strong&gt; to &lt;strong&gt;20 October 2016&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Beside getting information on how people use Git, what are their pain
points, and what they want from Git (which might be different from what
Git developers think it is), the &lt;a href=&quot;https://public-inbox.org/git/577E6F32.7020007%40gmail.com/&quot;&gt;survey has also educational purpose,
and includes a bit of advertisement&lt;/a&gt;
(brief note about this
was in &lt;a href=&quot;https://git.github.io/rev_news/2016/07/20/edition-17/&quot;&gt;#17&lt;/a&gt;).
For example question about tools used or one about features used teaches
what is available (and which might had been not known).&lt;/p&gt;

&lt;p&gt;The questions were prepared with the help of Eric Wong and Andrew Adrill;
the &lt;a href=&quot;http://public-inbox.org/git/91a2ffbe-a73b-fbb9-96da-9aea4d439e5a@gmail.com/t/&quot;&gt;[RFC] Proposed questions for “Git User’s Survey 2016”&lt;/a&gt;
thread and its sub-threads was posted to solicit feedback.&lt;/p&gt;

&lt;p&gt;The survey was announced first on Git mailing list in
&lt;a href=&quot;http://public-inbox.org/git/de39c03d-e84e-8e45-69cb-a2e01fd25df2@gmail.com/&quot;&gt;[ANNOUNCE] Git User’s Survey 2016&lt;/a&gt; thread.
At request to survey administrator, Jakub Narębski, (as response to the
announcement email), one can get a separate channel in survey, with
a separate survey URL, so that responses from a particular site
or an organization could be split out.  Some companies already
got their customized survey URLs.&lt;/p&gt;

&lt;p&gt;It should be noted that the result of the survey need to be taken with
a bit of caution.  As Johannes Schindelin &lt;a href=&quot;http://public-inbox.org/git/alpine.DEB.2.20.1609091503410.129229@virtualbox/&quot;&gt;reminded us&lt;/a&gt;,
many professional developers that use Git would be too busy to take the
survey.  Though hopefully the fact that you can fill it bit by bit
(from the same computer), instead of having to fill it whole at once,
would help.  Taking 30 minutes or more at once may be a problem,
taking 10 times a 3 minutes at once may not be…&lt;/p&gt;

&lt;p&gt;There is also alternate version of the survey (alternate channel),
which does not require cookies or JavaScript, and is fully anonymous,
but it doesn’t allow one to go back to response and edit it:
https://tinyurl.com/GitSurvey2016-anon&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;A bit of history:&lt;/em&gt;&lt;/strong&gt; First “GIT user survey” was &lt;a href=&quot;http://public-inbox.org/git/4d8e3fd30606240918m6b452314m6514b5e5fc86f147@mail.gmail.com/&quot;&gt;announced&lt;/a&gt;
and created in 2006; its results can be found at &lt;a href=&quot;https://git.wiki.kernel.org/index.php/GitSurvey2006&quot;&gt;GitSurvey2006&lt;/a&gt;
page on Git Wiki.  So this year’s survey is 10th anniversary
of the first one.  Since 2008 the Git User’s Survey was hosted on
&lt;a href=&quot;https://survs.com&quot;&gt;Survs.com&lt;/a&gt; (then beta), thanks to generosity
of the site, who provides with recurring premium annual plan.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Thank you Nicola and call for help!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From the beginning in March 2015, Nicola Paolucci helped set up the
infrastructure for Git Rev News, especially MailChimp to send Git Rev
News as an email to people who subscribed to receive it this way, and
a number of miscellaneous improvements.&lt;/p&gt;

&lt;p&gt;Unfortunately, as he has been lacking bandwidth to work on Git Rev
News recently, he asked to be de-installed from being an editor. So we
are now only two, while there is more and more to do to have a
relevant, vibrant and entertaining news letter for the Git Community.&lt;/p&gt;

&lt;p&gt;That’s why we are thanking Nicola for his help, and looking for other
people to join our small Git Rev News editor team.&lt;/p&gt;

&lt;p&gt;There is no need to even know Git well for that. It’s possible to
participate by just proofreading articles for example. Please contact
us (see our emails &lt;a href=&quot;#credits&quot;&gt;at the bottom&lt;/a&gt;) if you are interested.&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://public-inbox.org/git/20160729161920.3792-1-kcwillford@gmail.com/&quot;&gt;Use header data patch ids for rebase to avoid loading file content&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the improvements in the just released Git v2.10 is an
optimization of the patch id mechanism implemented by Kevin Willford
helped by Johannes Schindelin, alias Dscho, as Kevin and Dscho are
colleagues working for Microsoft.&lt;/p&gt;

&lt;p&gt;The patch id mechanism is used for example by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; to avoid
trying to rebase commits that have been already integrated. This is
done by computing a finger print of each commit called “patch id” and
comparing the patch ids of the commits on the two sides of the rebase.&lt;/p&gt;

&lt;p&gt;Kevin started by sending
&lt;a href=&quot;https://public-inbox.org/git/20160714201758.13180-1-kcwillford@gmail.com/&quot;&gt;a patch called “Use path comparison for patch ids before the file content”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The idea behind his patch is that, to compare commits, it should be
simpler to first look which files are changed by the commits, before
looking at their content. If the files changed by two commits are
different, there is no need to look at what is changed exactly to tell
that the commits are different.&lt;/p&gt;

&lt;p&gt;So instead of computing a patch id made from the content of a commit,
it is more efficient to compute a patch id based on the files that are
changed and only if necessary compute another patch id based on the
content that is changed. This makes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; 1% to 6% faster.&lt;/p&gt;

&lt;p&gt;Junio Hamano agreed that it was a good idea and suggested some
improvements. Dscho also commented and suggested other improvements
including to split the patch.&lt;/p&gt;

&lt;p&gt;A few weeks later Kevin sent
&lt;a href=&quot;http://public-inbox.org/git/20160729161920.3792-1-kcwillford@gmail.com/&quot;&gt;a version 2&lt;/a&gt;
in the form of a 4 patch series.&lt;/p&gt;

&lt;p&gt;There were some discussions around a few related issues but in the end
the patch series got merged.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-brian-m-carlson&quot;&gt;Developer Spotlight: Brian M. Carlson&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m a software developer living in Houston, Texas, US.  I’ve long been
involved in the FLOSS community, mostly with one-off patches,
documentation improvements, and other maintenance-related work.  I’m a
polyglot programmer, and I contribute to Asciidoctor, among other
projects.  I also enjoy biking and writing in my spare time.&lt;/p&gt;

&lt;p&gt;Professionally, I’m a developer with cPanel.  There I do maintenance
work on our product and development tools, manage alternating releases,
advise on security design, and of course maintain the copy of Git we use
internally and ship to customers.  I also perform some training for
developers, QA, and documentation folk on how to use Git and how to use
it more effectively.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the things I’ve really enjoyed doing is making Git work better
over HTTP with Kerberos.  I use Kerberos for my internal network
infrastructure at home, and Git has gone from not working at all to
being very robust and reliable using Kerberos authentication.  There are
still some usability issues we can improve on, though.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of my time is spent on converting the code to use a structure for
object identifiers (hashes) instead of one-off arrays everywhere.  This
improves the quality and maintainability of the code, and it also makes
it easier to switch to a different hash than SHA-1.  Depending on the
hash that’s chosen, we could also potentially improve the performance of
Git as a result of that work as well.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing I know is a pain point for a lot of people is very large
repositories, whether that’s in terms of number or size of files, total
repository size, or number of references.  I’ve personally had to
troubleshoot some of those problems, and I’d love to get some additional
improvements in that area to make Git perform better and use less space.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think I’d remove the dumb HTTP and FTP support.  It tends to perform
really badly, requires per-repository server-side configuration to get
right, and complicates the smart HTTP protocol code.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To be honest, it’s zsh’s built-in vcs_info functionality.  It
automatically detects what branch I’m on, if I’m in the middle of an
operation like a rebase or cherry-pick, and whether changes are staged
or not, as well as providing pretty good completion.  It works with a
wide variety of Git versions and of course has the scope of features
you’d expect from zsh.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqtwdxsp5q.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git 2.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2242-git-2-10-has-been-released&quot;&gt;Git 2.10 overview from Peff@GitHub&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.10.0.windows.1&quot;&gt;Git for Windows 2.10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/visualstudioalm/2016/09/03/whats-new-in-git-for-windows-2-10/&quot;&gt;Git for Windows 2.10 overview from Dscho@Microsoft&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.25.0b8&quot;&gt;libgit2/rugged v0.25.0b8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/08/22/gitlab-8-11-released/&quot;&gt;GitLab 8.11&lt;/a&gt; through &lt;a href=&quot;https://about.gitlab.com/2016/09/07/gitlab-8-dot-11-dot-5-released/&quot;&gt;8.11.5 &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GUI tool &lt;a href=&quot;https://blog.axosoft.com/2016/09/12/gitkraken-v1-6/&quot;&gt;GitKraken v1.6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GitLab elaborates on their new round of founding in the &lt;a href=&quot;https://about.gitlab.com/2016/09/13/gitlab-master-plan/&quot;&gt;GitLab Master Plan&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://lwn.net/Articles/699704/&quot;&gt;Gmane has a new maintainer&lt;/a&gt;, which is good because we have a lot of old links pointing to Gmane in previous editions.&lt;/li&gt;
  &lt;li&gt;Jon Loeliger &lt;a href=&quot;https://public-inbox.org/git/E1bhKNo-0005m2-5z@mylo.jdl.com/&quot;&gt;got enlisted&lt;/a&gt; to help run a &lt;a href=&quot;https://www.linuxplumbersconf.org/2016/git-microconference-accepted-into-lpc-2016/&quot;&gt;Miniconference on Git&lt;/a&gt; at Linux Plumber Conference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tips and tricks&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://ohshitgit.com/&quot;&gt;Oh, shit, git!&lt;/a&gt; by Katie Sylor-Miller&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://wesbos.com/git-hot-tips/&quot;&gt;Git Hot Tips&lt;/a&gt; by Wes Bos&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.twobucks.co/git-diff-tips-and-tricks/&quot;&gt;Git diff tips and tricks&lt;/a&gt; by Hrvoje Šimić&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.allinmobile.co/git-basic-hygiene-of-working-with-repository/&quot;&gt;Git - Basic hygiene of working with repository&lt;/a&gt; by Luke Konior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://larsxschneider.github.io/git-ci-stats/&quot;&gt;Git CI stats&lt;/a&gt; - shows the Travis CI build charts for the Git project itself, including result, build time and test results for every single commit.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/felixSchl/git-fiddle&quot;&gt;git-fiddle: Edit commit messages, authors and timestamps during git-rebase&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.sparkleshare.org/&quot;&gt;SparkleShare - Self hosted, instant, secure file sync&lt;/a&gt; based on Git&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mcasper/git-clean&quot;&gt;git-clean: A Command Line Tool written in Rust for cleaning up local and remote Git branches&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-fork.com/&quot;&gt;Fork - a fast and friendly git client for Mac&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mustafa-s.com/Githeat/&quot;&gt;GitHeat&lt;/a&gt; - Interactive heat-maps for your git repositories&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://megakemp.com/2016/08/25/git-undo/&quot;&gt;Git Undo&lt;/a&gt; is a neat little alias for getting stuff out of the reflog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bennorth/literate-git/&quot;&gt;literate-git: Render hierarchical git repositories into HTML&lt;/a&gt; - see a demo of it &lt;a href=&quot;http://www.redfrontdoor.org/20160813-literate-git-demo/index.html&quot;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt; and
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;, with help from Brian M. Carlson, Jakub Narębski,
Lars Schneider and Josh Triplett.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 18 (August 17th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/08/17/edition-18/</link>
      <pubDate>Wed, 17 Aug 2016 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/08/17/edition-18/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-18-august-17th-2016&quot;&gt;Git Rev News: Edition 18 (August 17th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 18th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of July 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160810130411.12419-1-larsxschneider%40gmail.com/&quot;&gt;Git filter protocol&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lars Schneider recently sent version 5 of his “Git filter protocol”
patch series. The goal of this series is to avoid launching a new
clean/smudge filter process for each file that should be filtered.&lt;/p&gt;

&lt;p&gt;Only one filter process per Git command should be launched, and this
process should communicate with the Git command using Lars’ new filter
protocol.&lt;/p&gt;

&lt;p&gt;This would make Git faster when a large number of files have to
be filtered and when the startup time of a filter process is not
insignificant.&lt;/p&gt;

&lt;p&gt;Lars wants especially to speed up Git-LFS, as Git-LFS works using a
clean/smudge filter to send or get the large files to and from the
special Git-LFS storage, so he also wrote
&lt;a href=&quot;https://github.com/github/git-lfs/pull/1382&quot;&gt;a pull request that implements a filter process for Git-LFS&lt;/a&gt;
and that uses his new filter protocol.&lt;/p&gt;

&lt;p&gt;On this pull request, Lars reports the following results when
switching branches on OSX with 12,000 Git LFS files:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Default Git and Git LFS:                      6m2.979s + 0m1.310s = 364s
Git and Git LFS with filter protocol support: 0m2.528s + 0m2.280s = 5s
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;He says that with his filter protocol the operation is almost 70 times
faster in this particular use case and that he expects “even more dramatic
results on Windows”, as launching a new process is usually slower on Windows.&lt;/p&gt;

&lt;p&gt;When he started working on this, Lars first sent emails to the mailing
list to get information about
&lt;a href=&quot;https://public-inbox.org/git/67D9AC88-550E-4549-9AFD-2401B70B363B%40gmail.com/&quot;&gt;filter driver code&lt;/a&gt;
and explanations about
&lt;a href=&quot;https://public-inbox.org/git/1469134747-26785-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;the fact that clean filter is executed 12 times for 3 files&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The discussion following his first email involved Junio Hamano, Jeff
King alias Peff, Torsten Bögershausen and Jakub Narębski, and led to
explanations and then interesting design discussions.&lt;/p&gt;

&lt;p&gt;The discussion following Lars’ second email prompted Peff to send
&lt;a href=&quot;https://public-inbox.org/git/20160722152753.GA6859%40sigill.intra.peff.net/&quot;&gt;a patch to fix some useless clean filter invocations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Following those discussions Lars sent the following versions of his patch series:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160722154900.19477-1-larsxschneider%40gmail.com/&quot;&gt;v1&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160727000605.49982-1-larsxschneider%40gmail.com/&quot;&gt;v2&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160729233801.82844-1-larsxschneider%40gmail.com/&quot;&gt;v3&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160803164225.46355-1-larsxschneider%40gmail.com/&quot;&gt;v4&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160810130411.12419-1-larsxschneider%40gmail.com/&quot;&gt;v5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These series were reviewed or involved a large number of Git
developers, like Ramsay Jones, Remi Galan Alfonso, Eric Wong, Duy
Nguyen, Johannes Sixt, Stefan Beller, Junio, Peff, Torsten, Jakub.&lt;/p&gt;

&lt;p&gt;One especially interesting sub thread was started by Jakub with
&lt;a href=&quot;https://public-inbox.org/git/607c07fe-5b6f-fd67-13e1-705020c267ee%40gmail.com/&quot;&gt;a long email about “Designing the filter process protocol”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hopefully all this work will eventually be merged and result in great
improvements for some important Git use cases.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CACsJy8CMnywB8AdmLxB8LnsznHrMTieoezhaQS=2r1pnM8ONZA@mail.gmail.com/&quot;&gt;Find a topic branch containing a commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Duy asked on the mailing list:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Before I start doing anything silly because I don’t know it can
already be done without waving my C wand like a mad man…&lt;/p&gt;

  &lt;p&gt;I often do this: find a commit of interest, the commit itself is not
enough so I need a full patch series to figure out what’s going, so I
fire up “git log –graph –oneline” and manually search that commit
and trace back to the merge point, then I can “git log –patch”. Is
there an automatic way to accomplish that? Something like “git branch
–contains” (or “git merge –contains”)?&lt;/p&gt;

  &lt;p&gt;PS. Sometimes I wish we could optionally save cover letter in the
merge commit. Sometimes the “big plan” is hard to see by reading
individual commit messages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Saving the cover letter of a patch series - which is patch 0 in the
series, but is not a real patch, so is not applied - is by the way a
different topic that
&lt;a href=&quot;https://public-inbox.org/git/CA+P7+xpHDGY5RTR8ntrABdxqM6b4V9dndS68=kV1+1Ym1N6YKw@mail.gmail.com/&quot;&gt;reappeared on the list recently&lt;/a&gt;
and was also discussed following the
&lt;a href=&quot;https://public-inbox.org/git/20160729064055.GB25331@x/&quot;&gt;announcement by Josh Triplett of his new git-series tool&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To the main question about finding the topic branch containing a
commit, Stefan Beller suggested using
&lt;a href=&quot;https://github.com/mhagger/git-when-merged&quot;&gt;Michael Haggerty’s git-when-merged&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Duy was happy with this tool, but would have liked an option to show
all the commits in a topic branch, for example something that would do
a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; from the merge base to the merge point. He also asked
Michael if he had any plan to port it to C and integrate it into Git.&lt;/p&gt;

&lt;p&gt;Michael replied the next day that he had made
&lt;a href=&quot;https://github.com/mhagger/git-when-merged/pull/13&quot;&gt;a pull request, which has since be merged, for the new option&lt;/a&gt;,
but that he had no plan to port it to C and integrate it into Git.&lt;/p&gt;

&lt;p&gt;Junio also suggested a way to get a more human readable result for
example by running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt; on the merge commit.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-lars-schneider&quot;&gt;Developer Spotlight: Lars Schneider&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am a software engineer living in Berlin, Germany. Currently, I am the technical
lead for a team that helps 4000+ Autodesk engineers adopt Git as their main
source control system. This is a challenging but also very interesting task as
I am constantly confronted with all kinds of problems that Git users run into.
Fortunately, Autodesk allows me to spend part of my time addressing these problems
and contributing possible solutions back to the community.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Autodesk has lots and lots of Perforce repositories with 20+ years of history.
We are gradually moving them to Git and during this process I try to constantly
improve the “git-p4” migration tool. I managed to get quite a number of patches
upstream already but there are still more in my local queue :-)&lt;/p&gt;

&lt;p&gt;However, I am most proud of an indirect contribution to Git. I helped the
Git community set up Git &lt;a href=&quot;https://travis-ci.org/git/git/branches&quot;&gt;CI builds for OSX and Linux on Travis CI&lt;/a&gt;. This makes
it really easy to ensure that new patches build without errors and cause no
test failures on all major platforms and compilers. Casual contributors can
create Pull Requests containing their patches against https://github.com/git/git
and 20min later they would know if their patches pass all checks. This way a
contributor can ensure that no precious reviewer time is wasted with broken
patches.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am working on an improved Git filter protocol. Git filters are a great
mechanism to transparently modify repository content on commit and checkout.
Amongst other things it is used to adjust platform specific line endings, to
cleanup tab/whitespaces issues, to encrypt content, and to handle large files
outside of the Git repository (e.g. via
&lt;a href=&quot;https://git-annex.branchable.com/&quot;&gt;git-annex&lt;/a&gt; or
&lt;a href=&quot;https://git-lfs.github.com/&quot;&gt;Git LFS&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The problem with the current protocol is that a filter process is invoked for
each individual file. If you have a large number of files, then you start an equally
large number of processes. This gets slow quickly and therefore I am working
on a patch series that reuses a single filter process for all files in the lifetime of a
Git process.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First, we would improve the Travis CI setup and add Windows to the platforms
that are constantly tested. Afterwards we would join forces with David Turner,
Ben Peart, and Duy Nguyen and improve the Git performance for repositories
that contain a very large number of files.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would not remove anything, but I would try to improve the UX. Unfortunately,
modifying the UX of Git core commands is incredible hard as these commands are
also used in a lot of scripts that we cannot break.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A couple of years ago I wrote &lt;a href=&quot;https://github.com/larsxschneider/ShowInGitHub&quot;&gt;ShowInGitHub&lt;/a&gt;,
a plugin that helps you to jump from a specific line of code in Xcode to the
same line on Github. It was my favorite Git tool during my iOS developer days.&lt;/p&gt;

&lt;p&gt;More recently I got really excited about &lt;a href=&quot;https://git-lfs.github.com/&quot;&gt;Git LFS&lt;/a&gt;.
Granted, Git LFS breaks one of Git’s core features as LFS repositories are by default
not distributed anymore. However, Git LFS is a pragmatic solution to a huge problem
that many Git users face if they need to store large media assets or integration test
data along with their source code.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqfuq7j7cw.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git 2.10.0-rc0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqq37m9wymv.fsf@gitster.mtv.corp.google.com/&quot;&gt;Git 2.9.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.9.3.windows.1&quot;&gt;Git for Windows 2.9.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Jonas Fonseca &lt;a href=&quot;https://public-inbox.org/git/CAFuPQ1%2Bi6BFRH%3D6HUWzDgM7J%2BhL_3hUNv5-4mjjGm%3Dh-YWVuzg%40mail.gmail.com/&quot;&gt;announced tig 2.2&lt;/a&gt;, see also the &lt;a href=&quot;https://github.com/jonas/tig/releases/tag/tig-2.2&quot;&gt;release page&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/07/22/gitlab-8-10-released/&quot;&gt;GitLab 8.10&lt;/a&gt; through &lt;a href=&quot;https://about.gitlab.com/2016/08/01/gitlab-8-dot-10-dot-3-released/&quot;&gt;8.10.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2214-github-enterprise-2-7-is-now-available-with-enhanced-security-and-more-powerful-apis&quot;&gt;GitHub Enterprise 2.7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Matthieu Moy &lt;a href=&quot;http://public-inbox.org/git/20160817064116.18399-1-Matthieu.Moy@imag.fr/&quot;&gt;announced git-multimail 1.4.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A &lt;a href=&quot;https://github.com/nobozo/progit2&quot;&gt;“Reedited” version&lt;/a&gt; of &lt;a href=&quot;https://github.com/progit/progit2&quot;&gt;&lt;em&gt;Pro Git 2nd Edition&lt;/em&gt;&lt;/a&gt; by Jon Forrest (announcement and discussion on why reedited &lt;a href=&quot;https://public-inbox.org/git/nn1euf$h6q$1@ger.gmane.org/&quot;&gt;here&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Author of &lt;a href=&quot;https://git-annex.branchable.com/&quot;&gt;git-annex&lt;/a&gt;, Joey Hess has &lt;a href=&quot;https://www.patreon.com/joeyh&quot;&gt;launched a Patreon page to support continued development on his open source projects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A &lt;a href=&quot;https://www.theguardian.com/info/developer-blog/2016/jul/02/git-merge-2016&quot;&gt;slightly delayed write-up of Git Merge 2016&lt;/a&gt; by Roberto Tyley of the Guardian&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@alexberegszaszi/mango-git-completely-decentralised-7aef8bcbcfe6&quot;&gt;Mango: Git completely decentralised&lt;/a&gt; by Alex Beregszaszi&lt;/li&gt;
  &lt;li&gt;Max Heiber explains &lt;a href=&quot;https://medium.com/@maxheiber/how-i-messed-up-our-repo-and-ideas-for-improving-git-ux-e248d9e27e79#.hb10x5w10&quot;&gt;How I Messed Up Our Repo and Ideas for Improving Git UX&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@pawan_rawal/demystifying-git-internals-a004f0425a70#.l34w4zy60&quot;&gt;Demystifying Git internals&lt;/a&gt;, by Pawan Rawal&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.what-could-possibly-go-wrong.com/version-control/&quot;&gt;Version control: Effective use, issues and thoughts, from a gamedev perspective&lt;/a&gt;, by Ashley Davis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Gmane (a mailing list archive that was used heavily by some Git developers)
&lt;a href=&quot;https://lars.ingebrigtsen.no/2016/07/28/the-end-of-gmane/comment-page-1/#comment-13502&quot;&gt;shut down its web site&lt;/a&gt;.  This issue was covered in the &lt;a href=&quot;https://lwn.net/Articles/695695/&quot;&gt;“Ingebrigtsen: The End of Gmane?”&lt;/a&gt; short note on LWN.net, which got included in the  &lt;a href=&quot;http://lwn.net/Articles/695980/&quot;&gt;“Announcements” section of LWN.net Weekly Edition for August 4, 2016&lt;/a&gt;; comments there mention that threaded view in Gmane web interface had no equal in other mail archive sites.  There is also &lt;a href=&quot;https://public-inbox.org/git/%3C481D1EE2-6A66-418F-AB28-95947BBF3680@gmail.com%3E/&quot;&gt;Alternatives to mid.gmane.org?&lt;/a&gt; thread, listing among others &lt;a href=&quot;https://marc.info/?l=git&quot;&gt;MARC.info&lt;/a&gt; and public-inbox.  &lt;a href=&quot;https://public-inbox.org/git/%3Cxmqq1t1twymf.fsf@gitster.mtv.corp.google.com%3E/&quot;&gt;A note from the maintainer&lt;/a&gt; got updated in light of this change.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/&quot;&gt;public-inbox&lt;/a&gt;, which is under heavy development by Eric Wong, has
&lt;a href=&quot;https://public-inbox.org/git/&quot;&gt;a git archive&lt;/a&gt; that is now used a lot instead of Gmane.
&lt;a href=&quot;https://public-inbox.org/design_www.html&quot;&gt;It allows&lt;/a&gt; looking up
existing Gmane links using their Gmane id with URLs like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://public-inbox.org/git/?q=gmane:123456&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Josh Triplett &lt;a href=&quot;https://public-inbox.org/git/20160729064055.GB25331@x/&quot;&gt;announced&lt;/a&gt; a new git tool, &lt;a href=&quot;https://github.com/git-series/git-series/&quot;&gt;git-series&lt;/a&gt;, to manage patch series with git, tracking the “history of history”. git series tracks changes to the patch series over time, including rebases and other non-fast-forwarding changes. git series also tracks a cover letter for the patch series, formats the series for email, and prepares pull requests. This makes it easier to collaborate on a patch series, distribution package, backport, or any other development process that includes rebasing or non-fast-forward development. Josh plans to give a &lt;a href=&quot;http://sched.co/7JVs&quot;&gt;presentation about git-series at LinuxCon North America&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;GitSense looks like an interesting service to provide &lt;a href=&quot;https://gitsense.com/insight?c=bitbucket:gitsense/contexts:gs_contexts::default.ccf&quot;&gt;Git Analytics and Search&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pimterry/git-confirm&quot;&gt;git-confirm&lt;/a&gt; is a nice little Git hook to catch placeholders and temporary changes&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-time-metric/gtm&quot;&gt;git-time-metric&lt;/a&gt;: Simple, seamless, lightweight time tracking for Git&lt;/li&gt;
  &lt;li&gt;Resolve git conflicts within Atom using the package &lt;a href=&quot;https://atom.io/packages/merge-conflicts&quot;&gt;merge-conflicts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt; and
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt;, with help from Lars Schneider,
Johannes Schindelin, Roberto Tyley, Jakub Narębski and Josh Triplett.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 17 (July 20th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/07/20/edition-17/</link>
      <pubDate>Wed, 20 Jul 2016 11:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/07/20/edition-17/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-17-july-20th-2016&quot;&gt;Git Rev News: Edition 17 (July 20th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 17th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of June 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1451963101-4901-1-git-send-email-greened%40obbligato.org/&quot;&gt;contrib/subtree: Remove –annotate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last January David Greene, who maintains git-subtree.sh, sent
&lt;a href=&quot;https://public-inbox.org/git/1451766984-4648-1-git-send-email-greened%40obbligato.org/&quot;&gt;a patch series&lt;/a&gt;
to remove the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--annotate&lt;/code&gt; option from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git subtree&lt;/code&gt; and then
&lt;a href=&quot;https://public-inbox.org/git/1451963101-4901-1-git-send-email-greened%40obbligato.org/&quot;&gt;a version 2 of this patch series&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This came after previous work to add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--unannotate&lt;/code&gt; some years ago
&lt;a href=&quot;https://public-inbox.org/git/CABVa4NinSighUn7GKbzMx9qZj3Ao2dCtEZxUqCPwO9TocZ8Kkg%40mail.gmail.com/&quot;&gt;in 2012&lt;/a&gt; and
&lt;a href=&quot;https://public-inbox.org/git/1357646997-28675-1-git-send-email-greened%40obbligato.org/&quot;&gt;in 2013&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The reason why adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--unannotate&lt;/code&gt; has not been pursued is that it
is “difficult to define due to the numerous ways one might want to
specify how to edit commit messages”. And &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--annotate&lt;/code&gt; is now
considered not well suited to rewriting commit messages compared to
other existing tools like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;filter-branch&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase -i&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commit --amend&lt;/code&gt; that can be used afterwards.&lt;/p&gt;

&lt;p&gt;Junio replied that the above is usually not a good enough reason to
remove a feature unless it can be shown that nobody is using it.&lt;/p&gt;

&lt;p&gt;David then explained that he doesn’t know how much &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--annotate&lt;/code&gt; is
used, but that he is willing to first deprecate it and then after some
time remove it.&lt;/p&gt;

&lt;p&gt;He also explained that he is also working on a few other things “that
will involve slight semantic changes” and that he has a plan to move
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git subtree&lt;/code&gt; out of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contrib&lt;/code&gt; subdirectory of the Git source tree
where it is currently and into the main area where there are all the
non contrib Git commands.&lt;/p&gt;

&lt;p&gt;This change would possibly in the end move some of the maintenance
burden of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git subtree&lt;/code&gt; from David to all the Git developers and
ultimately Junio, but David said that the changes he was planning
would remove some maintenance burden.&lt;/p&gt;

&lt;p&gt;Junio agreed to the removal of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--annotate&lt;/code&gt; and in another mail
detailed the historical purpose of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contrib&lt;/code&gt; area and what is
expected from code in this area:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The contrib/ area was created back when Git was still young and we
felt that it would be beneficial for building the community if
contributions to non-core part were also included, encouraging
developers whose strength are not necessarily in the core part to
participate in various design-level discussions to grow the
community faster.  Back then, we felt that an obscure standalone
project outside Git that would help the Git-life of users have a
much better chance of surviving (and eventually be polished) if we
had them bundled, even if the code quality and stability were
sub-par.&lt;/p&gt;

  &lt;p&gt;Those young days are long gone.  A standalone tool that aims to help
users’ Git-life would not just survive but flourish with much more
certainty, as long as the tool is good.  We have enough Git users to
rely on words-of-mouth these days to ensure their success.&lt;/p&gt;

  &lt;p&gt;That is why I am very hesitant to add new things to contrib/ these
days.  It is very welcome thought that you are working on improving
subtree, and eventually moving it out of contrib/.  From the point
of view of the project, either moving up (to be part of the git core
proper) or moving out (to become an independent project) is far more
preferreable than the status quo so far that was staying in contrib/
(without seeing much changes and slowly but steadily bitrotting).&lt;/p&gt;

  &lt;p&gt;If the aspiration is to move up to exit, then the quality and
stability expectation is basically the same as stuff in core, and we
need to strive to keep it stable and high quality.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Recently David replied to the above:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is the strategy I was planning to pursue.  After extensive
experience with git-subtree and some local enhancements I have in
real-world work, I am convinced it is a great complementary tool to
git-submodule.  It seems odd to me to have one in core and one not.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And David also detailed some of the work he plans to do on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
subtree&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAHWPVgMWeHoD5vTiFJ1gsm2hS74LK7j4npVVbOZeR43cX3qWXw%40mail.gmail.com/&quot;&gt;Fwd: what is a snapshot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ovatta Bianca asked:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I read in every comparison of git vs other version control systems,
that git does not record differences but takes “snapshots”
I was wondering what a “snapshot” is? Does git store at every commit
the entire files which have been modified even if only a few bytes
were changed out of a large file?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Philip Oakley answered:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A snapshot is like a tar or zip of all your tracked files. This means it is
easier to determine (compared to lots of diffs) the current content.&lt;/p&gt;

  &lt;p&gt;Keeping all the snapshots as separate loose items, when the majority of
their content is unchanged would be very inefficient, so git then uses, at
the right time, an efficient (and obviously lossless) compression technique
to ‘zip’ all the snapshots together so that the final repository is
‘packed’. The overall effect is a very efficient storage scheme.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and pointed to &lt;a href=&quot;https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain&quot;&gt;some documentation on Git’s web site&lt;/a&gt;
for “some good explanations”.&lt;/p&gt;

&lt;p&gt;Jeff King alias Peff explained how the relationship between Git
objects already makes things efficient:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Each commit is a snapshot in that it points to the sha1 of the root
tree, which points to the sha1 of other trees and blobs. And following
that chain gives you the whole state of the tree, without having to care
about other commits.&lt;/p&gt;

  &lt;p&gt;And if the next commit changes only a few files, the sha1 for all the
other files will remain unchanged, and git does not need to store them
again. So already, before any explicit compression has happened, we get
de-duplication of identical content from commit to commit, at the file
and tree level.&lt;/p&gt;

  &lt;p&gt;And then when a file does change, we store the whole new version, then
delta compress it during “git gc”, etc, as you describe.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And Jakub Narębski detailed the “loose” and the “packed” format.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-jakub-narębski&quot;&gt;Developer Spotlight: Jakub Narębski&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m an occasional contributor to Git, and an unofficial gitweb maintainer;
a physicist turned to compute science. One of first programs that I wrote
was a computer simulation. Currently I am working at the
&lt;a href=&quot;http://www.umk.pl/en/&quot;&gt;Nicolaus Copernicus University in Toruń&lt;/a&gt;. There, among other things,
I teach Git to students, as a part of their coursework.&lt;/p&gt;

&lt;p&gt;I have created, announced and analysed annual Git User’s Surveys from
2007 till 2012 (all except the first one). You can find their results on the
&lt;a href=&quot;https://git.wiki.kernel.org/index.php/GitSurvey2012&quot;&gt;Git Wiki&lt;/a&gt;. This year I plan on restarting the survey.&lt;/p&gt;

&lt;p&gt;I am also the author of the &lt;a href=&quot;https://www.packtpub.com/application-development/mastering-git&quot;&gt;Mastering Git&lt;/a&gt; book published by Packt.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your book about and why did you write it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal of the “Mastering Git” book is to help readers get an expert-level
proficiency with modern Git. I wanted to pass the information about
the advanced use of Git, pass my knowledge about it,
and improve their understanding of Git behavior. The idea was
to show useful features (like for example the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git stash&lt;/code&gt; command)
together with explanation on how they work, to attain a deeper understanding,
allowing Git users to be able to create their own solutions for their problems
(like for example extracting file changes from the stash),
based on this understanding of Git, instead of having to rely on ready recipes.&lt;/p&gt;

&lt;p&gt;This book would be not created without Packt. They have found me thanks to
my contributions on StackOverflow and asked for authoring the book on Git
targeting advanced usage, to follow theirs
&lt;a href=&quot;https://git-blame.blogspot.com/2013/02/git-version-control-for-everyone.html&quot;&gt;Git: Version Control for Everyone&lt;/a&gt;.
They were very helpful; this was my first such big work.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How did your introduction to Git and involvement in Git project itself came about?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have followed Git development from the very beginning of its creation, on
then existing and now defunct KernelTrap and Kernel Traffic sites (and the only
one existing issue of Git Traffic). From there I have moved to looking
on the Git mailing list. Git was so much easier to use and understand than CVS (and RCS)
that I was using then for version control: easy branching, switching branches,
merging, checking out older versions (remember sticky tags and dates?),
atomic commits, peer-to-peer workflows,…&lt;/p&gt;

&lt;p&gt;My very first contribution to Git was an update to gitweb’s README in 2006…
and that’s how I came to be, a bit of time later, an unofficial gitweb
maintainer ;-)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Certainly my biggest contribution in terms of lines of code, number of commits
and number of patch reviews was my refactoring of gitweb, making it easier
to develop and maintain, while still providing a simple install path;
and providing it with a documentation
(&lt;a href=&quot;https://git.github.io/htmldocs/gitweb.html&quot;&gt;gitweb(1)&lt;/a&gt;,
&lt;a href=&quot;https://git.github.io/htmldocs/gitweb.conf.html&quot;&gt;gitweb.conf(5)&lt;/a&gt;). An
important to me contribution
was adding a configure script for automatic build configuration.&lt;/p&gt;

&lt;p&gt;In terms of impact on Git’s user friendliness and usability were probably
(the few) improvements to the documentation.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recently, I’ve not been contributing much to Git.
I have now returned to the Git mailing list after a long hiatus. I am
currently working and construction and then doing Git User’s Survey 2016.
The survey is preliminary planned for the month of September. Therefore
if you want to point it into specific direction, give it certain
focus, or include
a particular question, now it’s time to speak. I think it is important avenue
to hear the voice of Git users, to help make Git better for all various use
cases. Also it serves as a nice way to advertise Git capabilities…&lt;/p&gt;

&lt;p&gt;I keep reviewing gitweb patches. My TODO list for gitweb is quite long;
I hope to shorten it some.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Improving further performance on big repositories would be nice (large
number of file, large binary files, long history, large amount of branches,
tags, replacements and notes). I’d like for it to go through and borrow
ideas from other Git implementations and from other version control
systems. The addition of compressed bitmap indices first to JGit,
then to core-git to speed up cloning shows that there might be good
ideas on how to speed up reachability and least common ancestor
(also known as merge base in Git) queries in computer science papers.&lt;/p&gt;

&lt;p&gt;One hard problem in Git that would probably need such team of experts for
a full year is resumable clone / resumable fetching. It is something that
people want to have, but it turns out it is something really hard to implement
reasonably. It can be worked around by using git bundles, which hopefully
be automated and standardized; but it is still a workaround, not a solution.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would make remote-tracking refs fully qualified, that is use for
example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;refs/remotes/&amp;lt;remote&amp;gt;/heads/&amp;lt;branch&amp;gt;&lt;/code&gt;. This would make
it easier to fetch remote-local tags, to fetch replacements, notes,
stashes, etc.&lt;/p&gt;

&lt;p&gt;I would also redo and redesign user interface of Git commands.
The bottom-up, “worse is better” approach creates superior features,
but it all too often results in inconsistent and inferior UI. It would
be good to have consistent rules for using commands, subcommands
and options. Currently it is a bit of historical mess; some features
use command options, some subcommands. Some commands are
narrow in scope, some have many different (and weakly related)
modes of operation.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are your favorite Git features?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My favorite features are (1) the explicit staging area, which allows
disentangling changes to be in the next commit from the state of
the working directory, and which allows splitting commits with
an interactive rebase, and (2) reflogs, which saved me from my
mistakes in handling Git many, many times.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favorite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some time ago I have been using intensively a patch management tool
named &lt;a href=&quot;http://procode.org/stgit/&quot;&gt;StGit&lt;/a&gt; (Stacked Git). Nowadays I use interactive rebase for nearly
the same purpose, that is cleaning up a series of changes before sending
the new version upstream for the review. It is a bit more cumbersome to
use, but interactive rebase is a built in feature.&lt;/p&gt;

&lt;p&gt;I work mostly with git core tools (with the Git itself), sometimes using
IDE integration with Git, or a graphical commit tool for easier interactive
add. As an administrator, I love &lt;a href=&quot;http://gitolite.com/&quot;&gt;Gitolite&lt;/a&gt; — it allows easy creation of
repositories and repository access management, without the need to
bother sysadmins&lt;/p&gt;

&lt;p&gt;One tool that looks interesting, and which I would like to try out,
but didn’t have an occasion to use, is the &lt;a href=&quot;https://github.com/mhagger/git-imerge&quot;&gt;git-imerge&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqbn247x1f.fsf%40gitster.mtv.corp.google.com/&quot;&gt;2.9.1&lt;/a&gt; (maintenance release), followed by Git &lt;a href=&quot;https://public-inbox.org/git/xmqqlh12lhq1.fsf%40gitster.mtv.corp.google.com/&quot;&gt;2.9.2&lt;/a&gt; that fixes a regression on 32-bit and on Windows.&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.20.1607161120030.6426%40virtualbox/&quot;&gt;2.9.2&lt;/a&gt; (maintenance release, skipping 2.9.1).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.15.1&quot;&gt;nodegit/nodegit v0.15.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/pygit2/releases/tag/v0.24.1&quot;&gt;libgit2/pygit2 v0.24.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03176.html&quot;&gt;JGit/EGit Release 4.4.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/06/22/gitlab-8-9-released/&quot;&gt;GitLab 8.9&lt;/a&gt; and patches until &lt;a href=&quot;https://about.gitlab.com/2016/07/11/gitlab-8-dot-9-dot-6-released/&quot;&gt;8.9.6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160710004813.GA20210%40dcvr.yhbt.net/&quot;&gt;New archives of the Git Mailing list have been announced&lt;/a&gt; by Eric Wong.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/577E6F32.7020007%40gmail.com/&quot;&gt;An RFC about questions for “Git User’s Survey 2016” has been posted&lt;/a&gt; by Jakub Narębski.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://thejh.net/misc/website-terminal-copy-paste&quot;&gt;You should not blindly copy/paste &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; instructions from random websites&lt;/a&gt; by Jann Horn.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ipfs/js-ipfs-examples/issues/1#issuecomment-229005498&quot;&gt;To push, to pull- to fetch, perchance to commit. Aye, there’s the rub&lt;/a&gt; by Richard Littauer.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/NebuPookins/git-submodule-tutorial&quot;&gt;A tutorial on how to use git submodule to share a model across multiple applications&lt;/a&gt; by NebuPookins.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.4ge.it/the-power-of-git/&quot;&gt;The Power of Git - Forge’it&lt;/a&gt; by Caner Candan.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://joeyh.name/blog/entry/twenty_years_of_free_software_--_part_7_git-annex/&quot;&gt;twenty years of free software – part 7 git-annex&lt;/a&gt; a note from Joey Hess.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://nathanleclaire.com/blog/2016/06/28/on-the-matter-of-beautiful-git-diffs/&quot;&gt;On the Matter of Beautiful git Diffs&lt;/a&gt; by Nathan LeClaire.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.filippo.io/git-fixup-amending-an-older-commit/&quot;&gt;git fixup: –amend for older commits&lt;/a&gt; by Filippo Valsorda.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://m.cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext&quot;&gt;Why Google Stores Billions of Lines of Code in a Single Repository&lt;/a&gt; by Rachel Potvin and Josh Levenberg.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://spin.atomicobject.com/2016/06/26/parallelize-development-git-worktrees/&quot;&gt;Parallelize Development Using Git Worktrees&lt;/a&gt; by Brian Vanderwal.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://chrisshort.net/permanently-remove-any-record-of-a-file-from-git/&quot;&gt;Permanently Remove Any Record of a File From git&lt;/a&gt; by Chris Short.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.masukomi.org/talks/git_tips_talk/#/step-1&quot;&gt;Common Git Scenarios&lt;/a&gt; an interactive presentation by Masukomi A.K.A. Kay Rhodes.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2201-making-open-source-data-more-available&quot;&gt;Making open source data more available&lt;/a&gt; by Arfon Smith for GitHub, announcing 3TB+ BigQuery &lt;a href=&quot;https://cloud.google.com/bigquery/public-data/github&quot;&gt;dataset of GitHub activity in open source repositories&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cycligent.com/git-tool&quot;&gt;Cycligent GIT TOOL&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@alexberegszaszi/mango-git-completely-decentralised-7aef8bcbcfe6#.g2shzuxlp&quot;&gt;Mango: Git completely decentralised — Medium&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/karandesai-96/yolog&quot;&gt;karandesai-96/yolog: Beautify your Git Logs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from Jakub Narębski and Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 16 (June 15th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/06/15/edition-16/</link>
      <pubDate>Wed, 15 Jun 2016 11:20:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/06/15/edition-16/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-16-june-15th-2016&quot;&gt;Git Rev News: Edition 16 (June 15th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 16th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of May 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Ensimag students contributing to Git&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Attracted by the Open Source world, we, eight French students from
&lt;a href=&quot;http://ensimag.grenoble-inp.fr&quot;&gt;Grenoble INP - Ensimag&lt;/a&gt;, are having
their first experience in contributing to an Open Source software by
joining the Git community for a 4-week school project. It was a great
opportunity to participate in a useful non-academic project and to
practice what we’ve learned at school.&lt;/p&gt;

&lt;p&gt;To get to know the Git community, we started with simple improvements:
using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-&lt;/code&gt; as a shortcut for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@{-1}&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree add&lt;/code&gt;, adding CSS
pattern for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff &lt;/code&gt; and using the parser API for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git upload-pack&lt;/code&gt;.
Part of the job was also to start discussions on different subjects:
how to setup a Triangular Workflow, about the consistency of the
documentation and its readability concerning literals…&lt;/p&gt;

&lt;p&gt;One of our main work was to implement a feature that allows to easily
reply to a given email with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt; command: it populates
appropriate header (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;To:&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cc:&lt;/code&gt; / …) and cites the given message
body. Another one was to add the symmetrical of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push --set-upstream&lt;/code&gt;
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt;. We also worked on a deny policy to prevent accidental
pushes to unwanted remote using a blacklist/whitelist list
feature. Some of us improved the strbuf API by using stack-allocated
memory instead of heap-allocated to avoid malloc and free.&lt;/p&gt;

&lt;p&gt;It was a great experience to face real practical issues when it comes
to developing a software with thousands other developers all around
the world. We’ve learned a lot about rigor and communication which
really were at the center of our work. Maybe we’ll see each other
again on the mailing list since some of us are willing to finish the
patch they were working on and possibly continue the adventure.&lt;/p&gt;

&lt;p&gt;We also all wanted to thank Git folks for the time they spent
reviewing our patches and helping us.&lt;/p&gt;

&lt;p&gt;But for sure, launching a git command will never feel the same ;-)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(written by François BEUTIN, Jordan DE GEA, William DUCLOT, Samuel GROOT, Erwan MATHONIERE, Antoine QUERU, Simon RABOURG and Tom RUSSELLO)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160512182432.GA27427%40kitenet.net/&quot;&gt;proposal for extending smudge/clean filters with raw file access&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Joey Hess, who is the &lt;a href=&quot;https://git-annex.branchable.com/&quot;&gt;git-annex&lt;/a&gt;
main developer and maintainer, sent an email with some suggestions to
extend smudge/clean filters.&lt;/p&gt;

&lt;p&gt;Smudge/clean filters can be used to automatically perform
transformations on the content when it is checked into Git or out of
it. This can be used for example to perform keyword substitution like
Subversion or CVS allows with keywords named ‘$Id$’, ‘$Rev$’ or
‘$Author$’.&lt;/p&gt;

&lt;p&gt;The idea is that these filters would call git-annex automatically and
git-annex could decide, when a file is added, if its content should
indeed by handled regularly by the Git repo or if it should be handled
by git-annex. In a similar way when a file is checked out, git-annex
would be called and could get the file content it by itself if it is
managing the file.&lt;/p&gt;

&lt;p&gt;Joey’s suggestions on the mailing list were the following:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;I&apos;m using smudge/clean filters in git-annex now, and it&apos;s not been an
entirely smooth fit between the interface and what git-annex wants
to do.

...

So I propose extending the filter driver with two more optional
commands. Call them raw-clean and raw-smudge for now.

raw-clean would be like clean, but rather than being fed the whole
content of a large file on stdin, it would be passed the filename, and
can access the file itself. Like the clean filter, it outputs the
cleaned version on stdout.

raw-smudge would be like smudge, but rather than needing to output the
whole content of a large file on stdout, it would be passed a filename,
and can create that file itself.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After discussing those new commands with Junio Hamano, the Git
maintainer, it looks like patches to add them could be accepted. The
names “clean-from-fs” and “smudge-to-fs” have been suggested for them.&lt;/p&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/nhlqd4%24ekr%241%40ger.gmane.org/&quot;&gt;Odd Difference Between Windows Git and Standard Git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jon Forrest sent an email about a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; behavior he sees on
Windows, which is different than on Linux on a repository that is
shared between the two environments. On Windows it looks like “every
.pdf file and some .png files are modified”.&lt;/p&gt;

&lt;p&gt;Torsten Bögershausen, who has been working on Windows compatibility
lately, especially related to line ending, first asked Jon some basic
questions:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;What does
git diff
say ?

What does
git config -l | grep core
say ?

And what does
git ls-files --eol
say?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As Jon answered:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;old mode 100755
new mode 100644
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Torsten replied:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;So the solution is to run
git config core.filemode false
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Jon replied:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;This worked perfectly!

I wonder if this should be the default for Git for Windows.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To which Torsten replied:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;It is.
But you need to clone the repo under Windows.

I probably submit a patch some day, that core.filemode will be ignored
under Windows.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From further discussions, it appeared that, when cloning a repo or
when using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git init&lt;/code&gt;, we probe to see if the executable bit “sticks”
to the files and we set the ‘core.filemode’ config variable
accordingly. That works well, but we don’t probe at other times, so it
doesn’t work well for repos that are shared using a network filesystem
or Dropbox.&lt;/p&gt;

&lt;p&gt;To try to fix that, Torsten suggested a patch so that the
‘core.filemode’ setting is ignored under Windows. The problem with
that, is that dictating “for all eternity that Git for Windows cannot
determine the executable bit” might not be a good long term strategy,
as “who knows for certain?”.&lt;/p&gt;

&lt;p&gt;Johannes Schindelin, the Git for Windows maintainer, suggested making
the default ‘core.filemode’ setting platform-dependent. This last
solution is already used for end of line setting. But it doesn’t fix
the problem when a repo created on Linux, where ‘core.filemode’ has
been automatically set to true at init time, is shared.&lt;/p&gt;

&lt;p&gt;Another solution would be to probe more often than just when cloning
or using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git init&lt;/code&gt;, but it appears that we don’t want to do that for
each command and it is not clear how to easily probe when there might
not even be a ‘.git’ directory.&lt;/p&gt;

&lt;p&gt;The conclusion from the thread is that unfortunately it looks like
there is no simple solution to avoid this kind of problems for now.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-duy-nguyen&quot;&gt;Developer Spotlight: Duy Nguyen&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you, and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I became a Linux user since 2001 or so when I bought myself a Red Hat
CD to celebrate joining the university. I was a GNOME Vietnamese
translator for about ten years before giving up for lack of free time,
and a Gentoo developer for four or five years (giving up for the same
reason). By day I’m a software developer working mostly in telecom
area.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s been 10 years and I don’t have very good memory. But I guess I
would name it sparse checkout. It’s far from perfect, but I’m working
on that.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m still scratching my own itches and trying to push changes back in
git.git so I don’t have to maintain them separately. They are “git
worktree move”, dealing with the shared $GIT_DIR/config file in
multiple worktrees, diff rename annotation, a builtin version of
diff-highlight script, to name a few. There are some more challenging
work like narrow clone or pack version 4, which is just fun to do.
Though “fun” sometimes translates to “headache”.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don’t know :-) I don’t see far ahead in the future of Git because
I’m mostly busy dealing with my own unhappiness with some aspect of
Git. But if I could, maybe rewrite Git from scratch? On a smaller
scale, we still have problems with “big numbers” in Git, may it be the
number of refs, of files in a working tree, of objects to transfer or
the size of an object… We know how to deal with some of these
already and a dedicated expert team could help make it happen much
faster.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hmm.. there are lots of things I want to replace if backward
compatibility is thrown out of the window, but removing…no, probably
none.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favourite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None. If it’s good and related to Git, I try to integrate it in Git
itself so I don’t have extra dependencies :)&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;http://article.gmane.org/gmane.linux.kernel/2242820&quot;&gt;2.9.0&lt;/a&gt; (major release).&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.20.1606141316530.22630%40virtualbox/&quot;&gt;2.9.0&lt;/a&gt; (major release).&lt;/li&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqh9duj5vi.fsf%40gitster.mtv.corp.google.com/&quot;&gt;2.8.3&lt;/a&gt; and &lt;a href=&quot;http://article.gmane.org/gmane.linux.kernel/2236998&quot;&gt;2.8.4&lt;/a&gt; (maintenance releases).&lt;/li&gt;
  &lt;li&gt;Git for Windows &lt;a href=&quot;https://groups.google.com/forum/#!topic/git-for-windows/P008PLusCxw&quot;&gt;2.8.3&lt;/a&gt; and &lt;a href=&quot;https://groups.google.com/forum/#!topic/git-for-windows/LtFxynlPdAc&quot;&gt;2.8.4&lt;/a&gt; (maintenance releases).&lt;/li&gt;
  &lt;li&gt;git-multimail &lt;a href=&quot;https://github.com/git-multimail/git-multimail/releases/tag/1.3.0&quot;&gt;1.3.0&lt;/a&gt; and
&lt;a href=&quot;https://github.com/git-multimail/git-multimail/releases/tag/1.3.1&quot;&gt;1.3.1&lt;/a&gt; were released,
with a focus on options to customize emails, more documentation and
a few SMTP-related improvements.&lt;/li&gt;
  &lt;li&gt;Sharness &lt;a href=&quot;https://github.com/chriscool/sharness/releases/tag/v1.0.0&quot;&gt;1.0.0&lt;/a&gt;,
a shell library to test your tools like Git does, was released and
&lt;a href=&quot;https://public-inbox.org/git/CAP8UFD0uvaB-2_CrXs2ZvoqLRHfCd8efA-S7-tE2Qa6Pn%2BrAAg%40mail.gmail.com/&quot;&gt;announced on the mailing list&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;libgit2/nodegit &lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.13.2&quot;&gt;v0.13.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2/rugged &lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.25.0b4&quot;&gt;v0.25.0b4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2016/05/22/gitlab-8-8-released/&quot;&gt;8.8&lt;/a&gt; with Pipelines and .gitignore templates, patched up to &lt;a href=&quot;https://about.gitlab.com/2016/06/09/gitlab-8-dot-8-dot-4-released/&quot;&gt;8.8.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Deveo &lt;a href=&quot;http://blog.deveo.com/whats-new-in-deveo-3-10/&quot;&gt;3.10&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2188-git-2-9-has-been-released&quot;&gt;Git 2.9 has been released&lt;/a&gt; by Peff&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.packtpub.com/application-development/mastering-git&quot;&gt;New “Mastering Git” book&lt;/a&gt; by long time Git contributor Jakub Narębski&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@p.tournaris/git-rebase-a-pull-request-without-access-on-the-fork-a4189bac81b9&quot;&gt;Rebase a Pull Request without access on the Fork&lt;/a&gt; told by Pavlos-Petros Tournaris&lt;/li&gt;
  &lt;li&gt;Some really cool new Git subcommands from Adam Spiers: &lt;a href=&quot;https://lore.kernel.org/lkml/200504121030.j3CAUkUl005147%40shell0.pdx.osdl.net/&quot;&gt;new git splice subcommand for non interactive branch splicing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://zef.me/blog/6023/who-needs-git-when-you-got-zfs&quot;&gt;Who Needs Git When You Got ZFS?&lt;/a&gt; Zef Hemel asks. We do, but ZFS is still interesting.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://iinteractive.com/notebook/2016/05/25/git-mo-meta.html&quot;&gt;Easily Adding Meta Information to Git Branches&lt;/a&gt; by Yanick Champoux&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.nu42.com/2016/05/display-git-branch-windows-command-prompt.html&quot;&gt;Display git branch in Windows command prompt&lt;/a&gt; in the simplest way, by A. Sinan Unur&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://masukomi.org/talks/git_tips_talk&quot;&gt;Solutions to useful git scenarios&lt;/a&gt;, a presentation? Mindmap? By Kay Rhodes&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-tips/tips&quot;&gt;git-tips/tips: Most commonly used git tips and tricks&lt;/a&gt; - not sure if we shared this one before&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Some challenging ideas&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://svnvsgit.com&quot;&gt;Subversion vs. Git: Myths and Facts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bitquabit.com/post/unorthodocs-abandon-your-dvcs-and-return-to-sanity&quot;&gt;Unorthodocs: Abandon your DVCS and Return to Sanity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://somerobots.com&quot;&gt;Git Trident is an iOS client for GitLab and GitHub&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/splitsh/lite&quot;&gt;splitsh/lite: Split your monorepo into many repos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/donnemartin/gitsome&quot;&gt;donnemartin/gitsome: A Supercharged Git/Shell Autocompleter with GitHub Integration.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kovetskiy/manul&quot;&gt;kovetskiy/manul: The madness vendoring utility for Golang programs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/buunguyen/octotree&quot;&gt;buunguyen/octotree: Code tree for GitHub and GitLab&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://rwilcox.tumblr.com/post/144980240814/git-squash-check&quot;&gt;git squash-check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/reenhanced/gitreflow&quot;&gt;reenhanced/gitreflow: automates your pull request workflow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-fork.com/&quot;&gt;Fork - a fast and friendly git client for Mac&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/karandesai-96/yolog&quot;&gt;karandesai-96/yolog: Beautify your Git Logs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from Duy Nguyen, Matthieu Moy, Johannes Schindelin, Jeff King, Junio Hamano, François Beutin,
Jordan de Gea, William Duclot, Samuel Groot, Erwan Mathoniere, Antoine Queru, Simon Rabourg and Tom Russello.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 15 (May 11th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/05/11/edition-15/</link>
      <pubDate>Wed, 11 May 2016 13:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/05/11/edition-15/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-15-may-11th-2016&quot;&gt;Git Rev News: Edition 15 (May 11th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 15th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of April 2016,
especially at the Git Contributor Summit on April 4 2016 and at the
Git Merge conference on April 5 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Discussions at the Git Contributor Summit, part 2, about misc topics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Read part 1 in &lt;a href=&quot;https://git.github.io/rev_news/2016/04/20/edition-14/&quot;&gt;Git Rev News Edition 14&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At the Git Contributor Summit on April 4th, just after the lunch
break, the state of the participation of the Git project in the Google
Summer of Code (GSoC) and Outreachy were briefly mentioned. Jeff King,
alias Peff, then talked about the state of the Git project as a member of
&lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Software Freedom Conservancy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Git is one of Conservancy’s Member Projects. Conservancy manages the legal and
administrative aspects of the Git project, and also manages Git’s
money, which amounts to around $20000. This money comes mostly from
donations made on git-scm.org, GSoC mentor stipends, and book
royalties. The money has been used in the past to pay for some
developers to travel to conferences like Git Merge, and may be used in
the future to pay Outreachy student stipends.&lt;/p&gt;

&lt;p&gt;The governance of the Git project as part of Conservancy is in the hands
of Junio Hamano, Shawn Pearce, and Jeff King. The main activity of the
governance consists in handling trademark issues related to the “Git”
trademark that the project owns.&lt;/p&gt;

&lt;p&gt;There are a number of projects who call themselves “Git XXX” and the
trademark policy on git-scm.org is used to decide if those trademarks
are approved or not.&lt;/p&gt;

&lt;p&gt;Another activity is related to defending the license, which is the
GPLv2. For example, there have previously been vendors distributing
Git with some changes, but without providing the source code for the Git version they
were distributing. So far it has been possible to resolve these cases, but
it is not completely clear if all vendors are currently fulfilling all of
their obligations. If any developers who have contributed to Git
want to take a closer look at what the vendors are doing, Conservancy is
able to help them.&lt;/p&gt;

&lt;p&gt;After that SubmitGit was discussed as well as ways to make it easier
for people who are not yet Git developers to contribute. TravisCI,
which can be used to automatically test pull requests that are
submitted on GitHub, was also discussed at the same time.&lt;/p&gt;

&lt;p&gt;It appeared that it would be good to also be able to test pull
requests on Windows machines, but TravisCI doesn’t support Windows
yet. To help on this GitLab CEO Sytse “Sid” Sijbrandij offered to
let the project use GitLab CI, which supports Linux, OSX, and Windows.&lt;/p&gt;

&lt;p&gt;Various subjects were then discussed a bit, like case insensitive
refnames and filenames, submodules, and Git on Celph, which is a file
system for computer clusters.&lt;/p&gt;

&lt;p&gt;A mix of long time and quite new Git contributors, along with people
from Git related projects and companies, attended. The atmosphere was
relaxed and informal. Overall it was a very pleasant event.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://speakerdeck.com/nibalizer/20-tricks-with-git-and-bash&quot;&gt;20 Tricks with Git and Shell&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the &lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge conference&lt;/a&gt; on April 5th 2016
at &lt;a href=&quot;http://newworldstages.com/&quot;&gt;New World Stages&lt;/a&gt; in New York City,
USA, Spencer Krum, who works for IBM in Portland and appears to be a
big fan of
&lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Software Freedom Conservancy&lt;/a&gt;, gave
an interesting and fast-paced presentation about some shell and Git
command line tricks.&lt;/p&gt;

&lt;p&gt;Some of the tricks he showed are available in his
&lt;a href=&quot;https://github.com/nibalizer/bash-tricks&quot;&gt;‘bash-tricks’ GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The presentation started with simple shell aliases like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias
sl=&apos;ls&apos;&lt;/code&gt; to cope with typos and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias g=&apos;git&apos;&lt;/code&gt; to reduce typing, then
a bit more complex ones to avoid typing common arguments like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias
gpom=&apos;git push origin master&apos;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias pydoc=&apos;python -m pydoc&apos;&lt;/code&gt;,
until validation aliases like:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;alias yamlcheck=&apos;python -c &quot;import sys, yaml as y; y.safe_load(open(sys.argv[1]))&quot;&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Spencer then spoke about customized prompts for git, filesystems and
tools, and about git config aliases. For example, this alias that makes
grepping through your submodules easy:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[alias]
	sgrep = &quot;!f() { git submodule foreach \&quot;git grep &apos;$1&apos;; true \&quot;
			| grep -B 1 \&quot;$1\&quot;; }; f&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After that came functions. Some were general like:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Get to the top of a git tree
cdp () {
  TEMP_PWD=`pwd`
  while ! [ -d .git ]; do
  cd ..
  done
  OLDPWD=$TEMP_PWD
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Others were related to Gerrit or GitHub:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Check out a Pull request from github
function pr() {
  id=$1
  if [ -z $id ]; then
      echo &quot;Need Pull request number as argument&quot;
      return 1
  fi
  git fetch origin pull/${id}/head:pr_${id}
  git checkout pr_${id}
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the end Spencer showed how to combine multiple small features to
get something interesting. Take the following 3 tricks:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Vim can be started at a given line by giving the line in a +[num] argument, for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim +24&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;The previous command typed on the command line can be obtained using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;history | tail -n 2 | head -1&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep -n XXX&lt;/code&gt; will show a grep result from Git with a line number&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These 3 small tricks can be used in the following big one:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Have vim inspect command history
vim () {
    last_command=$(history | tail -n 2 | head -n 1)
    if [[ $last_command =~ &apos;git grep&apos; ]] &amp;amp;&amp;amp; [[ &quot;$*&quot; =~ :[0-9]+:$ ]]; then
        line_number=$(echo $* | awk -F: &apos;{print $(NF-1)}&apos;)
        /usr/bin/vim +${line_number} ${*%:${line_number}:}
    else
        /usr/bin/vim &quot;$@&quot;
    fi
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That makes vim open file “foo” at line “X” if one uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vim foo:X&lt;/code&gt;
just after having run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAFZEwPMr%3Dimv%3D%3DkvVULy4PDYKW-0RRQ5a%2BX8DFqNFhNjCSyWKA%40mail.gmail.com/&quot;&gt;GSoC 2016&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This year only one student, Pranit Bauva, will participate in the
Google Summer of Code 2016 under the Git project. He will work on
incrementally rewriting in C the parts of “git bisect” that are still
in shell. He will be mentored by Lars Schneider and Christian Couder.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-david-turner&quot;&gt;Developer Spotlight: David Turner&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you, what do you do and why were you at the Git Merge?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am a free software developer (and occasional board game designer). I
currently work on developer tools at Twitter.  My focus is on making
Git faster.  I was at Git Merge and the Git Core Contributors Summit to
meet other Git developers.  I really enjoyed meeting you and the other
contributors.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My most important contribution was probably ensuring that cache-trees
are written on checkout and commit (from 2014).  I’ve done a bunch of
work since then on refs, the index-helper, and fixed a few really weird
bugs (http range requests might be the weirdest).  But most of the
performance work I have done is still in-progress.  The cache-tree fix
has been in git since I think 2.2, and it affects daily performance for
anyone using a medium to large repo.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m working on a few different things:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;- Alternate ref backends (storing refs in a database)
- Reviewing protocol v2 patches (and, perhaps, adding new protocol
  capabilities allowing single-branch fetches to be more
  efficient)
- The index-helper and watchman support for faster status on large
  repositories
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would rewrite all index access code to only look a the relevant
portions of the index.  Right now, many Git commands scan the entire
index, which does not scale well.  It would be much better if git
status and related commands ran in O(number of changes) instead of
O(size of repository).  This would be a major effort, but the end
result would be a much faster Git.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would completely redesign the UX.  For instance, the famous
“git checkout $branch” vs “git checkout -b” vs “git checkout $filename”
confusion could be completely eliminated by using a different verb for
each of these things.&lt;/p&gt;

&lt;p&gt;My work focuses on performance because that is what I enjoy and am good
at.  But I think UX work is often more important, and I wish that there
were a way to correct some historical UX decisions.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favourite Git-related tool/library, outside of Git
itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Michael Haggerty just showed me &lt;a href=&quot;https://github.com/trast/tbdiff&quot;&gt;git tbdiff&lt;/a&gt;,
which is very useful when rebasing a large patch series.  I also have to mention
&lt;a href=&quot;http://www.daniellesucher.com/2014/05/08/git-shamend/&quot;&gt;git shamend&lt;/a&gt;.&lt;/p&gt;

&lt;!---
### Reviews
--&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqq7ffgvzpn.fsf%40gitster.mtv.corp.google.com/&quot;&gt;Git 2.8.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://groups.google.com/d/msg/git-for-windows/-Jur6cdjMjE/m02wl_qCCQAJ&quot;&gt;Git for Windows 2.8.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.25.0b2&quot;&gt;libgit2/rugged v0.25.0b2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.13.0&quot;&gt;libgit2/nodegit v0.13.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03139.html&quot;&gt;JGit/EGit 4.3.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/04/22/gitlab-8-7-released/&quot;&gt;GitLab 8.7&lt;/a&gt; and patches up to &lt;a href=&quot;https://about.gitlab.com/2016/05/06/gitlab-8-dot-7-dot-3-released/&quot;&gt;8.7.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;BitKeeper, the inspiration for Git and Mercurial, &lt;a href=&quot;https://users.bitkeeper.org/t/bk-7-2ce-released-2016-05-09/93&quot;&gt;was released as Open Source&lt;/a&gt; (see also the discussion on &lt;a href=&quot;https://news.ycombinator.com/item?id=11667494&quot;&gt;Hacker News&lt;/a&gt; as well as &lt;a href=&quot;https://lwn.net/Articles/686896/&quot;&gt;Linux Weekly News&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-blame.blogspot.de/2016/05/fun-with-new-feature-in-recent-git.html&quot;&gt;Fun with a new feature in recent Git&lt;/a&gt; by Junio C Hamano&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blogs.atlassian.com/2016/04/bitbucket-data-center-smart-mirroring-with-git-lfs-support/&quot;&gt;4200 miles, 5GBs, 1 min: cloning with mirrors and Git LFS&lt;/a&gt; from Atlassian’s Kelvin Yap&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2163-import-repositories-with-large-files&quot;&gt;GitHub: Import repositories with large files&lt;/a&gt;, by Jonathan Hoyt&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.fullstackradio.com/41&quot;&gt;Git Tips, Tricks and Workflows&lt;/a&gt; from the Full Stack Radio podcast episode 41, featuring Jason McCreary&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@fagnerbrack/one-commit-one-change-3d10b10cebbf#.1zqmjhd8q&quot;&gt;One Commit. One Change.&lt;/a&gt; by Fagner Brack&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dwim.me/2016/01/11/fast-foward-and-parent-reversal.html&quot;&gt;Fast-Forward and parent reversal&lt;/a&gt; by Carlos Martín Nieto&lt;/li&gt;
  &lt;li&gt;An interesting way of collecting your Git tricks using the &lt;a href=&quot;https://gingkoapp.com/git-notes&quot;&gt;Gingko App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.plover.com/2016/04/16/&quot;&gt;How to recover lost files added to Git but not committed&lt;/a&gt; by Mark Dominus&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hal.inria.fr/hal-01112795/document&quot;&gt;An Effective Git And Org-Mode Based Workflow For Reproducible Research&lt;/a&gt; (PDF)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://ianmiell.github.io/git-101-tutorial/&quot;&gt;Git-101-tutorial&lt;/a&gt; by Ian Miell&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://rachelbythebay.com/w/2016/05/05/xcode/&quot;&gt;Go upgrade Xcode. Fix your git security hole.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.askaswiss.com/2016/01/12-useful-advanced-git-commands.html&quot;&gt;12 advanced Git commands I wish my co-workers would know&lt;/a&gt;, by Michael Beyeler&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://devblog.nestoria.com/post/98892582763/maintaining-a-consistent-linear-history-for-git&quot;&gt;Maintaining a consistent linear history for git…&lt;/a&gt; by David Lowe of Nestoria&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://emi.gd/blog/git-submodules/&quot;&gt;Shared repositories in Git&lt;/a&gt; by Emilia Szymańska&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://gitjunction.com/&quot;&gt;GitJunction&lt;/a&gt; - a collection of Git tutorials&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sobolevn/git-secret&quot;&gt;sobolevn/git-secret: A bash-tool to store your private data inside a git repository.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.anishathalye.com/2015/08/19/git-remote-dropbox/&quot;&gt;git-remote-dropbox&lt;/a&gt; by Anish Athalye&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/anishathalye/git-remote-dropbox&quot;&gt;anishathalye/git-remote-dropbox: bridge between Git and Dropbox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from David Turner, Andrew Ardill and Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 14 (April 20th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/04/20/edition-14/</link>
      <pubDate>Wed, 20 Apr 2016 13:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/04/20/edition-14/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-14-april-20th-2016&quot;&gt;Git Rev News: Edition 14 (April 20th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 14th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of March 2016 and
also what happened at the Git Contributor Summit on April 4 2016 and
at the Git Merge conference on April 5 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Discussions at the Git Contributor Summit, part 1, about big repos and big files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Git Contributor Summit happened on April 4th at the panoramic
rooftop bar of
&lt;a href=&quot;https://www.citizenm.com/destinations/new-york/new-york-times-square&quot;&gt;the citizenM hotel in New York City, USA&lt;/a&gt;.
The whole bar had been reserved by GitHub for the Summit from 10am to
4pm.&lt;/p&gt;

&lt;p&gt;Around 20 developers attended. Drinks were provided, and food was
served during the lunch break. Afterwards GitHub also invited
attendants to a dinner at a nearby Italian restaurant.&lt;/p&gt;

&lt;p&gt;As usual it was an unconference. Attendants interested in discussing a
topic wrote it on a board, where everyone could vote for it.&lt;/p&gt;

&lt;p&gt;The topics that attracted most votes were about performance on big
repositories.&lt;/p&gt;

&lt;p&gt;First it was said that it is unfortunate that the performance of many
git commands, like for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt;, depends linearly on the
number of refs in the repository.&lt;/p&gt;

&lt;p&gt;One possible solution to this problem would be to use some kind of
binary search algorithm to look up refs. Unfortunately that is not easy, as
replaced refs in ‘refs/replace/’ must all be read, and additionally the current implementation
of the backend requires some stat(2) calls to check if there are any loose refs.&lt;/p&gt;

&lt;p&gt;This problem should at least partially be solved with the current work
going on to implement additional ref backends, especially a
&lt;a href=&quot;http://symas.com/mdb/&quot;&gt;lmdb&lt;/a&gt; based one.&lt;/p&gt;

&lt;p&gt;(This work on an lmdb based ref backend has been reported on in
&lt;a href=&quot;https://git.github.io/rev_news/2016/02/10/edition-12/&quot;&gt;Git Rev News edition 12&lt;/a&gt; and
&lt;a href=&quot;https://git.github.io/rev_news/2015/09/09/edition-7/&quot;&gt;Git Rev News edition 7&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;From there the discussion switched to the case sensitiveness of ref
names, and the different problems created by having ref names that
should also be proper filenames: slow filesystems like NTFS, unicode
normalizing filesystems like HFS+, file/directory collisions, reflog
deletion, and more.&lt;/p&gt;

&lt;p&gt;It was also mentioned that the tree object lookup could be sped up,
but that it would require a more efficient packfile format.&lt;/p&gt;

&lt;p&gt;The current effort to implement an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;index-helper&lt;/code&gt; daemon to speed up
index reading was also described.&lt;/p&gt;

&lt;p&gt;Then some time was spent discussing large objects. Some objects
are able to be stored locally, while others are not. This means that
doing something similar to rsync, where it manages chunks of files,
might not always be possible.&lt;/p&gt;

&lt;p&gt;Git LFS is now offered by at least GitHub and Microsoft, however
there are still a number of problems with it from a user
perspective. For example, it is not shipped with Git, and it is not always
easy to know which files should go into it.&lt;/p&gt;

&lt;p&gt;It also looks like the filters used by Git LFS to trigger big
file downloads are executed sequentially, which is not good for
performance.&lt;/p&gt;

&lt;p&gt;This made people mention potential problems with parallelizing
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;One possibility to improve on Git LFS would be to create another kind
of backend for git objects that would be optimized for large files and
would sit alongside loose objects and packfiles.&lt;/p&gt;

&lt;p&gt;The subject next switched to possible ways of speeding up &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt;. The
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;index-helper&lt;/code&gt; daemon effort was described again, as it can use
&lt;a href=&quot;https://facebook.github.io/watchman/&quot;&gt;the watchman library&lt;/a&gt; to
efficiently monitor the working tree for changes. Unfortunately, the watchman service
must be run manually for now, and running daemons on Windows
might require some admin rights.&lt;/p&gt;

&lt;p&gt;The recently merged effort on improving the untracked cache in the
index was also mentioned.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gregkh/kernel-development&quot;&gt;Linux Kernel Development - Going Faster Than You Think&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge conference&lt;/a&gt; happened this year
on April 5th at &lt;a href=&quot;http://newworldstages.com/&quot;&gt;New World Stages&lt;/a&gt; in New
York City, USA.&lt;/p&gt;

&lt;p&gt;The first presentation of &lt;a href=&quot;http://git-merge.com/#schedule&quot;&gt;the packed schedule&lt;/a&gt;
was given by &lt;a href=&quot;https://en.wikipedia.org/wiki/Greg_Kroah-Hartman&quot;&gt;Greg Kroah-Hartman&lt;/a&gt;
and was about how the Linux Kernel developers are using Git.&lt;/p&gt;

&lt;p&gt;(The slides are available in
&lt;a href=&quot;https://github.com/gregkh/kernel-development&quot;&gt;Greg’s Github repo for this presentation&lt;/a&gt;
either in
&lt;a href=&quot;https://github.com/gregkh/kernel-development/blob/master/kernel-git.pdf&quot;&gt;pdf format&lt;/a&gt; or in
&lt;a href=&quot;https://github.com/gregkh/kernel-development/blob/master/kernel-git.odp&quot;&gt;odp format&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;Greg works at the &lt;a href=&quot;http://www.linuxfoundation.org/&quot;&gt;Linux Foundation&lt;/a&gt;.
He is the maintainer of the Kernel ‘-stable’ branches and of many
subsystems like USB.&lt;/p&gt;

&lt;p&gt;He said that the Linux Kernel is made of more than 21 million lines of
code, in more than 53 000 files. Everything is in the tree, and drivers account
for around one third of the size. Nearly 4000 developers and around 400 companies
are involved.&lt;/p&gt;

&lt;p&gt;This makes the Linux Kernel the largest software project ever.&lt;/p&gt;

&lt;p&gt;Around 10 000 lines are added, 5300 lines are removed, and 1800 lines
are modified, everyday!&lt;/p&gt;

&lt;p&gt;That’s on average 7.8 changes per hour across the whole tree with 5%
in the core, 10% in the networking subsystem, and 55% in the drivers.&lt;/p&gt;

&lt;p&gt;This goes against any previously thought methodology for stable
software development, and things are only getting faster and faster.&lt;/p&gt;

&lt;p&gt;Things are going so fast that it costs money to keep your code outside
the kernel.&lt;/p&gt;

&lt;p&gt;There is a new release every 2.5 months, so if your code is rejected
you have to wait 2 months before it can be in the next release. This
is very predictable.&lt;/p&gt;

&lt;p&gt;The release cycle is made of a two week long “merge window” and then
some “rc” releases - one per week. During the “merge window”, code is
merged from subsystem maintainers. The “rc” releases, “rc-1”, “rc-2”,
… , “rc-7” are bug fixes only. Once all major bugs and regressions
are fixed a release is made and the cycle starts over with a new merge
window.&lt;/p&gt;

&lt;p&gt;For “stable” kernels that Greg maintains, they are forked from Linux
releases. Commits have to go in Linus’ tree first before Greg will
accept them. It should be the same identical patch as what is in
Linus’ tree, and it should be “bug fixes only” or new device ids. The
Linux distributions usually run from “stable” kernels.&lt;/p&gt;

&lt;p&gt;The “longterm” kernels are maintained for 2 years. Current “longterm”
kernels are 3.14, 4.1 and 4.4.&lt;/p&gt;

&lt;p&gt;This works well for many companies, but sometimes maintaining a kernel
for 2 years is not enough. Japan is converting all its infrastructure
to Linux, and people want some kernels maintained for 20 years.&lt;/p&gt;

&lt;p&gt;The patches sent for inclusion into the Kernel should be standalone.
None of them should break the build. Each patch set should be obvious,
broken down into the smallest reasonable patches, and every change
should be correct. One half to one third of submitted patches get accepted.&lt;/p&gt;

&lt;p&gt;This puts work on the developer’s shoulders. But that’s on purpose,
because there are many more developers than maintainers. There are
1000 maintainers, but only around 700 are active.&lt;/p&gt;

&lt;p&gt;To reach the maintainers, patches should be sent to the relevant
mailing list, like the usb mailing list or the scsi mailing list.
Andrew Morton reads the lkml mailing list.&lt;/p&gt;

&lt;p&gt;The email format should be plain text. It’s old school but works very,
very well. The Developer’s Certificate of Origin (DCO) is used to
ensure that people have the right to submit a patch. This is the same
process that Git uses.&lt;/p&gt;

&lt;p&gt;After a patch has been reviewed by a file or driver maintainer, the
maintainer will add his own “Signed-off-by” and will send it to a
subsystem maintainer.&lt;/p&gt;

&lt;p&gt;There are around 200 subsystem maintainers. They have their own trees
on git.kernel.org.&lt;/p&gt;

&lt;p&gt;Every night the “linux-next” is created from these 200 trees and is
built and boot tested on different platforms.&lt;/p&gt;

&lt;p&gt;Andrew Morton uses quilt to maintain his “-mm” kernels made from
patches picked by himself from the lkml mailing list or elsewhere.&lt;/p&gt;

&lt;p&gt;A couple of years ago, Kernel developers realized that nobody actually
tested the kernel.&lt;/p&gt;

&lt;p&gt;To address this, there is now a “0 day bot” that run tests and static analysis tools,
like coccinelle or sparse, automatically on all the kernel trees. It
tests every comment, and has a script that writes patches for common
problems. The bot also picks patches from the mailing lists to test.&lt;/p&gt;

&lt;p&gt;When a new merge window opens, the subsystem maintainers and Andrew
Morton send what they think is ready to Linus, so he can merge it. The
rule is that what is sent to Linus should have already been in
linux-next. 10 000 to 11 000 patches are usually merged in the 2 week
long merge window.&lt;/p&gt;

&lt;p&gt;Following Greg’s talk, Stefan Beller asked on the mailing list if Greg
could put the Git developers in touch with the 0 day bot developers
and &lt;a href=&quot;https://public-inbox.org/git/CAGZ79kZOx8ehAB-%3DFrjgde2CDo_vwoVzQNizJinf4LLXek5PSQ%40mail.gmail.com/&quot;&gt;a discussion started&lt;/a&gt;
about how the 0 day bot could be used.&lt;/p&gt;

&lt;!--- ### Reviews --&gt;

&lt;h2 id=&quot;developer-spotlight-johannes-sixt&quot;&gt;Developer Spotlight: Johannes Sixt&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you, and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am a seasoned software engineer. Professionally, I work on Windows
most of the time and develop software in C++. At home, I am operating
only Linux and contribute to various Open Source projects. Most
prominently, KDbg (http://www.kdbg.org/), a GUI around the debugger
GDB, is my child.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I was the first one to present a working and usable Git on Windows. By
this I mean git.exe, the program, not the package Git for Windows
(which is another great achievement, but it is not mine). Of course,
it was possible to operate Git on Windows using Cygwin before my
contribution. But the Cygwin runtime is such a thick layer between the
POSIX and Windows APIs that file operations are very, very slow. My
goal was to make git.exe a native Windows program and considerably
faster. And that is it today when we talk about “Git for Windows”.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In our software shop, we use Git a lot. That is sufficient motivation
to keep an eye on its development. These days I’m doing mostly
janitory work to keep Git working on Windows.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Port Git to C++. When done right, there would not be any worries about
memory leaks, chatty error messages, extra function parameters to
choose whether a library function should return or die on error. Code
could be written much shorter. Librarification would be achieved in a
natural way. Subsequently, turning shell scripts into built-in
commands would become much easier. For example, you wouldn’t even have
to ask “does the git-apply machinery clean up after itself
sufficiently so that we can call it multiple times from one program?”
(Yes, it would do so automatically.)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have learned to live with Git’s quirks. Therefore, it’s difficult to
find something that is really an obstacle for me. But with an eye on
newcomers, I think I would pick the term “cache” and its variants as a
candidate for removal.&lt;/p&gt;

&lt;p&gt;(Oh, it looks like I’m in good company of Matthieu Moy, who thinks likewise.)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favourite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think I work exclusively with git-core tools (if you count in
git-gui and gitk). The closest that comes to mind that are both
“related” and “favourite” are Meld and Winmerge when driven by
git-difftool and git-mergetool.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqoa9y1ays.fsf%40gitster.mtv.corp.google.com/&quot;&gt;ANNOUNCE Git v2.8.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://article.gmane.org/gmane.linux.kernel/2189878&quot;&gt;ANNOUNCE Git v2.8.1 and call for help to make rpmbuild users&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.8.0.windows.1&quot;&gt;Release Git for Windows 2.8.0 · git-for-windows/git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.8.1.windows.1&quot;&gt;Release Git for Windows 2.8.1 · git-for-windows/git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/objective-git/releases/tag/0.12.0&quot;&gt;Release 0.12.0 · libgit2/objective-git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.24.1&quot;&gt;Release libgit2 v0.24.1 Maintenance Release&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.12.2&quot;&gt;Release v0.12.2 · nodegit/nodegit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03124.html&quot;&gt;JGit/EGit Release 4.3.0.201604071810-r&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/03/22/gitlab-8-6-released/&quot;&gt;GitLab 8.6 released&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/04/15/gitlab-8-dot-6-dot-6-released/&quot;&gt;GitLab 8.6.6 released&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gitkraken.com/release-notes&quot;&gt;GitKraken 1.1.0 Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Git’s creator on the stage: &lt;a href=&quot;http://www.ted.com/talks/linus_torvalds_the_mind_behind_linux&quot;&gt;Linus Torvalds: The mind behind Linux (TED Talk)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Ever fewer Git hosting options: &lt;a href=&quot;https://gitenterprise.me/2016/03/29/gitent-scm-com-farewell/&quot;&gt;GitEnt-scm.com Farewell&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;One of the relatively cryptic new Git features, untrackedCache, explained on &lt;a href=&quot;https://news.ycombinator.com/item?id=11388479&quot;&gt;Hacker News&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Lots of discussion on CocoaPods using GitHub as their storage backend the last weeks: &lt;a href=&quot;https://github.com/CocoaPods/CocoaPods/issues/4989#issuecomment-193772935&quot;&gt;Issue #4989 · CocoaPods/CocoaPods&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading (for Git rookies)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A journeyman’s notes on introducing Git: &lt;a href=&quot;https://git-escapades.ghost.io/starting-the-escapade/&quot;&gt;Git Escapades&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Some nice tips on workflows in this little &lt;a href=&quot;https://gist.github.com/dmglab/8402579&quot;&gt;Git bible&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.scoutapp.com/articles/2016/04/12/3-git-productivity-hacks&quot;&gt;3 Git Productivity Hacks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://wesbos.com/git-hot-tips/&quot;&gt;Git Hot Tips&lt;/a&gt; from Wes Bos&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/visualstudioalm/2016/03/31/whats-new-in-git-for-windows-2-8/&quot;&gt;What’s new in Git for Windows 2.8?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Slightly heavier reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://githubengineering.com/introducing-dgit/&quot;&gt;Introducing DGit - GitHub Engineering&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=11407289&quot;&gt;Intense discussion of the new GitHub squash feature on Hacker News&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2144-gpg-signature-verification&quot;&gt;GPG signature verification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pstadler/keybase-gpg-github&quot;&gt;Step-by-step guide on how to create a GPG key on keybase.io, adding it to a local GPG setup and use it with Git and GitHub.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Security hole found in Git: &lt;a href=&quot;https://ma.ttias.be/remote-code-execution-git-versions-client-server-2-7-1-cve-2016-2324-cve-2016-2315/&quot;&gt;Remote Code Execution in all git versions (client + server) &amp;lt; 2.7.4: CVE-2016-2324, CVE-2016‑2315&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.beepsend.com/2016/04/05/abandoning-gitflow-github-favour-gerrit/&quot;&gt;Abandoning Gitflow and GitHub in favour of Gerrit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2131-git-2-8-has-been-released&quot;&gt;Git 2.8 explained on the GitHub blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/littlebee/git-time-machine&quot;&gt;git-time-machine: Atom package that allows you to travel back in commit history&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://s3git.org/&quot;&gt;s3git.org git for cloud storage&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kamranahmedse/git-standup&quot;&gt;kamranahmedse/git-standup: Recall what you did on the last working day&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rtfpessoa/diff2html-cli&quot;&gt;rtfpessoa/diff2html-cli: Simple Diff to Html CLI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://corner.squareup.com/2016/04/pair-a-git-author-tool.html&quot;&gt;pair, a git author tool&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from Johannes Sixt, Andrew Ardill and Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 13 (March 16th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/03/16/edition-13/</link>
      <pubDate>Wed, 16 Mar 2016 14:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/03/16/edition-13/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-13-march-16th-2016&quot;&gt;Git Rev News: Edition 13 (March 16th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 13th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of February 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAJo%3DhJtHgE_vye_1sPTDsvJ0X%3DCs72HKLgRH8btpW-pMrDdk9g%40mail.gmail.com/&quot;&gt;RFC: Resumable clone based on hybrid “smart” and “dumb” HTTP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a widely known problem that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; is not resumable. If the
connection comes down during a clone, the clone has to be restarted
from scratch.&lt;/p&gt;

&lt;p&gt;A work around that is often suggested and used is to first create a
bundle using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bundle&lt;/code&gt;, to rsync that bundle, then to clone from
the rsync’ed bundle and eventually to fetch what is missing from the
remote git repository. Some tools
&lt;a href=&quot;https://public-inbox.org/git/CADdDZRmufDTYYxHeAuPbCUn5iQHruAOXXho5KVOQ6McfSFvPJw%40mail.gmail.com/&quot;&gt;like gitolite&lt;/a&gt; or
&lt;a href=&quot;https://source.android.com/source/using-repo.html&quot;&gt;the “repo” tool that is used by AOSP&lt;/a&gt;
and some websites
&lt;a href=&quot;https://www.kernel.org/&quot;&gt;like kernel.org&lt;/a&gt;
have even been making it easier to support that.&lt;/p&gt;

&lt;p&gt;There was also at one point in 2011
&lt;a href=&quot;https://public-inbox.org/git/20111110074330.GA27925%40sigill.intra.peff.net/&quot;&gt;a patch series&lt;/a&gt;
to improve the support of this kind of clone workflow internally.&lt;/p&gt;

&lt;p&gt;And for some time this was thought of by some Git developers as just a
small manpower problem. A few months of dedicated work by anyone could
probably fix that. It was even proposed as a Google Summer of Code
(GSoC) project.&lt;/p&gt;

&lt;p&gt;Over time though the community realized that it was not so easy
because some very careful design was needed, and it was removed from
the list of possible GSoC projects.&lt;/p&gt;

&lt;p&gt;So it was very exciting to see a number of new proposals pop up on the
list during the last few months.&lt;/p&gt;

&lt;p&gt;It started on February 5 with
&lt;a href=&quot;https://public-inbox.org/git/1454662677-15137-1-git-send-email-pclouds%40gmail.com/&quot;&gt;a “Resumable clone revisited, proof of concept” patch series by Duy Nguyen&lt;/a&gt;
where he wrote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I was reminded by LWN about this. Annoyed in fact because it’s
called a bug while it looks more like an elephant.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and pointed to &lt;a href=&quot;https://lwn.net/Articles/674392/&quot;&gt;a LWN.net article&lt;/a&gt;
that reports about
&lt;a href=&quot;https://www.socallinuxexpo.org/scale/14x/presentations/improving-diversity-maslows-hierarchy-needs&quot;&gt;Sarah Sharp speaking at the SCALE 14x conference&lt;/a&gt;:
“she noted that Git still does not support interrupting and resuming
download operations, which is an important bug to fix.”&lt;/p&gt;

&lt;p&gt;Then on February 10 Shawn Pearce sent
&lt;a href=&quot;https://public-inbox.org/git/CAJo%3DhJtHgE_vye_1sPTDsvJ0X%3DCs72HKLgRH8btpW-pMrDdk9g%40mail.gmail.com/&quot;&gt;an ‘RFC: Resumable clone based on hybrid “smart” and “dumb” HTTP’ proposal&lt;/a&gt;
that he had discussed internally with other people at Google where he works.&lt;/p&gt;

&lt;p&gt;This was followed on March 2 by
&lt;a href=&quot;https://public-inbox.org/git/20160302012922.GA17114%40jtriplet-mobl2.jf.intel.com/&quot;&gt;an email called “Resumable git clone?”&lt;/a&gt;
from Josh Triplett, a well known Linux Kernel developer, who asked:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In a discussion elsewhere, Al Viro suggested taking the partial pack
received so far, repairing any truncation, indexing the objects it
contains, and then re-running clone and not having to fetch those
objects.  This may also require extending receive-pack’s protocol for
determining objects the recipient already has, as the partial pack may
not have a consistent set of reachable objects.&lt;/p&gt;

  &lt;p&gt;Before starting down the path of developing patches for this, does the
approach seem potentially reasonable?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Josh talks about Al Viro who is another well known Linux Kernel
developer, and it’s interesting to see Linux Kernel developers
interested again in taking part in Git development. It reminds some
old timers about the “good old time”.&lt;/p&gt;

&lt;p&gt;All these proposals have been discussed by many regular Git developers
and reviewers like Stefan Beller, Junio Hamano, Johannes Schindelin,
Jonathan Nieder, Eric Sunshine, Jeff King, Elia Pinto.&lt;/p&gt;

&lt;p&gt;About Shawn’s proposal Blake Burkhart reminded the community that the
implementation has to keep in mind that it would introduce potential
security issue if Shawn’s proposal is done carelessly. And other
people like Bhavik Bavishi and Konstantin Ryabitsev also took part in
the discussion following Josh’s email.&lt;/p&gt;

&lt;p&gt;From the last discussions about Josh’s email, it appeared that Git
developers favored Shawn’s proposal over others, though Shawn’s
proposal could benefit from implementing parts of Al’s and Josh’s
proposal too. So the plan seemed to be that Shawn’s proposal was going
to be worked on soon, and then later some optimizations from Al and
Josh could be implemented on top of it.&lt;/p&gt;

&lt;p&gt;Then on March 5 Kevin Wern sent
&lt;a href=&quot;https://public-inbox.org/git/CANtyZjSJf5_xbsBC5tUaazFT3uiEgJnx2_kHLwYwKcn50Jy_qg%40mail.gmail.com/&quot;&gt;an email called “Resumable clone”&lt;/a&gt;,
where he said he began looking at relevant code to start working on it, and he asked:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Is someone working on this currently?  Are there any things I should
know moving forward?  Is there a certain way I should break
down/organize the feature when writing patches?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Duy answered that “Resumable clone is happening.” And pointed to
&lt;a href=&quot;https://public-inbox.org/git/xmqq1t7r2x21.fsf%40gitster.mtv.corp.google.com/&quot;&gt;some preparation work&lt;/a&gt;
by Junio Hamano &lt;a href=&quot;https://public-inbox.org/git/xmqqvb556abd.fsf%40gitster.mtv.corp.google.com/&quot;&gt;going on&lt;/a&gt;.
Junio by the way answered with
&lt;a href=&quot;https://public-inbox.org/git/CANtyZjSJf5_xbsBC5tUaazFT3uiEgJnx2_kHLwYwKcn50Jy_qg%40mail.gmail.com/focus=288317&quot;&gt;a very long email&lt;/a&gt;
that contains “a rough and still slushy outline” of what remains to be
done. This was then discussed and explained further.&lt;/p&gt;

&lt;p&gt;It is not clear if Shawn’s proposal and Josh’s email were inspired by
Sarah Sharp’s remark, and LWN.net’s report about it, but anyway it
looks like hopefully this old and annoying problem is going to be
fixed not too far away into the future.&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1455531466-16617-4-git-send-email-larsxschneider%40gmail.com/&quot;&gt;config: add ‘–show-origin’ option to print the origin of a config value&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For some time Lars Schneider has been sending versions of a short
patch series to make it possible to see where a config option comes
from (&lt;a href=&quot;https://public-inbox.org/git/1454661750-85703-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;v1&lt;/a&gt;, &lt;a href=&quot;https://public-inbox.org/git/1455099198-11515-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;v2&lt;/a&gt;, &lt;a href=&quot;https://public-inbox.org/git/1455373456-64691-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;v3&lt;/a&gt;, &lt;a href=&quot;https://public-inbox.org/git/1455531466-16617-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;v4&lt;/a&gt;, &lt;a href=&quot;https://public-inbox.org/git/1455699468-45443-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;v5&lt;/a&gt;, &lt;a href=&quot;https://public-inbox.org/git/1455873362-66998-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;v6&lt;/a&gt;):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git config --list --show-origin
file:/Users/john/.gitconfig user.email=john@doe.com
file:/Users/john/.gitconfig alias.co=checkout
file:.git/config    remote.origin.url=https://repos/myrepo.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Lars started this patch series with an &lt;a href=&quot;https://public-inbox.org/git/3226E251-73F9-4410-84DE-49C8FFAD92EB%40gmail.com/&quot;&gt;RFC&lt;/a&gt;
whereupon Jeff King pointed him to a &lt;a href=&quot;https://public-inbox.org/git/20120206062713.GA9699%40sigill.intra.peff.net/&quot;&gt;previous discussion&lt;/a&gt;
about the same idea. Jeff also posted his initial implementation which
Lars’ v1 was based on.&lt;/p&gt;

&lt;p&gt;The new feature can be useful because config options can be set in
different locations and sometimes it is hard to find where a 
specific config was defined. Usually a config is defined in one of the 
following files:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the “.git/config” file at the root of the working directory,&lt;/li&gt;
  &lt;li&gt;the user’s “~/.gitconfig” file,&lt;/li&gt;
  &lt;li&gt;the user’s “~/.config/git/config” file, or&lt;/li&gt;
  &lt;li&gt;a system wide “/etc/gitconfig” file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact paths of the above files depend on how git was compiled
and on the values of at least the GIT_CONFIG, GIT_CONFIG_NOSYSTEM,
GIT_DIR and XDG_CONFIG_HOME environment variables.&lt;/p&gt;

&lt;p&gt;In addition config values can be set on the command line (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git -c &amp;lt;key&amp;gt;=&amp;lt;value&amp;gt; config ...&lt;/code&gt;),
from another file (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config -f &amp;lt;file&amp;gt; ...&lt;/code&gt;), from standard input (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config &amp;lt; ...&lt;/code&gt;), or 
even from a blob (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config --blob=a9d9f9&lt;/code&gt;). A config file can also 
include another config file by using the “include.path = &lt;path&gt;&quot; 
directive.&lt;/path&gt;&lt;/p&gt;

&lt;p&gt;Although the implementation itself was straightforward many details around
the naming required a thoughtful discussion by Sebastian Schuberth, Jeff King,
Ramsay Jones, Mike Rappazzo and Junio Hamano. Eventually the list agreed
on the config option name ‘–show-origin’ and the prefixes ‘file’, 
‘command line’, ‘standard input’ and ‘blob’ for the different config types.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git config&lt;/code&gt; option also has a number of different modes (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--get&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--list&lt;/code&gt;, …) 
and it was discussed which of them should be supported by ‘–show-origin’.&lt;/p&gt;

&lt;p&gt;Many details in the code and tests where also discussed by Eric
Sunshine, Johannes Schindelin, Johannes Sixt, Jeff, Ramsay and Junio.&lt;/p&gt;

&lt;p&gt;One nice side effect of this patch series is that in case of a config error 
Git can now tell more precisely from what type of config the error originates 
from (e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;standard input&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file&lt;/code&gt;).&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1456389742-48052-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;add DEVELOPER makefile knob to check for acknowledged warnings&lt;/a&gt;  (&lt;em&gt;written by Lars Schneider&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jeff King noted in a &lt;a href=&quot;https://public-inbox.org/git/1454661750-85703-1-git-send-email-larsxschneider%40gmail.com/focus=285568&quot;&gt;review&lt;/a&gt; 
that &lt;em&gt;git style doesn’t allow declaration-after-statement&lt;/em&gt;. Thereupon
Lars Schneider posted a &lt;a href=&quot;https://public-inbox.org/git/1454921958-53129-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;patch&lt;/a&gt; 
to check for this warning in the TravisCI build. In the review of this 
patch Jeff &lt;a href=&quot;https://public-inbox.org/git/1454921958-53129-1-git-send-email-larsxschneider%40gmail.com//focus=285761&quot;&gt;suggested&lt;/a&gt;
to codify the knowledge about the warnings into an optional Makefile knob 
called “DEVELOPER”. Lars combined the warnings that &lt;a href=&quot;https://public-inbox.org/git/1454921958-53129-1-git-send-email-larsxschneider%40gmail.com//focus=285761&quot;&gt;Junio and Jeff&lt;/a&gt; care about and posted a revised version of the &lt;a href=&quot;https://public-inbox.org/git/1456389742-48052-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;patch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Git developers with a reasonably modern compiler can now compile Git with 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DEVELOPER=1 make&lt;/code&gt; or set the flag once for all make executions with 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;echo DEVELOPER=1 &amp;gt;&amp;gt;config.mak&lt;/code&gt; to ensure their patches are clear of all 
compiler warnings that the Git project cares about.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-sebastian-schuberth&quot;&gt;Developer Spotlight: Sebastian Schuberth&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you, and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m a passionate software engineer with a wide range of interests and
focus on quality, but I’m particularly interested in cross-platform
development. As a techie I’m always trying to look over the rim of a
tea cup to learn something new. Since a while, I got more and more
interested in taking build automation to the extreme and helping other
developers to get the most out of Git, their other tools, and CI.
Also, I consider myself sort of a Git Evangelist, promoting the use of
Git and teaching it to people where ever I can.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My contributions so far have mostly revolved around running Git on
Windows, which is why only small portions of my work are visible
upstream. I guess my most important contribution so far is the Git for
Windows installer, which I started about 7 years ago. It gave a face
to Git on Windows and lowered the hurdle for Windows developers to
give Git a try.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recently, I’ve not been contributing much to Git, neither to upstream
nor the Windows port. This is mostly due to time constraints, my
choice of programming languages I (currently) like to work with, and
also personal dissensions. Instead, I focus on other tools in the Git
ecosystem, like JGit and Gerrit.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wow, that’s a very temping idea :-) There are many small nuisances
that deserve to be addressed, but if I was to name a single big topic,
I’d say Git should be rewritten as a library, probably by just using
libgit2 and making the CLI a thin wrapper around it. As a side effect
this would mean to implement all of Git in C, and not use any Shell /
Perl / Python scripts anymore, which both improves performance and
portability.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s not one big thing that comes to my mind, but I believe a
general clean-up of legacy code, deprecated command line options and
wording in the docs could help :-)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favourite Git-related tool/library, outside of Git
itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I think about which Git-related tool has added the most value to
code I work on in terms of code quality, that would certainly be
Gerrit. It’s UI is not the nicest, but gitk / git gui users will
hardly notice ;-) And even in the GitHub-times Gerrit is vastly
superior in the information it can display, like diffs between
different iterations of patches.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;p&gt;The last month we saw some maintenance releases of Git, along with some RCs of the upcoming 2.8:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lkml.org/lkml/2016/3/10/612&quot;&gt;Git v2.7.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.7.3.windows.1&quot;&gt;Git for Windows 2.7.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqr3fiaq9f.fsf%40gitster.mtv.corp.google.com/&quot;&gt;Git v2.8.0-rc2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then there was a significant, albeit humbly versioned new libgit2, which dominoed through its wrapper projects:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.24.0&quot;&gt;Release libgit2 v0.24.0 · libgit2/libgit2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.24.0&quot;&gt;Release Rugged v0.24.0 · libgit2/rugged&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/pygit2/releases/tag/v0.24.0&quot;&gt;Release v0.24.0 · libgit2/pygit2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/objective-git/releases/tag/0.11.0&quot;&gt;Release 0.11.0: Merge pull request #559 from libgit2/piet/write-merge-conflicted-files · libgit2/objective-git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2sharp/releases/tag/v0.22&quot;&gt;Release LibGit2Sharp v0.22 · libgit2/libgit2sharp&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.11.9&quot;&gt;Release v0.11.9 · nodegit/nodegit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other releases:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/02/22/gitlab-8-5-released/&quot;&gt;GitLab major release 8.5&lt;/a&gt;, with patches up to &lt;a href=&quot;https://about.gitlab.com/2016/03/10/gitlab-8-dot-5-dot-5-released/&quot;&gt;8.5.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://emacsair.me/2016/02/10/magit-2.5&quot;&gt;Magit 2.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://kamalmarhubi.com/blog/2016/02/29/my-git-aliases/&quot;&gt;My git aliases&lt;/a&gt;, by Kamal Marhubi&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rawfunkmaharishi/rawfunkmaharishi.github.io/blob/master/gigs/_posts/HOW_TO_BOOK_THE_BAND.md&quot;&gt;Here’s a band you can book with a pull request&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://satanas.io/cheatsheets/git/&quot;&gt;Git Cheatsheet&lt;/a&gt;, by Wil Alvarez&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dear-github/dear-github/pull/115&quot;&gt;GitHub responds to the Open Source Maintainers “dear-github” letter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=cyMl6PNm5ts&quot;&gt;A presentation showing off Git as a roleplay: Git Dance&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=8hgNe8Q6kZE&quot;&gt;And another Git Dance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.igvita.com/2011/12/19/dont-push-your-pull-requests/&quot;&gt;Don’t “Push” Your Pull Requests&lt;/a&gt;, by Ilya Grigorik&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.freecodecamp.com/git-rebase-and-the-golden-rule-explained-70715eccc372#.93ok9bhsw&quot;&gt;Git rebase and the golden rule explained&lt;/a&gt;, by Pierre de Wulf&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.integralist.co.uk/posts/github-workflow.html&quot;&gt;GitHub Workflow (used by Frameworks team at BBC News)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://secure.phabricator.com/phame/post/view/766/write_review_merge_publish_phabricator_review_workflow/&quot;&gt;Write, Review, Merge, Publish: Phabricator Review Workflow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://barro.github.io/2016/02/a-succesful-git-branching-model-considered-harmful/&quot;&gt;A succesful Git branching model considered harmful&lt;/a&gt;, by Jussi Judin&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opencredo.com/versioning-a-microservice-system-with-git/&quot;&gt;Versioning a Microservice System with git&lt;/a&gt;, by David Borsos&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.freecodecamp.com/understanding-git-for-real-by-exploring-the-git-directory-1e079c15b807#.r1v5tvtqn&quot;&gt;Understanding git for real by exploring the .git directory&lt;/a&gt;, also by Pierre de Wulf&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://agripongit.vincenttunru.com/&quot;&gt;A Grip On Git: A Simple, Visual Git Tutorial&lt;/a&gt;, by Vincent Tunru&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.infoq.com/news/2016/02/google-kick-starts-git-ketch&quot;&gt;InfoQ: Google Kick-Starts Git Ketch: A Fault-Tolerant Git Management System&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/so-fancy/diff-so-fancy&quot;&gt;diff-so-fancy: Good-lookin’ diffs with diff-highlight and more&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://1dan.org/git-blameall/&quot;&gt;git-blameall&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/src-d/go-git&quot;&gt;Go-git – low-level and extensible Git client library in Go&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.sourcetreeapp.com/2016/02/22/sourcetree-update-atlassian-account-git-lfs-support-ui-refresh-and-more/&quot;&gt;New version of Atlassian SourceTree is out&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from Lars Schneider, Sebastian Schuberth, Junio Hamano and Josh Triplett.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 12 (February 10th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/02/10/edition-12/</link>
      <pubDate>Wed, 10 Feb 2016 12:30:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/02/10/edition-12/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-12-february-10th-2016&quot;&gt;Git Rev News: Edition 12 (February 10th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 12th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of January 2016.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1452788777-24954-1-git-send-email-dturner%40twopensource.com/&quot;&gt;refs backend rebase on pu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;David Turner, who works for Twitter, recently sent new versions of his
work to add a database backend to store Git refs:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1449102921-7707-1-git-send-email-dturner%40twopensource.com/&quot;&gt;v1 “LMDB refs backend atop pre-vtable”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1452561740-8668-1-git-send-email-dturner%40twopensource.com/&quot;&gt;v2 “refs backend reroll”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1452788777-24954-1-git-send-email-dturner%40twopensource.com/&quot;&gt;v3 “refs backend rebase on pu”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1454701462-3817-1-git-send-email-dturner%40twopensource.com/&quot;&gt;v4 “refs backend”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This work was started a long time ago by Ronnie Sahlberg, working for
Google, and has already been reported about in
&lt;a href=&quot;https://git.github.io/rev_news/2015/09/09/edition-7/&quot;&gt;Git Rev News edition 7&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These last patch series have again been reviewed or commented on by a
lot of experienced Git developers, like Junio Hamano, Michael
Haggerty, Duy Nguyen, Shawn Pearce, Jonathan Nieder, Eric Sunshine,
David Aguilar, Ronnie Sahlberg, Jeff King, Szeder Gábor, Thomas
Gummerer, Ramsay Jones, and also a bit by Howard Chu the LMDB author.&lt;/p&gt;

&lt;p&gt;Some suggestions were about:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/lkml/200502270134.13625.dtor_core%40ameritech.net/&quot;&gt;avoiding “extern” in C source&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/567A3EB6.9000405%40alum.mit.edu/&quot;&gt;splitting functions&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1449102921-7707-1-git-send-email-dturner%40twopensource.com/&quot;&gt;config options&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1449102921-7707-1-git-send-email-dturner%40twopensource.com/&quot;&gt;indenting using tabs instead of spaces&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/567AA2DF.1020408%40alum.mit.edu/&quot;&gt;option naming&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAPig%2BcSaZRAXJ%2BsVZgFUbWcNMzqWGtH9rgqFXjupjtTJiQVYFw%40mail.gmail.com/&quot;&gt;using argv_array_* functions&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/567A3228.2060407%40alum.mit.edu/&quot;&gt;using pointers to functions&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/loom.20151218T050438-482%40post.gmane.org/&quot;&gt;typedef and pointers&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqtwmhpg4j.fsf%40gitster.mtv.corp.google.com/&quot;&gt;naming call back functions&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160114205259.GA10440%40sigill.intra.peff.net/&quot;&gt;avoiding strcpy()&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160115133317.GJ10612%40hank/&quot;&gt;strings and memory leaks&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the interest in this work is still big and makes it likely that it
will bear fruits hopefully soon.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20160130051133.GA21973%40dcvr.yhbt.net/&quot;&gt;clones over rsync broken?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eric Wong, a long time git developer and the original git-svn author,
reported that he couldn’t use the rsync protocol anymore to clone:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I have not used rsync remotes in ages, but I was working on the
patch for -4/-6 support and decided to test it against rsync.kernel.org&lt;/p&gt;

  &lt;p&gt;Cloning git.git takes forever and failed with:&lt;/p&gt;

  &lt;p&gt;$ git clone rsync://rsync.kernel.org/pub/scm/git/git.git
Checking connectivity… fatal: bad object ecdc6d8612df80e871ed34bb6c3b01b20b0b82e6
fatal: remote did not send all necessary objects&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jeff King, alias Peff, replied that the “rsync transport blindly pulls
all of the data over, with no idea that it doesn’t need most of it”,
and as there are “over 95,000 unreachable loose objects consuming a
gigabyte” in the cloned repository. This explains why Eric’s clone
took forever.&lt;/p&gt;

&lt;p&gt;But it also didn’t work for Eric with smaller repositories and with
quite old versions of Git like 1.7.10.4. To that Peff replied that in
the rsync code “we blindly concatenate the list of loose refs and
packed refs” which has never been the right thing to do. And this
explains why the clones always fail with rsync. Peff found that this
has been broken since 2007, which is why it doesn’t work even with old
git versions.&lt;/p&gt;

&lt;p&gt;Peff also investigated different ways to fix it but concluded:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;…git-over-rsync is just an awful protocol. Nobody should be
using it. Having looked at it in more detail, I’m more in favor than
ever of removing it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and then sent a patch to “drop support for git-over-rsync”. This
patch, on top of explaining the above, contains:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We never made an official deprecation notice in the release
notes for git’s rsync protocol, but the tutorial has marked
it as such since 914328a (Update tutorial., 2005-08-30).
And on the mailing list as far back as Oct 2005, we can find
Junio mentioning it as having “been deprecated for quite
some time.”… So it was old news then; cogito had
deprecated the transport in July of 2005… (though it did
come back briefly when Linus broke git-http-pull!).&lt;/p&gt;

  &lt;p&gt;Of course some people professed their love of rsync through
2006, but Linus clarified in his usual gentle manner…:&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;blockquote&gt;
      &lt;p&gt;Thanks!  This is why I still use rsync, even though
everybody and their mother tells me “Linus says rsync is
deprecated.”&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;No. You’re using rsync because you’re actively doing
something &lt;em&gt;wrong&lt;/em&gt;.&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;The deprecation sentiment was reinforced in 2008, with a
mention that cloning via rsync is broken (with no fix)…&lt;/p&gt;

  &lt;p&gt;Even the commit porting rsync over to C from shell (cd547b4)
lists it as deprecated! So between the 10 years of informal
warnings, and the fact that it has been severely broken
since 2007, it’s probably safe to simply remove it without
further deprecation warnings.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;developer-spotlight-thomas-gummerer&quot;&gt;Developer Spotlight: Thomas Gummerer&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you, and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m an occasional contributor to Git. Originally I got involved with
the Git community during the Google Summer of Code in 2012. I recently
finished my masters degree, and will be starting a new job in about a
month.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I haven’t really made any big contributions to Git, but rather the
occasional bug fix and some small features. Many of my contributions
are around the index, as that’s the first thing I worked on in Git for
my Google Summer of Code project in 2012.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most recently I helped reviewing the LMDB backend patch series by
David Turner. As I didn’t know much about the refs code before reading
through the series I thought the introduction of a new backend would
be a good way to learn more about that part of Git. Other recent work
includes a patch series to add an option to show symrefs in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
ls-remote&lt;/code&gt; and another patch series allowing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep&lt;/code&gt; to fall back
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git grep --no-index&lt;/code&gt;, if it is executed outside of a git
repository. In addition to improving a project I use daily, I get to
learn from more experienced developers with each patch series I’m
sending.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing I particularly like about Git is how almost every operation
can be reversed in some way, if the user knows how to. Recovering from
such operations can however often be difficult, especially for someone
who does not know the ins and outs of Git. I think it would be great
to have some kind of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git undo&lt;/code&gt; command, that can undo the last, or
last few operations in the repository.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don’t think I would remove any feature in particular, but it would
be nice to improve the consistency in the user interface. These
inconsistencies make using Git harder and often confusing for new
users.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favourite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From a contributor perspective I find
&lt;a href=&quot;https://github.com/trast/tbdiff&quot;&gt;Thomas Rast’s tbdiff&lt;/a&gt; very useful.
I use it mostly to compare an older version of a patch series to a new
version I’m about to send and to see if all the review comments are
addressed.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;On January 4th, 2016, &lt;a href=&quot;http://article.gmane.org/gmane.linux.kernel/2118402&quot;&gt;Git 2.7.0 was released&lt;/a&gt;, and a day later, &lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.20.1601051641240.14434%40virtualbox/&quot;&gt;Git for Windows followed suite&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;On February 2nd, 2016, Git for Windows published &lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.20.1602021805250.2964%40virtualbox/&quot;&gt;version 2.7.0(2)&lt;/a&gt; primarily to address &lt;a href=&quot;https://github.com/git-for-windows/git/issues/592&quot;&gt;complaints by web browsers about “unsigned” installers&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;On February 6th, 2016, &lt;a href=&quot;https://public-inbox.org/git/xmqqd1sabt0a.fsf%40gitster.mtv.corp.google.com/&quot;&gt;Git 2.7.1 was released&lt;/a&gt;, followed by &lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.2.20.1602061820490.2964%40virtualbox/&quot;&gt;Git for Windows 2.7.1&lt;/a&gt; on the same day.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.24.0b12&quot;&gt;Release v0.24.0b12 · libgit2/rugged&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.11.0&quot;&gt;Release v0.11.0 · nodegit/nodegit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03087.html&quot;&gt;JGit/EGit Release 4.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2016/01/22/gitlab-8-4-released/&quot;&gt;GitLab’s 50th Release: 8.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge 2016 on April 5th 2016&lt;/a&gt; and &lt;a href=&quot;https://public-inbox.org/git/20160202161240.GA16870%40sigill.intra.peff.net/&quot;&gt;Git Developer Summit on April 4th 2016&lt;/a&gt; in New York City USA have been officially announced.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dear-github/dear-github&quot;&gt;dear-github: An open letter to GitHub from the maintainers of open source projects&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.snarky.ca/the-history-behind-the-decision-to-move-python-to-github&quot;&gt;The history behind the decision to move Python to GitHub - Brett Cannon&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mercurial-scm.org/wiki/mpm/transition&quot;&gt;Mercurial’s author, Matt Mackall, is moving on after 10 years of leading the project&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dspinellis/unix-history-repo&quot;&gt;unix-history-repo: Continuous Unix commit history from 1972 until today&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.marco-bunge.com/2016/01/26/deployment-strategy-with-git/&quot;&gt;Deployment strategy with git - Marco Bunge&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://groups.google.com/forum/#!topic/binary-transparency/f-BI4o8HZW0&quot;&gt;a discussion on git integrity - from the binary-transparency Google Group&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.learnenough.com/git-tutorial&quot;&gt;Learn Enough Git to Be Dangerous - Michael Hartl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gitcolony.com/?ref=cmang&quot;&gt;Gitcolony: The next generation of pull requests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ben174/git-draw&quot;&gt;ben174/git-draw: Allows you to draw in your github heatmap&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/primiano/git-gdrive&quot;&gt;primiano/git-gdrive: git-gdrive: format-patch / am over Google Drive&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/stevemao/awesome-git-addons&quot;&gt;awesome-git-addons: A curated list of addons that extends git cli&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from Thomas Gummerer, Johannes Schindelin and Jeff King.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 11 (January 13th, 2016)</title>
      <link>https://git.github.io/rev_news/2016/01/13/edition-11/</link>
      <pubDate>Wed, 13 Jan 2016 20:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2016/01/13/edition-11/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-11-january-13th-2016&quot;&gt;Git Rev News: Edition 11 (January 13th, 2016)&lt;/h2&gt;

&lt;p&gt;Welcome to the 11th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of December 2015.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAJo%3DhJvnAPNAdDcAAwAvU9C4RVeQdoS3Ev9WTguHx4fD0V_nOg%40mail.gmail.com/&quot;&gt;RefTree: Alternate ref backend&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shawn Pearce, who is one of the main Git, JGit and Gerrit
contributors, sent an email about a new ref storage backend saying:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I started playing around with the idea of storing references directly
in Git. Exploiting the GITLINK tree entry, we can associate a name to
any SHA-1.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;By exploiting Git to store Git, we get a reflog for free…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s interesting because there has been a lot of work during the past
years to develop news ways to store refs. Especially there has been
&lt;a href=&quot;https://public-inbox.org/git/1441245313-11907-1-git-send-email-dturner%40twopensource.com/&quot;&gt;attempts to store refs in databases like LMDB&lt;/a&gt;, that have been covered in
&lt;a href=&quot;https://git.github.io/rev_news/2015/09/09/edition-7/&quot;&gt;Git Rev News edition 7&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This new approach tries to store refs using git’s own object database
that already stores blobs, trees, commits and tags.&lt;/p&gt;

&lt;p&gt;It uses so called “gitlink” which are special tree entries that are
used by &lt;a href=&quot;https://git-scm.com/docs/git-submodule&quot;&gt;git submodules&lt;/a&gt; to
refer to commits in their host git repository.&lt;/p&gt;

&lt;p&gt;Following some comments by Junio, Shawn agreed that his implementation
has some hacks to handle “HEAD”, which is a special ref, and to handle
the fact that gitlinks were made to only point to commits, not tags.&lt;/p&gt;

&lt;p&gt;Michael Haggerty wondered if the negotiation phase that happens when
doing a ‘git fetch’ could be sped up by such an implementation. This
started a discussion between Shawn, Junio and Michael about how the
“refs/” hierarchy could be improved.&lt;/p&gt;

&lt;p&gt;Jeff King discussed with Shawn some other aspects like the reflog and
reachability, and Shawn mentioned other advantages:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;One advantage of this format is deleted branches can retain a reflog
post deletion. Another is you can trivially copy the reflog using
native Git to another system for backup purposes. Or fetch it over the
network to inspect locally. So a shared group server could be
exporting its reflog, you can fetch it and review locally what
happened to branches without logging into the shared server.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Another advantage of this format over LMDB or TDB or whatever is Git
already understands it. The tools already understand it. Plumbing can
inspect and repair things. You can reflog the reflog using traditional
reflog…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it looks like Shawn has a bigger plan but don’t want to tell us
too much for now.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1449083626-20075-1-git-send-email-pclouds%40gmail.com/&quot;&gt;Split .git/config in multiple worktree setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Duy Nguyen sent a patch series that restarted
&lt;a href=&quot;https://public-inbox.org/git/1427804079-13061-1-git-send-email-pclouds%40gmail.com/&quot;&gt;previous work he had already done&lt;/a&gt;
on splitting config options in two different sets. Some that are
specific to each worktree and some that are not.&lt;/p&gt;

&lt;p&gt;There are two pattern lists. One is a default pattern list built into
the git binary, and the other one in “.git/info/config.worktree” is a
user writable pattern list. Those two pattern lists are merged
internally to specify which config options are worktree specific.&lt;/p&gt;

&lt;p&gt;The worktree specific config options should then be put in
“.git/worktrees/NAME/config.worktree” where NAME is a specific
worktree’s name, while the other config options still stay in
“.git/config”.&lt;/p&gt;

&lt;p&gt;Eric Sunshine reviewed the patch series and as always asked pertinent
questions on the naming of files, the code and the tests.&lt;/p&gt;

&lt;p&gt;Max Kirillov first suggested the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Now there are extensions support, would it make sense to
mark repositories which use per-worktree config with an
extension?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Max is referred to the extension mechanism that has been released in
the brand new Git 2.7.0 and that
&lt;a href=&quot;http://lwn.net/Articles/668163/&quot;&gt;was mentioned in some places&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And Duy liked the idea of adding an extension for per-worktree config.&lt;/p&gt;

&lt;p&gt;Max on the other hand said that having a default pattern list built
into the git binary could be confusing for users and could be
difficult to extend, but Duy and Junio didn’t agree with that.&lt;/p&gt;

&lt;p&gt;From the following discussion, it looks like it is a complex issue to
design something that is backward and forward compatible.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;p&gt;Apart from some minor releases, the major release last month was Git 2.7.0,
arriving in Git and Git for Windows not long after. See the articles from
Michael Haggerty and Tim Pettersen below for tours of the new features.&lt;/p&gt;

&lt;p&gt;Other releases:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;pygit2 tagged &lt;a href=&quot;https://github.com/libgit2/pygit2/releases/tag/v0.23.3&quot;&gt;0.23.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;nodegit is up to &lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.7.0&quot;&gt;0.7.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;ObjectiveGit just released &lt;a href=&quot;https://github.com/libgit2/objective-git/releases/tag/0.9.0&quot;&gt;0.9.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab has reached &lt;a href=&quot;https://about.gitlab.com/2015/12/22/gitlab-8-3-released/&quot;&gt;8.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Jeff King &lt;a href=&quot;https://public-inbox.org/git/20151217071430.GA3711%40sigill.intra.peff.net/&quot;&gt;announced that GitHub is organizing another Git Merge conference&lt;/a&gt; for the beginning of April 2016 with a Git Developer Summit, and asked for people interested in coming to the Summit to tell him.&lt;/li&gt;
  &lt;li&gt;Jeff King, Shawn Pearce and Junio C. Hamano ganged up, urging everyone to
&lt;a href=&quot;https://public-inbox.org/git/xmqqpoxyeajy.fsf%40gitster.mtv.corp.google.com/&quot;&gt;support the Software Freedom Conservancy&lt;/a&gt;,
which is the non-profit organization that legally hosts the Git project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Run a Git server in just &lt;a href=&quot;https://gist.github.com/MakeNowJust/262e080217aebbc628c0&quot;&gt;one line of JavaScript&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://hacksoflife.blogspot.de/2015/12/source-control-for-art-assets-this-must.html&quot;&gt;Source Control for Art Assets - This Must Exist&lt;/a&gt;, by Benjamin Supnik&lt;/li&gt;
  &lt;li&gt;From the “competition”: &lt;a href=&quot;http://lduros.net/posts/why-i-think-bazaar-better-git/&quot;&gt;Why I think Bazaar is better than Git&lt;/a&gt;, by Loic Duros&lt;/li&gt;
  &lt;li&gt;Another one: &lt;a href=&quot;https://blog.kotur.org/posts/fossil-keeps-more-than-just-your-code.html&quot;&gt;Fossil keeps more than just your code&lt;/a&gt;, by Nikola Kotur&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://githubengineering.com/move-fast/&quot;&gt;Move Fast and Fix Things&lt;/a&gt;, an insight into GitHub’s internal Git usage and process, by Vicent Marti&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.creativebloq.com/web-design/choose-right-git-branching-strategy-121518344&quot;&gt;Choose the right Git branching strategy&lt;/a&gt;, by Lorna Mitchell&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mail.python.org/pipermail/core-workflow/2016-January/000345.html&quot;&gt;Python core is moving to GitHub&lt;/a&gt;, according to discussions on their mailing list&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.atlassian.com/blog/2016/01/git-2.7-release/&quot;&gt;Neat new features in Git 2.7&lt;/a&gt;, by Atlassian’s Tim Pettersen&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2094-new-year-new-git-release&quot;&gt;New Year, new Git release&lt;/a&gt;, by GitHub’s Michael Haggerty&lt;/li&gt;
  &lt;li&gt;A bit late, but here’s how could have &lt;a href=&quot;http://vanwilson.info/2015/12/the-12-days-of-git-learn-git-over-the-holidays/&quot;&gt;learned Git over the holidays&lt;/a&gt;, by Van Wilson&lt;/li&gt;
  &lt;li&gt;The authors of the German Git book have decided to make it &lt;a href=&quot;http://gitbu.ch/index.html&quot;&gt;freely available online&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.smith-kyle.com/git-flow-with-node/&quot;&gt;Doing Git Flow in Node&lt;/a&gt;, by Kyle Smith&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://githost.io/&quot;&gt;githost.io&lt;/a&gt; is GitLab’s new hosted offering&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/git-appraise&quot;&gt;git-appraise&lt;/a&gt; offers distributed code review&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://wdm0006.github.io/git-pandas/&quot;&gt;git-panda&lt;/a&gt; wraps around gitpython for creating pandas dataframes (data analysis in Python)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ianmiell/shutit-git-trainer&quot;&gt;Git Core Trainer&lt;/a&gt;, an automated and interactive git trainer, built using Docker and ShutIt&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Autodesk/quack&quot;&gt;quack&lt;/a&gt; offers to “reuse Git modules in smart way”&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://somerobots.com/trident.html&quot;&gt;Trident&lt;/a&gt; looks like a nice iOS Git client&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 10 (December 9th, 2015)</title>
      <link>https://git.github.io/rev_news/2015/12/09/edition-10/</link>
      <pubDate>Wed, 09 Dec 2015 20:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2015/12/09/edition-10/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-10-december-9th-2015&quot;&gt;Git Rev News: Edition 10 (December 9th, 2015)&lt;/h2&gt;

&lt;p&gt;Welcome to the 10th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of November 2015.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1448549065-16337-1-git-send-email-rouzier%40gmail.com/&quot;&gt;clean: new option –exclude-from&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;James Rouzier sent a patch to add a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--exclude-from=&amp;lt;file&amp;gt;&lt;/code&gt; option
to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clean&lt;/code&gt;. It looked quite straightforward, but as often Eric
Sunshine found many small things that could be improved upon. James
and Eric then agreed on what should be done, and it looked like a
clear roadmap had been set for this new feature.&lt;/p&gt;

&lt;p&gt;That’s when Jeff King, alias Peff, wrote the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Lots of commands care about excludes (e.g., “add”, “status”).&lt;/p&gt;

  &lt;p&gt;Should this perhaps be an option to the main “git” to append to the set
of excludes?&lt;/p&gt;

  &lt;p&gt;You can kind-of do this already with:&lt;/p&gt;

  &lt;p&gt;git -c core.excludesfile=/path/to/whatever clean …&lt;/p&gt;

  &lt;p&gt;but of course you might be using core.excludesfile already. I wonder if
that config option should take multiple values and respect all of them,
rather than last-one-wins.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This started a discussion between Junio Hamano, the git maintainer,
and Peff about how exclude files should be specified to commands.&lt;/p&gt;

&lt;p&gt;It is a complex topic because there are already different ways to pass
an exclude file, for example there is also &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/info/exclude&lt;/code&gt;. And
there is the question of how the option should be passed to sub
commands.&lt;/p&gt;

&lt;p&gt;In the end it is not clear if the patch will be accepted.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/bf218d020e24216f55d1514c4459e645b13ec075.1445865176.git.johannes.schindelin%40gmx.de/&quot;&gt;remote-http(s): Support SOCKS proxies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a patch series called
&lt;a href=&quot;https://public-inbox.org/git/cover.1445865176.git.johannes.schindelin%40gmx.de/&quot;&gt;“Miscellaneous platform-independent patches from Git for Windows”&lt;/a&gt;
Johannes Schindelin, alias Dscho, sent a patch from Pat Thoyts that adds SOCKS proxies support to Git:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;With this patch we properly support SOCKS proxies, configured e.g. like
this:&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git config http.proxy socks5://192.168.67.1:32767
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;Without this patch, Git mistakenly tries to use SOCKS proxies as if they
were HTTP proxies, resulting in a error message like:&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;fatal: unable to access &apos;http://.../&apos;: Proxy CONNECT aborted
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;This patch was required to work behind a faulty AP and scraped from
http://stackoverflow.com/questions/15227130/#15228479 and guarded with
an appropriate cURL version check by Johannes Schindelin.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The last paragraph made Junio Hamano wonder “What is the licensing
status of the original at SO?”&lt;/p&gt;

&lt;p&gt;James McCoy answered that &lt;a href=&quot;https://stackoverflow.com/help/licensing&quot;&gt;according to Stackoverflow&lt;/a&gt;
“all user contributions are licensed under Creative Commons Attribution-Share Alike”.&lt;/p&gt;

&lt;p&gt;Unfortunately as Junio replied, the Creative Commons Attribution-Share
Alike, alias BY-SA, does not mesh well with GPLv2 that Git uses. That’s
why Dscho asked Pat if he could give his Signed-off-by mention,
which would mean that he agrees to relicense his work under the GPLv2.&lt;/p&gt;

&lt;p&gt;Junio, after consulting his IP lawyer friends, replied that asking Pat
was indeed the best thing to do.&lt;/p&gt;

&lt;p&gt;Ten days later Pat eventually gave his Signed-off-by which fixed the
problem.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-stefan-beller&quot;&gt;Developer Spotlight: Stefan Beller&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Who are you, and what do you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I write Git/Gerrit code for a living at Google. I started coding when I
was 10 years old with a tool called GameMaker for DOS. As I did not
know how to version my games back then, deep down in my digital life
(http://www.xkcd.com/1360/), I admit having folders called v1, v2, v3.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What would you name your most important contribution to Git?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think all the patches I contributed using various static code analysis
tools. These were small issues such as memory leaks each, but as a
whole they made Git better. Which also leads to answering the next
question …&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What are you doing on the Git project these days, and why?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I started diving into Submodule Code lately. The first patches
which just landed in origin/master don’t do a lot, except making
submodules a little faster by rewriting shell in C. This is
the same approach as I had in the previous question, looking
for stuff under the hood and improving there, is usually not controversial,
so a good thing to start out with when exploring new areas of code.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would ask the experts for a Git protocol version 2 as that
makes repositories with lots of refs go smoothly over the wire.
For example every time you fetch git.git today from
https://github.com/gitster/git/,
more than 100kB are sent over the wire and most of it is moot.
A fetch today and a fetch a week ago would only differ in 5kB in
these first 100kB sent over the wire.
While Git as maintained by Junio has more refs than the usual
repository (currently 1626 refs), there are other projects which are
even larger than Git itself in the ref space.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think I just point at
http://stevelosh.com/blog/2013/04/git-koans/#the-hobgoblin
where the subtle inconsistencies are put into a spotlight.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is your favourite Git-related tool/library, outside of Git itself?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I did use only Git itself, no third party tools otherwise until recently.
Now I am into Gerrit a bit for reviewing changes before it’s too late.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git for Windows catches up with regular Git again, reaching &lt;a href=&quot;https://groups.google.com/forum/#!topic/git-for-windows/YcGky36RLUM&quot;&gt;2.6.3&lt;/a&gt; (with improved Notepad support!)&lt;/li&gt;
  &lt;li&gt;GitLab: The latest minor release is &lt;a href=&quot;https://about.gitlab.com/2015/12/02/gitlab-8-dot-2-dot-2-released/&quot;&gt;8.2.2&lt;/a&gt;. Their latest major release, &lt;a href=&quot;https://about.gitlab.com/2015/11/23/announcing-git-lfs-support-in-gitlab/&quot;&gt;8.2&lt;/a&gt; features Git LFS support among other things.&lt;/li&gt;
  &lt;li&gt;JGit/EGit shipped &lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg03004.html&quot;&gt;4.1.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;libgit2 maintenance released &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.23.4&quot;&gt;0.23.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The GerritForge blog posted a summary of &lt;a href=&quot;http://gitenterprise.me/2015/11/16/gerrit-user-summit-hackathon-2015/&quot;&gt;the Gerrit User Summit &amp;amp; Hackathon 2015&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Atlassian’s Steve Smith did &lt;a href=&quot;https://www.youtube.com/watch?v=sevc6668cQ0&quot;&gt;a talk at Devvox 2015 about “Getting out of trouble by understanding Git”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Autodesk’s &lt;a href=&quot;https://github.com/larsxschneider&quot;&gt;Lars Schneider&lt;/a&gt; did &lt;a href=&quot;http://www.ustream.tv/recorded/74637923&quot;&gt;a talk at GitHub Universe 2015 about Perforce to Git migrations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;An oldie but goldie, &lt;a href=&quot;https://mikegerwitz.com/papers/git-horror-story&quot;&gt;A Git Horror Story: Repository Integrity With Signed Commits&lt;/a&gt;, by Mike Gerwitz&lt;/li&gt;
  &lt;li&gt;Another one I haven’t seen before: &lt;a href=&quot;http://fabiensanglard.net/git_code_review/diff.php&quot;&gt;Git source code review: Diff Algorithms&lt;/a&gt;, by Fabian Sanglard&lt;/li&gt;
  &lt;li&gt;Short: &lt;a href=&quot;http://kamalmarhubi.com/blog/2015/11/21/using-strace-to-figure-out-how-git-push-over-ssh-works/&quot;&gt;Using strace to figure out how git push over SSH works&lt;/a&gt;, by Kamal Marhubi&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.deveo.com/how-to-manage-large-binary-files-with-git-git-lfs-and-artifactory/&quot;&gt;How to manage large binary files in Git with Git LFS and Artifactory&lt;/a&gt;, by Deveo’s Ilmari Kontulainen&lt;/li&gt;
  &lt;li&gt;Some &lt;a href=&quot;https://viget.com/extend/git-tips&quot;&gt;Git Tips&lt;/a&gt; by Ryan Foster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/square/git-fastclone&quot;&gt;git-fastclone&lt;/a&gt;, “git clone –recursive on steroids” from Square&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/openstack/gertty&quot;&gt;gertty&lt;/a&gt;, a console interface to Gerrit Code Review&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ConnorAtherton/git-identify&quot;&gt;git-identify&lt;/a&gt;, if you do commits with different identities&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/larsxschneider/ShowInGitHub&quot;&gt;ShowInGitHub&lt;/a&gt;, Xcode plugin that opens the Github/BitBucket page of a source code line&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from Stefan Beller and James McCoy.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 9 (November 11th, 2015)</title>
      <link>https://git.github.io/rev_news/2015/11/11/edition-9/</link>
      <pubDate>Wed, 11 Nov 2015 20:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2015/11/11/edition-9/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-9-november-11th-2015&quot;&gt;Git Rev News: Edition 9 (November 11th, 2015)&lt;/h2&gt;

&lt;p&gt;Welcome to the 9th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of October 2015.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1445969753-418-1-git-send-email-sbeller%40google.com/&quot;&gt;Expose the submodule parallelism to the user&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stefan Beller started posting patch series to “finish the on going
efforts of parallelizing submodule network traffic”.&lt;/p&gt;

&lt;p&gt;This followed
&lt;a href=&quot;https://public-inbox.org/git/1442012994-20374-1-git-send-email-sbeller%40google.com/&quot;&gt;previous work by Stefan&lt;/a&gt;
to make it possible to launch many git submodule fetches in parallel.&lt;/p&gt;

&lt;p&gt;What is interesting is that a few weeks before posting the first
version of his patch series, Stefan had been involved in a
&lt;a href=&quot;https://public-inbox.org/git/loom.20151016T001449-848%40post.gmane.org/&quot;&gt;discussion&lt;/a&gt;
that was started by Kannan Goundan who asked if it would be possible
to “Make ‘git checkout’ automatically update submodules?”.&lt;/p&gt;

&lt;p&gt;In this previous discussion Stefan pointed Kannan to &lt;a href=&quot;https://github.com/jlehmann/git-submod-enhancements/wiki&quot;&gt;a wiki
that contains a lot of information about submodule implementation&lt;/a&gt;
including pointers to some current developments that have not been
posted to the mailing list yet. This wiki had indeed been maintained
since September 2010 by Jens Lehmann and Heiko Voigt who have been
working for a long time on git submodule.&lt;/p&gt;

&lt;p&gt;When Stefan posted his patch series, it attracted the attention of
many reviewers like Eric Sunshine, Ramsay Jones, Jonathan Nieder and
Junio Hamano. As usual the reviewers made sensible suggestions and
Stefan soon posted another version of his patch series.&lt;/p&gt;

&lt;p&gt;Hopefully the tremendous work by Stefan and the reviewers will soon
make it possible to have improved submodule performance.&lt;/p&gt;

&lt;p&gt;On Saturday November 7th and Sunday November 8th there was the
&lt;a href=&quot;https://gerrit.googlesource.com/summit/2015/+/HEAD/sat.md&quot;&gt;GerritSummit&lt;/a&gt;,
which is held annually. In a discussion Martin Fick pointed out, that
parallelism may hurt the user.
As he was using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repo -j 8&lt;/code&gt; to sync many git repos down to disk, the
following disk operations took longer than expected as the repos were
not written to disk in a linear fashion.
This will be an interesting benchmark for the submodules as well.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/5605D88A.20104%40gmail.com/&quot;&gt;broken racy detection and performance issues with nanosecond file times&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the end of last September, Karsten Blees sent an email starting
with the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I think I found a few nasty problems with racy detection, as well as
performance issues when using git implementations with different file
time resolutions on the same repository (e.g. git compiled with and
without USE_NSEC, libgit2 compiled with and without USE_NSEC, JGit
executed in different Java implementations…).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He listed and detailed some interesting “Notable file time facts”
about how file time is implemented in Linux, Windows, Java and the
different Git implementations (git, libgit2 and JGit).&lt;/p&gt;

&lt;p&gt;Karsten noted 4 problems related to the above facts. These are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;1: Failure to detect racy files (without USE_NSEC)&lt;/li&gt;
  &lt;li&gt;2: Failure to detect racy files (mixed USE_NSEC)&lt;/li&gt;
  &lt;li&gt;3: Failure to detect racy files with core.checkStat=minima&lt;/li&gt;
  &lt;li&gt;4: Performance issues with mixed file time resolutions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kartsen proceeded to suggest several possible solutions for these, all
detailed and well written. A few days later he followed up with an 
RFC patch
called “read-cache: fix file time comparisons with different
precisions” to take care of some of the problem he described.&lt;/p&gt;

&lt;p&gt;Junio Hamano and Johannes Schindelin both reviewed the
suggested solutions as well as the RFC patch, and found it all sensible.&lt;/p&gt;

&lt;p&gt;There is still some way to go, as the patch has not been merged
yet. Hopefully some progress will be made in this area soon, using
Karsten’s detailed emails as a reference for future work.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-matthieu-moy&quot;&gt;Developer Spotlight: Matthieu Moy&lt;/h2&gt;

&lt;p&gt;Q: Who are you, and what do you do?&lt;/p&gt;

&lt;p&gt;A: I’m an occasional contributor to Git, and I maintain several Git-related
tools like
&lt;a href=&quot;https://github.com/git-multimail/git-multimail&quot;&gt;git-multimail&lt;/a&gt;,
&lt;a href=&quot;https://gitlab.com/git-latexdiff/git-latexdiff&quot;&gt;git-latexdiff&lt;/a&gt; and
to some extent &lt;a href=&quot;https://github.com/moy/Git-Mediawiki/wiki&quot;&gt;Git-Mediawiki&lt;/a&gt;. I also teach
Git (to student at &lt;a href=&quot;http://ensimag.grenoble-inp.fr/&quot;&gt;Ensimag&lt;/a&gt; and
&lt;a href=&quot;http://formation-continue.grenoble-inp.fr/&quot;&gt;lifelong learning&lt;/a&gt;). In
2014 and 2015, I mentored
&lt;a href=&quot;https://developers.google.com/open-source/gsoc/&quot;&gt;GSoC&lt;/a&gt; projects for the
Git organization, and I’ve been co-administrator for Git in 2015.&lt;/p&gt;

&lt;p&gt;Q: How did you start getting involved with Git?&lt;/p&gt;

&lt;p&gt;A: My first non-trivial contribution to free software was on
version-control, before Git existed. I got involved in GNU Arch, then
its fork Bazaar 1.x. And then GNU Arch and Bazaar 1.x died, and I
moved on to something else. At the same time, I started teaching
version-control, hated centralized systems enough to migrate to Git.
Teaching Git in 2009 was a funny experience: the tool was starting to
get a decent user-interface, but was lacking a lot of polishing. One
of my favorite examples is what happens when you push to a remote that
has commits that you don’t have locally. Initially, users were getting
a message like:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;! [rejected]        master -&amp;gt; master (non-fast-forward)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I wrote a rather straightforward patch to change it to:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;! [rejected]        master -&amp;gt; master (non-fast-forward)
To prevent you from losing history, non-fast-forward updates were rejected.
Merge the remote changes before pushing again.
See &apos;non-fast forward&apos; section of &apos;git push --help&apos; for details.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The students went from “Huh?” to “Wow, a 3-lines long message, that’s
long. What shall I do now (given that reading the actual doc is not an
option)?”. Then, I added an explicit mention of “git pull” in the
message, and the situation became manageable for most students. Many
of my contributions to Git follow this principle: see what users have
difficulties with, and try to improve the tool to help them. In many
cases, a staightforward patch to improve the error message was
sufficient: in case of error, explain what’s going on to the user, and
give the way out (“did you mean: …?” or “use … to …”).&lt;/p&gt;

&lt;p&gt;Q: What would you name your most important contribution to Git?&lt;/p&gt;

&lt;p&gt;A: In general, most of my contributions are to be found in the
user-interface and in the documentation. To define which is the most
important, we’d have to define “important” first.&lt;/p&gt;

&lt;p&gt;In terms of impact on Git’s usability, my biggest contribution is
probably my involvement in the change of the default value of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push.default&lt;/code&gt; from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;matching&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;simple&lt;/code&gt; (i.e. roughly “push only
the current branch by default”). I was not alone in the discussion,
and this was really more a teamwork than a personal contribution, but
I think I played an important role in the discussion to understand
what the default new behavior should be, defining the migration path
(this was a backward incompatible change, which Git avoids as much as
possible, and we had to find a way to do this without hurting users).&lt;/p&gt;

&lt;p&gt;In terms of amount of work, my biggest contribution is certainly to
supervise students. Both as a teacher, as I offer my students a
“contribute to free software” project every year, and as a GSoC mentor.
The most visible change done by my students is probably the advice in
the output of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; (like “You are currently bisecting”, …).&lt;/p&gt;

&lt;p&gt;Q: What are you doing on the Git project these days, and why?&lt;/p&gt;

&lt;p&gt;A: These days, I’m taking a break after having spent a lot of time
contributing to Git and git-multimail. I’m continuing my Git activities
by following the mailing-list, occasionally helping users and reviewing
code when I get time, but I’m limited by this old good “days have only
24h” issue ;-).&lt;/p&gt;

&lt;p&gt;I hope to get more time to work on git-multimail. Since I became the
maintainer after discussing with Michael Haggerty at &lt;a href=&quot;http://git-merge.com/&quot;&gt;Git
Merge&lt;/a&gt;, I’m happy I managed to merge or close all
the pending pull-requests, set up a better test-suite, port to Python 3,
… The
&lt;a href=&quot;https://github.com/git-multimail/git-multimail/issues&quot;&gt;todo-list&lt;/a&gt; is
still long, and there are a lot more funny things to write!&lt;/p&gt;

&lt;p&gt;Q: If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

&lt;p&gt;A: For my personal use of Git, the tool is already good enough. Still, I
could use the help of a team of expert to help Git. I would probably ask
them to work in priority on scalability (yes, we went from “Git is crazy
fast” when Linus wrote the initial version 10 years ago to “What makes
Git so slow?” given the size of projects people use it on), and on
gathering some Git forks and related tools in the same codebase.
Currently, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git.git&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libgit2&lt;/code&gt; are two separate projects, and I
think they would benefit from more code sharing. There are forks of Git
in several companies, and tools like
&lt;a href=&quot;https://code.google.com/p/git-repo/&quot;&gt;repo&lt;/a&gt; which were designed partly
to compensate some weaknesses of Git, but having these features directly
in Git would be better both for the community and for users IMHO.&lt;/p&gt;

&lt;p&gt;Q: If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

&lt;p&gt;A: I’m geek enough to like tools that have too many features ;-). But I’d
remove any instance of “cache” or “cached” referring to the Git index in
the user-interface and documentation. “index” is not such a good term in
my opinion, but it’s already much better than “cache” (which suggests
that it’s a performance improvement that doesn’t change the
functionality, while it’s not).&lt;/p&gt;

&lt;p&gt;Q: What is your favourite Git-related tool/library, outside of Git itself?&lt;/p&gt;

&lt;p&gt;A: That would be &lt;a href=&quot;https://github.com/magit/magit&quot;&gt;Magit&lt;/a&gt;. I’ve stayed away
from Emacs Git interface for a while because I wanted to force myself to
use the command-line for two reasons: as a Git contributor, to see the
drawbacks of the cli and get a chance to improve it, and as a teacher,
to put myself in the same position as my students. Still, I like Emacs,
and I like using a VCS from within Emacs (once upon a time, I was even
the maintainer of an &lt;a href=&quot;https://gna.org/projects/xtla-el/&quot;&gt;Emacs interface for GNU
Arch&lt;/a&gt;, memories, sweet memories…).
I recently started to use Magit, and I really like it. It doesn’t
try to hide Git from me, but gives me a lot of shortcuts and interactive
features on top of it.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git, following some intermediate releases, is now at &lt;a href=&quot;https://public-inbox.org/git/xmqqegg43uqw.fsf%40gitster.mtv.corp.google.com/&quot;&gt;2.6.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git for Windows, similarly is now at &lt;a href=&quot;https://groups.google.com/d/msg/git-for-windows/R4xTgOfFu3Q/vex656-JBQAJ&quot;&gt;2.6.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitLab shipped several times in the last month, leaving their latest version at
&lt;a href=&quot;https://about.gitlab.com/2015/11/06/gitlab-8-dot-1-dot-3-released/&quot;&gt;8.1.3&lt;/a&gt;, after the major
&lt;a href=&quot;https://about.gitlab.com/2015/10/22/gitlab-8-1-released/&quot;&gt;8.1&lt;/a&gt; release. They also celebrated their
&lt;a href=&quot;https://about.gitlab.com/2015/10/29/one-million-downloads-of-gitlab/&quot;&gt;millionth download&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;GitHub shipped the &lt;a href=&quot;https://github.com/blog/2076-github-enterprise-2-4-is-now-available&quot;&gt;2.4&lt;/a&gt; version of their Enterprise software.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-blame.blogspot.de/2015/10/fun-with-recreating-evil-merge.html&quot;&gt;Fun with recreating an evil merge&lt;/a&gt;, by Junio Hamano&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://githubengineering.com/git-concurrency-in-github-desktop/&quot;&gt;Git Concurrency in GitHub Desktop&lt;/a&gt;, by Amy Palamountain&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.atlassian.com/blog/2015/10/monorepos-in-git/?p&quot;&gt;Monorepos in Git&lt;/a&gt;, by Stefan Saasen&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://webiphany.com/2015/10/21/monotone-git-linus-and-marty-mcfly.html&quot;&gt;Monotone, Git, Linus and Marty McFly&lt;/a&gt;, by Chris Dawson&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fifthsurprise.wordpress.com/2014/02/19/git-back-to-the-future/&quot;&gt;Git Back to the Future&lt;/a&gt;, by Kevin Chang&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@megastep/github-s-large-file-storage-is-no-panacea-for-open-source-quite-the-opposite-12c0e16a9a91&quot;&gt;GitHub’s Large File Storage is no panacea for Open Source&lt;/a&gt;, by Stéphane Peter&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.atlassian.com/blog/2015/10/cool-features-git-2.x/&quot;&gt;Six cool features of the Git 2.x series&lt;/a&gt;, by our own Nicola Paolucci&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ericrie.se/blog/git-freebase/&quot;&gt;Git freebase&lt;/a&gt;, by Eric Riese&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://rkoutnik.com/articles/The-gits-guide-to-git-Bisect.html&quot;&gt;The git’s guide to git: Bisect&lt;/a&gt;, by Randall Koutnik&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.eatonphil.com/2015-10-27/dont-include-configs-in-your-git-repos&quot;&gt;Don’t include configs in your git repos&lt;/a&gt; by Phil Eaton&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jezenthomas.com/using-git-to-manage-todos/&quot;&gt;Using Git to Manage Todos&lt;/a&gt;, by Jezen Thomas&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://developer.telerik.com/featured/fixing-stupid-mistakes-in-git-pull-requests/&quot;&gt;Fixing Stupid Mistakes in Git Pull Requests&lt;/a&gt;, by TJ VanToll&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tj/git-extras&quot;&gt;Git Extras&lt;/a&gt; - a set of extra command line Git utilities.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://delta.octavore.com/&quot;&gt;Delta&lt;/a&gt; - a command-line utility for text diffs.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pijul.org/&quot;&gt;Pijul&lt;/a&gt; - actually a competing VCS! But still interesting.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://beijunyi.github.io/ParallelGit&quot;&gt;ParallelGit&lt;/a&gt; - wraps JGit to provide “a more friendly API”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-dependency-manager.info/&quot;&gt;Git Dependency Manager&lt;/a&gt; - a language-agnostic “dependency manager”. It aims to serve as a submodules replacement and provides advanced options for managing versions of nested Git repositories.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Autodesk/quack&quot;&gt;Quack&lt;/a&gt; - another Git-based dependency manager.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-svnsync.gforge.inria.fr/&quot;&gt;git-svnsync&lt;/a&gt; - a bi-directional server-side synchronisation tool between a git and a subversion repository&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from Matthieu Moy.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 8 (October 14th, 2015)</title>
      <link>https://git.github.io/rev_news/2015/10/14/edition-8/</link>
      <pubDate>Wed, 14 Oct 2015 20:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2015/10/14/edition-8/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-8-october-14th-2015&quot;&gt;Git Rev News: Edition 8 (October 14th, 2015)&lt;/h2&gt;

&lt;p&gt;Welcome to the 8th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of September 2015.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1443131004-39284-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;Add Travis CI support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lars Schneider wrote that to avoid breaking tests in the future he
configured Travis-CI to run all Git tests including git-p4 and git-lfs
tests on both Ubuntu and MacOS using gcc and clang.&lt;/p&gt;

&lt;p&gt;If his config was enabled on https://github.com/git/git then the
status of all official branches and all pull requests could be known
by any contributor for free.&lt;/p&gt;

&lt;p&gt;Junio, the Git maintainer, replied that the last time he looked at it,
Travis wanted write access to the repository, and that for security
reason he could not allow that.&lt;/p&gt;

&lt;p&gt;Dennis Kaarsemaker replied with the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It does not need write access to the git data, only to auxiliary
GitHub data: commit status and deployment status (where it can put
“this commit failed tests”), repository hooks (to set up build
triggers), team membership (ro) and email addresses (ro).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then a lot of long time members of the community, like Jeff King,
Johannes Schindelin, Shawn Pearce, Stefan Beller, Roberto Tyley, Luke
Diamand and Sebastian Schuberth, started discussing if it would be
better for Travis to be configured only on a fork of git/git and about
the annoyance that emails sent by Travis might be.&lt;/p&gt;

&lt;p&gt;Roberto Tyley, the author of &lt;a href=&quot;https://submitgit.herokuapp.com/&quot;&gt;submitGit&lt;/a&gt;,
then talked about possible enhancement to the submitGit workflow if
Travis or another CI system are set up, like enabling sending a patch
email to the Git mailing list only after the test results are
available.&lt;/p&gt;

&lt;p&gt;And then Matthieu Moy explained the benefits for everyone like this:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The very nice thing with Travis-CI is that it does not only test the
repository’s branches, but also all pull-requests. So, if it is
activated on git/git, it will become possible to have a flow like&lt;/p&gt;

  &lt;p&gt;1) User pushes to his own repo, sends a pull-request,&lt;/p&gt;

  &lt;p&gt;2) Travis-CI notices the pull-request and builds it (no action needed
   from anyone),&lt;/p&gt;

  &lt;p&gt;3) Once the build is finished, the user can use e.g. SubmitGit to
   actually submit the code.&lt;/p&gt;

  &lt;p&gt;This has real benefits for the submitter (know if your code is broken
early), for the reviewers (things like “you have a def-after-use” would
be noticed by a computer before human beings start spending time on the
review), and for you (some issues noticed before a topic enters pu).&lt;/p&gt;

  &lt;p&gt;There’s no extra work for the user at all compared to the standard
pull-request flow (nothing to do, just submit a PR), and a one-time
setup for the project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This appear to have convinced Junio of the value of a CI tool linked
to git/git, and Lars has since posted
&lt;a href=&quot;https://public-inbox.org/git/1443981977-64604-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;a version 2&lt;/a&gt;
and &lt;a href=&quot;https://public-inbox.org/git/1444586102-82557-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;a version 3 of his
patches&lt;/a&gt;,
so an interesting way to test patches will perhaps be available soon
to Git developers.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAEY4ZpN0C96jU4Tgvqt-hWEviR-sapDoyAv88H%2BopPSr-cs%3Dmg%40mail.gmail.com/&quot;&gt;2.6.0: Comment in rebase instruction has become too rigid&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shortly after git version 2.6.0 was released, Nazri Ramliy noticed
that:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;the format of the comment lines in a rebase instruction sheet has
become stricter - it could no longer begin with spaces or tabs. The
comment char (“#” for example) has to appear on the first column.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and that this change broke his script.&lt;/p&gt;

&lt;p&gt;As Matthieu Moy found out, the cause of the regression was a patch to
pre check the rebase instruction sheet before starting an interactive
rebase. The goal of this pre checking patch was to avoid discovering a
syntax error in the instruction sheet in the middle of a rebase.&lt;/p&gt;

&lt;p&gt;Matthieu then posted &lt;a href=&quot;https://public-inbox.org/git/1443600661-19391-1-git-send-email-Matthieu.Moy%40imag.fr/&quot;&gt;a patch to fix the regression&lt;/a&gt;
based on a suggestion by Junio Hamano. Matthieu’s patch just
prefilters the instruction sheet by piping it through
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed &apos;s/^[[:space:]]*//&apos;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But Junio replied that Matthieu’s patch would fix one aspect of the
problems caused by the pre checking patch. There could be more
problems as the pre checking code is different from the actual parsing
when the instruction sheet is processed. Junio also said he was
tempted to revert the pre checking patch, but he provided a patch to
fix the problem anyway by using the same code in both the pre checking
step and the actual parsing.&lt;/p&gt;

&lt;p&gt;Matthieu agreed that Junio’s patch was the way to go, and after a few
more patches and emails, they agreed on a solution.&lt;/p&gt;

&lt;h2 id=&quot;developer-spotlight-luke-diamand&quot;&gt;Developer Spotlight: Luke Diamand&lt;/h2&gt;

&lt;p&gt;Q. Who are you, and what do you do?&lt;/p&gt;

&lt;p&gt;A. I’ve been writing software since my uncle got me hooked with a TI-56
calculator and a TRS-80 model 2. Right now, I’m working for Roku,
(making cool new video streaming hardware :-) which currently involves
a lot of fairly low-level digging around in SoC software.&lt;/p&gt;

&lt;p&gt;Q. What would you name your most important contribution to Git?&lt;/p&gt;

&lt;p&gt;A. My fix to git-p4, to make it stream commits into fast-import,
rather than buffer them all up in memory first. I did it out of
desperation.&lt;/p&gt;

&lt;p&gt;At the time, I’d just been working for a tiny startup which was also
making video streaming products, but sadly not making any
profits. While there, I’d become hooked on git after watching “those”
videos.&lt;/p&gt;

&lt;p&gt;So when I found myself at Broadcom in about 2008, and started trying
to use Perforce, almost the first thing I did was try to use
git-p4. But at the time, it read everything into memory using an
O(n^2) algorithm, which meant it would use up all of the swap space
available (no matter how much you had) and then crash after a couple
of days.&lt;/p&gt;

&lt;p&gt;These days of course, if you’ve got a problem the answer is on
stackoverflow (if you can think of it, it’s already been done) but
back then, we had nothing like that. Eventually I found a patch from
Andrew Oakley which hinted at the solution. Inspired by this, I taught
git-p4 to stream commits at fast-import (as the writers of fast-import
presumably intended) and suddenly I could use git at work. Which was
completely awesome!&lt;/p&gt;

&lt;p&gt;With a good deal of help from Pete Wyckoff and Junio I then got it
submitted; that process itself was a massive eye opener as to how to
&lt;em&gt;really&lt;/em&gt; review code (and how to write shell script as well).&lt;/p&gt;

&lt;p&gt;I spent the next few years trying to encourage everyone else in the
office to use git and submitted a few more patches to git-p4 along the
way. We finally switched over, and then the office was closed down!&lt;/p&gt;

&lt;p&gt;Which is how it is I now find myself working side-by-side with the
very same Andrew Oakley who wrote that original patch - he’s now at
Roku as well!&lt;/p&gt;

&lt;p&gt;Q. What are you doing on the Git project these days, and why?&lt;/p&gt;

&lt;p&gt;A. It’s all git-p4 related. I’ve got a tiny fix that lets you work on
a detached head; that’s just waiting for a bit of bandwidth.&lt;/p&gt;

&lt;p&gt;After that, there’s a few things I’ve thought about. It would be very
handy to be able to turn a P4 shelved changelist into a git commit
(and vice-versa). And I think it ought to be possible to teach git-p4
to act in a “daemon” mode, whereby it gets notified of changes and
automatically pushes them into Perforce, and pulls Perforce changes
back into git. I’ve had something like that going in the past but it
was an ugly hack.&lt;/p&gt;

&lt;p&gt;A. If you could get a team of expert developers to work full time on
something in Git for a full year, what would it be?&lt;/p&gt;

&lt;p&gt;Performance on big repos would be nice. Quite a few people have tried
in the past so maybe it’s just impossible, but for example, I did
wonder if more could be done with cache prefetching (pld instruction
on ARM) to slurp data into the cache faster. Since I’m pretty much
completely ignorant of the internals of git, I’m able to be free of
the boring constraints of reality :-)&lt;/p&gt;

&lt;p&gt;And I’d really like a way to painlessly teach people to use git who
only know about traditional revision control systems (e.g. Perforce).&lt;/p&gt;

&lt;p&gt;Q. If you could remove something from Git without worrying about
backwards compatibility, what would it be?&lt;/p&gt;

&lt;p&gt;I think Junio already removed it. That “feature” where git push would
push all of the branches rather than just HEAD. It had me completely
confused when I was first starting.&lt;/p&gt;

&lt;p&gt;Q. What is your favorite Git-related tool/library, outside of Git
itself?&lt;/p&gt;

&lt;p&gt;I really like Gerrit, although the prolog configuration makes my head
hurt. And of course Github has to get a mention - it’s making git (and
hence sane version control) ubiquitous. There was a question about it
the other day on a mountain bike forum I follow!&lt;/p&gt;

&lt;p&gt;Q. What is your favourite new feature in git?&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --fixup&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I only found this recently, it’s just brilliant. Thank you, whoever it was put that in!&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git 2.6 is out! We’ll let &lt;a href=&quot;https://github.com/blog/2066-git-2-6-including-flexible-fsck-and-improved-status&quot;&gt;Michael Haggerty&lt;/a&gt; do the writing on what’s in there.&lt;/li&gt;
  &lt;li&gt;Quickly following suit is &lt;a href=&quot;https://groups.google.com/d/msg/git-for-windows/KlGdFmJO7lg/oPmo3YyJCAAJ&quot;&gt;Git for Windows 2.6&lt;/a&gt; (and &lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.6.1.windows.1&quot;&gt;2.6.1&lt;/a&gt; soon after)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02976.html&quot;&gt;jgit and egit 4.1&lt;/a&gt; with lots of improvements&lt;/li&gt;
  &lt;li&gt;libgit2 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.23.3&quot;&gt;0.23.3&lt;/a&gt; maintenance release, and from its posse:
    &lt;ul&gt;
      &lt;li&gt;nodegit &lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.5.0] yolo release :&quot;&gt;0.5.0&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;objective-git &lt;a href=&quot;https://github.com/libgit2/objective-git/releases/tag/0.8.8&quot;&gt;0.8.8&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;pygit &lt;a href=&quot;https://github.com/libgit2/pygit2/releases/tag/v0.23.1&quot;&gt;0.23.1&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;rugged &lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.23.3&quot;&gt;0.23.3&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2015/09/22/gitlab-8-0-released/&quot;&gt;GitLab 8.0&lt;/a&gt; with lots of new stuff, including built-in CI server&lt;/li&gt;
  &lt;li&gt;GitHub released &lt;a href=&quot;https://github.com/blog/2069-git-large-file-storage-v1-0&quot;&gt;Git Large File Storage (LFS) 1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Microsoft announced that &lt;a href=&quot;http://blogs.msdn.com/b/visualstudioalm/archive/2015/10/01/announcing-git-lfs-on-all-vso-git-repos.aspx&quot;&gt;Visual Studio Online Git repositories now support Git-LFS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;BFG &lt;a href=&quot;https://github.com/rtyley/bfg-repo-cleaner/releases/tag/v1.12.5&quot;&gt;1.12.5&lt;/a&gt; adds support for converting a repo’s history into the new Git LFS format, so even &lt;em&gt;old&lt;/em&gt; files in Git history can be transferred into Git LFS, reducing repository size.&lt;/li&gt;
  &lt;li&gt;git-multimail &lt;a href=&quot;https://github.com/git-multimail/git-multimail/releases/tag/1.2.0&quot;&gt;1.2.0&lt;/a&gt; adds among others the possibility to filter out branches for which no emails should be sent, HTML colored emails, Gerrit and Atlassian BitBucket Server support.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Updates&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.github.io/rev_news/2015/09/09/edition-7/&quot;&gt;Since we talked about it last month&lt;/a&gt; David Turner
submitted &lt;a href=&quot;https://public-inbox.org/git/1443477738-32023-1-git-send-email-dturner%40twopensource.com/&quot;&gt;a new patch series&lt;/a&gt; of his work on
alternate ref backends. This work is being reviewed by Michael Haggerty, Junio, and others. The ultimate goal 
is still to allow a lmdb-based backend, which should be faster and have fewer issues on
case-insensitive filesystems than the traditional files-based backend. This work is sponsored by
Twitter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The GitMinutes podcast finally published the last episode from the Git-Merge conference. Here are all five parts in a neat overview:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://episodes.gitminutes.com/2015/05/gitminutes-35-git-merge-2015-part-1.html&quot;&gt;part 1&lt;/a&gt; with Matthieu Moy (Git, GSoC), Christian Couder (Git), Carlos Martín Nieto (libgit2)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://episodes.gitminutes.com/2015/05/gitminutes-36-git-merge-2015-part-2.html&quot;&gt;part 2&lt;/a&gt; with Arthur Schreiber (Rugged), Junio Hamano (Git), Vicent Marti (GitHub)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://episodes.gitminutes.com/2015/06/gitminutes-37-git-merge-2015-part-3.html&quot;&gt;part 3&lt;/a&gt; with Stefan Beller (Git/Google), Robert van Haaren, Ævar Arnfjörð Bjarmason (Git/booking.com)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://episodes.gitminutes.com/2015/07/gitminutes-38-git-merge-2015-part-4.html&quot;&gt;part 4&lt;/a&gt; with Roberto Tyley (BFG), Nicola Paolucci (Atlassian), Jameson Miller (Microsoft)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://episodes.gitminutes.com/2015/10/gitminutes-39-git-merge-2015-part-5.html&quot;&gt;part 5&lt;/a&gt; with Alexandra Tritz (BlaBlaCar), Rick Olson (GitHub/LFS), Jeff King (Git)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/semgit/semgit-spec-repository-naming&quot;&gt;semgit&lt;/a&gt; - Specification for Semantic Git Repository Naming&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=W71BTkUbdqE&quot;&gt;The Motivation for a Monolithic Codebase&lt;/a&gt;, a recorded talk by Rachel Potvin of Google&lt;/li&gt;
  &lt;li&gt;For those who didn’t catch last week’s Git meme rolling through the intertubes: &lt;a href=&quot;https://twitter.com/andygrunwald/status/650205624307838976/photo/1&quot;&gt;In case of fire..&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;On the same day as the 1.0 release, Atlassian’s Steve Streeting &lt;a href=&quot;https://developer.atlassian.com/blog/2015/10/contributing-to-git-lfs/&quot;&gt;explains how they’ve chosen to continue their own large file efforts together with LFS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.alexkras.com/19-git-tips-for-everyday-use/&quot;&gt;19 Tips For Everyday Git Use&lt;/a&gt;, by Alex Kras&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://randomswdev.blogspot.it/2015/07/adding-ssh-support-to-visual-studio.html&quot;&gt;Adding ssh support to the Visual Studio 2015 Git plug-in&lt;/a&gt;, by Bernardo Pastorelli&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://yurichev.com/blog/git/&quot;&gt;Some of git internals&lt;/a&gt;, a hands-on dig through the Git internals by Dennis Yurichev&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ericjmritz.name/2015/09/29/display-random-git-tips-in-your-terminal/&quot;&gt;Display Random Git Tips in Your Terminal&lt;/a&gt;, by Eric James Michael Ritz&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://geshan.com.np/blog/2015/09/how-to-use-simplified-gitflow-branching-model-video/&quot;&gt;Simplified Git Flow&lt;/a&gt;, by Geshan Manandhar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mk-fg/git-nerps&quot;&gt;git-nerps&lt;/a&gt; - Tool to encrypt and manage selected files (or parts of files) in a Git repository. See also the &lt;a href=&quot;http://blog.fraggod.net/2015/09/01/transparent-and-easy-encryption-for-files-in-git-repositories.html&quot;&gt;blog post&lt;/a&gt; by its creator, Mike Kazantsev.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-ftp.github.io/git-ftp/&quot;&gt;git-ftp&lt;/a&gt; - Git powered FTP client written as shell script&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-punish.io/&quot;&gt;git-punish&lt;/a&gt; - more for fun than anything else, this is a shortcut for running git blame and posting it’s output to &lt;a href=&quot;http://git-punish.io&quot;&gt;git-punish.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://gitghost.org/&quot;&gt;git:ghost&lt;/a&gt; -  Publish posts to your Ghost blog using git&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.perforce.com/downloads/helix-gitswarm&quot;&gt;Helix GitSwarm&lt;/a&gt; - a joint effort between Perforce and GitLab&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.git-tower.com/learn/&quot;&gt;Tower’s resources for learning Git&lt;/a&gt; - not sure if this is new, but it hasn’t been in our newsletter yet.&lt;/li&gt;
  &lt;li&gt;Atlassian BitBucket Server is &lt;a href=&quot;http://blog.bitbucket.org/2015/09/22/1-in-3-fortune-500-companies-agree-bitbucket-is-the-git-solution-for-professional-teams/&quot;&gt;the new name for Stash&lt;/a&gt;, their on-premise Git repo manager software.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from Luke Diamand, Roberto Tyley, Matthieu Moy, Johannes Schindelin and David Turner.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 7 (September 9th, 2015)</title>
      <link>https://git.github.io/rev_news/2015/09/09/edition-7/</link>
      <pubDate>Wed, 09 Sep 2015 20:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2015/09/09/edition-7/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-7-september-9th-2015&quot;&gt;Git Rev News: Edition 7 (September 9th, 2015)&lt;/h2&gt;

&lt;p&gt;Welcome to the 7th edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of August 2015.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;!---
### General
--&gt;

&lt;h3 id=&quot;google-summer-of-code-wrap-up-written-by-matthieu-moy&quot;&gt;Google Summer of code Wrap Up (&lt;em&gt;written by Matthieu Moy&lt;/em&gt;)&lt;/h3&gt;

&lt;p&gt;Both of the Git project Google Summer of Code students, Paul Tan and
Karthik Nayak have passed the final evaluation.&lt;/p&gt;

&lt;!-- Would be useful for a Google blog post, but not here.
# Google Summer of Code Wrap up: Git

[Git](http://git-scm.com/) is a distributed version-control system. We
participated in Google Summer of Code (GSoC) for the 8th time in 2015.
--&gt;

&lt;h4 id=&quot;projects-in-2015&quot;&gt;Projects in 2015&lt;/h4&gt;

&lt;h5 id=&quot;unification-of-git-for-each-ref-git-branch-and-git-tag&quot;&gt;Unification of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git for-each-ref&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git tag&lt;/code&gt;&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Student:&lt;/strong&gt; &lt;a href=&quot;http://karthiknayak.github.io/&quot;&gt;Karthik Nayak&lt;/a&gt;,
  mentored by Christian Couder and Matthieu Moy.&lt;/p&gt;

&lt;p&gt;With Git, branches and tags are references to a state in history.
Internally, a branch is almost the same as a tag, and both are
particular cases of the concept of references, or “ref” for short.
Still, because the use-cases are different, we had two commands with
different user-interfaces, and different implementations, plus the
command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git for-each-ref&lt;/code&gt; meant to be more flexible and easier to use
in scripts.&lt;/p&gt;

&lt;p&gt;A lot of code was moved from the user-interface part of the code to
the core library of Git, and duplicated ref-listing and formatting
code was refactored.&lt;/p&gt;

&lt;p&gt;A nice side effect for the user is that features that were available
on one command but not another are now available everywhere. For
example, we had &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git for-each-ref --format&lt;/code&gt; but no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch
--format&lt;/code&gt;, and had &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch --contains&lt;/code&gt; but not &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git for-each-ref
--contains&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The biggest contribution is of course that we reduced the code
duplication and made the code internally better.&lt;/p&gt;

&lt;h5 id=&quot;port-git-am-and-git-pull-from-shell-script-to-c&quot;&gt;Port &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; from shell-script to C&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Student:&lt;/strong&gt; &lt;a href=&quot;https://github.com/pyokagan&quot;&gt;Paul Tan&lt;/a&gt;, mentored by
Stefan Beller and Johannes Schindelin.&lt;/p&gt;

&lt;p&gt;Git was initially implemented as a set of C commands for the core, and
a set of shell-script to provide a user-friendly interface. While
implementing some commands in shell allowed a quick prototyping, the
presence of shell-scripts raises a lot of issues. One is performance:
shell-scripts tend to create a lot of processes, and often manipulate
a lot of temporary files. Another one is portability, especially on
Windows.&lt;/p&gt;

&lt;p&gt;Many Git commands written as shell-scripts were later re-written as
builtin C commands. You can still see some of the initial scripts in the
&lt;a href=&quot;https://github.com/git/git/tree/master/contrib/examples&quot;&gt;contrib/examples&lt;/a&gt;
directory of Git’s source tree.&lt;/p&gt;

&lt;p&gt;The second project was to port &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; in C. One
difficulty is that Git has strong requirements on
backward-compatibility.&lt;/p&gt;

&lt;p&gt;Both commands have been completely ported, and the result merged to
the master branch.&lt;/p&gt;

&lt;h4 id=&quot;retrospective&quot;&gt;Retrospective&lt;/h4&gt;

&lt;p&gt;Both projects were really successful (and obviously the students
“passed” in the GSoC jargon). One thing we’re happy about is that for
one project, the code is already completely reviewed and merged, and
for the other the reviewing process is almost over (and the student
remains active after the pens down date). This means that the GSoC did
not just bring us initial implementations, but solid, and
well-reviewed patches. The Git codebase is better after the GSoC than
before from the maintainability point of view.&lt;/p&gt;

&lt;p&gt;Interestingly, both projects were essentially internal refactoring ones
(the one I mentored last year was, too). Nothing really impressive for
the end-user, but in both cases a substantial contribution to Git’s
maintainability.&lt;/p&gt;

&lt;p&gt;I’m positively surprised that students chose these topics. They are not
the best subjects to show off with your friends (“see this new command
you love so much, &lt;em&gt;I&lt;/em&gt; implemented it!”), but are necessary work to make
the codebase healthier.&lt;/p&gt;

&lt;p&gt;Not all our past experiences were success. We had failed GSoC for very
promising students, or projects that we considered as “pass” from the
GSoC point of view, but producing code that were never merged or
merged far later after substantial work from the mentor. We actually
took a break from GSoC and did not participate in 2013 because we
thought we were not good enough at mentoring and integrating students
at that time.&lt;/p&gt;

&lt;p&gt;This year, we had long private discussions during the selection period
of the GSoC: refactoring projects like these ones have relatively high
risk. The “Wow” effect when it works is not so high, but the “Uh oh”
effect if it breaks is.&lt;/p&gt;

&lt;p&gt;Reading the students proposals and resume is rarely sufficient to
really evaluate their skills, which makes the risk particularly hard
to evaluate. Since 2014, we’ve been using
&lt;a href=&quot;https://git.github.io/SoC-2015-Microprojects/&quot;&gt;microprojects&lt;/a&gt; to
select students. This turned out to be very efficient, both at
identifying good (or bad) applicants, but also at giving students a
glimpse of what “contributing to Git” means. Student get an idea of
how the community is organized before starting the project.&lt;/p&gt;

&lt;p&gt;We’re now happy we took the risk. We’ve gained a bunch of useful
changes to Git. We’ve had lively discussions with students and had fun
doing it. And hopefully, these student now feel part of the community
and the fun will continue long after the GSoC :-).&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1441245313-11907-1-git-send-email-dturner%40twopensource.com/&quot;&gt;refs lmdb backend&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last June, David Turner, who is working for Twitter, sent to the list a message titled
“&lt;a href=&quot;https://public-inbox.org/git/1435020656.28466.8.camel%40twopensource.com/&quot;&gt;RFC/Pull Request: Refs db backend&lt;/a&gt;”
that started with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I’ve revived and modified Ronnie Sahlberg’s work on the refs db backend.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ronnie Sahlberg, working for Google, had sent last year some emails about
&lt;a href=&quot;https://public-inbox.org/git/CAL%3DYDWn-CGZGr5bXNTiZmzr4-w_8CERx3r2bmLWbczqJ0Sn7dg%40mail.gmail.com/&quot;&gt;an experimental TDB backend&lt;/a&gt; and
&lt;a href=&quot;https://public-inbox.org/git/CAL%3DYDWk5C%2BbQS76_%2Bjx1BSYSxecCxaS95RG181ecbJBLCNWLkQ%40mail.gmail.com/&quot;&gt;pluggable backends&lt;/a&gt;
he had developed to store git refs. Unfortunately his work was too experimental and had not been merged.&lt;/p&gt;

&lt;p&gt;This is interesting work because Git gets slower when the number of
refs in a repositories is getting really big, as its packed-refs
backend is file based and had not been designed to handle a huge
number of refs. That’s why a lot of prominent Git developers, like
Jeff King, Shawn Pearce, Michael Haggerty, Stefan Beller, Duy Nguyen
and Junio Hamano were interested by David’s announcement last June and
some details it contained like:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The db backend runs git for-each-ref about 30% faster than the files
backend with fully-packed refs on a repo with ~120k refs. It’s also
about 4x faster than using fully-unpacked refs. In addition, and
perhaps more importantly, it avoids case-conflict issues on OS X.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One difference between Ronnie’s and David’s work is that David chose
LMDB instead of TDB for the new database backend. David explained that
with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The advantage of tdb is that it’s smaller (~125k). The disadvantages are
that tdb is hard to build on OS X.  It’s also not in homebrew. So lmdb
seemed simpler.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Since June, David, helped by many reviewers like Eric Sunshine, Johan
Herland, Michael Haggerty, Jacob Keller, Duy Nguyen, Stefan Beller,
Johannes Sixt, Philip Oakley and Junio has worked on many related
improvements, that are very helpful to advance this topic. That’s why
&lt;a href=&quot;https://public-inbox.org/git/1441245313-11907-1-git-send-email-dturner%40twopensource.com/&quot;&gt;the last version of his patch series&lt;/a&gt;
contains the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This series depends on at least the following topics in pu:
dt/refs-bisection
dt/refs-pseudo
dt/reflog-tests
kn/for-each-tag (…)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It also contains the following interesting bits:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Also, now per-worktree refs live in the filesystem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(…)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;As Michael Haggerty suggested, I’m now using struct ref_transaction as
a base struct for the ref transaction structs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This shows that David’s series is using very recent improvements by
other developers in the Git codebase.&lt;/p&gt;

&lt;p&gt;Hopefully, we can expect that, with those new ref backends, users will
be able to benefit soon from a huge amount of ground work that has
been done during the last few years.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20150811104056.16465.58131%40localhost/&quot;&gt;t5004: test ZIP archives with many entries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Johannes Schauer reported that git-archive does not use the zip64
extension and therefore is unable to properly create zip archives with
more than 16k entries.&lt;/p&gt;

&lt;p&gt;René Scharfe agreed that there is a problem. It comes from the fact
that without the zip64 extension, the zip field for the number of
entries has only two bytes. The limit is then 65535 entries.&lt;/p&gt;

&lt;p&gt;René then sent a patch series to add tests for this problem and then
fix it. The first patch contains the following code, which tests that
a suitable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zipinfo&lt;/code&gt; command is available on the current machine, and
sets the ZIPINFO prerequisite if this is the case:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;+ZIPINFO=zipinfo
+
+test_lazy_prereq ZIPINFO &apos;
+	n=$(&quot;$ZIPINFO&quot; &quot;$TEST_DIRECTORY&quot;/t5004/empty.zip | sed -n &quot;2s/.* //p&quot;)
+	test &quot;x$n&quot; = &quot;x0&quot;
+&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Eric Sunshine replied that unfortunately the above would work neither
on MacOS X where the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zipinfo&lt;/code&gt; output is different, nor on FreeBSD
where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zipinfo&lt;/code&gt; has been removed in favor of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unzip -Z&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Eric then discussed in details the possibility of using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unzip -Z&lt;/code&gt;
instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zipinfo&lt;/code&gt; to have a portable test, but it appears that this
doesn’t work well on files using the zip64 extension on MacOS X and
FreeBSD .&lt;/p&gt;

&lt;p&gt;After further discussing this, Eric, René and Junio agreed that it was
good enough that the patch and the above &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zipinfo&lt;/code&gt; check work on Linux
as we don’t need to test the archive generated by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git archive&lt;/code&gt; on
every platform.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1440764691-62254-1-git-send-email-larsxschneider%40gmail.com/&quot;&gt;git-p4: add option to store files in Git LFS on import&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lars Schneider, who is in the process of migrating huge Perforce repositories to
Git, posted a RFC (Request For Comments) patch to add an option to
git-p4 to store some big files into &lt;a href=&quot;https://git-lfs.github.com/&quot;&gt;Git LFS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Luke Diamand, who has been working a lot on git-p4 during the past
years, reviewed his patch saying first that it would be better to have
both a generic mechanism to handle big files and a separate Git LFS
extension rather than a specific mechanism for Git LFS. Luke also
noticed that the changes seem to require Python 3.&lt;/p&gt;

&lt;p&gt;The discussion then focused on the merit of migrating git-p4 from
Python 2 to Python 3 until John Keeping chimed in writing:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Documentation/CodingGuidelines currently says:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;
      &lt;p&gt;As a minimum, we aim to be compatible with Python 2.6 and 2.7.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;p&gt;Where required libraries do not restrict us to Python 2, we try to
also be compatible with Python 3.1 and later.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;and then explaining the reason why it’s difficult to migrate.&lt;/p&gt;

&lt;p&gt;Fortunately it seems that this has not discouraged Lars to send a
&lt;a href=&quot;https://public-inbox.org/git/1441298148-63885-5-git-send-email-larsxschneider%40gmail.com/&quot;&gt;second version of his patch&lt;/a&gt;
that starts to address Luke’s concerns and that Luke has already reviewed.&lt;/p&gt;

&lt;p&gt;Hopefully, thanks to this ongoing work, we will soon have an easy way
to migrate Perforce repos that contains big files.&lt;/p&gt;

&lt;!---
### Support
--&gt;

&lt;h2 id=&quot;developer-spotlight-eric-sunshine&quot;&gt;Developer Spotlight: Eric Sunshine&lt;/h2&gt;

&lt;p&gt;Q. Who are you and how did you get involved in open-source software?&lt;/p&gt;

&lt;p&gt;A. I’m an old-time developer who has been giving away software and
source code I’ve written ever since I learned to program – before
readily-available Internet access, and long before the World Wide Web
existed. Many of my projects – at least the ones which weren’t worth
porting forward – are as long-dead as the platforms and operating
systems for which they were written.&lt;/p&gt;

&lt;p&gt;Q. How did your introduction to Git come about?&lt;/p&gt;

&lt;p&gt;A. I may have seen a periodic reference to Git here and there, but
what really brought it to my attention was
&lt;a href=&quot;http://www.cmsmadesimple.org/2007/09/13/using-git-for-core-development/&quot;&gt;a 2007 post&lt;/a&gt; by Ted Kulp
which talked about Git’s distributed nature, painless branching,
offline capability, and full local history. As a long-time RCS, CVS,
and Subversion user, I was intrigued, and decided to learn about Git,
but failed utterly. Partly this was due to Git tutorials I read being
aimed at people already at least somewhat familiar with the concept of
distributed version control, thus not really explaining it, and, as a
long-time centralized version control user, I had difficulty grasping
it. The tutorials also glossed over the Git “index”, thus making it
difficult to understand its purpose or significance. Finally, Git
terminology, such as “plumbing”, “porcelain”, “rebasing”, and “cherry
picking”, which had no analog in other version control systems, or in
my general experience, seemed genuinely opaque. This situation
remained unchanged until late 2008 when I decided to try again.
Watching a video of &lt;a href=&quot;https://youtu.be/4XpnKHJAok8&quot;&gt;a Git talk&lt;/a&gt; at Google by Linus Torvalds,
followed by &lt;a href=&quot;https://youtu.be/8dhZ9BXQgc4&quot;&gt;one&lt;/a&gt; by Randal Schwartz, and reading improved tutorials
helped me finally get a grip on distributed version control and Git
itself.&lt;/p&gt;

&lt;p&gt;Q. How did you get involved in Git project itself?&lt;/p&gt;

&lt;p&gt;A. Once I learned and began using Git, I quickly came to appreciate
its underlying architecture, the thoughtfulness which went into its
design, and how it enabled me to create sharp, well focused commits in
a way that other VCS’s had not (or actively discouraged), as well as
the ability to organize and polish history locally. Consequently, I
joined the project, not because I wanted a shiny new feature or a bug
fixed, but rather because I wanted to do my part to contribute back to
a project from which I was benefitting. My participation takes the
form of doing code reviews of submitted patches, diagnosing and fixing
bugs, and adding or enhancing a feature here and there. My hope,
particularly with the code reviews, has been to take some of the load
off the shoulders of other regular project members.&lt;/p&gt;

&lt;p&gt;Q. What are your favorite Git features?&lt;/p&gt;

&lt;p&gt;A. My two favorite features are (1) the ability to stage changes in
the index with precision to create sharp, well focused commits, and
(2) interactive rebase for (repeatedly) refining a series of commits
until I’m happy with the history they represent. More generally, given
Git’s easy branching and built-in safety mechanisms, I appreciate the
freedom it gives me to work on many changes at once (when necessary)
without worrying about those changes clobbering one other.&lt;/p&gt;

&lt;p&gt;Q. What is your preferred Git development model?&lt;/p&gt;

&lt;p&gt;A. I’m partial to the mailing list approach used by the Git project
itself, since all important information – discussions, patches, bug
reports – are available in a centralized location (my mailbox) with
no effort on my part.  This allows for a more streamlined experience
than if I have to actively seek out the information by consulting
forums, bug trackers, and patch review websites. Moreover, the mailing
list development model allows use of email-related tools best suited
for the person and task, whereas web-based tools are often difficult
to use, feature-poor, and sometimes outright crippled. I also
appreciate the Git project’s heavy emphasis well-engineered solutions,
quality commit messages, and well-organized, highly focused patches.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git for Windows 2.5.0 &lt;a href=&quot;http://article.gmane.org/gmane.comp.version-control.msysgit/21805&quot;&gt;was released&lt;/a&gt;. It is the first release based on Git 2.x, the first release based on &lt;a href=&quot;https://msys2.github.io/&quot;&gt;MSys2&lt;/a&gt; and the first release dropping the &lt;em&gt;-preview&lt;/em&gt; suffix.&lt;/li&gt;
  &lt;li&gt;Git 2.5.1 &lt;a href=&quot;http://thread.gmane.org/gmane.linux.kernel/2028843&quot;&gt;was released&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Git for Windows 2.5.1 &lt;a href=&quot;https://public-inbox.org/git/44a7997123f03bb4d5f47724befd8417%40www.dscho.org/&quot;&gt;was released soon after that&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;git-multimail &lt;a href=&quot;https://github.com/git-multimail/git-multimail/releases/tag/1.2.a1&quot;&gt;1.2 Alpha 1 was released&lt;/a&gt;. Please, report bugs and give feedback on new features before the final release.&lt;/li&gt;
  &lt;li&gt;GitLab &lt;a href=&quot;https://about.gitlab.com/2015/08/22/gitlab-7-14-released/&quot;&gt;7.14&lt;/a&gt;
and &lt;a href=&quot;https://about.gitlab.com/2015/08/25/gitlab-7-dot-14-dot-1-released/&quot;&gt;7.14.1 was released&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;libgit2 backported some fixes into a &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.23.2&quot;&gt;v0.23.2 Maintenance Release&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Johannes Schindelin, aka Dscho, wrote
&lt;a href=&quot;https://public-inbox.org/git/alpine.DEB.1.00.1509031156510.29350%40s15462909.onlinehome-server.info/&quot;&gt;a personal note&lt;/a&gt;
to the list explaining that since mid-August he has been working
full time for Microsoft on Git for Windows. He has already been the
Git for Windows maintainer in his spare time since the beginning of
this project, as well as a Git developer for more than 10 years, but
now he is as he says “really excited to join the club of Git
developers who get paid to work on Git as part of their day-jobs”.
Congratulations to him!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.scrapinghub.com/2015/06/08/git-for-managing-vacations/&quot;&gt;Using git to manage vacations in a large distributed team&lt;/a&gt;, by Pablo Hoffman at Scrapinghub.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://realm.io/news/altconf-wil-shipley-git-document-format/&quot;&gt;Git as a Document Format&lt;/a&gt;,
a talk by Wil Shipley.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://info.meteor.com/blog/step-by-step-tutorials-with-git&quot;&gt;Building maintainable step-by-step tutorials with Git&lt;/a&gt; by Sashko Stubailo from Meteor.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jaxenter.com/git-branches-considered-harmful-119237.html&quot;&gt;Git branches considered harmful&lt;/a&gt;,
by Pieter Hintjens.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ponyfoo.com/articles/git-github-hacks&quot;&gt;Git and GitHub Hacks&lt;/a&gt;, by Nicolas Bevacqua.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://robots.thoughtbot.com/better-commit-messages-with-a-gitmessage-template&quot;&gt;Better Commit Messages with a .gitmessage Template&lt;/a&gt;, by Matt Summer.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://git.rocks/getting-started/&quot;&gt;Git rocks: Getting started with Git&lt;/a&gt;, an
interactive tutorial.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.annharter.com/2015/08/12/blinking-commits.html&quot;&gt;Blinking Commits&lt;/a&gt;,
if you ever needed a blinking commit message.&lt;/li&gt;
  &lt;li&gt;A YouTube celebrity called “Day[9]” recently took some minutes to &lt;a href=&quot;https://www.youtube.com/watch?v=CPAIBmtH9xQ&amp;amp;t=21m51s&quot;&gt;explain Git&lt;/a&gt; on his popular gaming channel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.git-town.com/index.html&quot;&gt;Git Town&lt;/a&gt; offers a higher level,
workflow-oriented command line interface.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jlord/git-it-electron&quot;&gt;Git-it (desktop version)&lt;/a&gt;
is an app that teaches you Git/GitHub on the command line.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/michaeldfallen/git-radar&quot;&gt;git-radar&lt;/a&gt; is a command
line prompt add-in that offers quite a lot of features.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slant.co/topics/465/~what-are-the-best-git-clients-for-mac-os-x&quot;&gt;What are the best Git clients for Mac?&lt;/a&gt; - an interactive discussion/poll.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2046-github-desktop-is-now-available&quot;&gt;GitHub Desktop&lt;/a&gt;,
a new generation of their GUI software for OS X and Windows.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-up/GitUp&quot;&gt;GitUp&lt;/a&gt; is a Git GUI based on
&lt;a href=&quot;https://github.com/git-up/GitUp#gitupkit&quot;&gt;GitUpKit&lt;/a&gt; - the
latter lets you build your very own custom Git UI.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/prashanthellina/pullbox&quot;&gt;Pullbox&lt;/a&gt; is a simple Dropbox
replacement based on Git.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/m1foley/fit-commit&quot;&gt;fit-commit&lt;/a&gt;, a Git hook that makes
sure your commit messages are good.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://modeling-languages.com/gitana-a-sql-based-git-repository-inspector/&quot;&gt;Gitana&lt;/a&gt;: a SQL-based Git Repository Inspector&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/imsky/git-fresh&quot;&gt;git-fresh&lt;/a&gt;, a single command for keeping your repo fresh.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from Matthieu Moy, Eric Sunshine and Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 6 (August 5th, 2015)</title>
      <link>https://git.github.io/rev_news/2015/08/05/edition-6/</link>
      <pubDate>Wed, 05 Aug 2015 22:26:51 +0000</pubDate>
      <dc:creator>tfnico</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2015/08/05/edition-6/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-6-august-5th-2015&quot;&gt;Git Rev News: Edition 6 (August 5th, 2015)&lt;/h2&gt;

&lt;p&gt;Welcome to the sixth edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of July 2015.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;p&gt;Git 2.5 is out! The project maintainer, Junio C. Hamano, has &lt;a href=&quot;http://git-blame.blogspot.de/2015/07/git-25.html&quot;&gt;shared his thoughts on the release at his blog&lt;/a&gt;. Git 2.5 is packed full of new features, and includes contributions from 21 new contributors. In his post, Junio describes how &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help&lt;/code&gt; has changed:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;One interesting change is to git help. We now list commands, grouped by the situation in which you would want to use them. This came from discussion on usability, inspired by one of the talks at GitMerge conference we had in spring.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He goes on to talk about some of his favourite new features included in the release, such as a new short hand &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;branch@{push}&lt;/code&gt; that “denotes the remote-tracking branch that tracks the branch at the remote the branch would be pushed to”, and a new option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--ws-error-highlight&lt;/code&gt; that can be used with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; and friends to show whitespace breakages in deleted and context lines.&lt;/p&gt;

&lt;p&gt;Be sure to see the post for more on the new features, or checkout the &lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/RelNotes/2.5.0.adoc&quot;&gt;release notes in the source&lt;/a&gt; for all the nitty gritty details.&lt;/p&gt;

&lt;h3 id=&quot;did-you-know&quot;&gt;Did you know?&lt;/h3&gt;

&lt;p&gt;Did you know that the &lt;a href=&quot;https://www.kernel.org&quot;&gt;Linux kernel&lt;/a&gt; you clone normally
contains only a part of its entire history? If you need access to its
uninterrupted evolution since the first commit you have to “graft” a few
separate repositories together chronologically.&lt;/p&gt;

&lt;p&gt;Git has a local - per-repository - mechanism to change and specify explicitly
the parent of existing commits: These are called Grafts. In a repository they
are defined in a file called “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/info/grafts&lt;/code&gt;” (check the &lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html&quot;&gt;Git repository
layout manpage for details&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;From the &lt;a href=&quot;https://git.wiki.kernel.org/index.php/GraftPoint&quot;&gt;Git Wiki&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When Linus started using Git for maintaining his kernel tree there didn’t
exist any tools to convert the old kernel history. Later, when the old kernel
history was imported into Git from the bkcvs gateway, grafts was created as a
method for making it possible to tie the two different repositories together.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To re-assemble the complete kernel history these three repositories are needed:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git&quot;&gt;torvalds/linux&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git&quot;&gt;tglx/history&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/davej/history.git&quot;&gt;davej/history&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The syntax of the Grafts file in “&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/info/grafts&lt;/code&gt;” is simple: each line
lists a commit and it’s fake parent using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SHA-1&lt;/code&gt; identifiers. So to
re-assemble the full history of the Linux kernel add the following grafts to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/info/grafts&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 e7e173af42dbf37b1d946f9ee00219cb3b2bea6a
7a2deb32924142696b8174cdf9b38cd72a11fc96 379a6be1eedb84ae0d476afbc4b4070383681178
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With these grafts, you can get a complete and continuous history of the kernel
since 0.01. Read the rest of the article on grafts and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git replace&lt;/code&gt; in
Nicola’s &lt;a href=&quot;https://developer.atlassian.com/blog/2015/08/grafting-earlier-history-with-git/&quot;&gt;just published piece&lt;/a&gt;.&lt;/p&gt;

&lt;!---
### Reviews
--&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20150714073035.GA22707%40aepfle.de/&quot;&gt;git log fails to show all changes for a file&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Working on the Linux kernel, Olaf Hering wondered why the following
command does not show all the commits that modified a function in the
given file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git log -p -M --stat -- drivers/hv/channel_mgmt.c
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and asked for a command that could show them all.&lt;/p&gt;

&lt;p&gt;John Keeping replied that the change not shown by the above command
was added in an evil merge and suggested the following command, which
adds &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cc&lt;/code&gt;, instead:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git log -p -M --stat --cc -- drivers/hv/channel_mgmt.c
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Olaf thanked John, but said that the output from the above command is
rather useless. Andreas Schwab asked why and explained how to read the
output:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;- static void init_vp_index(struct vmbus_channel *channel, uuid_le *type_guid)
 -static u32 get_vp_index(const uuid_le *type_guid)
++static void init_vp_index(struct vmbus_channel *channel, const uuid_le *type_guid)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;One branch renamed get_vp_index to init_vp_index, the other branch added
the const attribute.  This hunk combines both changes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then Linus Torvalds explained the situation this way:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;That’s not an evil merge. That’s just a regular merge. One side had
changed the argument to “const”:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;1b9d48f2a579 (“hyper-v: make uuid_le const”)&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;while the other side had renamed the function and added an argument,
and changed the return type:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;d3ba720dd58c (“Drivers: hv: Eliminate the channel spinlock in the
callback path”)&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;an “evil merge” is something that makes changes that came from neither
side and aren’t actually resolving a conflict.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Linus then started a discussion about whether the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-p&lt;/code&gt; option in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
log&lt;/code&gt; should imply &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cc&lt;/code&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;That said, I do wonder if we should just make “-p” imply “–cc”. Right
now we have the kind of odd situation that “git log -p” doesn’t show
merge patches, but “git show &lt;cmit&gt;&quot; does show them. And you kind of
have to know a lot about git to know the &quot;--cc&quot; option.&lt;/cmit&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Linus, Junio and Jeff King tried to find a sensible way to improve on
this, but in the end it looks like nothing will be done as the new
behavior might have some drawbacks. Junio concluded the thread with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It just is that ‘-p’, that clearly stands for ‘patch’ but does more
than ‘patch’ to produce something that cannot be fed to ‘apply’ by
defaulting to ‘–cc’, makes me hesitate.  By making it a lot more
convenient for experienced people who understand these issues, I
have this suspicion that it would make the options less orthgonal
and harder to explain to new people.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1437159533304-7635764.post%40n2.nabble.com/&quot;&gt;Git tag: pre-receive hook issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gaurav Chhabra reported that in his company they have &lt;a href=&quot;http://pastebin.com/VnMQp5ar&quot;&gt;a script
launched by a pre-receive hook&lt;/a&gt; in which
they use the following Git command to check if a given object is a tag
instead of a commit:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git describe --exact-match $sha1 2&amp;gt;&amp;amp;1 | grep -o fatal | wc -w
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If the output of the command is 0, the script considers that $sha1 is
a tag.&lt;/p&gt;

&lt;p&gt;Unfortunately it sometimes doesn’t work and Gaurav, though
acknowledging that it’s a bad implementation, wondered why.&lt;/p&gt;

&lt;p&gt;Junio Hamano replied that commits that are pointed to by annotated
tags would be considered as tags, and wondered if that was on purpose
and asked why that would be wanted.&lt;/p&gt;

&lt;p&gt;Junio also found something strange in an earlier part of the script
and suggested an alternative implementation.&lt;/p&gt;

&lt;p&gt;Jacob Keller, aka Jake, agreed with Junio that it was not clear what
was really needed, and suggested that the problem might come from the
fact that, when the pre-receive hook that launches the script is run,
refs that are received have not yet been accepted, so &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git describe&lt;/code&gt;
cannot see them yet.&lt;/p&gt;

&lt;p&gt;Agreeing with Jake, Junio replied to Gaurav with the following
description of what happens on the server when it receives a push:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When you push a branch ‘master’ and a tag ‘v1.0’, these things
happen in order:&lt;/p&gt;

  &lt;p&gt;(1) all objects that are necessary to ensure that the receiving
     repository has everything reachable from ‘master’ and ‘v1.0’
     are sent to it and stored.  If the receiving end fails to store
     this correctly, everything below is skipped and the operation
     fails.&lt;/p&gt;

  &lt;p&gt;(2) pre-receive is run.  Notice that at this point, no refs have
     been updated yet, so “describe” will not know v1.0 tag (if it
     is a new one) exists.  But this step can assume that all new
     objects are already accessible using their object name, so&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    case &quot;$old&quot; in
    0000000000000000000000000000000000000000) range=$new ;;
    *) range=$old..$new ;;
    esac &amp;amp;&amp;amp;
    git rev-list $range |
    while read commit
    do
            check $commit object, e.g.
            git cat-file commit $commit | grep FooBarId
    done

 is expected to work.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;(3) for each ref being updated (in this case, refs/heads/master and
     refs/tags/v1.0), the following happens:&lt;/p&gt;

  &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; (3-1) built-in sanity checks may reject the push to the ref,
       e.g. refusing to update a checked out branch, refusing to
       accept a non-fast-forward push that is not forced, etc.

 (3-2) update-hook is run, which may reject the push to this
       ref.

 (3-3) the ref is updated (unless the push is atomic).
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;/div&gt;

  &lt;p&gt;(4) if the push is atomic, the refs are updated.&lt;/p&gt;

  &lt;p&gt;(5) post-receive hook is run.  This is for logging and cannot
     affect the outcome of the push.&lt;/p&gt;

  &lt;p&gt;(6) for each ref that was updated (in this case, refs/heads/master
     and refs/tags/v1.0), post-update hook is run.  This is for
     logging and cannot affect the outcome of the push.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and this opinion about the problematic command:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;As your requirement seems to be to validate any and all new commits,
I think it is totally unnecessary to check if any of them happens to
have a tag pointing at it in the first place.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Gaurav eventually said that the purpose of the problematic command was
only to check if a ref that is update is a tag. Jake then detailed how
to properly check in the hook that a ref being updated is a tag:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;To check whether the ref being updated is a tag, you need to check the
3rd parameter. pre-receive receives in the format&lt;/p&gt;

  &lt;old-value&gt; &lt;new-value&gt; &lt;ref-name&gt;

so you need to check each line&apos;s 3rd value which is the ref-name being
updated. If it&apos;s in refs/tags then it&apos;s a tag update. If it&apos;s not, you
can check it as a branch update.
&lt;/ref-name&gt;&lt;/new-value&gt;&lt;/old-value&gt;
&lt;/blockquote&gt;

&lt;p&gt;Gaurav thanked Junio and Jake for their support.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Before we move on to the link section of this edition, we want to make a
“call-to-arms” for people reading the Git mailing list. We didn’t
get enough material in this edition on what was really discussed on
the list the last month. In order to to be the window into the Git
community that we set out to be, we need your help.&lt;/p&gt;

&lt;p&gt;So please, the next time you read through an interesting discussion on
the mailing list, note down a few lines about it and
&lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;share them with us&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git 2.5 (see above)!&lt;/li&gt;
  &lt;li&gt;GitLab keeps knocking out new versions, they’re recently reached &lt;a href=&quot;https://about.gitlab.com/2015/07/28/gitlab-7-dot-13-dot-2-released/&quot;&gt;7.13.2&lt;/a&gt; in their stable train on top of the latest &lt;a href=&quot;https://about.gitlab.com/2015/07/22/gitlab-7-13-released/&quot;&gt;7.13&lt;/a&gt;, displaying their new logo.&lt;/li&gt;
  &lt;li&gt;libgit2 v0.23.0 &lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.23.0&quot;&gt;is out&lt;/a&gt; with a wide range of improvements.&lt;/li&gt;
  &lt;li&gt;Following the libgit2 release, Rugged was quick to follow suit with their own &lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.23.0&quot;&gt;v0.23.0&lt;/a&gt;, while objective-git reached &lt;a href=&quot;https://github.com/libgit2/objective-git/releases/tag/0.8.7&quot;&gt;0.8.7&lt;/a&gt;, and pygit2 reached &lt;a href=&quot;https://github.com/libgit2/pygit2/releases/tag/v0.22.1&quot;&gt;v0.22.1&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A few days ago marked &lt;a href=&quot;https://plus.google.com/u/0/+JunioCHamano/posts/EchiBhdBfQa&quot;&gt;the 10th anniversary of Junio becoming the maintainer&lt;/a&gt; of the Git project. Congratulations!&lt;/li&gt;
  &lt;li&gt;GitHub, probably the biggest Git hosting provider in the world, &lt;a href=&quot;http://techcrunch.com/2015/07/29/github-raises-250m-series-b-round-to-take-risks/&quot;&gt;raised $ 250 million&lt;/a&gt; in order “to accelerate growth and expand its sales and engineering team” and “to allow us to think bigger and take larger risks”.&lt;/li&gt;
  &lt;li&gt;For similar sounding reasons, GitLab &lt;a href=&quot;https://about.gitlab.com/2015/07/09/1.5M-raised-in-seed-funding-for-gitlab-to-accelerate-growth-and-expand-operations/&quot;&gt;raised $ 1.5 million in a seed round&lt;/a&gt; for their open source hosting option.&lt;/li&gt;
  &lt;li&gt;We were all shocked to find out that &lt;a href=&quot;http://www.jamiembrown.com/blog/one-in-every-600-websites-has-git-exposed/&quot;&gt;one in every 600 websites has .git exposed&lt;/a&gt;, as shared by Jamie Brown.&lt;/li&gt;
  &lt;li&gt;The notorious Git mastermind of StackOverflow, VonC, explains &lt;a href=&quot;http://stackoverflow.com/a/30185564/266875&quot;&gt;how to make use of the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree add&lt;/code&gt; command&lt;/a&gt; that arrived with Git 2.5.&lt;/li&gt;
  &lt;li&gt;Ilmari Kontulainen of Deveo provides us with a &lt;a href=&quot;http://blog.deveo.com/storing-large-binary-files-in-git-repositories/&quot;&gt;current rundown of options for storing large files with(out) Git&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Dealing with Git Merge Revisions, or &lt;a href=&quot;http://blog.jdwyah.com/2015/07/dealing-with-git-merge-revisions.html&quot;&gt;Zen and the Art of Git Chainsaw Maintenance&lt;/a&gt;, by Jeff Dwyer.&lt;/li&gt;
  &lt;li&gt;Jim Moore shared a quick tip on &lt;a href=&quot;http://blog.mooregreatsoftware.com/2013/12/13/viewing-deleted-git-content/&quot;&gt;how to view a deleted file in Git&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;The not so light reading title this month is ‘A Case of Computational Thinking: The Subtle Effect of Hidden Dependencies on the User Experience of Version Control’, &lt;a href=&quot;https://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/42942.pdf&quot;&gt;a research paper from Google&lt;/a&gt; on the usability of version control systems&lt;/li&gt;
  &lt;li&gt;We’ll never get tired of the awesomeness of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt;, so here is Kruno Knego &lt;a href=&quot;http://krunoknego.com/2015/07/14/git-bisect/&quot;&gt;giving beginners a fresh introduction&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Apparently Magit is such a great Git UI, that it’s worth switching to Emacs just to get at it. Here’s Nathan Willis &lt;a href=&quot;http://lwn.net/Articles/649535/&quot;&gt;explaining what Magit 2.1 is all about&lt;/a&gt; (to be honest, this section was staged using Vim/fugitive, sorry).&lt;/li&gt;
  &lt;li&gt;Another use-case for the under-used Git notes: &lt;a href=&quot;http://who-t.blogspot.de/2015/07/using-git-notes-for-marking-test-suite.html&quot;&gt;marking test suite successes&lt;/a&gt;, by Peter Hutterer.&lt;/li&gt;
  &lt;li&gt;Don’t Fear the Rebase: &lt;a href=&quot;http://blog.carbonfive.com/2015/07/01/dont-fear-the-rebase-git-garbage-collection-and-you/&quot;&gt;Git Garbage Collection and You&lt;/a&gt;, Chris Svenningsen helps us roll back after losing changes.&lt;/li&gt;
  &lt;li&gt;The most commonly used (citation needed) &lt;a href=&quot;http://git.io/git-tips&quot;&gt;git tips and tricks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Many of us think working with patch files is hard. Alexander Ross shows &lt;a href=&quot;http://aross.se/2015/06/22/create-and-apply-git-patch-files.html&quot;&gt;why this need not be the case&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.gitfromscratch.com/&quot;&gt;git from scratch&lt;/a&gt; is a tutorial for non-programmers and command-line-avoiders who want to get into Git, using DiffPlug (see next link).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;There aren’t enough great visual Git tools around. &lt;a href=&quot;https://www.kickstarter.com/projects/diffplug/git-for-diffplug&quot;&gt;Git for DiffPlug&lt;/a&gt; is a Kickstarter that aims to change this. Interestingly, it’s &lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02944.html&quot;&gt;based on JGit&lt;/a&gt;, and the creators have proposed a VCS-agnostic diff-API, &lt;a href=&quot;https://github.com/diffplug/opendiff&quot;&gt;OpenDiff&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Here’s an LWN article on &lt;a href=&quot;http://lwn.net/Articles/650145/&quot;&gt;Gogs&lt;/a&gt;, which claims to be A painless self-hosted Git service.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/evansendra/mingit&quot;&gt;mingit&lt;/a&gt; is an extremely minified alias for git commands with tab completion.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/blogs/aws/now-available-aws-codecommit/&quot;&gt;AWS CodeCommit&lt;/a&gt; is Amazon’s fresh attempt at providing Git hosting.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/grzesiek/git_compound&quot;&gt;GitCompound&lt;/a&gt; allows you to compose your project using git repositories and Ruby tasks.&lt;/li&gt;
  &lt;li&gt;Dan Feldman from Artifactory explains &lt;a href=&quot;http://www.jfrog.com/blog/use-the-right-tool-for-the-job-git-lfs-with-artifactory/&quot;&gt;how to use Artifactory to store Git LFS resources&lt;/a&gt;. Might this be the first non-GitHub company announcing their support for Git LFS?&lt;/li&gt;
  &lt;li&gt;Atlassian has relaunched their Git knowledge portal under the motto &lt;a href=&quot;https://www.atlassian.com/git/&quot;&gt;Getting Git Right&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/da-x/git-bottle&quot;&gt;git-bottle&lt;/a&gt; proposes to be a better stash.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hackrslab/gig&quot;&gt;gig&lt;/a&gt; is a command-line tool for quickly setting up .gitignore files. See also &lt;a href=&quot;https://www.gitignore.io/&quot;&gt;gitignore.io&lt;/a&gt;.
*&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;, with help from Andrew Ardill.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 5 (July 8th, 2015)</title>
      <link>https://git.github.io/rev_news/2015/07/08/edition-5/</link>
      <pubDate>Wed, 08 Jul 2015 20:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2015/07/08/edition-5/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-5-july-8th-2015&quot;&gt;Git Rev News: Edition 5 (July 8th, 2015)&lt;/h2&gt;

&lt;p&gt;Welcome to the fifth edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of June 2015.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Ensimag students working on Git (&lt;em&gt;written by Matthieu Moy&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As part of a school project, Antoine DELAITE, Remi GALAN ALFONSO, Remi LESPINET, Guillaume PAGES and Louis-Alexandre STUBER, from &lt;a href=&quot;http://ensimag.grenoble-inp.fr/&quot;&gt;Ensimag&lt;/a&gt;, contributed to Git. As a warm-up, they implemented a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;am.threeWay&lt;/code&gt; configuration variable to have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git am&lt;/code&gt; use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-3&lt;/code&gt; by default (will be in Git 2.5). Some patch series are being polished to allow &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git bisect&lt;/code&gt; to use an arbitrary pair of terms instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;good&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bad&lt;/code&gt;, an improved management of list of addresses and aliases in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--to&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cc&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--bcc&lt;/code&gt; options of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git send-email&lt;/code&gt;, a more verbose output for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; when ran during a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebase -i&lt;/code&gt; session, and a safety feature for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; to avoid dropping lines by mistake in the todo-list.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Google Summer of Code midterm evaluations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both of the Git project &lt;a href=&quot;http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/about_page&quot;&gt;Google Summer of Code&lt;/a&gt;
students, Paul Tan and Karthik Nayak have passed the midterm evaluation and are doing well. Karthik is working on
&lt;a href=&quot;https://github.com/KarthikNayak/git/commits/ref_filter&quot;&gt;unifying the implementations of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git branch -l&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git tag -l&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git for-each-ref&lt;/code&gt;&lt;/a&gt;
and Paul is working on &lt;a href=&quot;https://github.com/pyokagan/git/commits/pt/builtin-pull&quot;&gt;porting git-pull from shell to C&lt;/a&gt;
and on &lt;a href=&quot;https://github.com/pyokagan/git/commits/pt/builtin-am&quot;&gt;porting git-am from shell to C too&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1435582278-31158-1-git-send-email-pclouds%40gmail.com/&quot;&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt; command&lt;/a&gt; (&lt;em&gt;written by Eric Sunshine&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The linked-worktree facility allows multiple working directories to share a
single repository, with (typically) a different branch checked out in each
worktree. Introduced more than half a year ago to provide integrated and
platform-agnostic support for similar functionality long supplied by the
Unix-only and somewhat fragile &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contrib/git-new-workdir&lt;/code&gt; script,
linked-worktrees recently migrated to the &lt;em&gt;master&lt;/em&gt; branch, but is not
yet part of any release.&lt;/p&gt;

&lt;p&gt;As originally implemented, creation of linked-worktrees was accomplished
via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout --to &amp;lt;path&amp;gt; &amp;lt;branch&amp;gt;&lt;/code&gt;, and cleanup of leftover
administrative files after manual deletion of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;path&amp;gt;&lt;/code&gt; was done with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
prune --worktrees&lt;/code&gt;. However, a recent unrelated change to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git prune&lt;/code&gt; led
to a
&lt;a href=&quot;https://public-inbox.org/git/20150623105042.GA10888%40peff.net/&quot;&gt;discussion&lt;/a&gt;
that concluded that worktree-related maintenance functionality didn’t
belong in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git prune&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Consequently, Nguyễn Thái Ngọc Duy submitted a
&lt;a href=&quot;https://public-inbox.org/git/1435582278-31158-1-git-send-email-pclouds%40gmail.com/&quot;&gt;patch&lt;/a&gt;
which introduces a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt; command, and relocates &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git prune
--worktrees&lt;/code&gt; functionality to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree prune&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Eric Sunshine then further fleshed out &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt; with a
&lt;a href=&quot;https://public-inbox.org/git/1435640202-95945-1-git-send-email-sunshine%40sunshineco.com/&quot;&gt;patch&lt;/a&gt;
which relocates &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout --to&lt;/code&gt; functionality to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree new&lt;/code&gt;.
A lengthy
&lt;a href=&quot;https://public-inbox.org/git/1435640202-95945-1-git-send-email-sunshine%40sunshineco.com/&quot;&gt;discussion&lt;/a&gt;
ensued, which eventually led to a second version, consisting of &lt;a href=&quot;https://public-inbox.org/git/1435969052-540-1-git-send-email-sunshine%40sunshineco.com/&quot;&gt;23
patches&lt;/a&gt;,
and which names the command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree add&lt;/code&gt;, rather than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree
new&lt;/code&gt;, and gives the documentation some needed attention.&lt;/p&gt;

&lt;p&gt;Aside from documentation updates, several other user-visible changes arrive
with the second version. For instance, while preparing worktree-creation
functionality for the move from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree&lt;/code&gt;, Eric
discovered and fixed a bug where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout --to &amp;lt;path&amp;gt; HEAD~1&lt;/code&gt; would
instead incorrectly checkout &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HEAD~2&lt;/code&gt; at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;path&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The second version also introduces convenience enhancements.  In
particular, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;branch&amp;gt;&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree add &amp;lt;path&amp;gt; &amp;lt;branch&amp;gt;&lt;/code&gt;, is now
optional. When omitted, a new branch is created automatically based upon
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;path&amp;gt;&lt;/code&gt;, as if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-b $(basename &amp;lt;path&amp;gt;)&lt;/code&gt; had been provided (where
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-b &amp;lt;new-branch&amp;gt;&lt;/code&gt; creates a new branch). For example, given
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree add ../hotfix&lt;/code&gt;, a new branch named &lt;em&gt;hotfix&lt;/em&gt; is created and
checked out into new worktree &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;../hotfix&lt;/code&gt;, as if
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git worktree -b hotfix ../hotfix HEAD&lt;/code&gt; had been specified.&lt;/p&gt;

&lt;p&gt;Finally, the question was
&lt;a href=&quot;https://public-inbox.org/git/CAPig%2BcT0a201MVTsvvLrndr40GsMkyvtao33Gt%3DAFhvShtr%3DKg%40mail.gmail.com/&quot;&gt;raised&lt;/a&gt;
whether &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git checkout --ignore-other-worktrees&lt;/code&gt; should be retired and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git
checkout --force&lt;/code&gt; overloaded to subsume its duties, however, Junio was &lt;a href=&quot;https://public-inbox.org/git/xmqqtwtobzn0.fsf%40gitster.dls.corp.google.com/&quot;&gt;not
thrilled&lt;/a&gt;
by the idea.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1433624551-20730-1-git-send-email-max%40max630.net/&quot;&gt;Warning when charset conversion did not happen due to iconv compiled out&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Max Kirillov proposed a patch to warn when a conversion from a
character set to another character set could not happen because iconv
has not been compiled into Git.&lt;/p&gt;

&lt;p&gt;Iconv is one of the few C libraries that people can compile either in
or out of Git. Most of the time though they choose to compile it in,
because it makes it possible to convert text, like commit messages,
between character sets, as long, of course, as the requested character
sets are installed on the system.&lt;/p&gt;

&lt;p&gt;For example when one uses &lt;a href=&quot;http://git-scm.com/docs/git-am&quot;&gt;git-am&lt;/a&gt; to
create a commit from a patch sent in an email,
&lt;a href=&quot;http://git-scm.com/docs/git-mailinfo&quot;&gt;git-mailinfo&lt;/a&gt; is called to
extract from the email the information needed to create the
commit. When doing that git-mailinfo also by default tries to use
iconv to convert the commit message, the author name and the author
email from the email encoding to UTF-8.&lt;/p&gt;

&lt;p&gt;Junio Hamano, the Git maintainer, replied to Max’s patch with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I actually am OK if the user gets exactly the same warning between
the two cases:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;
      &lt;p&gt;iconv failed to convert in the real &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reencode_string_len()&lt;/code&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;p&gt;we compiled out &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iconv()&lt;/code&gt; and real conversion was asked.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;and this patch is about the latter; I do not think it is reasonable
to give noise only for the latter but not for the former.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and later Junio explained:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;After all, if you had to convert between UTF-8 and ISO-2022-JP, the
latter of which your system does not support, whether you use
iconv-disabled build of Git or iconv-enabled build of Git, we pass
the bytestream through, right?  Your patch gives warning for the
former (which is a good starting point if we want to warn “user
expected them to be converted, we didn’t” case) but does not do
anything to the latter, even though users of the iconv-disabled
build is more likely to be aware of the potential issue (and are
likely to be willing to accept that) than the ones with
iconv-enabled build that runs on a system that cannot convert the
specific encoding.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hopefully Max will send an updated patch that will take Junio’s
suggestion into account.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/557F791D.3080003%40nextest.com/&quot;&gt;Visualizing merge conflicts after the fact&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eric Raible reported the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Upon returning from a vacation, I was looking at what people had been
up to, and discovered on merge in which a colleague had resolved a merge
incorrectly.  It turns out that he has pushed &lt;em&gt;many&lt;/em&gt; merges over the past
year which had conflicts in my code, and now I don’t trust any of them.&lt;/p&gt;

  &lt;p&gt;So naturally I want to check each of them for correctness.&lt;/p&gt;

  &lt;p&gt;I know about “git log -p -cc SHA – path”, but it really doesn’t
show just the conflicts so there’s just too much noise in that output.&lt;/p&gt;

  &lt;p&gt;I use kdiff3 to resolve conflicts, so I’m looking for a way to
visualize these already-resolved conflicts with that tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Johannes Schindelin, aka Dscho, suggested the following shell script
to recreate the merge conflicts and then compare the resulting commit
with the existing one:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;mergecommit&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# probably should verify that the working directory is clean, yadda yadda&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# recreate merge conflicts on an unnamed branch (Git speak: detached HEAD)&lt;/span&gt;
git checkout &lt;span class=&quot;nv&quot;&gt;$mergecommit&lt;/span&gt;^
git merge &lt;span class=&quot;nv&quot;&gt;$mergecommit&lt;/span&gt;^2 &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt;
die &lt;span class=&quot;s2&quot;&gt;&quot;This merge did not have any problem!&quot;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# compare to the actual resolution as per the merge commit&lt;/span&gt;
git diff &lt;span class=&quot;nv&quot;&gt;$mergecommit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Michael J Gruber replied to Dscho that, as we often get this type of
request, it might be a good idea to better support the above.&lt;/p&gt;

&lt;p&gt;Junio Hamano then pointed to
&lt;a href=&quot;https://public-inbox.org/git/cover.1409860234.git.tr%40thomasrast.ch/&quot;&gt;a patch series from last September by Thomas Rast&lt;/a&gt;
that implements a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--remerge-diff&lt;/code&gt; option for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; to show
what a conflict resolution changed. Unfortunately, though the feature
looks promising at least to Michael, it looks like some more work is
needed to properly integrate this feature into Git.&lt;/p&gt;

&lt;p&gt;Dscho, when he originally replied to Eric, also suggested the
following command to list all the merge commits created by one
colleague in the current branch:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git rev-list &lt;span class=&quot;nt&quot;&gt;--author&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My Colleague&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--parents&lt;/span&gt; HEAD |
&lt;span class=&quot;nb&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;s/ .* .*//p&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And Michael noticed that using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--merges&lt;/code&gt; option would be better
than using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sed&lt;/code&gt; to filter the merge commits. Something like the
following could do it:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git rev-list &lt;span class=&quot;nt&quot;&gt;--author&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My Colleague&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--parents&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--merges&lt;/span&gt; HEAD
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20150625131901.5b962336%40pc09.procura.nl/&quot;&gt;Several date related issues&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; supports the following date related options:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;--date-order

--author-date-order

--date=(relative|local|default|iso|iso-strict|rfc|short|raw)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But H.Merijn Brand noticed two problems with those options.&lt;/p&gt;

&lt;p&gt;First he found that dates shown by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log --date=local&lt;/code&gt; do not
respect the LC_TIME locale configuration.&lt;/p&gt;

&lt;p&gt;Jeff King, aka Peff, replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Right, we use our own routines for formatting the dates, and not
strftime. And it probably should stay that way in general, as git’s
output is often meant to be parsed.&lt;/p&gt;

  &lt;p&gt;That being said, I do not think it would be wrong to have a date-mode
that just showed strftime(“%c”), or some other arbitrary strftime
string. You could then set log.date as appropriate for human
consumption.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To that H.Merijn suggested the implementation of the following options
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=lc&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=lc_time&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=locale&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The second issue H.Merijn reported was that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; with either
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date-order&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--author-date-order&lt;/code&gt; does not order the commit by
date.&lt;/p&gt;

&lt;p&gt;To that Peff replied:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Correct. The documentation says:&lt;/p&gt;

  &lt;p&gt;–date-order
     Show no parents before all of its children are shown, but otherwise
     show commits in the commit timestamp order.&lt;/p&gt;

  &lt;p&gt;[…]&lt;/p&gt;

  &lt;p&gt;There is not a simple way to show commits in arbitrary order without
respect to parentage. I think you’d have to do something like:&lt;/p&gt;

  &lt;p&gt;git log –format=’%at %H’ |
  sort -rn |
  cut -d’ ‘ -f2 |
  git log –stdin –no-walk&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And H.Merijn said that the option names are misleading, and suggested
a gitk option for Peff’s script.&lt;/p&gt;

&lt;p&gt;It looks like no gitk option has been developed yet for the above, but
Peff sent &lt;a href=&quot;https://public-inbox.org/git/20150625165341.GA21949%40peff.net/&quot;&gt;a patch series&lt;/a&gt;
to implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=format:...&lt;/code&gt; which can produce the same output as the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=...&lt;/code&gt; options H.Merijn suggested about his first issue.&lt;/p&gt;

&lt;p&gt;As Peff’s patch series uses &lt;a href=&quot;http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html&quot;&gt;strftime()&lt;/a&gt;
to process the format passed in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=format:...&lt;/code&gt;, a discussion
about how to manage a potential strftime() failure when it is passed a
bogus format ensued.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/git-multimail/git-multimail&quot;&gt;git-multimail&lt;/a&gt; &lt;a href=&quot;https://github.com/git-multimail/git-multimail/releases/tag/1.1.0&quot;&gt;1.1.0&lt;/a&gt; and &lt;a href=&quot;https://github.com/git-multimail/git-multimail/releases/tag/1.1.1&quot;&gt;1.1.1&lt;/a&gt; were released. git-multimail is a tool to send notification emails for pushes to a git repository. It is also available in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contrib/hooks/multimail/&lt;/code&gt; directory of Git’s source tree (the new version will be distributed with Git 2.5).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/build-extra/blob/fd821c12f/installer/ReleaseNotes.md&quot;&gt;Git for Windows 2.4.4.2 Release Notes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/build-extra/blob/125ac3d8e/installer/ReleaseNotes.md&quot;&gt;Git for Windows 2.4.5.1 Release Notes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-blame.blogspot.de/2015/06/git-245.html&quot;&gt;Git 2.4.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-blame.blogspot.de/2015/06/git-25-rc0-early-preview.html&quot;&gt;Git 2.5-rc0 early preview&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02914.html&quot;&gt;jgit 4.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02915.html&quot;&gt;jgit 4.0.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.22.3&quot;&gt;libgit v.0.22.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.23.0-rc1&quot;&gt;libgit v0.23.0-rc1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.23.0-rc2&quot;&gt;libgit v0.23.0-rc2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/objective-git/releases/tag/0.8.2&quot;&gt;objective-git from 0.8.2 till 0.8.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.23.0b4&quot;&gt;rugged v0.23.0b4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vbarbaresi/MetroGit&quot;&gt;MetroGit&lt;/a&gt; - This Git repository contains the ~300 metro stations from Paris. , by Vincent Barbaresi&lt;/li&gt;
  &lt;li&gt;In &lt;a href=&quot;http://lccocc2015.sched.org/event/4c3e8531fd6cdd920807df23c5277400&quot;&gt;this presentation&lt;/a&gt; Christian Couder will use examples from the development of IPFS, a new hypermedia protocol, and Git itself to show how to take advantage of all the test related features and techniques that Git provides and develops.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-game/git-game-v2&quot;&gt;git-game-v2&lt;/a&gt; - Second version of the terminal based game that teaches users git commands&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?feature=player_detailpage&amp;amp;v=ghtpJnrdgbo#t=119&quot;&gt;Git: Just Say No&lt;/a&gt; - YouTube talk by Richard Hipp. A critical view from the competition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-blame.blogspot.de/2015/06/fun-with-git-blame-s.html&quot;&gt;Fun with “git blame -s”&lt;/a&gt;, blogpost by Junio C Hamano&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://mat-mcloughlin.net/2015/06/27/keeping-a-clean-git-history/&quot;&gt;Keeping a clean git history&lt;/a&gt;, by Mat McLoughlin&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://opensourceconnections.com/blog/2015/06/29/improving-on-git-flow-code-reviews/&quot;&gt;Improving on Git Flow: Code Reviews&lt;/a&gt;, by Doug Turnbull&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://opensource.com/business/15/7/interview-emma-jane-hogbin-westby-git&quot;&gt;What to know before transitioning your team to Git&lt;/a&gt;, an interview with Emma Jane Hogbin Westby by Rikki Endsley&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sethrobertson.github.io/GitFixUm/fixup.html&quot;&gt;A git choose-your-own-adventure!&lt;/a&gt;, by Seth Robertson&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://zachholman.com/posts/git-commit-history/&quot;&gt;Utter Disregard for Git Commit History&lt;/a&gt;, by Zach Holman&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/2019-how-to-undo-almost-anything-with-git&quot;&gt;How to undo (almost) anything with Git&lt;/a&gt;, by Joshua Wehner&lt;/li&gt;
  &lt;li&gt;Ask HN: &lt;a href=&quot;https://news.ycombinator.com/item?id=9705098&quot;&gt;How do you version control your microservices?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://robots.thoughtbot.com/autosquashing-git-commits&quot;&gt;Auto-squashing Git Commits&lt;/a&gt;, by George Brocklehurst&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codewords.recurse.com/issues/three/unpacking-git-packfiles/&quot;&gt;Unpacking Git packfiles&lt;/a&gt;, by Aditya Mukerjee (OK, maybe not &lt;em&gt;that&lt;/em&gt; light reading, this one)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@dashersw/how-to-manage-git-workflow-and-stay-sane-e32405e9dbf0&quot;&gt;How to manage Git workflow and stay sane&lt;/a&gt;, by Armağan Amcalar&lt;/li&gt;
  &lt;li&gt;GitHub takes a &lt;a href=&quot;https://github.com/blog/2023-a-closer-look-at-europe&quot;&gt;closer look at Europe&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.gitkraken.com/&quot;&gt;GitKraken&lt;/a&gt;, an “intuitive git client that doesn’t suck” (request an invite for a beta release)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://gitup.co/&quot;&gt;GitUp&lt;/a&gt;, “the Git interface you’ve been missing all your life” (pre-release available, free to download and use)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://desktop.github.com/&quot;&gt;GitHub Desktop&lt;/a&gt;, “an all new, unified GitHub desktop” (sign up for a sneak peek)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://a-sf-mirror.github.io/&quot;&gt;ASFMirror&lt;/a&gt;, a collection of, and a guide for projects that are to move from SourceForge to GitHub&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gilesbowkett/rewind&quot;&gt;Rewind&lt;/a&gt;, a small library of handy git analysis scripts roughly inspired by Gary Bernhardt’s Destroy All Software screencasts (no license stated)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jjlee/git-meld-index&quot;&gt;git-meld-index&lt;/a&gt;, run meld or any git difftool (kdiff3, diffuse, etc) to interactively stage changes (GPLv2 license)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://gogs.io/docs/intro/&quot;&gt;Gogs (Go Git Service)&lt;/a&gt;, a painless self-hosted Git Service written in Go (MIT license)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/c9s/FastCommit&quot;&gt;FastCommit&lt;/a&gt;, “integrating GIT commit flow with your own editor with ease”, focuses on the commit flow for improving the development cycle (only a README with a screenshot for now)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=9705690&quot;&gt;git inject&lt;/a&gt;, a git alias, similar to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --amend&lt;/code&gt;, but it allows you to ‘inject’ your changes into commits further back in history using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git rebase&lt;/code&gt; (no license)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://mlafeldt.github.com/sharness&quot;&gt;Sharness&lt;/a&gt;, a portable shell library, extracted from Git in 2011, to test your Unix tools like Git does (GPLv2 license)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://eclipsesource.com/blogs/2015/06/22/git-flow-top-eclipse-mars-feature-3/&quot;&gt;Git Flow support in Eclipse&lt;/a&gt;, “with Eclipse Mars, there is now support for Git Flow directly from Eclipse” (Eclipse Public License v1.0)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cloud.google.com/tools/cloud-repositories/&quot;&gt;Google Cloud Source Repositories&lt;/a&gt;, new Git repository hosting features on the Google Cloud Platform (free beta up to 500MB)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ChimeraCoder/gitgo/&quot;&gt;Gitgo&lt;/a&gt;, Go functions for interacting with Git repositories. Unlike libgit2, which is written in C, Gitgo is written in pure Go (no license)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ybur-yug/gkv&quot;&gt;Gkv&lt;/a&gt;, a simple git wrapper that allows you to use it as a kv store (WTFPL license)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/oflisback/gitlogchat&quot;&gt;gitlogchat&lt;/a&gt;, a “minimalistic git log based chat” (MIT license)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nomeata/gipeda&quot;&gt;Gipeda&lt;/a&gt;, “the Git Performance Dashboard” (MIT license)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cdunn2001/git-sym&quot;&gt;git-sym&lt;/a&gt;, “handling large files in git via symlinks” (MIT license)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/shubhamchaudhary/pulla&quot;&gt;Pulla&lt;/a&gt;, “lets you pull code into all folder containing git projects” (GPLv3 license)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;,
with help from Eric Sunshine &amp;lt;&lt;a href=&quot;mailto:sunshine@sunshineco.com&quot;&gt;sunshine@sunshineco.com&lt;/a&gt;&amp;gt;, Junio C Hamano, Matthieu Moy and Johannes Schindelin.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 4 (June 3rd, 2015)</title>
      <link>https://git.github.io/rev_news/2015/06/03/edition-4/</link>
      <pubDate>Wed, 03 Jun 2015 20:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2015/06/03/edition-4/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-4-june-3rd-2015&quot;&gt;Git Rev News: Edition 4 (June 3rd, 2015)&lt;/h2&gt;

&lt;p&gt;Welcome to the fourth edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to
subscribe, see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on &lt;a href=&quot;https://git.github.io&quot;&gt;git.github.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of May 2015.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAFY1edY3%2BWt-p2iQ5k64Fg-nMk2PmRSvhVkQSVNw94R18uPV2Q%40mail.gmail.com/&quot;&gt;submitGit for patch submission&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the &lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge 2015&lt;/a&gt; conference, during the Contributor
Summit, there were discussions about how to help people send patches
to the Git mailing list.&lt;/p&gt;

&lt;p&gt;Properly sending patches to the mailing list is not easy in the first
place because email clients these days tend to heavily reformat the
content they send. This reformatting, which may include word-wrapping
the text, making it quoted-printable, adding MIME parts or replacing
tabs with spaces, will in most cases make inlined patches sent to
the Git mailing list impossible to apply or even review.&lt;/p&gt;

&lt;p&gt;That’s why the SubmittingPatches documentation file has &lt;a href=&quot;https://github.com/git/git/blob/master/Documentation/SubmittingPatches#L137&quot;&gt;a long
explanation to help people send patches&lt;/a&gt;
which starts with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Learn to use format-patch and send-email if possible.  These commands
are optimized for the workflow of sending patches, avoiding many ways
your existing e-mail client that is optimized for “multipart/*” mime
type e-mails to corrupt and render your patches unusable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://git-scm.com/docs/git-send-email&quot;&gt;git send-email&lt;/a&gt; is indeed the
best way to send emails to the mailing list once it has been properly
configured. The problem is that it is not very easy to configure to
say the least, especially on Windows.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/CAHd499BqB_ZFKMNxSVCDTFx2Ge%3DTfCE6gexFn%2BrfRbS%2BybLybA%40mail.gmail.com/&quot;&gt;A recent discussion on the mailing
list&lt;/a&gt;
shows how difficult it can be even for developers to find a way to
properly send a patch to the mailing list. Toward the end of the
discussion, Stefan Beller summarized the discussions at &lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge
2015&lt;/a&gt; this way:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This workflow discussion was a topic at the GitMerge2015 conference,
and there are essentially 2 groups, those who know how to send email
and those who complain about it. A solution was agreed on by nearly all
of the contributors. It would be awesome to have a git-to-email proxy,
such that you could do a git push &lt;proxy&gt; master:refs/for/mailinglist
and this proxy would convert the push into sending patch series to the
mailing list. It could even convert the following discussion back into
comments (on Github?) but as a first step we&apos;d want to try out a one
way proxy.&lt;/proxy&gt;&lt;/p&gt;

  &lt;p&gt;Unfortunately nobody stepped up to actually do the work, yet :(&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A few days later, Roberto Tyley, who is the author of
&lt;a href=&quot;https://rtyley.github.io/bfg-repo-cleaner/&quot;&gt;the BFG repo-cleaner&lt;/a&gt;,
replied to Stefan’s email &lt;a href=&quot;https://public-inbox.org/git/CAFY1edY3%2BWt-p2iQ5k64Fg-nMk2PmRSvhVkQSVNw94R18uPV2Q%40mail.gmail.com/&quot;&gt;by announcing submitGit&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Hello, I’m stepping up to do that work :) Or at least, I’m implementing a
one-way GitHub PR -&amp;gt; Mailing list tool, called submitGit:&lt;/p&gt;

  &lt;p&gt;https://submitgit.herokuapp.com/&lt;/p&gt;

  &lt;p&gt;Here’s what a user does:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;create a PR on https://github.com/git/git&lt;/li&gt;
    &lt;li&gt;logs into https://submitgit.herokuapp.com/ with GitHub auth&lt;/li&gt;
    &lt;li&gt;selects their PR on https://submitgit.herokuapp.com/git/git/pulls&lt;/li&gt;
    &lt;li&gt;gets submitGit to email the PR as patches to themselves, in order to
check it looks ok&lt;/li&gt;
    &lt;li&gt;when they’re ready, get submitGit to send it to the mailing list on
their behalf&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;All discussion of the patch &lt;em&gt;stays&lt;/em&gt; on the mailing list - I’m not
attempting to change anything about the Git community process, other
than make it easier for a wider group people to submit patches to the
list.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This announcement was met with a lot of enthusiasm from the community,
especially from the &lt;a href=&quot;https://msysgit.github.io/&quot;&gt;Git for Windows&lt;/a&gt;
developers. Junio Hamano, the Git maintainer, also liked the idea and pointed out that
submitGit would be usable for an even wider audience if it only required
&lt;a href=&quot;https://public-inbox.org/git/xmqq4mn4fugi.fsf%40gitster.dls.corp.google.com/&quot;&gt;a narrower scope of GitHub authorization&lt;/a&gt;,
which &lt;a href=&quot;https://github.com/rtyley/submitgit/pull/3&quot;&gt;submitGit was updated to reflect a few days
later&lt;/a&gt; - improvements are still coming!&lt;/p&gt;

&lt;p&gt;Aspiring contributors are encouraged to try submitGit out, and provide feedback
on the mailing list or on the project’s &lt;a href=&quot;https://github.com/rtyley/submitgit/issues&quot;&gt;GitHub issues&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/vpqr3pz5y35.fsf%40anie.imag.fr/&quot;&gt;git-multimail resurrected!&lt;/a&gt; (&lt;em&gt;written by Matthieu Moy&lt;/em&gt;)&lt;/p&gt;

    &lt;p&gt;&lt;a href=&quot;https://github.com/git-multimail/git-multimail&quot;&gt;git-multimail&lt;/a&gt; got
a new co-maintainer, and is active again after a long period of
inactivity. &lt;a href=&quot;https://public-inbox.org/git/vpqr3pz5y35.fsf%40anie.imag.fr/&quot;&gt;A summary of the recent
activity&lt;/a&gt;
was posted on the Git mailing-list. A 1.1 release is expected in
June. Don’t hesitate to join the fun and help by reviewing
pull-requests or submitting new ones!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1431624219-25045-1-git-send-email-gjthill%40gmail.com/&quot;&gt;clean/smudge empty contents&lt;/a&gt; (&lt;em&gt;written by Junio C Hamano&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jim Hill noticed that Git issues an error message saying that copy_fd() was given a bad
file descriptor when clean/smudge filters is fed an file with empty contents, found that
the problem was caused because an in-memory contents that was empty was passed (by mistake)
as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt;, instead of an empty string &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;&quot;&lt;/code&gt; in this codepath, but the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt; was used as a
signal to tell Git to instead read from a given file descriptor. The fix was trivially
correct and was applied.&lt;/p&gt;

&lt;p&gt;The new test script, however, exhibited a flaky behaviour. Sometimes it passed, sometimes
it saw EPIPE. Peff observed:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Hmm, I thought we turned off SIGPIPE when writing to filters these days.
Looks like we still complain if we get EPIPE, though. I feel like it
should be the filter’s business whether it wants to consume all of the
input or not[1], and we should only be checking its exit status.&lt;/p&gt;

  &lt;p&gt;[1] As a practical example, consider a file format that has a lot of
   cruft at the end. The clean filter would want to read only to the
   start of the cruft, and then stop for reasons of efficiency.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The discussion lead to
an &lt;a href=&quot;https://public-inbox.org/git/1431624219-25045-1-git-send-email-gjthill%40gmail.com//focus=269383&quot;&gt;enhancement&lt;/a&gt;
to allow clean/smudge filters to quit before reading their input fully.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAENte7j9De5Bqu2jDcmXQAxZheSGo%2BEntzsYUaen0N7cnuiCDQ%40mail.gmail.com/&quot;&gt;git pack protocol question: sideband responses in case of errors?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Christian Halstrick said that he sometimes gets “invalid channel 101”
errors when pushing over HTTP using a JGit client.&lt;/p&gt;

&lt;p&gt;He had already debugged the problem and noticed it only appeared when
quotas on the filesystem prevented the Git server from storing a big
packfile. In these cases, the server sends back a packet line
“0013error: …” to the client; but the client, thinking the sideband
communication should still be used, interprets the “e” from “error”
as a channel number. The ascii code of “e”, which is 101 in
decimal, is the reason why the error is “invalid channel 101”.&lt;/p&gt;

&lt;p&gt;Christian asked a few questions to get more information about when
sideband communication should happen and how a server should respond
in case of error.&lt;/p&gt;

&lt;p&gt;As Shawn Pearce had developed both the Smart HTTP protocol, which is
now the most commonly used HTTP protocol by Git clients and servers,
and JGit, the implementation of Git in Java, he answered those
questions with a lot of details and further nailed down the problem:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The bug here is JGit’s ReceivePack/BaseReceivePack code not setting
up the side-band-64k early enough for this failure report to be
wrapped in it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And Shawn concluded with the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;FWIW I am glad you found this. I have been chasing this bug for
years but couldn’t really pin it down to anything. If its the “pack
won’t fit on local disk due to disk full” condition that narrows
down the offending section of JGit considerably.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/5562646A.1080608%40alum.mit.edu/&quot;&gt;“git commit –date” does not behave well?&lt;/a&gt; (&lt;em&gt;written by Junio C Hamano&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bastien Traverse was having trouble specifying the date when creating a commit
with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date&lt;/code&gt; parameter to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit&lt;/code&gt; command.  He tried various
formats, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --amend --date=&quot;2015-05-21 16∶31 +0200&quot;&lt;/code&gt; 
and got the date right but not the hours and minutes.&lt;/p&gt;

&lt;p&gt;Peff tried to reproduce it (as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--date=&amp;lt;string&amp;gt;&lt;/code&gt; parsing was recently
corrected, there was a possibility of regression), but he couldn’t. It
turns out that the input Bastien was feeding did not have the right “colon”.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Your “colon” is actually UTF-8 for code point U+2236 (“RATIO”). So git’s
date parser does not recognize it, and punts to approxidate(), which
does all manner of crazy guessing trying to figure out what you meant.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Git &lt;a href=&quot;https://public-inbox.org/git/xmqqlhgu20n4.fsf%40gitster.dls.corp.google.com/&quot;&gt;2.3.8&lt;/a&gt; (final for 2.3.x series for now)&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Git &lt;a href=&quot;http://git-blame.blogspot.com/2015/05/git-241-and-242.html&quot;&gt;2.4.1 and 2.4.2&lt;/a&gt; maintenance releases.&lt;/p&gt;

    &lt;p&gt;Together with Git 2.3.8, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git commit --date=now&lt;/code&gt; now works correctly in timezones that honor
daylight-saving-time, fixing a 
breakage &lt;a href=&quot;https://public-inbox.org/git/CA%2B55aFxvcN8Dz-t6fi6etycg%2BAiyR0crXv5AcfCdv8ji-iNBpw%40mail.gmail.com/&quot;&gt;Linus noticed&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://article.gmane.org/gmane.comp.version-control.msysgit/21601&quot;&gt;Git for Windows 2.x preview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are nearing the Git 2.x release for Windows. Project maintainer, Johannes Schindelin, wrote the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There are 32-bit and 64-bit versions both of regular installers and portable installers (“portable”
meaning that they are .7z archives that can be unpacked anywhere and run in place, without any need for
running an installer).&lt;/p&gt;

  &lt;p&gt;My projected time line is to hammer out the last kinks until Friday, and then continue after a one-week
leave, if needed, and then finally retire msysGit and start the official 2.x release cycle of Git for Windows.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Other releases:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;GitLab shipped version &lt;a href=&quot;https://about.gitlab.com/2015/05/28/gitlab-7-dot-11-dot-4-released/&quot;&gt;7.11.4&lt;/a&gt; on top of the major &lt;a href=&quot;https://about.gitlab.com/2015/05/22/gitlab-7-11-released/&quot;&gt;7.11&lt;/a&gt; release. They also announced &lt;a href=&quot;https://about.gitlab.com/2015/05/18/a-new-gitlab-logo/&quot;&gt;a new GitLab logo&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/rugged/releases/tag/v0.22.2&quot;&gt;Rugged 0.22.2&lt;/a&gt; was released, bumping their libgit2 version.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Seasoned Git contributor &lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02895.html&quot;&gt;Jonathan Nieder received full committer status on the JGit project&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub now has an official &lt;a href=&quot;http://githubengineering.com&quot;&gt;Engineering Blog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://episodes.gitminutes.com/2015/05/gitminutes-36-git-merge-2015-part-2.html&quot;&gt;GitMinutes #36: Git Merge 2015 Part
2&lt;/a&gt;,
another podcast episode from the conferencere (out of a total of 5)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Light reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://thestatsgeek.com/2015/05/16/a-statisticians-initial-experiences-of-gitgithub/&quot;&gt;A statistician’s initial experiences of Git/GitHub&lt;/a&gt;, by Jonathan Bartlett&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/&quot;&gt;The power of Git subtree&lt;/a&gt;, by our own Nicola Paolucci&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://danluu.com/monorepo/&quot;&gt;Advantages of Monolithic Version Control&lt;/a&gt;, by Dan Luu&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ericjmritz.name/2015/05/27/my-global-git-commit-template/&quot;&gt;My Global Git Commit Template&lt;/a&gt;, by Eric James Michael Ritz&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.printf.net/articles/2015/05/29/announcing-gittorrent-a-decentralized-github/&quot;&gt;gittorrent&lt;/a&gt;, a decentralized GitHub approach using the BitTorrent protocol&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://draketo.de/english/freenet/real-life-infocalypse&quot;&gt;Infocalypse&lt;/a&gt; gives you fully decentralized Github with real anonymity, using only free software&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://getmeat.io/&quot;&gt;Meat!&lt;/a&gt;, a new Git hosting platform challenger&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ingydotnet/git-hub&quot;&gt;git-hub&lt;/a&gt;, GitHub commandline interface written in bash, similar to the venerable, and identically named..&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://hub.github.com/&quot;&gt;hub&lt;/a&gt;, which is written in &lt;a href=&quot;https://github.com/github/hub/issues/475&quot;&gt;&lt;del&gt;Ruby&lt;/del&gt; Go&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/timeglass/glass&quot;&gt;Timeglass&lt;/a&gt;, automated time tracking for Git repositories&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/capr/multigit&quot;&gt;multigit&lt;/a&gt;, layered git repositories&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Darthholi/WDX_GitCommander&quot;&gt;WDX_GitCommander&lt;/a&gt;, Git plugin for Total Commander&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/afshinm/git-migrate&quot;&gt;git-migrate&lt;/a&gt;, a simple shell script to move Git repositories from one server to another&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/juanpabloaj/git-hooks&quot;&gt;git-hooks&lt;/a&gt; shows useful example hooks by language and hook name. Still quite empty, but interesting&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gitcop.com/&quot;&gt;GitCop&lt;/a&gt; offers automatic inspection of commit messages pushed to GitHub&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ccidral/gitgest&quot;&gt;Gitgest&lt;/a&gt;, a bash script that emails git commit digests in HTML format&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bitbucket.org/tpettersen/git-sham&quot;&gt;git-sham&lt;/a&gt; manipulates the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_COMMITTER_DATE&lt;/code&gt; of the most recent commit until the SHA matches a particular pattern :)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;
with help from Junio C Hamano, Matthieu Moy, Emma Jane Hogbin Westby, Roberto Tyley and Mikachu.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 3 (May 13th, 2015)</title>
      <link>https://git.github.io/rev_news/2015/05/13/edition-3/</link>
      <pubDate>Wed, 13 May 2015 20:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2015/05/13/edition-3/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-3-may-13-2015&quot;&gt;Git Rev News: Edition 3 (May 13, 2015)&lt;/h2&gt;

&lt;p&gt;Welcome to the third edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git. For our goals, the archives, the way we work, how to contribute or to
subscribe see &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;the Git Rev News page&lt;/a&gt; on https://git.github.io.&lt;/p&gt;

&lt;p&gt;This edition still covers Git’s 10th year of existence, as well as the
&lt;a href=&quot;http://git-merge.com&quot;&gt;Git Merge&lt;/a&gt; conference held on April 8th &amp;amp; 9th in Paris,
France, and also some discussions since the end of March.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://speakerdeck.com/emmajane/teaching-people-git&quot;&gt;Teaching People Git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the &lt;a href=&quot;http://git-merge.com&quot;&gt;Git Merge 2015&lt;/a&gt; Emma Jane Hogbin Westby
gave a presentation about her experience teaching Git to adults. As a
long time version control teacher, she has found that the usual ways to
teach people Git don’t work well.&lt;/p&gt;

&lt;p&gt;One of the reason is that Git is complex, so people have to learn a
lot before a simple “Hello world!” with Git makes sense. Also people
use Git to support their work, Git is not what they do. Another reason
is that it is difficult for adults to learn because of all the other
pressures which are put on them by life. Learning is a bit terrifying
for them.&lt;/p&gt;

&lt;p&gt;There are ways to make it easier for them to learn though. The theory
about adult education called
&lt;a href=&quot;http://en.wikipedia.org/wiki/Andragogy&quot;&gt;andragogy&lt;/a&gt; gives six insights
about how to motivate them. Based on these insights and other theories
like constructivism and Bloom’s taxonomy, Emma Jane developed new ways
of teaching Git and version control.&lt;/p&gt;

&lt;p&gt;She found that a good way is to start by trying to solve the
learner’s own real problems using ideas, not Git commands or tools
first. As a lot of problems around version control are social
anyway, it is useful to teach teamwork first.&lt;/p&gt;

&lt;p&gt;So she starts by asking people to describe their role in the
organisation, who they are working with and how, what are their tasks,
their workflows, how they manage branches, what are their tools,
infrastructure and constrains. This can be done using pens, papers and
colors.&lt;/p&gt;

&lt;p&gt;When people have finished documenting everything, which is anyway a
good thing, then Git commands can be introduced in the context in
which they are useful. For example as people are drawing boxes and
arrows on diagrams, they can be taught the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt;
and other Git commands that can be associated with the code sharing
arrows.&lt;/p&gt;

&lt;p&gt;Teaching this way makes people ‘build’ their knowledge, talk to each
other about their workflows and visually document their use of
Git.&lt;/p&gt;

&lt;p&gt;This whole process makes Git more accessible and friendly, which is
Emma Jane’s goal.&lt;/p&gt;

&lt;p&gt;She shares this goal in articles, like
&lt;a href=&quot;http://24ways.org/2013/git-for-grownups/&quot;&gt;this one which is an article version of her talk&lt;/a&gt;, in
videos, blog posts and other materials available from her
&lt;a href=&quot;http://gitforteams.com/&quot;&gt;Git for Teams web site&lt;/a&gt; or her
&lt;a href=&quot;https://github.com/emmajane/gitforteams&quot;&gt;gitforteams GitHub repo&lt;/a&gt;, and also in an
&lt;a href=&quot;http://gitforteams.com/books/&quot;&gt;upcoming Git for Teams of One or More book&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://article.gmane.org/gmane.comp.version-control.git/267077&quot;&gt;Git + Software Freedom Conservancy Overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the Contributor Summit that was part of the &lt;a href=&quot;http://git-merge.com&quot;&gt;Git Merge 2015&lt;/a&gt;,
Jeff King, aka Peff, gave a presentation about the status of Git as a
&lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Software Freedom Conservancy (SFC)&lt;/a&gt; project.&lt;/p&gt;

&lt;p&gt;Git is a &lt;a href=&quot;https://public-inbox.org/git/20101022183027.GA12124%40sigill.intra.peff.net/&quot;&gt;member project of the SFC since 2010&lt;/a&gt;.
This gives some legal status to “The Git Project” and makes it possible for it
to handle money (around $19,000), hold domain names (git-scm.com, git-scm.org) and
&lt;a href=&quot;https://git-scm.com/trademark&quot;&gt;the “Git” trademark&lt;/a&gt;, and own a Mac!&lt;/p&gt;

&lt;p&gt;The decisions related to those assets and the project itself are
made by agreement of the benevolent-committee-for-life, made of Junio
Hamano, Jeff King and Shawn Pearce. The committee is limited because the
Project does not own any copyright on the code and has no power
over the technical side of the project. Also the decisions must
support FLOSS aspects of the project.&lt;/p&gt;

&lt;p&gt;Ideas about how to use the assets or make changes to the project
should be discussed on the list because the committee wants to represent
the will of the community. That’s why after the Contributor Summit Peff
posted the source code of his slides on the list, asking for suggestions
about what to do, like he did after his presentation at the Summit.&lt;/p&gt;

&lt;p&gt;One question is: what should the project do with its money? The money
comes from donations on the web site, the Google Summer of Code (GSoC),
Amazon affiliate links and book royalties. Some of this money goes to
helping developers travel to the GSoC mentor summit, and a few other
things.&lt;/p&gt;

&lt;p&gt;Peff talked a bit about what he calls “half baked ideas” he has to
spend the money, like participating in the
&lt;a href=&quot;https://www.gnome.org/outreachy/&quot;&gt;Outreach Program for Women, now known as Outreachy&lt;/a&gt;
or giving it to the SFC or other organisations.&lt;/p&gt;

&lt;p&gt;At the Summit after Peff’s presentation, Git developers mostly talked about
how to make it possible for companies to fund developers working on Git,
and since the Summit, there has not been much discussion on the mailing list
about possible changes to the current situation.&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/55463094.9040204%40gmail.com/&quot;&gt;“cat-file –allow-unknown-type”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Karthik Nayak, a Google Summer of Code student, has been working for
some months on developing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--allow-unknown-type&lt;/code&gt; option for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git cat-file&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;He has been helped by Eric Sunshine, Ramsay Jones, Phil Hord, Charles Bailey, David Turner, Duy Nguyen,
Jeff King and Junio Hamano, and, along the development, improving the test script led
to a &lt;a href=&quot;https://public-inbox.org/git/1430724315-524-1-git-send-email-sunshine%40sunshineco.com/&quot;&gt;discovery and fix of a bug&lt;/a&gt;
in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hash-object --literally&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The 10th iteration of his patch series was merged to the ‘next’ branch,
so the new option will probably appear in the next git release.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/cover.1430770308.git.sebastien.guimmara%40gmail.com/&quot;&gt;“git help” reorganisation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sébastien Guimmara started working on improving the output of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git help&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The current output lists “the most commonly used git commands” in
alphabetical order. For a long time people have been saying that it is
probably not the best way to help users find the git command they
need, and that it would be better to group commands by topic. So
Sébastien’s work is very welcome.&lt;/p&gt;

&lt;p&gt;Unfortunately git developers can have different views on how to group
commands together. So it can be difficult for them to agree on such
kind of changes. Long discussions because of small personal
preferences - we call that bikeshedding - can sometimes go on for a
while.&lt;/p&gt;

&lt;p&gt;In the case of Sébastien’s patch series, many developers helped or got
involved in the discussions: Eric Sunshine, Junio Hamano, Stefan
Beller, Matthieu Moy, Johannes Schindelin, Johannes Sixt. Emma Jane Hogbin Westby
also &lt;a href=&quot;https://public-inbox.org/git/cover.1430770308.git.sebastien.guimmara%40gmail.com/&quot;&gt;weighed in&lt;/a&gt;
with her experience in teaching Git to people, which is a valuable
piece of input.&lt;/p&gt;

&lt;p&gt;We will see how it goes and if some improvements are merged.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/551D99B9.7040200%40ubuntu.com/&quot;&gt;gitk won’t show notes?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Phillip Susi had trouble getting gitk to show notes. Michael J. Gruber
tried to help him, but it didn’t work when adding a note while gitk is
running even when using F5 or Shift-F5 that should refresh the
display. Michael found that:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Apparently, gitk rereads the refs but not commits it has read already -
and the commit reading includes the notes lookup.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and decided to “cc the master”. The master is Paulus aka Paul
Mackerras who created gitk ten years ago and has been maintaining it
since that time.&lt;/p&gt;

&lt;p&gt;Paul agreed that indeed works need to be done to fix this problem. He
asked if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git notes list&lt;/code&gt; is the best way to find out all the current
notes, and Johan Herland who developed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git notes&lt;/code&gt; answered yes.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20150330230459.GA13927%40kitenet.net/&quot;&gt;git ls-files wildcard behavior considered harmful&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Joey Hess who is developing &lt;a href=&quot;https://git-annex.branchable.com/&quot;&gt;git-annex&lt;/a&gt; was surprised by how
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git ls-files&lt;/code&gt; expands wildcard characters like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*[]&lt;/code&gt; and the fact that escaping these characters
using a backslash character &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\&lt;/code&gt; makes it impossible to only list files in a directory:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;While normally ls-files would recurse, slash-escaped wildcard characters in the
directory name prevent recursion.

joey@darkstar:~/tmp/aaa&amp;gt;git ls-files &apos;foo[d]&apos;
foo[d]/subfile
food
joey@darkstar:~/tmp/aaa&amp;gt;git ls-files &apos;foo\[d\]&apos;
joey@darkstar:~/tmp/aaa&amp;gt;

The above example shows a case where it&apos;s impossible to get ls-files
to only list files in a directory and not other files that match the
wildcard. This seems like it must be a bug, and it means it&apos;s impossible
to reliably work around the wildcard expansion behavior.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Duy Nguyen, Jeff King and Jonathan Nieder replied that there are ways
to tell Git to interpret no character as a wildcard. The
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--literal-pathspecs&lt;/code&gt; option and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIT_LITERAL_PATHSPECS&lt;/code&gt;
environment variable have been created especially for this purpose and
it is a good idea to use them in script or tools, like GitHub is doing
on their servers.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAK4aQQJ9yT8%2BQ9jPQ78cauhyPj3j5WmpgrQJ5%3DcA-ECjaWn8BQ%40mail.gmail.com/&quot;&gt;No longer builds with NO_IPV6?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eduardo Espejo found that Git does not compile anymore when using the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_IPV6&lt;/code&gt; configuration switch. And it is not the first time that
&lt;a href=&quot;https://public-inbox.org/git/20060928184814.GA4294%40steel.home/&quot;&gt;someone finds out that Git such a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_IPV6&lt;/code&gt; breakage&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This time Junio Hamano, the Git maintainer, fixed the breakage in
“daemon.c”, but more importantly found that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_CURL&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NO_EXPAT&lt;/code&gt;
configurations did not to pass the test suite.
So helped by Jeff King &lt;a href=&quot;https://public-inbox.org/git/xmqq6185d4o1.fsf%40gitster.dls.corp.google.com/&quot;&gt;he quickly fixed that too&lt;/a&gt;.
And now he has a nightly cron job to try building
and testing a few selected configurations.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://article.gmane.org/gmane.linux.kernel/1941812&quot;&gt;Git v2.4.0&lt;/a&gt;, April 30th&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;The latest feature release Git v2.4.0 is now available at the
usual places.  It is comprised of 426 non-merge commits since
v2.3.0, contributed by 76 people, 25 of which are new faces.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can find more information about this release down in the Media section of the newsletter.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://groups.google.com/d/msg/repo-discuss/hPbetnfBkm4/wycZSSFdAswJ&quot;&gt;Gerrit 2.11&lt;/a&gt;, April 17th&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Includes a range of new features, like inline editing in the browser, and many improvements in the change screen UI&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/2015/04/22/gitlab-7-10-released/&quot;&gt;GitLab 7.10&lt;/a&gt;, April 22nd&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Besides bug fixes and performance improvements, you can now import your code from Google Code, quickly invite your colleagues and friends to GitLab and set default Git Hooks for everyone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/objective-git/releases/tag/0.8.1&quot;&gt;objective-git 0.8.1&lt;/a&gt;, April 23rd&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tj/git-extras/releases/tag/3.0.0&quot;&gt;git-extras 3.0.0&lt;/a&gt;, April 27th&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.eclipse.org/mhonarc/lists/egit-dev/msg03865.html&quot;&gt;JGit and EGit 3.7.1&lt;/a&gt;, April 27th&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.4.0&quot;&gt;nodegit v0.4.0&lt;/a&gt;, May 7th&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;h3 id=&quot;job-offer&quot;&gt;Job Offer&lt;/h3&gt;

&lt;p&gt;Booking.com is willing to pay a Git developer on a contract basis to
work on Git scalability issues. If you are interested please contact
Ævar Arnfjörð Bjarmason &amp;lt;&lt;a href=&quot;mailto:avarab@gmail.com&quot;&gt;avarab@gmail.com&lt;/a&gt;&amp;gt;.&lt;/p&gt;

&lt;h3 id=&quot;event&quot;&gt;Event&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://public-inbox.org/git/vpqoam9mjuo.fsf%40anie.imag.fr/&quot;&gt;GSoC 2015: 2 accepted proposals&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For a long time Git has been participating in &lt;a href=&quot;http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/about_page&quot;&gt;the Google Summer of Code&lt;/a&gt;.
This summer two students, Paul Tan and Karthik Nayak, mentored by four experienced Git developers, Johannes Schindelin, Stefan Beller, Matthieu Moy and Christian Couder, will work on improving Git and will receive a stipend from Google.&lt;/p&gt;

&lt;h3 id=&quot;media&quot;&gt;Media&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Related to Git 2.4&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/639582/?&quot;&gt;What’s coming in Git 2.4.0&lt;/a&gt;, by Nathan Willis at LWN.net&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/blog/1994-git-2-4-atomic-pushes-push-to-deploy-and-more&quot;&gt;Git 2.4 — atomic pushes, push to deploy, and more&lt;/a&gt;, a great explanation by GitHub’s Michael Haggerty&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In the aftermath of Git-Merge 2015&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PL0lo9MOBetEFDjSJ-QTlgsBEHpd6XnaA-&quot;&gt;The recorded talks from Git Merge&lt;/a&gt; are now available online&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://netguru.co/blog/git-merge-2015-review&quot;&gt;Git Merge 2015 Reviewed&lt;/a&gt;, by Jakub Naliwajek at netguru&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://episodes.gitminutes.com/2015/05/gitminutes-35-git-merge-2015-part-1.html&quot;&gt;GitMinutes #35: Git Merge 2015 Part 1&lt;/a&gt;, the first of five podcast episodes from Git-Merge&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.atlassian.com/blog/2015/04/git-merge-2015-wrap/&quot;&gt;Notes from Git Contributor Summit (Git Merge 2015)&lt;/a&gt; from our own editor Nicola (at Atlassian)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Various&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-blame.blogspot.com/2015/04/fun-with-failing-cherry-pick.html&quot;&gt;Fun with failing cherry-pick&lt;/a&gt;, by Git’s maintainer, Junio C Hamano&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/pull/2997&quot;&gt;libgit2 got rid of the OpenSSL binding on OSX&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://changelog.com/git-resources-for-visual-learners/&quot;&gt;Git Resources for Visual Learners&lt;/a&gt;, neat collection from TheChangelog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.atlassian.com/blog/2015/04/force-with-lease/&quot;&gt;–force considered harmful; understanding git’s –force-with-lease&lt;/a&gt; by Steve Smith at Atlassian&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.linux.com/news/featured-blogs/200-libby-clark/825032-7-pro-tips-for-using-git-from-fedora-developers&quot;&gt;7 Pro Tips For Using Git from Fedora Developers&lt;/a&gt;, by Libby Clark at linux.com&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://thorehusfeldt.net/2015/04/03/conflicting-git-merge-runs-for-several-minutes-35/&quot;&gt;A cryptic crossword themed around Git&lt;/a&gt;, by Thore Husfeld&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://depressiverobot.com/2015/05/08/stash-aware.html&quot;&gt;Be aware of your git stashes&lt;/a&gt;, pro-tip by Marvin Frommhold&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://godd2.blogspot.de/2015/05/git-commits-are-not-transactions.html&quot;&gt;Git Commits are Not Transactions&lt;/a&gt;, blogpost by Dominic Muller&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.atlassian.com/blog/2015/05/git-horror-story-loose-nonces/&quot;&gt;A git horror story: faking provenance with a loose nonce&lt;/a&gt;, by Tim Pettersen at Atlassian&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://mcandre.gitbooks.io/elements-of-commit-style/&quot;&gt;The Elements of Commit Style&lt;/a&gt;, a tiny “Git-book” for improving commit style, by Andrew Pennebaker&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.deveo.com/protected-branches-in-devo-2-9-0/&quot;&gt;Protected branches in Deveo 2.9.0&lt;/a&gt;, from Ilmari Kontulainen on their company blog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git tools and sites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://gitenterprise.me/2015/04/30/no-more-tears-with-gerrit-code-review-thanks-to-docker/&quot;&gt;Gerrit is now available in Docker containers&lt;/a&gt; from GerritForge/GitEnterprise&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ricardofilipe.com/projects/firstaidgit/&quot;&gt;first aid git&lt;/a&gt;, a searchable collection of the most frequently asked Git questions&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.git-legit.org/&quot;&gt;Legit&lt;/a&gt; is a complementary command-line interface for Git, optimized for workflow simplicity.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jonathanewerner/multi-commit&quot;&gt;multi-commit&lt;/a&gt;, a python tool for staging hunks and assigning them to multiple future commits&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/stevenjack/cig&quot;&gt;cig&lt;/a&gt; checks all your git repos, reporting if any of them have changes or need to be pushed&lt;/li&gt;
  &lt;li&gt;Similarly: &lt;a href=&quot;https://github.com/ga7g08/CheckGit&quot;&gt;checkgit&lt;/a&gt; is a gtk-based script to provide visual status of Git repositories&lt;/li&gt;
  &lt;li&gt;Refer to a future commit sha1 in your commit message using &lt;a href=&quot;https://github.com/hundt/git-time-travel&quot;&gt;git-time-travel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.launchpad.net/general/git-code-hosting-beta&quot;&gt;The Ubuntu-related forge Launchpad is now offering Git hosting&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://visualstudio.github.com/&quot;&gt;GitHub Extension for Visual Studio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;,
Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt;
with help from Junio Hamano, Emma Jane Hogbin Westby and Jeff King.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 2 (April 15th, 2015)</title>
      <link>https://git.github.io/rev_news/2015/04/05/edition-2/</link>
      <pubDate>Sun, 05 Apr 2015 20:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2015/04/05/edition-2/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-2-april-15-2015-10-years-of-git--git-merge-2015&quot;&gt;Git Rev News: Edition 2 (April 15, 2015), 10 years of Git &amp;amp; Git Merge 2015!&lt;/h2&gt;

&lt;p&gt;Welcome to the second edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git, written collaboratively
on &lt;a href=&quot;https://github.com/git/git.github.io&quot;&gt;GitHub&lt;/a&gt; by volunteers.&lt;/p&gt;

&lt;p&gt;Our goal is to aggregate and communicate
some of the activities on the &lt;a href=&quot;mailto:git@vger.kernel.org&quot;&gt;Git mailing list&lt;/a&gt;
in a format that the wider tech community can follow
and understand. In addition, we’ll link to some of the interesting Git-related
articles, tools and projects we come across.&lt;/p&gt;

&lt;p&gt;This special edition covers Git’s 10th year of existence, as well as the
&lt;a href=&quot;http://git-merge.com&quot;&gt;Git Merge&lt;/a&gt; conference held on April 8th &amp;amp; 9th in Paris,
France. Git developers and users alike came together to celebrate the
anniversary, and to discuss the current challenges of using and scaling Git.&lt;/p&gt;

&lt;p&gt;You can contribute to the upcoming edition by sending &lt;a href=&quot;https://github.com/git/git.github.io/pulls&quot;&gt;pull
requests&lt;/a&gt; or opening
&lt;a href=&quot;https://github.com/git/git.github.io/issues&quot;&gt;issues&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/1sc1xsG9vrRahcckD8WwYeK355SvQH7NSchKH07icJtk/pub&quot;&gt;10 years of fun&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the Git Merge 2015, Junio Hamano started off the Contributor Summit with a
presentation titled “10 years of fun with Git”, saying that he wanted to
take the opportunity of the 10th anniversary to thank the contributors.&lt;/p&gt;

&lt;p&gt;He showed how the first initial revision of Git - created on the 7th of April
2005 by Linus - looked like, and compared it to a recent revision. Although the
size of the first implementation was only about 0.2% of its current size, the
initial code was already functional.&lt;/p&gt;

&lt;p&gt;The interesting question that followed was “Who made today’s Git?” and Junio
went through multiple Git queries offering different answers for this.&lt;/p&gt;

&lt;p&gt;As an example, to get a commit count sorted by author, excluding merge
commits, one can use:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git shortlog --no-merges -n -s v2.4.0-rc0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With the results of each query, Junio gave insights about how we
can interpret the results, mentioned the caveats that might apply, and he
also took time to thank the people who appeared in these results.&lt;/p&gt;

&lt;p&gt;Towards the end of the presentation he also mentioned the people who
don’t appear in the results: bug reporters, feature wishers,
reviewers and mentors, alternative implementors and porters, trainers
and evangelists. He assigned to this very news-letter the huge task of
talking about, and thanking them all ;-)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://git-lfs.github.com/&quot;&gt;Git Large File Storage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the Git Merge 2015, &lt;a href=&quot;https://github.com/technoweenie&quot;&gt;Rick Olson&lt;/a&gt;, a
developer working for GitHub, gave a presentation about Git Large File
Storage (Git LFS), a new git extension for managing big files.&lt;/p&gt;

&lt;p&gt;On the Git Merge web site, the name of the presentation was “Building a
Git Extension with First Principles”, probably because GitHub didn’t
want to announce Git LFS in the time before the conference. In fact, it
was announced &lt;a href=&quot;https://github.com/blog/1986-announcing-git-large-file-storage-lfs&quot;&gt;first on The GitHub Blog&lt;/a&gt;
the day before Rick’s presentation.&lt;/p&gt;

&lt;p&gt;Rick started off by explaining the reasons why such an extension was
needed, namely that Git “starts to suck with large binary file
objects”. For example it takes longer and longer to clone a repo that
has more and more of such objects.&lt;/p&gt;

&lt;p&gt;Then he told that GitHub did some user experience research with a
diverse team of users having this problem. They also experimented with
existing solutions like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git media&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git annex&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Rick then detailed &lt;a href=&quot;https://github.com/github/git-lfs/blob/master/docs/spec.md&quot;&gt;the solution that was implemented&lt;/a&gt;
using the Go language, and how it can be used. For example:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ git lfs init
$ git lfs track &quot;*.zip&quot;
$ git add otherfile.zip
$ git commit -m &quot;add otherfile.zip&quot;
$ git push origin
Uploading somefile.zip
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Remote configuration, the server side, the Git LFS API and authentication were
also covered. And in the end Rick talked about some ideas for improvements.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/fezzik02/git-large-object-binaries-concepts-and-directions&quot;&gt;Git Large Object Research&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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 &lt;a href=&quot;https://twitter.com/bitbucketeer&quot;&gt;John Garcia&lt;/a&gt; from Atlassian also presented some research and a prototype tool to handle large binary files.&lt;/p&gt;

&lt;p&gt;The tool hasn’t been released yet but showed interesting features like
&lt;a href=&quot;https://twitter.com/tarkasteve/status/586180588245229569&quot;&gt;progressive history
retention&lt;/a&gt;, file
locking, abstracted support for “dumb” storage back ends (like sshfs, samba,
NFS, Amazon S3 …) and chunking for resumable downloads.&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20150405010611.GA15901%40peff.net/&quot;&gt;Speeding up strbuf_getwholeline()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jeff King, alias Peff, posted a patch series to address speed
regressions when accessing the packed-refs file. This lead to
discussions about ways to speed up reading lines in a file.&lt;/p&gt;

&lt;p&gt;The packed-ref file has been created a long time ago to speed up
dealing with refs. The original way to store refs, which is called the
“loose ref” format uses one file per ref to store its content and is
used by git for newly created refs. But when the number of refs increases, it
becomes much faster to have as much information as possible in a
single file. That’s the purpose of the packed-ref file.&lt;/p&gt;

&lt;p&gt;Peff discovered that one of his own commit that switched from fgets()
to strbuf_getwholeline() to read the packed-ref file was in part
responsible for a big slowdown.&lt;/p&gt;

&lt;p&gt;strbuf_getwholeline() is part of the Git strbuf API that is used for a
lot of string related functions. And strbuf_getwholeline() used the
getc() function to get each character one by one until the end of each
line, like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;while ((ch = getc(fp)) != EOF) {
	...
	if (ch == &apos;\n&apos;)
		break;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But it appears that it isn’t very efficient. It is also problematic to
use fgets() inside strbuf_getwholeline() as strbuf_getwholeline() is
used in some parts of the Git codebase to read lines that can contain
the NUL character and fgets() would not read after the NUL. (And yeah
working around that is not easy either.)&lt;/p&gt;

&lt;p&gt;So Peff came up with the following explanation and solution to the
problem:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;strbuf_getwholeline calls getc in a tight loop. On modern
libc implementations, the stdio code locks the handle for
every operation, which means we are paying a significant
overhead. We can get around this by locking the handle for
the whole loop and using the unlocked variant.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;His patch does basically:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;+	flockfile(fp);
+	while ((ch = getc_unlocked(fp)) != EOF) {
		...
 		if (ch == &apos;\n&apos;)
 			break;
 	}
+	funlockfile(fp);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Duy Nguyen suggested instead to avoid any FILE* interface and either
mmap the entire file, or read (with buffering) from a file
descriptor, as Git already does to read the index-pack file. But Peff
said that it would be very inefficient too, and that there are no good
NUL safe function to read from a file descriptor.&lt;/p&gt;

&lt;p&gt;Junio wondered if it would be worth it to have callers that need to
handle NUL characters pass a flag, so that the default implementation
would still be fast.&lt;/p&gt;

&lt;p&gt;Eventually Rasmus Villemoes suggested using
&lt;a href=&quot;http://pubs.opengroup.org/stage7tc1/functions/getdelim.html&quot;&gt;getdelim()&lt;/a&gt;
when POSIX 2008 is supported and so far this looks like a workable
solution.&lt;/p&gt;

&lt;p&gt;Anyway it is interesting to see that on the Git mailing list as well as
at the Git Merge conference a lot of great developers and companies are
working on making Git fast for big repositories.&lt;/p&gt;

&lt;h2 id=&quot;releases&quot;&gt;Releases&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-blame.blogspot.de/2015/04/first-release-candidate-for-git-24.html&quot;&gt;First release candidate for Git 2.4&lt;/a&gt;,
April 2nd.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Paraphrasing Junio, please test it thoroughly so that we can ship a successful v2.4 final at
the end of the month without any regressions with respect to v2.3.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/git-for-windows/git/releases/tag/v2.3.5.windows.8&quot;&gt;Git 2.3.5 for Windows Release Candidate 8&lt;/a&gt;,
April 10th.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/d/msg/msysgit/T2CgyhMA6fw/rXpofh9waA4J&quot;&gt;More about Git 2.x for Windows release candidates here&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;During the really exciting Git Merge conference, the Git for Windows
developers had the opportunity to meet and we managed to whip out a &lt;em&gt;really&lt;/em&gt;
early beta of the upcoming Git for Windows 2.x series.
Please keep in mind that we not only changed our entire development
environment, but that this change also affects end user installations quite a
bit […]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Brendan Forster put together this &lt;a href=&quot;https://gist.github.com/shiftkey/add6975be2687d8731ae&quot;&gt;Beta Testers Guide&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/libgit2/libgit2/releases/tag/v0.22.2&quot;&gt;libgit2 v0.22.2 Maintenance Release&lt;/a&gt;,
March 24th.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;The following fixes have been backported to this maintenance release. […]
All users of the library are encouraged to update.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAFuPQ1%2B5Cpb5VYPdF3E0i3Fp%2B%2BMRs6DwPnkJZ171MHNzrq5hTQ%40mail.gmail.com/&quot;&gt;tig-2.1.1&lt;/a&gt;, April 9th&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Finally, files (or blobs) can now be searched using the new GitHub-inspired
&lt;a href=&quot;https://asciinema.org/a/18525&quot;&gt;file finder&lt;/a&gt; (press ‘f’ to launch it).﻿&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://about.gitlab.com/2015/04/08/gitlab-7-9-3-released/&quot;&gt;GitLab 7.9.3 CE, EE and GitLab CI 7.9.3&lt;/a&gt;,
April 8th.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://lists.sfconservancy.org/pipermail/kallithea-general/2015q2/000579.html&quot;&gt;Kallithea 0.2&lt;/a&gt;, April 10th&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Kallithea 0.2 has been released. Kallithea is a GPLv3 source code management
software for web-based hosting of Mercurial and Git repositories.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;other-news&quot;&gt;Other News&lt;/h2&gt;

&lt;h3 id=&quot;events&quot;&gt;Events&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge 2015&lt;/a&gt;, The Conference for the Git
Community, took place on April 8th &amp;amp; 9th in Paris, France. It was presented by
GitHub with sponsorship from Microsoft and Atlassian. Scott Chacon (GitHub),
wearing a beautiful suit, was the master of ceremony on the 9th of April, while
Chris Kelly and other GitHub people had organized everything.
Thanks to them and the sponsors for this great time!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;media&quot;&gt;Media&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Ten years ago, &lt;a href=&quot;https://news.ycombinator.com/item?id=9264088&quot;&gt;Linus’ first ever mention of what would become Git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;linux.com’s Linus interview, on &lt;a href=&quot;http://www.linux.com/news/featured-blogs/185-jennifer-cloer/821541-10-years-of-git-an-interview-with-git-creator-linus-torvalds&quot;&gt;10 years of Git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Continuing their celebration, a whole series of Git-related interviews have
been published on linux.com:
    &lt;ul&gt;
      &lt;li&gt;Wine Maintainer &lt;a href=&quot;https://www.linux.com/news/featured-blogs/200-libby-clark/822789-git-success-stories-and-tips-from-wine-maintainer-alexandre-julliard&quot;&gt;Alexandre Julliard&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Puppet Labs’ &lt;a href=&quot;https://www.linux.com/news/featured-blogs/200-libby-clark/822555-git-success-stories-and-tips-from-puppet-labs-michael-stahnke&quot;&gt;Michael Stahnke&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Tor Chief Architect &lt;a href=&quot;https://www.linux.com/news/featured-blogs/200-libby-clark/822528-git-success-stories-and-tips-from-tors-chief-architect-nick-mathewson&quot;&gt;Nick Mathewson&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Drupal Core Committer &lt;a href=&quot;https://www.linux.com/news/featured-blogs/200-libby-clark/822227-git-success-stories-and-tips-from-drupal-core-committer-angie-byron&quot;&gt;Angie Byron&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Qt Maintainer &lt;a href=&quot;https://www.linux.com/news/featured-blogs/200-libby-clark/821948-git-success-stories-and-tips-from-qt-maintainer-thiago-macieira&quot;&gt;Thiago Macieira&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;KVM Maintainer &lt;a href=&quot;https://www.linux.com/news/featured-blogs/200-libby-clark/821899-git-success-stories-and-tips-from-kvm-maintainer-paolo-bonzini&quot;&gt;Paolo Bonzini&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Ceph Creator &lt;a href=&quot;https://www.linux.com/news/featured-blogs/200-libby-clark/823164-git-success-stories-and-tips-from-ceph-creator-sage-weil&quot;&gt;Sage Weil&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Junio warmed up to Git Merge by actively blogging the last month:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://git-blame.blogspot.de/2015/03/fun-with-non-fast-forward.html&quot;&gt;Fun with Non-Fast-Forward&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://git-blame.blogspot.de/2015/03/git-24-will-hopefully-be-product.html&quot;&gt;Git 2.4 will hopefully be a “product quality” release&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://git-blame.blogspot.de/2015/03/stats-from-recent-git-releases.html&quot;&gt;Stats from recent Git releases&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://git-blame.blogspot.de/2015/03/git-rev-news.html&quot;&gt;His thoughts on this very newsletter&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Atlassian noted the 10 year anniversary by producing &lt;a href=&quot;https://www.atlassian.com/git/articles/10-years-of-git/&quot;&gt;this visualization of
Git’s history&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;With Git Merge 2015 taking place in Paris, coincidentally the &lt;a href=&quot;https://github.com/steeve/france.code-civil&quot;&gt;French Civil
Code is now on GitHub&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Øyvind A. Holm has generated statistics on the &lt;a href=&quot;https://github.com/sunny256/openhub-repositories&quot;&gt;relative growth of Git repos
vs. other source control systems&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;As Google Code shuts down, the &lt;a href=&quot;https://news.ycombinator.com/item?id=9263193&quot;&gt;Vim project decides moving to Git/GitHub
&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rawgit.com/pastjean/git-cheat-sheet/master/git-cheat-sheet.svg&quot;&gt;Nice, SVG-based Git cheat sheet
&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Mary Rose Cook has written an essay on &lt;a href=&quot;http://maryrosecook.com/blog/post/git-from-the-inside-out&quot;&gt;Git from the inside out
&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A similar article from last year: &lt;a href=&quot;https://jwiegley.github.io/git-from-the-bottom-up/&quot;&gt;Git from the Bottom Up
&lt;/a&gt;, by John Wiegley&lt;/li&gt;
  &lt;li&gt;A &lt;a href=&quot;https://github.com/agis-/git-style-guide&quot;&gt;Git Style Guide&lt;/a&gt; by Agis
Anastasopoulos&lt;/li&gt;
  &lt;li&gt;Some &lt;a href=&quot;https://news.ycombinator.com/item?id=9343021&quot;&gt;hefty discussion is going on regarding the new Git Large File Storage&lt;/a&gt;, announced &lt;a href=&quot;https://github.com/blog/1986-announcing-git-large-file-storage-lfs&quot;&gt;by GitHub
  &lt;/a&gt; during
  &lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge 2015&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt;, Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; and Nicola Paolucci &amp;lt;&lt;a href=&quot;mailto:npaolucci@atlassian.com&quot;&gt;npaolucci@atlassian.com&lt;/a&gt;&amp;gt; with help from Junio Hamano, Emma Jane Hogbin Westby, Andrew Ardill, Rick Olson, Johannes Schindelin and Jeff King.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git Rev News Edition 1 (March 25th, 2015)</title>
      <link>https://git.github.io/rev_news/2015/03/25/edition-1/</link>
      <pubDate>Wed, 25 Mar 2015 20:06:51 +0000</pubDate>
      <dc:creator>chriscool</dc:creator>
      
      
      <category>news</category>
      
      <guid isPermaLink="true">https://git.github.io/rev_news/2015/03/25/edition-1/</guid>
      <description>&lt;h2 id=&quot;git-rev-news-edition-1-march-25th-2015&quot;&gt;Git Rev News: Edition 1 (March 25th, 2015)&lt;/h2&gt;

&lt;p&gt;Welcome to the first edition of &lt;a href=&quot;https://git.github.io/rev_news/rev_news/&quot;&gt;Git Rev News&lt;/a&gt;,
a digest of all things Git, written collaboratively 
on &lt;a href=&quot;https://github.com/git/git.github.io&quot;&gt;GitHub&lt;/a&gt; by volunteers.&lt;/p&gt;

&lt;p&gt;Our goal is to aggregate and communicate
some of the activities on the &lt;a href=&quot;mailto:git@vger.kernel.org&quot;&gt;Git mailing list&lt;/a&gt;
in a format that the wider tech community can follow
and understand. In addition, we’ll link to some of the interesting Git-related
articles, tools and projects we come across.&lt;/p&gt;

&lt;p&gt;This edition covers what happened during the month of March 2015.&lt;/p&gt;

&lt;p&gt;You can contribute to the upcoming edition by sending &lt;a href=&quot;https://github.com/git/git.github.io/pulls&quot;&gt;pull
requests&lt;/a&gt; or opening
&lt;a href=&quot;https://github.com/git/git.github.io/issues&quot;&gt;issues&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;discussions&quot;&gt;Discussions&lt;/h2&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/54FDA6B5.8050505%40drmicha.warpmail.net/&quot;&gt;Promoting Git developers&lt;/a&gt;  (&lt;em&gt;written by Junio C Hamano&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Following up to a message from David Kastrup, a discussion was initiated
by Christian Couder where Michael J Gruber noted
that there are three classes of Git developers, and it is hard for
people who are not already sponsored by corporations to work on Git
not as a hobbyist, but as a means to gain either monetarily or build
reputation.&lt;/p&gt;

&lt;p&gt;Later in the thread, Christian volunteered to start a newsletter (this
newsletter!) to summarize and publicise works by participants and
Thomas Ferris Nicolaisen, who runs a popular podcast GitMinutes,
offered to help.&lt;/p&gt;

&lt;p&gt;Also, it was decided that release notes will list new and returning
contributors and thank for their help for each release.&lt;/p&gt;

&lt;h3 id=&quot;reviews&quot;&gt;Reviews&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1426600662-32276-1-git-send-email-pyokagan%40gmail.com/&quot;&gt;make git-pull a builtin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Paul Tan, who will probably apply to be a &lt;a href=&quot;https://developers.google.com/open-source/soc/&quot;&gt;Google Summer of Code
(GSoC)&lt;/a&gt; student for
Git this year, anticipated the start of the GSoC and sent a patch to
rewrite git-pull.sh as a built-in.&lt;/p&gt;

&lt;p&gt;Indeed as stated in &lt;a href=&quot;https://git.github.io/SoC-2015-Ideas/&quot;&gt;the GSoC idea page&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Many components of Git are still in the form of shell and Perl
scripts. While this is an excellent choice as long as the
functionality is improved, it causes problems in production code – in
particular on multiple platforms, e.g. Windows (think:
POSIX-to-Windows path conversion issues).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is why the “Convert scripts to builtins” GSoC project idea is to:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;… dive into the Git source code and convert a couple of shell
and/or Perl scripts into portable and performant C code, making it a
so-called “built-in”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It appeared that two developers, Duy Nguyen and Stephen Robin, had
already worked on converting git-pull.sh into a built-in in the
past. This happens quite often, so it is a good idea before starting
to develop something in Git, to search and ask around.&lt;/p&gt;

&lt;p&gt;Johannes “Dscho” Schindelin, one of the Git for Windows developers,
thanked Paul for the very detailed and well researched comments in
his patch and commented a bit on the benefits of this kind of work:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;on Windows the runtime fell from 8m 25s to 1m 3s.&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;This is &lt;em&gt;exactly&lt;/em&gt; the type of benefit that makes this project so important! Nice one.&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;A simpler, but less perfect strategy might be to just convert the shell
scripts directly statement by statement to C, using the run_command*()
functions as Duy Nguyen[2] suggested, before changing the code to use
the internal API.&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;Yeah, the idea is to have a straight-forward strategy to convert the scripts in as efficient manner as
possible. It also makes reviewing easier if the first step is an almost one-to-one translation to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;run_command*()&lt;/code&gt;-based builtins.&lt;/p&gt;

  &lt;p&gt;Plus, it is rewarding to have concise steps that can be completed in a timely manner.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Regarding the test suite, Matthieu Moy suggested:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Ideally, I think the solution is to
improve the test suite and make it as comprehensive as possible, but
writing a comprehensive test suite may be too time consuming.&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;time-consuming, but also very beneficial since the code would end up
being better tested. For sure, a rewrite is a good way to break stuff,
but anything untested can also be broken by mistake rather easily at any
time.&lt;/p&gt;

  &lt;p&gt;I’d suggest doing a bit of manual mutation testing: take your C code,
comment-out a few lines of code, see if the tests still pass, and if
they do, add a failing test that passes again once you uncomment the
code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/1425632110-31863-1-git-send-email-dongcan.jiang%40gmail.com/&quot;&gt;Forbid “log –graph –no-walk”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dongcan Jiang, who will also probably apply to be a GSoC student for
Git this year, sent a patch to prevent &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; from being used with both
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--graph&lt;/code&gt; and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--no-walk&lt;/code&gt; option. He sent this patch because
the Git community asks potential students to work on a
&lt;a href=&quot;https://git.github.io/SoC-2015-Microprojects/&quot;&gt;microproject&lt;/a&gt; to
make sure that they can work properly with the community.&lt;/p&gt;

&lt;p&gt;Eric Sunshine made some good general suggestions that are often made
on incoming patches:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Forbid “log –graph –no-walk&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;Style: drop capitalization in the Subject: line. Also prefix with the
command or module being modified, followed by a colon. So:&lt;/p&gt;

  &lt;p&gt;log: forbid combining –graph and –no-walk&lt;/p&gt;

  &lt;p&gt;or:&lt;/p&gt;

  &lt;p&gt;revision: forbid combining –graph and –no-walk&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;Because –graph is about connected history while –no-walk is about discrete points.&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;Okay. You might also want to cite the wider discussion&lt;a href=&quot;https://public-inbox.org/git/7vvc9ylh97.fsf%40alter.siamese.dyndns.org/&quot;&gt;1&lt;/a&gt;.&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;revision.c: Judge whether –graph and –no-walk come together when running git-log.
buildin/log.c: Set git-log cmd flag.
Documentation/rev-list-options.txt: Add specification on the forbidden usage.&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;No need to repeat in prose what the patch itself states more clearly
and concisely.&lt;/p&gt;

  &lt;p&gt;Also, such a change should be accompanied by new test(s).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;René Scharfe and Junio also suggested some improvements especially in the code.&lt;/p&gt;

&lt;p&gt;Junio also explained the interesting behavior of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git show&lt;/code&gt; depending
on the arguments it is given:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When “git show” is given a range, it turns no-walk off and becomes a
command about a connected history.  Otherwise, it is a command about
discrete point(s).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/20150320100429.GA17354%40peff.net/&quot;&gt;War on broken &amp;amp;&amp;amp;-chain&lt;/a&gt; (&lt;em&gt;written by Junio C Hamano&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We often see review comments on test scripts that points out a
breakage in the &amp;amp;&amp;amp;-chain, but what does that mean?&lt;/p&gt;

&lt;p&gt;When you have a test that looks like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;test_expect_success &apos;frotz and nitfol work&apos; &apos;
	git frotz
	git nitfol
&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;the test framework will not detect even if the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;frotz&lt;/code&gt; command
exits with a non-zero error status.  A test must be written like
this instead:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;test_expect_success &apos;frotz and nitfol work&apos; &apos;
	git frotz &amp;amp;&amp;amp;
	git nitfol
&apos;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Jeff resurrected a clever idea, which was first floated by Jonathan
Nieder in October 2013, to automate detection of such an issue.  The
idea is to try running the test body with this magic string prefixed:
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(exit 117) &amp;amp;&amp;amp;&lt;/code&gt;.  If everything is properly chained together with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;&amp;amp;&lt;/code&gt;
in the test, running such a test will exit with error code 117 (and
the important assumption is that error code is unused elsewhere). If
on the other hand, if there is an breakage, the test prefixed with the
magic string would either succeed or fail with a code different from&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;His work caught many real test breakages but fortunately it was
found that no command being tested was failing ;-)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As the variety of platforms each developer has access to and the time
each developer has to test Git on them is inevitably limited, broken
&amp;amp;&amp;amp;-chains in some tests that Jeff didn’t run were expected to be
caught by others.  Torsten Bögershausen did find one in a test that
runs only on a case insensitive filesystem a few days later.&lt;/p&gt;

&lt;h3 id=&quot;support&quot;&gt;Support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/5F9B9EBF-CD4D-42A8-8A0C-9806702231A1%40icloud.com/&quot;&gt;Git with Lader logic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;People often ask the Git mailing list whether they can use Git to manage
special content. Fortunately, the list is monitored by many experts in different
domains who can often provide specific answers.&lt;/p&gt;

&lt;p&gt;This time Bharat Suvarna asked about &lt;a href=&quot;http://en.wikipedia.org/wiki/Programmable_logic_controller&quot;&gt;PLC
programs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kevin D gave the usual non-specific answer:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Although git is not very picky about the contents, it is optimized to
track text files. Things like showing diffs and merging files only works
on text files.&lt;/p&gt;

  &lt;p&gt;Git can track binary files, but there are some disadvantages:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Diff / merge doesn’t work well&lt;/li&gt;
    &lt;li&gt;Compression is often difficult, so the repository size may grow
depending on the size of the things stored&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then Randall S. Becker gave a more specific answer:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Many PLC programs either store their project code in XML, L5K or L5X (for
example), TXT, CSV, or some other text format or can import and export to
text forms. If you have a directory structure that represents your project,
and the file formats have reasonable line separators so that diffs can be
done easily, git very likely would work out for you. You do not have to have
the local .git repository in the same directory as your working area if your
tool has issues with that or .gitignore. You may want to use a GUI client to
manage your local repository and handle the commit/push/pull/merge/rebase
functions as I expect whatever PLC system you are using does not have git
built-in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Doug Kelly also gave some interesting specific information and pointed to a
web site more information.&lt;/p&gt;

&lt;p&gt;Thank you all for these helpful answers!&lt;/p&gt;

&lt;h2 id=&quot;misc-git-news&quot;&gt;Misc Git News&lt;/h2&gt;

&lt;h3 id=&quot;developers&quot;&gt;Developers&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;David Kastrup (dak at gnu.org) as of version 2.1.0 reimplemented significant
parts of “git blame” for a vast gain in performance with complex
histories and large files. As working on free software is his sole
source of income, please consider contributing to his remuneration if
you find this kind of improvements useful.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;events&quot;&gt;Events&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-merge.com/&quot;&gt;Git Merge 2015&lt;/a&gt;, The Conference for the Git
Community, will take place on April 8th &amp;amp; 9th in Paris, France, thanks
to GitHub and the sponsors. If you are a Git developer and need travel 
or other assistance to go there, please contact Peff, aka
Jeff King &amp;lt;&lt;a href=&quot;mailto:peff@peff.net&quot;&gt;peff@peff.net&lt;/a&gt;&amp;gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;releases&quot;&gt;Releases&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://permalink.gmane.org/gmane.linux.kernel/1902789&quot;&gt;Git v.2.3.2&lt;/a&gt;, March 6th.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;The latest maintenance release Git v2.3.2 is now available at
the usual places.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/CAFuPQ1%2BD3QY8MxNRX87R6-nUR9eP3JRTq_yuWfRq1upQT7iC8w%40mail.gmail.com/&quot;&gt;Commandline GUI-tool &lt;em&gt;tig&lt;/em&gt; version 2.1&lt;/a&gt;, March 11th:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;I just released version 2.1 of Tig which brings a lot of improvements to speed
up usage in large repositories such as the Linux kernel repo (see improvements
related to #310, #324, #350, and #368). Else this release brings minor
improvements across the board plus a fair amount of bug fixes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nodegit/nodegit/releases/tag/v0.3.0&quot;&gt;NodeGit 0.3.0&lt;/a&gt;, March 13th:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Updated to libgit2 v0.22.1. This release contains breaking API changes. Most 
noteworthy is the change to how certificate errors are handled during authentication.&lt;/p&gt;

  &lt;p&gt;For more details check out the change log: http://www.nodegit.org/changelog/#v0-3-0&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://permalink.gmane.org/gmane.linux.kernel/1908634&quot;&gt;Git v.2.3.3&lt;/a&gt;, March 14th:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;The latest maintenance release Git v2.3.3 is now available at
the usual places.  It is comprised of 26 non-merge commits since
v2.3.2, contributed by 11 people, 1 of which is a new contributor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://public-inbox.org/git/xmqqlhin8kh9.fsf%40gitster.dls.corp.google.com/&quot;&gt;Git v2.3.4&lt;/a&gt;, March 23rd:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;The latest maintenance release Git v2.3.4 is now available at the
usual places.  It is comprised of 22 non-merge commits since v2.3.3,
contributed by 9 people, 1 of which is a new face.  All these fixes
have already been in the ‘master’ branch for some time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;from-outside-the-list&quot;&gt;From outside the list&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Google Code &lt;a href=&quot;http://google-opensource.blogspot.de/2015/03/farewell-to-google-code.html&quot;&gt;announced their shutdown&lt;/a&gt;, offering all remaining projects easy migration to Git/GitHub.&lt;/li&gt;
  &lt;li&gt;Nava Whiteford wrote a popular article on the &lt;a href=&quot;http://41j.com/blog/2015/02/common-git-screwupsquestions-solutions/&quot;&gt;most common Git screwups/questions and solutions&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;An older but related resource: &lt;a href=&quot;https://github.com/k88hudson/git-flight-rules&quot;&gt;Flight rules for Git&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;An &lt;a href=&quot;http://www.infoq.com/articles/interview-Mike-McQuaid-git-practice&quot;&gt;interview with Git book “Git in Practice” author, Mike McQuaid&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Speaking of Git books, there’s  a new one on the way: &lt;a href=&quot;https://www.packtpub.com/application-development/git-essentials&quot;&gt;Git Essentials&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;And there’s &lt;a href=&quot;https://www.packtpub.com/application-development/mastering-git-video&quot;&gt;a new video course out on mastering Git&lt;/a&gt;. The author was just interviewed on….&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;http://episodes.gitminutes.com/2015/03/gitminutes-33-thom-parkin-on-mastering.html&quot;&gt;latest episode of the podcast  GitMinutes&lt;/a&gt;, about mastering Git.&lt;/li&gt;
  &lt;li&gt;Here’s a &lt;a href=&quot;https://github.com/naholyr/github-todos/wiki/Full-presentation&quot;&gt;Git hook&lt;/a&gt; which will automatically turn new TODOs into tasks in your issue tracker (if you use GitHub issues).&lt;/li&gt;
  &lt;li&gt;Both &lt;a href=&quot;https://about.gitlab.com/2015/03/19/omnibus-gitlab-openssl-security-release/&quot;&gt;GitLab&lt;/a&gt; and &lt;a href=&quot;https://blog.bitbucket.org/2015/03/19/openssl-security-advisory/&quot;&gt;BitBucket&lt;/a&gt; recently posted advisories on recent OpenSSL vulnerabilities.
Make sure that your Git or otherwise OpenSSL-based services are not affected!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;This edition of Git Rev News was curated by Christian Couder &amp;lt;&lt;a href=&quot;mailto:christian.couder@gmail.com&quot;&gt;christian.couder@gmail.com&lt;/a&gt;&amp;gt; and Thomas Ferris Nicolaisen &amp;lt;&lt;a href=&quot;mailto:tfnico@gmail.com&quot;&gt;tfnico@gmail.com&lt;/a&gt;&amp;gt; with help from Junio Hamano, Matthieu Moy, Jeff King, David Kastrup, Stefan Beller and Alex Vandiver.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
