Release of the distributed version control system Git 2.25

Available Release of the distributed source code management system Git 2.25.0Git is one of the most popular, reliable, and high-performance version control systems, providing flexible means of nonlinear development based on branching and merging. Implicit hashing of the entire previous history in every commit ensures the integrity of history and resilience to changes made 'in retrospect.' It is also possible to validate with digital signatures from developers for individual tags and commits.

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

  • The partial cloning feature approaches stabilization and full readiness, allowing only a portion of data to be transferred and working with an incomplete repository copy. With standard cloning, all data is copied from the repository, including every version of every file from the change history. For very large repositories, copying data significantly increases traffic and disk space usage, even if the developer is only interested in a subset of files. To simplify obtaining only part of the working tree of source texts, an experimental 'sparse-checkout' command and a new '--sparse' option for the 'clone' command have been proposed in this new release.

    Previously, the selective cloning process was performed by specifying filters to filter out unnecessary content and using the '--no-checkout' option to disable the filling in of missing files. After that, before performing the checkout operation, it was necessary to enable the core.sparseCheckout setting and define the list of excluded path patterns in the .git/info/sparse-checkout file. For example, to clone without blobs and to prevent fetching files from nested directories of depth 2 or more, one could execute:

    git clone --filter=blob:none --no-checkout /your/repository/here repo
    $ cd repo
    $ cat >.git/info/sparse-checkout <EOF
    /*
    !/*
    EOF
    $ git config core.sparseCheckout 1
    $ git checkout .

    The new 'git sparse-checkout' command significantly simplifies the process and reduces working with an incomplete repository to commands:

    git clone --filter=blob:none --sparse /your/repository/here repo
    git sparse-checkout set /path/to/check/out

    The sparse-checkout command allows you to set a list of paths for checkout (set) without manually configuring .git/info/sparse-checkout, as well as to output the current list of paths (list) and enable or disable partial checkout (enable/disable).

    To optimize work with very large repositories and template lists, the setting "git config core.sparseCheckoutCone" limits the acceptable patterns (instead of arbitrary .gitignore patterns, you can specify whether to extract all paths and all files in a given subdirectory). For example, if a large repository has a directory "A/B/C" and all work is focused in the subdirectory "C", when the sparseCheckoutCone mode is enabled, the command "git sparse-checkout set A/B/C" will extract the contents of "C" fully, but will only extract the necessary parts from "A" and "B" needed to work with "C".

  • In the documentation ("git rebase -h"), all mentions of the "--preserve-merges" option have been removed, which has been deprecated, and instead, to transfer a set of commits, use "git rebase --rebase-merges«.
  • To improve the readability of messages with patches sent to mailing lists, a new option "git format-patch --cover-from-description subject" has been added, which, when specified, uses the first paragraph from the branch description text as the subject for the patch set cover letter.
  • Support for combining the command "git apply --3way" with the setting "merge.conflictStyle" has been implemented ("git apply" now takes into account the conflict description style from merge.conflictStyle when necessary to resolve conflicts after attempting to apply the patch file to the repository).
  • The function definition code used in operations like "git diff/grep --show-function/--function-context" has been expanded with support for identifying function boundaries in programs written in the language. Elixir.
  • In "git add", "git commit", "git reset", and other commands, a new option "--pathspec-from-file" has been added, allowing a list of paths to be loaded from a file or standard input instead of being listed in the command line.
  • The issue with detecting renames at the directory level when writing commits has been resolved. The detection did not work when moving the contents of a subdirectory to the root of the repository.
  • An initial implementation of the revamped command "git add -i" has been proposed, allowing modified contents to be added in interactive mode, rewritten from Perl to C. A similar overhaul of the "git add -p" command is underway.
  • The refactoring of the command 'git log --graph' that generates an ASCII representation of the change history in the repository has been completed. The overhaul significantly improved and simplified the output without distorting the structure of the history, effectively addressing the issue of the graphic exceeding the terminal line width.
  • The option 'git log --format=..', which allows changing the output format,
    has been enhanced with support for the 'l/L' flags to output only part of the email address specified before the '@' symbol (for example, useful when all developers have emails in the same domain).
  • A new command 'set-url' has been added to the 'git submodule' command.
  • Test sets have been updated in preparation for the transition to
    the SHA-2 hashing algorithm instead of SHA-1.

Source: opennet.ru

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