Git 2.35 source control release

After two months of development, the distributed source control system Git 2.35 has been released. Git is one of the most popular, reliable, and high-performance version control systems that provides flexible non-linear development tools based on branching and merging branches. To ensure the integrity of the history and resistance to retroactive changes, implicit hashing of the entire previous history in each commit is used, it is also possible to verify individual tags and commits with digital signatures from the developers.

Compared to the previous release, 494 changes were accepted into the new version, prepared with the participation of 93 developers, of which 35 took part in the development for the first time. Main innovations:

  • Expanded options for using SSH keys to digitally sign Git objects. To distinguish between the validity period of several keys, support for the OpenSSH directives "valid-before" and "valid-after" has been added, with which you can ensure correct work with signatures after the key is rotated by one of the developers. Before that, there was a problem with separating signatures with the old and new key - if you delete the old key, it will be impossible to check the signatures made with it, and if you leave it, then you will still be able to create new signatures with the old key, which has already been replaced by another key. With valid-before and valid-after, you can separate the scope of keys based on when the signature was created.
  • The merge.conflictStyle setting, which allows you to select the mode for displaying information about conflicts during a merge, now supports the "zdiff3" mode, which moves all type strings specified at the beginning or end of a conflict outside the conflict area, which allows for a more compact presentation of information.
  • Added "--staged" mode to the "git stash" command, which allows you to hide only the changes added to the index, for example, in a situation where you need to temporarily postpone some complex changes in order to first add what is already ready, and deal with the rest after a while. The mode is similar to the "git commit" command, writing only the changes placed in the index, but instead of creating a new commit in "git stash --staged", the result is saved to the stash temporary area. After the changes are needed, they can be reverted with the "git stash pop" command.
  • A new format specifier "--format=%(describe)" has been added to the "git log" command to match the output of "git log" with the output of the "git describe" command. The options for "git describe" are specified directly inside the specifier ("--format=%(describe:match= ,exclude= )"), which can also include shortened tags ("--format=%(describe:tags= )") and adjust the number of hexadecimal characters to identify objects ("--format=%(describe:abbrev= )"). For example, to display the last 8 commits whose tags do not have a release candidate tag, and 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-gb56bd 95bbc8f7 v2.34.1-203-gffb9f2980902d v2.34.1-640- gdf3c41adeb212v2.34.1-639-g36b65715a4132
  • The user.signingKey setting now supports new types of keys that are not limited to the "ssh-" type and specifying the full file path to the key. Alternate types are specified using the "key::" prefix, such as "key::ecdsa-sha2-nistp256" for ECDSA keys.
  • Significantly increased the speed of generating a list of changes in the "-histogram" mode, as well as when using the "--color-moved-ws" option, which controls the highlighting of spaces in a color diff.
  • The "git jump" command, which is used to provide Vim with information about the exact jumps to a desired position in a file when parsing merge conflicts, viewing diffs, or performing a find operation, provides the ability to narrow down the scoped merge conflicts. For example, to limit operations to only the "foo" directory, you can specify "git jump merge - foo", and to exclude the "Documentation" directory from processing, you can specify "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, which made it possible to apply the filters "clean" and "smudge" with files larger than 4 GB on all platforms, including platforms with the LLP64 data model , whose type "unsigned long" is limited to 4 bytes.
  • The "-empty=(stop|drop|keep)" option has been added to the "git am" command, which allows you to choose the behavior for empty messages that do not contain patches when parsing patches from the mailbox. A value of "stop" will end the entire patching operation, "drop" will skip an empty patch, "keep" will create an empty commit.
  • Added support for sparse indexes to git reset, git diff, git blame, git fetch, git pull, and git ls-files to improve performance and save space in repositories , in which partial cloning operations (sparse-checkout) are performed.
  • The "git sparse-checkout init" command has been deprecated and "git sparse-checkout set" should be used instead.
  • Added initial implementation of a new "reftable" backend to store references such as branches and tags in a repository. The new backend uses block storage, used by the JGit project and optimized for storing very large numbers of references. The backend is not yet integrated with the reference system (refs) and is not ready for practical use.
  • The color palette of the "git grep" command has been changed to match the GNU grep utility.

Source: opennet.ru

Add a comment