The release of the distributed source code management system Git 2.53 has been announced. Git is known for its high performance and provides tools for non-linear development based on branching and merging of branches. To ensure the integrity of history and resilience against 'backward' changes, it employs implicit hashing of all previous history in each commit, as well as digital signatures from developers for individual tags and commits. Git code is distributed under the GPLv2+ license.
Compared to the previous release, the new version includes 466 changes developed with the participation of 70 developers (21 of whom contributed to Git for the first time). Key innovations:
- A 'geometric' repository packing strategy ('git repack --geometric') has been added for partially cloned external repositories operating in 'promisor' mode (missing objects are downloaded as needed). During repacking with the '--geometric' options, pack files with the '.promisor' extension are processed and packed separately. The 'geometric' strategy helps reduce maintenance time for large monorepositories by selectively repacking objects and avoiding excessive resource-intensive operations, such as merging all pack files (the geometric progression of pack file sizes is maintained, where each subsequent pack file must be at least twice the size of the previous one).
- The 'git fast-import' command includes the '--signed-commits=strip-if-invalid' option to remove digital signatures from imported objects that became invalid after rewriting part of the repository's history. Previously, one could either import or remove all signatures without distinguishing between valid and meaningless ones. The 'strip-if-invalid' option allows for tools to retain valid signatures and re-sign objects with outdated signatures.
- The output of the command "git repo structure" now includes information on the size of all reachable objects in the repository, broken down by their types. The information is now displayed in a readable format with measurement units and shown separately for actual and disk-occupied sizes, allowing for an assessment of the total repository size on disk. $ git repo structure | Repository structure | Value | | ——————— | ———- | | * References | | | * Count | 1.78 k | | * Branches | 5 | | * Tags | 1.03 k | | * Remotes | 749 | | * Others | 0 | | | | | * Reachable objects | | | * Count | 421.37 k | | * Commits | 88.03 k | | * Trees | 169.95 k | | * Blobs | 162.40 k | | * Tags | 994 | | * Inflated size | 7.61 GiB | | * Commits | 60.95 MiB | | * Trees | 2.44 GiB | | * Blobs | 5.11 GiB | | * Tags | 731.73 KiB | | * Disk size | 301.50 MiB | | * Commits | 33.57 MiB | | * Trees | 77.92 MiB | | * Blobs | 189.44 MiB | | * Tags | 578.13 KiB |
- The "git maintenance" command has added a subcommand "is-needed" to perform repository maintenance operations only when necessary.
- In the experimental "git replay" command, link updates are now implemented by default in the transaction, instead of just showing where the links should point without updating.
- The "git blame" command has added the ability to choose the difference assessment algorithm using the option "—diff-algorithm=".
- The "git repo info" command has added the option "—all".
- Symbolic link support has been ported from Git-for-Windows for the Windows platform.
A warning was added in the previous release regarding the default inclusion of component builds in Rust in Git 2.53. However, in Git version 2.53, only separate improvements in Rust support (the ability to build without GNU sed) were added, but building with Rust using the Makefile remains disabled by default (requiring the flag WITH_RUST), while using Meson it is automatically activated if the rustc compiler is available. In Git version 3.0, the Rust toolchain is planned to be included among the required build dependencies.
Source: opennet.ru
