Git 2.50 Lands: Say Goodbye to Recursive Merges Engine

Git 2.50 distributed revision control tool removes the legacy recursive merge engine, completing the transition to the faster, more robust ORT engine.

Almost three months after its previous 2.49 release, Git, a distributed version control system and cornerstone tool in software development that helps developers efficiently manage changes in their code across projects, has just released its new 2.50 version.

A notable improvement is the handling of multiple cruft packs. Originally introduced in Git 2.37, cruft packs store unreachable objects in repositories. Git 2.43 introduced options to manage these packs, but usability challenges persisted, notably with confusing command-line behaviors and unexpected limitations.

Git 2.50 addresses these issues with a new, clear-cut option called --combine-cruft-below-size. This tool allows users to efficiently combine smaller cruft packs, significantly improving repository hygiene over time.

In another major advancement, incremental multi-pack reachability bitmaps have arrived. Following the incremental multi-pack index improvements from Git 2.47, Git 2.50 further enhances performance in large repositories by enabling incremental updates to reachability bitmaps.

Perhaps the most exciting update in this release, however, is the complete transition from Git’s older merge engine, “recursive,” to the faster and more maintainable “ORT” (Ostensibly Recursive’s Twin) engine.

Introduced in Git 2.33 and made the default in 2.34, ORT has now fully replaced the legacy recursive engine. This change boosts performance and introduces new functionalities, such as the ability to test mergeability without persisting new merge objects.

Developers who rely on scripting repository objects will appreciate enhancements to git cat-file. Git 2.50 introduces streamlined object filtering directly into git cat-file, simplifying common tasks such as extracting specific object types. Additionally, the seldom-used --allow-unknown-type option has been deprecated, streamlining the tool’s functionality and removing outdated quirks.

Moreover, maintenance tasks become more intuitive with updates to git maintenance. New tasks, including worktree-prune, rerere-gc, and reflog-expire, have been added, paralleling existing garbage collection operations and simplifying routine repository cleanup. Users also gain the ability to configure the batch size for loose object packing, providing enhanced control over maintenance behavior.

New configurations for TCP keepalive behavior address networking performance and offer finer control over HTTP connections. Furthermore, Perl dependency has been substantially reduced, removing it entirely from Git’s test suite and documentation toolchain, enhancing portability and reducing external dependencies.

Lastly, user interface refinements include clearer comments during interactive rebases and improved efficiency in sparse checkouts when using git add -p or git add -i.

For more information, see the announcement.

Bobby Borisov

Bobby Borisov

Bobby, an editor-in-chief at Linuxiac, is a Linux professional with over 20 years of experience. With a strong focus on Linux and open-source software, he has worked as a Senior Linux System Administrator, Software Developer, and DevOps Engineer for small and large multinational companies.

Leave a Reply

Your email address will not be published. Required fields are marked *