After three months of development, the release of the distributed version control system Git 2.44 has been published. Git is one of the most popular, reliable, and high-performance version control systems, providing flexible tools for non-linear development based on branching and merging. To ensure the integrity of history and resistance to 'backward' changes, implicit hashing of the entire previous history is used in each commit, and it is also possible to verify individual tags and commits with developers' digital signatures. The Git code is distributed under the GPLv2+ license.
Compared to the previous release, the new version includes 503 changes made with the participation of 85 developers, of whom 34 contributed for the first time. Key innovations include:
- A new command 'git replay' has been added, which can be used as an alternative to 'git rebase' and employed for recreating history on server a bare repository (a repository without a working directory), handling multiple branches simultaneously, performing rebase operations for branches other than the currently checked out ones, or simply speeding up merge operations.
- Support for the GitLab CI continuous integration system has been added.
- The 'git add' and 'git stash' commands have been enhanced with support for path attributes ':(attr:...)', defined similarly to the 'git show' command. For example, 'git add ':(attr:~binary)'' can be used to add all text (non-binary) files to the index. Additionally, this new release introduces the 'builtin_objectmode' attribute for filtering file paths by access rights. For example, 'git add ':(attr:builtin_objectmode=100755)'' can be used to add all executable files.
- Support has been added for reusing objects spread across multiple pack files that have a multi-pack index with object availability data (an optimization allowing references to data already present in pack files instead of actual data transfer). Starting from version 2.44, git can now process object reuse across multiple pack files without the need to repack the repository into a single pack file. To enable this new feature, the following commands should be executed: git config --global pack.allowPackReuse multi git multi-pack-index write --bitmap
After this, the number of pack files from which objects are reused can be tracked with the value "pack-reused ... (from N)" displayed when executing "git push".
- The command "git rebase --autosquash" can now be applied for rebase operations in non-interactive mode, allowing rebase to be executed and fixup changes to be quickly applied without inspecting the change list and without changing the GIT_SEQUENCE_EDITOR environment variable.
- An option "--diff-algorithm" has been added to the "git merge-file" command for selecting an alternative algorithm for assessing differences between files.
- In the command "git checkout -B []", updating and checking out branches that use a different working tree is prohibited. An option "--ignore-other-worktrees" has been added to restore the old behavior.
- The ability to set the configuration "git config advice.pushAlreadyExists" to "true" has been added, which removes the hint output (hint) about how to disable it ("Disable this message with...") that takes up screen space.
- The execution of the "git for-each-ref" command with the "--no-sort" option has been optimized, which now results in output in an unspecified order (previously, specifying "--no-sort" would still apply alphabetical sorting). After optimizations, applying "--no-sort" now speeds up "git for-each-ref" by about 20% in repositories with a large number of references.
- Support for updating OAuth tokens has been added to the wincred credential management backend, similar to how it's implemented in the credential-cache and credential-libsecret backends.
- Support for the configuration parameter "fetch.all" has been added to "git fetch", which will be processed in analogy to adding the "--all" option on the command line.
Source: opennet.ru
