Git Rev News: Edition 118 (December 31st, 2024)

Welcome to the 118th 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 November and December 2024.

Discussions

General

  • Git participates in Outreachy’s December 2024 to March 2025 round:

    Congratulations to Usman and Seyi for being selected!

    Thanks to GitHub for funding these two Outreachy internships!

    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!

Support

  • ./configure fails to link test program due to missing dependencies

    Last September Henrik Holst reported an issue when trying to compile Git 2.44.0 with HTTPS/curl support on LFS 12.1. The configure script failed to detect libcurl’s dependencies properly when trying to link statically.

    The issue occurred because the configure script only used the -lcurl build flag without running pkg-config --libs libcurl to add build flags for dependencies like zstd that libcurl needs. Henrik found that manually setting the LDFLAGS environment variable to include build flags for all dependencies (like -lcurl -lssl -lcrypto -lzstd -lbrotlidec -lz) allowed the build to succeed. This sparked a broader discussion about Git’s build system situation.

    Looking at configure.ac, Junio Hamano, the Git maintainer, noted that pkg-config isn’t used at all, instead curl-config --libs is used to detect curl’s flags. Even though the configure script was added early in the history of the Git project, Junio said it was an afterthought and nobody has considered “upgrading” from curl-config to pkg-config for dependency detection.

    In fact, our own Jakub Narębski initially added the configure script back in 2006 to make it much easier to create the RPM spec file for Git. Creating *.spec files is especially easy when the compilation follows traditional configure && make && make install steps.

    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.

    Patrick Steinhardt replied to Junio suggesting it might be time to reconsider Git’s three build systems (GNU Make, Autoconf, and CMake). He proposed potentially dropping Autoconf and making CMake officially supported, or switching to Meson as an alternative.

    CMake was added more recently in 2020 by Sibi Siddharthan as the third build system with the main goal of improving the build experience for developers on Windows.

    Soon after Patrick’s reply, the Git Contributors’ Summit took place, and the “Modern Build System” topic 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.

    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.

    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.

    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”.

    Patrick came up later in October with a 21 patch long RFC series to add support for the Meson build system with the goal of eventually replacing the current three build systems.

    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.

    David Aguilar expressed concerns about Python being a dependency through Meson. Eli replied that muon, a C99 implementation of Meson, could be used instead and demonstrated it working with Git’s build.

    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.

    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.

    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.

    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.

    Eventually version 11 of the patch series 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.

    The merged patch series especially adds some documentation (via comments in meson.build) to help build Git with Meson and a build system comparison (in Documentation/technical/build-systems.txt) that might be interesting to read.

Other News

Various

Light reading

Git tools and sites

  • bus-factor-explorer 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: https://youtu.be/uIoV79N14z8. Written in Kotlin (with evaluation done with Jupyter notebooks), under MIT license.
  • Anonymous GitHub 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.
  • Git.News is a website which provides an infinite newsfeed of trending repositories from GitHub, HackerNews & Reddit (which you can then filter by programming language).
  • Octobox 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.
  • Filestash 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 https://demo.filestash.app/, source code at https://github.com/mickael-kerjean/filestash.
  • DistGit (Distribution Git) 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+.
  • wikmd 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.
  • Mycorrhiza Wiki is a free and open-source wiki engine, with data stored as simple files, and changes stored in Git. It uses Mycomarkup, a custom-made markup language, with support for transcluding units of contents. Written in Go, under AGPLv3 license.
  • Gitit is a wiki engine written in Haskell, that uses Happstack (HAppS) for the web server and pandoc 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.
  • Xandikos 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+.
  • Opengist is a self-hosted pastebin powered by Git, similar to GitHub Gist. Demo available at https://demo.opengist.io/. Written in Go, under AGPLv3 license.
  • rgit is a gitweb/cgit-like fast web frontend for Git repositories. You can see it in action at https://git.inept.dev/. Written in Rust using Axum, gitoxide, Askama and RocksDB. Under WTFPL license (which is not on the list of OSI approved Licenses, but is on the list of licenses that meet Debian Free Software Guidelines).
  • klaus 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 pip. You can see its demo at http://klausdemo.lophus.org/. Written in Python, under an unnamed custom permissive license.
  • git-activity 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 on GitHub. Written as Bash shell script using AWK, licensed under (custom) CC BY-NC-SA 4.0 with Hippocratic License v3 ethical requirements.
  • git-branches-script 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.

Releases

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 Štěpán Němec.