Release of the Git Source Code Management System 2.35

After two months of development, the release of the distributed source code management system Git 2.35 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 branches. To ensure the integrity of history and resilience to 'backdating', implicit hashing of the entire previous history in each commit is used, and it's also possible to authenticate developer signatures for individual tags and commits.

Compared to the previous release, the new version includes 494 changes prepared with the participation of 93 developers, 35 of whom participated in the development for the first time. Key innovations:

  • The capabilities for using SSH keys to certify Git objects with a digital signature have been expanded. To differentiate the validity periods of multiple keys, support for OpenSSH directives 'valid-before' and 'valid-after' has been added, which can ensure the correct functioning of signatures after one of the developer's keys has been rotated. Previously, there was a problem with separating the signatures of old and new keys—if the old key was deleted, it would not be possible to verify the signatures made with it, and if it was kept, it would still allow the creation of new signatures with the old key, which has already been replaced by another key. With 'valid-before' and 'valid-after', it is possible to separate the scope of keys based on the signature creation time.
  • In the merge.conflictStyle setting, which allows selecting the format for conflict information during merges, support for the 'zdiff3' mode has been added. This mode moves all typical lines indicated at the beginning or end of the conflict out of the conflict area, allowing for a more compact presentation of information.
  • The command "git stash" has been enhanced with the "--staged" mode, which allows you to hide only the changes that have been added to the index. This is useful in situations where you may temporarily want to set aside part of complex changes in order to first add what is ready and deal with the rest later. This mode is similar to the "git commit" command, which records only the changes staged in the index, but instead of creating a new commit, "git stash --staged" saves the result to the temporary stash area. Once the changes are needed, they can be retrieved using the command "git stash pop."
  • A new format specifier "--format=%(describe)" has been added to the command "git log", allowing the output of "git log" to be combined with the result of the "git describe" command. Parameters for "git describe" are specified directly within the specifier ("--format=%(describe:match=,exclude=)"), which can also include short tags ("--format=%(describe:tags=)") and adjust the number of hexadecimal characters for object identification ("--format=%(describe:abbrev=)"). For example, to display the last 8 commits whose tags do not have release candidate markers, and to specify 8-character identifiers, you can use the command: $ git log -8 --format='%(describe:exclude=*-rc*,abbrev=13)' v2.34.1-646-gaf4e5f569bc89 v2.34.1-644-g0330edb239c24 v2.33.1-641-g15f002812f858 v2.34.1-643-g2b95d94b056ab v2.34.1-642-gb56bd95bbc8f7 v2.34.1-203-gffb9f2980902d v2.34.1-640-gdf3c41adeb212 v2.34.1-639-g36b65715a4132
  • Support for new key types has been implemented in the user.signingKey setting, which is no longer limited to the "ssh-" type and specifying the full file path to the key. Alternative types are designated using the prefix "key::", for example, "key::ecdsa-sha2-nistp256" for ECDSA keys.
  • The speed of change list generation in "--histogram" mode has been significantly improved, as has the use of the "--color-moved-ws" option, which controls the highlighting of spaces in the colored diff.
  • In the command "git jump", used to provide Vim with information on exact transitions to the desired position in a file while resolving merge conflicts, viewing differences, or performing a search, a capability has been introduced to narrow the scope of covered merge conflicts. For example, to limit operations to just the directory "foo," you can specify "git jump merge -- foo," and to exclude the directory "Documentation" from processing, use "git jump merge -- ':^Documentation'".
  • Work has been done to standardize the use of the type 'size_t' instead of 'unsigned long' for values representing the size of objects, enabling the application of the 'clean' and 'smudge' filters on files larger than 4 GB across all platforms, including those with the LLP64 data model where the 'unsigned long' type is limited to 4 bytes.
  • The 'git am' command has been enhanced with the option '--empty=(stop|drop|keep)', allowing users to select the behavior for empty emails without patches during patch parsing from the mailbox. The 'stop' value will terminate the entire patch application operation, 'drop' will skip the empty patch, and 'keep' will create an empty commit.
  • The 'git reset', 'git diff', 'git blame', 'git fetch', 'git pull', and 'git ls-files' commands now support partial indexes (sparse index), which improves performance and saves space in repositories where partial cloning (sparse-checkout) operations are performed.
  • The 'git sparse-checkout init' command has been deprecated, and users should now use 'git sparse-checkout set' instead.
  • An initial implementation of a new backend called 'reftable' has been added for storing references such as branches and tags in the repository. This new backend uses a block storage system, applied by the JGit project, and is optimized for storing a very large number of references. The backend is not yet integrated with the references system and is not ready for practical use.
  • The color palette of the 'git grep' command has been aligned with the GNU grep utility.

Source: opennet.ru

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