Git Rev News: Edition 128 (October 31st, 2025)
Welcome to the 128th edition of Git Rev News, a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to subscribe, see the Git Rev News page on git.github.io.
This edition covers what happened during the months of September and October 2025.
Discussions
General
-
Git participated in GSoC (Google Summer of Code) 2025
All the contributors have successfully passed their final evaluation and published a final report:
-
Lucas Oshiro worked on the Machine-Readable Repository Information Query Tool project. He was mentored by Patrick Steinhardt and Karthik Nayak. The final report can be found on his website.
-
Meet Soni worked on the Consolidate ref-related functionality into git-refs project. He was mentored by Patrick Steinhardt and Jialuo She. The final report can be found on his website.
-
Ayush Chandekar worked on the Refactoring in order to reduce Git’s global state project. He was mentored by Christian Couder and Ghanshyam Thakkar. The final report can be found on his website.
Kaartic Sivaraam and Christian Couder were “org admins”.
Congratulations to the contributors, their mentors and the org admins!
-
-
Git Merge 2025 conference and Contributor’s Summit 2025
The Git Merge conference happened on September 29th and 30th in San Francisco, hosted by GitHub at their GitHub HQ. The session records are available.
On the second day, there was also the Contributor’s Summit. The full notes as well as notes broken down by topic are available.
-
On August 28 in Amsterdam, a Git Mini Summit happened as a co-hosted event of the Open Source Summit Europe, sponsored by GerritForge, GitButler, GitLab, and Google. The schedule and session records are available.
Support
-
[Change] Git build issue on NonStop
Randall S. Becker reported on the mailing list that CI tests on the NonStop x86 platform were broken after the
uintptr_ttype started to be used in clar tests when displaying error messages in test failures (in case pointer comparisons fail).Jeff King, alias Peff, replied to Randall that
uintptr_twas 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 whereuintptr_tappeared also containedPRIxPTRwhich is a macro that is not used in the regular code. So he wondered if just replacing that macro withPRIuMAX(which is often used) would be enough to fix the issue.PRIxPTR,PRIuMAXand similar macros are format specifier macros from the C standard library (defined in<inttypes.h>) that provide portable ways to print integer types using functions likeprintf()across different platforms. They are all named in the same way, withPRImeaningprintf, the next letter indicating the format, likexfor hexadecimal andufor unsigned decimal, and the last part indicating the type, likePTRfor pointer-sized integers,MAXfor maximum-width integers,64for 64-bit, etc.Randall replied to Peff that replacing
PRIxPTRwithPRIuMAXwould work, and that he was going to try it.Patrick Steinhardt also replied to Randall and Peff saying it would work, and asked Peff if he wanted to send that change.
Peff replied to Patrick that he’d be happy if Patrick sent the change, but noted that using
PRIxMAXmight be better thanPRIuMAXas the code wanted to print hexadecimal values.Patrick then reported to Peff that Peff’s suggestion to use the
PRIxMAXorPRIuMAXformat specifier macros didn’t work on 32 bit systems, because casting a pointer to an integer of different size (the pointer is 32 bits, butuintmax_tis 64 bits) fails.Patrick proposed using
%pas a format specifier saying it might be a better trade-off. The downside was that the output format would be unpredictable across platforms as%pdoesn’t have a standardized output format. So tests that validated the exact error message format would have to be dropped. But at least%pwould work everywhere and produce stable output.Junio Hamano, the Git maintainer, agreed with Patrick that
%pwas “the most appropriate solution”.Randall then confirmed that
%pworked on NonStop x86 even if the man pages warned to the contrary.The
%psolution was eventually merged to the ‘master’ branch.
Developer Spotlight: Kristoffer Haugsbakk
-
Who are you and what do you do?
I’m Kristoffer from Norway. My day job is working on a Java webapp primarily used for clinical mental health questionnaires.
-
What would you name your most important contribution to Git?
One I like was when I and the mailing list collaborators fixed a bug related to Git notes handling by git-format-patch(1). 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.
-
What are you doing on the Git project these days, and why?
The one I am focusing on is improving the git-patch-id(1) 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 git-cherry(1) 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 git-rev-list(1).
-
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?
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.
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.
-
If you could remove something from Git without worrying about backwards compatibility, what would it be?
I can’t think of a single thing to remove that would have a big impact.
I guess I would remove git-filter-branch(1). People can use git-filter-repo(1). And with that one removed I wouldn’t have to ask people to not use it any more. ;)
-
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?
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.)
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 gitglossary(7) where we can gather all kinds of jargon and be as verbose as we want to. :)
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 AsciiDoc; the last time I saw something parameterized was when an AsciiDoc macro forced inline formatting to be handled literally. The cure seems worse than the disease to me.
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.
-
What is your favorite Git-related tool/library, outside of Git itself?
Magit. An Emacs Git frontend.
-
Do you happen to have any memorable experience w.r.t. contributing to the Git project? If yes, could you share it with us?
When I added a test case to
t/t7001-mv.shthat made the continuous build routine on Windows (CI) time out. The test wastest_expect_failureand 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.
-
What is your toolbox for interacting with the mailing list and for development of Git?
I use the builtin commands for making patches and sending them (git-format-patch(1) and git-send-email(1)). For programming and writing I use the basic, needed tools along with Emacs. Very occasionally I will use GDB.
-
What is your advice for people who want to start Git development? Where and how should they start?
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.
It sounds trivial but someone used to Git forges will have enough challenges just sending proper patches to the project over email.
Also read through
Documentation/SubmittingPatches. I don’t really see many corrections that refer to other documents. You could of course get a correction that refers to some lore but that is unlikely to happen for simple changes if you just structure it similar to recent, accepted submissions that you find.
-
If there’s one tip you would like to share with other Git developers, what would it be?
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.
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 git-log(1)) 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
refs/notes/amlog(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.Those links (to commits and archived emails) are very valuable when you want to discuss a change to something that has been in git(1) for years and years.
Other News
Various
- Git considers SHA-256, Rust, LLMs, and more by Jonathan Corbet on LWN.net.
- Git Developers Talk About Potentially Releasing Git 3.0 By The End Of Next Year by Michael Larabel on Phoronix.
- GitHub is migrating to Azure! And goodbye to new development for a year. by Redazione RHC on Red Hot Cyber.
- Fedora Moves Towards Forgejo
by Matthew Miller and Akashdeep Dhar on December 4, 2024
in Fedora Magazine.
- Forgejo 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 Git Rev News Edition #103.
Light reading
- Building for the future: on Tangled’s existence and direction
by Anirudh Oppiliappan on their blog;
also published at icy takes blog on ATProto.
- Tangled.sh is a new social-enabled Git collaboration platform built on top of the AT Protocol / ATProto (which is behind the BlueSky microblogging federated social media service). It was first mentioned in Git Rev News Edition #125.
- 6 months of Tangled: a quick recap, and notes on the future by Anirudh Oppiliappan and Akshay Oppiliappan on Tangled Blog.
- Socially self-hosting source code with Tangled on Bluesky by Anil Madhavapeddy, Professor of Planetary Computing, on his blog.
- Redistributing Git with Nostr
by início on their blog.
- There exists gitstr (
git str), which is a tool to send and receive Git patches over Nostr, using NIP-34 (first mentioned in Git Rev News Edition #109). - Note that git-credential-oauth, a Git credential helper that securely authenticates to GitHub, GitLab, BitBucket and Gerrit using OAuth, can replace the “create an account; pick a password; confirm an email address; set up SSH keys for pushing” steps.
- There exists gitstr (
- How GitHub won software development by Nick Hodges on Rubber Duck Reflections opinions blog on InfoWorld.
- You already have a git server on Maurycy’s blog; describes how one can serve Git repositories via SSH (with SSH access) or via dumb HTTP (with a web server).
- Simple automated deployments using git push by Gabriel Garrido on his blogs / notes (2024).
- Discussion of the Benefits and Drawbacks of the Git Pre-Commit Hook by Hannes Leutloff on his blog.
- You can use
fzfto review git commits by Julia Evans in her TIL (Today I’ve Learned) section.- See also Improving shell workflows with fzf, mentioned in Git Rev News Edition #74, and Curing A Case Of Git-UX, mentioned in Git Rev News Edition #126.
- Switch to Jujutsu already: a tutorial
by Stavros on Stavros’ Stuff.
- Jujutsu (
jj) is a Git-compatible version control system written in Rust, which was first mentioned in Git Rev News Edition #85.
- Jujutsu (
- Magit Is Amazing!
by Abdallah Maouche (heiwiper) on his blog
(how it does things that others need to use Jujutsu over Git for).
- Magit is a popular Emacs editor interface to Git, first mentioned (in passing) in Git Rev News Edition #6.
- Branching in a Sapling Monorepo
- Sapling is a scalable, user-friendly, and open-source source control system that powers Meta’s (Facebook’s) monorepo. It was first mentioned in Git Rev News Edition #93.
- Stop Rebasing Everything: Your Git History Isn’t That Special, an argument in the merge-vs-rebase debate. by Guillaume on DEV.to.
- Diff Algorithms
by Florian Zenker on his website.
The result of this exploration was znkr.io/diff, a difference algorithm module for Go.- Note that with
git diffyou can choose betweenmyers(default),minimal,patienceandhistogramalgorithms.
- Note that with
- Git Super-Power: The Three-Way Merge
by Quentin Santos on his blog (2024).
Provides the following tl;dr:git config --global merge.conflictstyle diff3. - Anyone Can Commit Code as You on GitHub (Here’s How to Stop Them) with signed commits (with tutorial focusing on macOS using GPG Keychain). Written by Nick Taylor on his Just Some Dev blog.
- GitHub Ensloppification by David Bushell on his blog.
- “GitHub” Is Starting to Feel Like Legacy Software rant by Misty De Méo on her blog (2024).
- Implementing Conventional Commits with Jira Ticket Prefix Validation
by Alexandre Mogère (heristop) on Zazen Code.
- The Conventional Commits specification was first mentioned in Git Rev News Edition #52, and in many editions since.
- Conventional Commits considered harmful (or rather overly strict enforcement of the standard), rant by Salih Muhammed, with a few further links.
- Contribute to GitFichas
by Jessica Temporal on her blog.
- GitFichas (also know as GitStudyCards) is a collection of study cards about Git, for devs that might need a refresher about Git commands. Mentioned in the previous edition of Git Rev News.
Easy watching
- Gerrit User Summit 2025, featuring also GitButler and Jujutsu by Luca Milanesio on GerritForge’s YouTube channel.
- Jujutsu at Google
(slides)
on Google for Developers channel on YouTube;
part of JJ Con 2025 playlist.
In this talk, Martin von Zweigbergk presents on Jujutsu architecture and future plans.
JJ Con 2025 was a dedicated conference hosted by Google for the Jujutsu version control system. - Solving Git’s Pain Points with Jujutsu (with Martin von Zweigbergk) on Developer Voices channel on YouTube.
Scientific papers
- Ya-Nan Li, Yaqing Song, Qiang Tang, Moti Yung:
“End-to-End Encrypted Git Services”,
Cryptology {ePrint} Archive, Paper 2025/1208,
https://eprint.iacr.org/2025/1208,
DOI:10.1145/3719027.3744815
- See “Scientists develop end-to-end encryption for git services” article by University of Sydney, edited by Stephanie Baum, reviewed by Robert Egan, on TechXplore.
- S.R.P. van Hal, M. Post, K. Wendel:
“Generating Commit Messages from Git Diffs”,
arXiv:1911.11690 (2019)
mentions “inherent shortcoming of current commit message generation models, which perform well by memorizing certain constructs.”
Git tools and sites
-
diff-modulo-base is a tool that allows you to compare the relevant changes of two versions of a rebased branch given three input diffs: two base diffs that show the changes since the respective merge bases and a target diff between the branches you are actually interested in.
It is very similar to (and actually builds on)
git range-diff, but differs in resulting output. Written in Rust, under MIT License. - Worktree Manager (wtm) is a fast, modern CLI tool for managing Git worktrees in bare repositories. Written in TypeScript for Bun, under MIT License.
- git-metrics
is a Git extension that makes it possible to track metrics about your project,
which are stored within the git repository (using
git notes). Written in Rust, under MIT License.
Described in Build metrics and budgets with git-metrics article by Jérémie Drouet on DEV.to (2024).- There is another git-metrics 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 Git Rev News Edition #48.
- git-spice 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.
- A stacked branch refers to a set of branches that build upon each other in a linear sequence. Stacked branches or stacked diffs were first mentioned in Git Rev News #44, and most recently in Git Rev News #127, where you can find even more links about this technique.
- Git Granary
is a Git Large File Storage (LFS)
server implementation written in TypeScript. Under MIT License.
Git Granary was designed for self-hosted personal use.
See Git Granary blog post by David Bushell on his blog (2024). - gibr 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.
- 0github.com 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 cmux engine it uses is open source (MIT License). It uses a LLM (Large Language Model) to perform this task.
Releases
- Git 2.51.2, 2.51.1
- Git for Windows v2.51.2(1), v2.51.1(1), v2.51.0(2)
- GitHub Enterprise 3.18.0
- GitLab 18.5.1, 18.4.3, 18.3.5, 18.5, 18.4.2, 18.3.4, 18.2.8
- Gerrit Code Review 3.10.9, 3.13.0-rc0, 3.13.0-rc1, 3.13.0-rc2, 3.13.0-rc3, 3.13.0-rc4, 3.13.0-rc5
- GitKraken 11.5.1, 11.5.0
- GitHub Desktop 3.5.3
- Git Cola 4.16.0
- GitButler 0.16.10, 0.16.9
- Kinetic Merge 1.10.0, 1.9.1
Credits
This edition of Git Rev News was curated by Christian Couder <christian.couder@gmail.com>, Jakub Narębski <jnareb@gmail.com>, Markus Jansen <mja@jansen-preisler.de> and Kaartic Sivaraam <kaartic.sivaraam@gmail.com> with help from Kristoffer Haugsbakk, Lee Reilly, Luca Milanesio and Štěpán Němec.