Go to 2.55

Submitted by distributed source code management system release Go to 2.55Among the key changes: enabling the default build with Rust, implementation for Linux fsmonitor process, new strategy for repackaging the incremental MIDX index, the git history fixup command for fixing a commit, optimization of object availability bitmap generation, support for parallel execution of hooks, the git format-rev command. Git Code spreads licensed under GPLv2+.

Compared to the previous release, the new version includes 505 changes prepared with the participation of 100 developers, 33 of whom were new to Git development.

Main innovations (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • By default is included Support for Rust components. The rustc compiler. added into the build dependencies. To build without Rust, you can use the NO_RUST=1 flag when running the make utility or -Drust=disabled when running meson configure. The ability to disable building with Rust will be supported until Git 3.0, in which Rust will be included Among the required dependencies. The Rust language implements a layer for portability between SHA-1 and SHA-256 hash configurations, as well as some internal functions, such as encoding and decoding variable-length integers. More significant internal Git components are expected to be rewritten in Rust in the future.
  • To the experimental team "git history"The "git history fixup" operation has been added to the commit history rewriting tool, which provides the ability to rewrite commit history. The fixup operation allows you to move changes added via git add to an earlier commit and automatically rewrite all subsequent commits, similar to running the git commit --fixup= command. and running git rebase --autosquash ~.
  • For platform Linux background process implemented fsmonitor, which tracks changes in the file system using a mechanism inotify and allows you to avoid traversing the entire working directory when running commands like git status. It can be enabled via the "core.fsmonitor».
  • The git repack command now has a new --write-midx=incremental option. This option implements a new strategy for updating metadata in the incremental MIDX index (multi-pack index), eliminating the need to repack the entire index. The incremental multi-pack index uses layers instead of a single large index containing information about the distribution of objects across packfiles. Each layer covers a specific number of packfiles and is stored in a separate bitmap file. This structure allows data about objects in new packfiles to be added to the index by appending new layers to the index without rebuilding existing layers. The git repack --write-midx=incremental command adds a new layer to the incremental MIDX index, covering recently created packfiles. When combined with the --geometric repository packing mode, the new command allows you to combine new objects from multiple packfiles into a single larger packfile and, if necessary, pack and merge several adjacent layers of an incremental MIDX index. This strategy allows git repack to rewrite only the top layers, leaving older, larger layers intact, and prevents uncontrolled growth of the layer chain by maintaining the total number of layers proportional to the logarithm of the total number of objects.
  • The generation of object availability bitmaps has been significantly optimized through a new object tree traversal algorithm that eliminates unnecessary recursion, caching of object positions, sorting of bitmaps before combining them with the XOR operation, and reworking the code to create pseudo-merge bitmaps (pseudo-merge). In the test repository, optimizations reduced the bitmap generation time from 612 to 294 seconds.
  • The ability to execute independent tasks in parallel has been implemented hooks In configuration files. Hooks that affect or take into account shared state, such as those that change commit notes or inspect indexes and the working tree, cannot be run in parallel. However, hooks for linter checking and unit testing can be run in parallel. Hooks that allow parallel execution are configured using the hook.hook_name.parallel = true parameter. The number of jobs that can be run concurrently is determined by the hook.jobs, hook. .jobs or the -j command line option.
  • The git pack-objects --path-walk command now allows you to specify filters such as blob:none, blob:limit= , tree:0, object:type= , sparse: and combine:. In the test, discarding blobs when executing --path-walk reduced the size of the generated pack file by 16%.
  • Added the git format-rev command for formatting revisions and object names mentioned in commit lists or found in arbitrary text (for example, this can be used in hooks for processing commit notes).

git last-modified | git format-rev --stdin-mode=text --format=%an

Junio ​​C Hamano builtin/commit.c

  • Escaping of most terminal control sequences in informational messages and error text sent by the server is enabled by default. When accessing a malicious server, such escape sequences could be used to hide or modify output, for example, through escape sequences for cursor movement and text clearing. Support for escape sequences for highlighting elements has been retained.
  • The git checkout -m command now automatically saves conflicting local changes to the stash area without requiring you to immediately resolve the conflict.
  • The git push command now supports pushing a branch to multiple external Git servers with a single command. For example, to push the main branch not only to the primary server but also to mirrors, you can create a publish group consisting of the github, gitlab, and mirror servers:

git config remotes.publish "github gitlab mirror"
git push publish main

  • The --graph-lane-limit= option has been added to the git log --graph command. to limit the number of vertical bars when visualizing branches, which allows you to leave space on the screen for commit data in repositories with a large number of branches.

...
* | | | | 619931f561 Merge branch 'dl/posix-unused-warning-clang'
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: simplify GIT_GNUC_PREREQ() comparison
| * | | | ~ ffd45926dc compat/posix.h: clean up GIT_GNUC_PREREQ() and UNUSED
|\ \ \ \ \~
| * | | | ~3f5203eeb4 ls-files: filter pathspec before lstat

  • The --max-count-oldest= option has been added to the git log and git rev-list commands. , which allows you to select the N oldest commits in a range.

Source: linux.org.ru

Buy reliable hosting for sites with DDoS protection, VPS VDS servers 🔥 Buy reliable website hosting with DDoS protection, VPS VDS servers | ProHoster