Git 2.38 source control release

The release of the distributed source control system Git 2.38 is introduced. 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, 699 changes were accepted into the new version, prepared with the participation of 92 developers, of which 24 took part in the development for the first time. Main innovations:

  • The main structure includes the scalar utility developed by Microsoft for managing large repositories. The utility was originally written in C#, but a modified C version is included in git. The new utility differs from the git command by including by default additional features and settings that affect performance when working with very large repositories. For example, when using scalar, this applies:
    • Partial cloning to work with an incomplete copy of the repository.
    • Built-in mechanism for tracking changes in the file system (FSMonitor), which allows you to do without enumeration of the entire working directory.
    • Indexes covering objects in different pack-files (multi-pack).
    • commit-graph files with a commit graph index used to optimize access to commit information.
    • Background periodic work to maintain the optimal structure of the repository in the background without blocking the interactive session (once an hour, work is performed to prefetch fresh objects from the remote repository and update the file with the commit graph, and the process of packaging the repository is started every night).
    • "sparseCheckoutCone" mode, which restricts allowed patterns during partial cloning.
  • Added "--update-refs" option to "git rebase" command to update dependent branches that intersect with relocated branches, rather than having to manually checkout each dependent branch to switch to the required commit.
  • Made "git rm" command compatible with partial indexes.
  • Improved the behavior of the "git mv AB" command when moving a file from a workspace with partial indexes in "cone" mode to an outer area for which this mode does not apply.
  • The format of bitmap files has been optimized for working with large repositories - an optional index table has been added with a list of selected commits and their offsets.
  • The "git merge-tree" command implements a new mode in which, based on two specified commits, a merge tree is calculated, as if the histories of these commits were merged.
  • Added "safe.barerepository" setting to control whether bare repositories (repositories that do not contain a working tree) can be placed inside other git repositories. When set to "explicit", bare repositories located in the top directory only will be allowed to work. To be able to place bare repositories in subdirectories, the value "all" should be used.
  • The "-m" ("--max-count") option has been added to the "git grep" command, which is similar to the GNU grep option of the same name and allows you to limit the number of matches displayed.
  • The "ls-files" command implements the "--format" option to customize the output fields (for example, you can enable output of the object name, modes, etc.).
  • In "git cat-file", when displaying the contents of objects, the ability to take into account the bindings of authors to email specified in the mailmap file is implemented.

Source: opennet.ru

Add a comment