After three months of development, the distributed source control system Git 2.44 has been released. Git is one of the most popular, reliable and high-performance version control systems, providing flexible non-linear development tools based on branching and merging. To ensure the integrity of the history and resistance to retroactive changes, implicit hashing of the entire previous history is used in each commit; it is also possible to certify individual tags and commits with digital signatures of the developers. The Git code is distributed under the GPLv2+ license.
Compared to the previous release, the new version included 503 changes, prepared with the participation of 85 developers, of which 34 took part in development for the first time. Main innovations:
- A new command, "git replay," has been added, which can be used as an alternative to "git rebase" and used to recreate the history on server without a working tree (a bare repository that does not contain a working tree), working on multiple branches at once, performing a rebase operation on branches other than the one currently checked out, or simply to speed up merge operations.
- Added support for the GitLab CI continuous integration system.
- The “git add” and “git stash” commands now support “:(attr:...)” path attributes, which are set in a similar way 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, the new release offers the “builtin_objectmode” attribute to filter file paths by access rights. For example, "git add ':(attr:builtin_objectmode=100755)'" can be used to add all executables.
- Added support for reusing objects distributed across multiple pack files, for which there is a multi-pack-index with object availability data (an optimization that allows, instead of actually transferring data, to refer to the use of data already present in pack files ). As of version 2.44, git can now handle object reuse across multiple pack files, without the need to repack the repository into a single pack file. To enable the new feature, run the following commands: git config —global pack.allowPackReuse multi git multi-pack-index write —bitmap
after which the number of pack files from which objects are reused can be tracked in the "pack-reused... (from N)" value shown when performing a "git push".
- The "git rebase --autosquash" command can now be used for rebase operations in non-interactive mode, allowing you to rebase and quickly apply fixups without inspecting the changelog or changing the GIT_SEQUENCE_EDITOR environment variable.
- Added a “--diff-algorithm” option to the “git merge-file” command to select an alternative algorithm for evaluating differences between files.
- In the command “git checkout -B [ ]" does not allow updating or fetching branches that use a different working tree. To return the old behavior, the option “-ignore-other-worktrees” has been added.
- Added the ability to set the “git config advice.pushAlreadyExists” setting to “true”, which removes the instructions to disable them (“Disable this message with…”) that takes up space on the screen when displaying hints.
- Optimized execution of the "git for-each-ref" command with the "--no-sort" option, which now results in output in an unspecified order (previously, specifying "--no-sort" still resulted in alphabetical sorting). After making optimizations, using "--no-sort" now speeds up "git for-each-ref" by about 20% in repositories with a large number of refs.
- Support for updating OAuth tokens has been added to the wincred credential management backend, similar to how it is implemented in the credential-cache and credential-libsecret backends.
- "git fetch" has added support for the "fetch.all" configuration option, which will be handled similarly to adding the "--all" option on the command line.
Source: opennet.ru
