The release of the distributed version control system Git 2.50 has been published. Git is known for its high performance and provides tools for non-linear development, based on branching and merging. To ensure the integrity of history and resilience against 'backward' changes, implicit hashing of the entire previous history in each commit is used, as well as verification with digital signatures from developers for individual tags and commits. The Git code is distributed under the GPLv2+ license.
Compared to the previous release, the new version includes 621 changes, prepared with the participation of 98 developers, 35 of whom are first-time contributors. The main innovations are:
- The ability to split into multiple pack files of unreachable objects ('cruft packs') has been expanded, which are not referenced in the repository (no branches or tags point to them). Using several smaller pack files instead of one large file significantly reduces input/output operations when repacking repositories with a large number of unreachable objects since it is unnecessary to rewrite all data for each repacking operation.
The new version introduces the option '--combine-cruft-below-size', which allows for the merging of existing pack files where the size does not exceed a specified value. Unlike the previously available option '--max-cruft-size', the new option '--combine-cruft-below-size' does not limit the maximum size of the resulting pack file, enabling more efficient merging of pack files in repositories with a large number of unreachable objects spread across several pack files.
- Experimental support for incremental updating of multi-pack indexes (MIDX) has been added, where each layer of the MIDX index with information on object availability is placed in a separate bitmap file. In very large repositories, the implemented form of indexes allows for quickly and efficiently adding new bitmaps for object availability as commits come in.
- The old merging operations execution engine "recursive" has been removed from the codebase, replaced by a completely redesigned engine "ORT" (Ostensibly Recursive’s Twin), which is more efficient, functional, and easier to maintain. ORT allows you to determine the possibility of merging two objects without creating new objects in the repository (the old engine required executing the "git merge-tree —write-tree" command, which would write new objects to the repository). In Git 2.50, the merge-tree command implements the "—quiet" option, allowing the possibility of merging to be checked based on the return code without writing data to the repository.
- The "git cat-file —batch" and similar commands have been enhanced with the "—filter" option, allowing certain objects to be skipped during operation execution. git cat-file —batch-check='%(objectname)' —filter='object:type=tree'
- Three new actions have been implemented in the "git maintenance" command: worktree-prune, rerere-gc, and reflog-expire. The worktree-prune action is designed to remove outdated or corrupted worktrees from the repository. The rerere-gc action removes old entries that remain after resolving merge conflicts. The reflog-expire action removes outdated inaccessible objects from the reflog.
- The "git reflog drop" command has been added, which removes all reflog data for the specified branch.
- Optimization of reference handling and usage has been performed; for example, reference prefix caching has been implemented, unnecessary checks during the execution of the "git update-ref" command have been removed, and the efficiency of searching for existing reference iterators has been improved.
- KeepAlive settings have been added for the cURL library: http.keepAliveIdle, http.keepAliveInterval, and http.keepAliveCount.
- The "git rev-list" command now supports output in a machine-parsable format where each field is separated by a NUL character.
- Perl has been removed from the dependencies required for documentation utilities and running the test suite ("make test"). Many Perl one-liners in tests have been replaced with shell functions or rewritten in C.
- A userdiff handler has been added for the configuration file format ".ini".
- Support for Outlook SMTP server has been improved in the send-email command.
Source: opennet.ru
