git 2.46.0

Git is a distributed version control system, originally designed for Linux kernel development and large projects with non-linear workflows. It's comprised of individual tools, reuses ssh and rsync protocols, emphasises speed and data integrity, and keeps every checkout as full-fledged repository, and cryptographically authenticates source history. Various graphical frontends, IDE integrations and web services (GitHub) exist; with its git-fast-export format meanwhile serves interoperability with bzr, hg, fossil, svn.

Tags c git scm vcs dvcs
License GNU LGPL
State stable

Recent Releases

2.46.027 Aug 2024 20:05 minor feature: The "--rfc" option of "git format-patch" learned to take an, optional string value to be used in place of "RFC" to tweak the, " PATCH " on the subject header. The credential helper protocol, together with the HTTP layer, have, been enhanced to support authentication schemes different from, username password pair, like Bearer and NTLM. Command line completion script (in contrib/) learned to complete, "git symbolic-ref" a bit better (you need to enable plumbing, commands to be completed with GIT_COMPLETION_SHOW_ALL_COMMANDS). When the user responds to a prompt given by "git add -p" with an, unsupported command, list of available commands were given, which, was too much if the user knew what they wanted to type but merely, made a typo. Now the user gets a much shorter error message. The color parsing code learned to handle 12-bit RGB colors, spelled, as "#RGB" (in addition to "#RRGGBB" that is already supported). The operation mode options (like "--get") the "git config" command, uses have been deprecated and replaced with subcommands (like "git, config get"). "git tag" learned the "--trailer" option to futz with the trailers, in the same way as "git commit" does. A new global "--no-advice" option can be used to disable all advice, messages, which is meant to be used only in scripts. Updates to symbolic refs can now be made as a part of ref, transaction. The trailer API has been reshuffled a bit. Terminology to call various ref-like things are getting, straightened out. The command line completion script (in contrib/) has been adjusted, to the recent update to "git config" that adopted subcommand based, UI. The knobs to tweak how reftable files are written have been made, available as configuration variables. When "git push" notices that the commit at the tip of the ref on, the other side it is about to overwrite does not exist locally, it, used to first try fetching it if the local repository is a partial, clone. The command has been taught not to do so
2.45.201 Jun 2024 12:25 minor feature: Send-email: drop FakeTerm hack, send-email: avoid creating more than one Term::ReadLine object, ci: drop mention of BREW_INSTALL_PACKAGES variable, ci: avoid bare "gcc" for osx-gcc job, ci: stop installing "gcc-13" for osx-gcc, hook: plug a new memory leak, init: use the correct path of the templates directory again, Revert "core.hooksPath: add some protection while cloning", tests: verify that `clone -c core.hooksPath=/dev/null` works again, clone: drop the protections where hooks aren't run, Revert "Add a helper function to compare file contents", Revert "fsck: warn about symlink pointing inside a gitdir"
2.45.030 Apr 2024 22:45 minor feature: Integrate the reftable code into the refs framework as a backend. With "git init --ref-format=reftable", hopefully it would be a lot, more efficient to manage a repository with many references. "git checkout -p" and friends learned that that "@" is a synonym, for "HEAD". Variants of vimdiff learned to honor mergetool...layout, settings. "git reflog" learned a "list" subcommand that enumerates known reflogs. When a merge conflicted at a submodule, merge-ort backend used to, unconditionally give a lengthy message to suggest how to resolve, it. Now the message can be squelched as an advice message. "git for-each-ref" learned "--include-root-refs" option to show, even the stuff outside the 'refs/' hierarchy. "git rev-list --missing=print" has learned to optionally take, "--allow-missing-tips", which allows the objects at the starting, points to be missing. "git merge-tree" has learned that the three trees involved in the, 3-way merge only need to be trees, not necessarily commits. "git log --merge" learned to pay attention to CHERRY_PICK_HEAD and, other kinds of *_HEAD pseudorefs. Platform specific tweaks for OS/390 has been added to, config.mak.uname. Users with safe.bareRepository=explicit can still work from within, GIT_DIR of a seconary worktree (which resides at.git/worktrees/ name/), of the primary worktree without explicitly specifying the GIT_DIR, environment variable or the --git-dir=. option. The output format for dates "iso-strict" has been tweaked to show, a time in the Zulu timezone with "Z" suf, instead of "+00:00". "git diff" and friends learned two extra configuration variables, diff.srcPreand diff.dstPre. The status.showUntrackedFiles configuration variable had a name, that tempts users to set a Boolean value expressed in our usual, "false", "off", and "0", but it only took "no". This has been, corrected so "true" and its synonyms are taken as "normal", while, "false" and its synonyms are taken as "no". Remove an ancient and not well ma
2.44.024 Feb 2024 18:05 minor feature: git checkout -B. " used to allow switching to a branch that, is in use on another worktree, but this was by mistake. The users, need to use "--ignore-other-worktrees" option. "git add" and "git stash" learned to support the ":(attr:.)", magic pathspec. "git rebase --autosquash" is now enabled for non-interactive rebase, but it is still incompatible with the apply backend. Introduce "git replay", a tool meant on the server side without, working tree to recreate a history. "git merge-file" learned to take the "--diff-algorithm" option to, use algorithm different from the default "myers" diff. Command line completion (in contrib/) learned to complete path, arguments to the "add/set" subcommands of "git sparse-checkout", better. "git checkout -B. " allowed a branch that is, in use in another worktree to be updated and checked out, which, might be a bit unexpected. The rule has been tightened, which is a, breaking change. "--ignore-other-worktrees" option is required to, unbreak you, if you are used to the current behaviour that "-B", overrides the safety. The builtin_objectmode attribute is populated for each path, without adding anything in.gitattributes files, which would be, useful in magic pathspec, e.g. ":(attr:builtin_objectmode=100755)", to limit to executables. "git fetch" learned to pay attention to "fetch.all" configuration, variable, which pretends as if "--all" was passed from the command, line when no remote parameter was given. In addition to (rather cryptic) Security Identifiers, show username, and domain in the error message when we barf on mismatch between, the Git directory and the current user on Windows. The error message given when "git branch -d branch" fails due to, commits unique to the branch has been split into an error and a new, conditional advice message. When given an existing but unreadable file as a configuration file, gitweb behaved as if the file did not exist at all, but now it, errors out. This is a change that may brea
2.43.215 Feb 2024 11:25 minor feature: Update to a new feature recently added, "git show-ref --exists". Rename detection logic ignored the final line of a file if it is an, incomplete line. "git diff --no-rename A B" did not disable rename detection but did, not trigger an error from the command line parser. "git diff --no-index file1 file2" segfaulted while invoking the, external diff driver, which has been corrected. Rewrite //-comments to / comments */ in files whose comments, prevalently use the latter. A failed "git tag -s" did not necessarily result in an error, depending on the crypto backend, which has been corrected. "git stash" sometimes was silent even when it failed due to, unwritable index file, which has been corrected. Recent conversion to allow more than 0/1 in GIT_FLUSH broke the, mechanism by flipping what yes/no means by mistake, which has been, corrected.
2.43.111 Feb 2024 07:45 minor feature: The way CI testing used "prove" could lead to running the test, suite twice needlessly, which has been corrected. Newer versions of Getopt::Long started giving warnings against our, (ab)use of it in "git send-email". Bump the minimum version, requirement for Perl to 5.8.1 to allow, simplifying our implementation. Earlier we stopped relying on commit-graph that (still) records, information about commits that are lost from the object store, which has negative performance implications. The default has been, flipped to disable this pessimization. Stale URLs have been updated to their current counterparts (or, archive.org) and HTTP links are replaced with working HTTPS links. trace2 streams used to record the URLs that potentially embed, authentication material, which has been corrected. The sample pre-commit hook that tries to catch introduction of new, paths that use potentially non-portable characters did not notice, an existing path getting renamed to such a problematic path, when, rename detection was enabled. The command line parser for the "log" family of commands was too, loose when parsing certain numbers, e.g. silently ignoring the, extra 'q' in "git log -n 1q" without complaining, which has been, tightened up. "git cmd --end-of-options --rev -- --path" for some cmd failed, to interpret "--rev" as a rev, and "--path" as a path. This was, for many programs like "reset" and "checkout". "git bisect reset" has been taught to clean up state files and refs, even when BISECT_START file is gone. Some codepaths did not correctly parse configuration variables, specified with valueless "true", which has been corrected. Code clean-up for sanity checking of command line options for "git, show-ref". The code to parse the From e-mail header has been updated to avoid, recursion. "git fetch --atomic" d an unnecessary empty error message, which has been corrected. Command line completion script (in contrib/) learned to work better, with the reftable backend. "git
2.43.021 Nov 2023 17:45 minor feature: The "--rfc" option of "git format-patch" used to be a valid way to, override an earlier "--subject-pre=. " on the command, line and replace it with " RFC PATCH ", but from this release, it, merely prethe string "RFC " in front of the given subject, pre. If you are negatively affected by this change, please use, "--subject-pre=PATCH --rfc" as a replacement. In Git 2.42, "git rev-list --stdin" learned to take non-revisions, (like "--not") from the standard input, but the way such a "--not" was, handled was quite confusing, which has been rethought. The updated, rule is that "--not" given from the command line only affects revs, given from the command line that comes but not revs read from the, standard input, and "--not" read from the standard input affects, revs given from the standard input and not revs given from the, command line. A message written in olden time prevented a branch from getting, checked out, saying it is already checked out elsewhere. But these, days, we treat a branch that is being bisected or rebased just like, a branch that is checked out and protect it from getting modified, with the same codepath. The message has been rephrased to say that, the branch is "in use" to avoid confusion. Hourly and other schedules of "git maintenance" jobs are randomly, distributed now. "git cmd -h" learned to signal which options can be negated by, listing such options like "-- no- opt". The way authentication related data other than passwords (e.g, oauth token and password expiration data) are stored in libsecret, keyrings has been rethought. Update the libsecret and wincred credential helpers to correctly, match which credential to erase; they erased the wrong entry in, some cases. Git GUI updates. "git format-patch" learned a new "--description-file" option that, lets cover letter description to be fed; this can be used on, detached HEAD where there is no branch description available, and, also can override the branch description if there is one. Use o
2.42.103 Nov 2023 06:45 minor feature: Tests that are known to pass with LSan are now marked as such. Flaky "git p4" tests, as well as "git svn" tests, are now skipped, in the (rather expensive) sanitizer CI job. Tests with LSan from time to time seem to emit harmless message, that makes our tests unnecessarily flaky; we work it around by, filtering the uninteresting output. GitHub CI workflow has learned to trigger Coverity check. Overly long label names used in the sequencer machinery are now, chopped to fit under filesystem limitation. Scalar updates. Tweak GitHub Actions CI so that pushing the same commit to multiple, branch tips at the same time will not waste building and testing, the same thing twice. The commit-graph verification code that detects mixture of zero and, non-zero generation numbers has been updated. "git diff -w --exit-code" with various options did not work, correctly, which is being addressed. transfer.unpackLimit ought to be used as a fallback, but overrode, fetch.unpackLimit and receive.unpackLimit instead. The use of API between two calls to require_clean_work_tree() from, the sequencer code has been cleaned up for consistency. "git diff --no-such-option" and other corner cases around the exit, status of the "diff" command has been corrected. "git for-each-ref --sort='contents:size'" sorts the refs according, to size numerically, giving a ref that points at a blob twelve-byte, (12) long before showing a blob hundred-byte (100) long. Various to the behavior of "rebase -i" when the command got, interrupted by conflicting changes. References from description of the `--patch` option in various, manual pages have been simplified and improved. "git grep -e A --no-or -e B" is accepted, even though the negation, of "or" did not mean anything, which has been tightened. The completion script (in contrib/) has been taught to treat the, "-t" option to "git checkout" and "git switch" just like the, "--track" option, to complete remote-tracking branches. "git diff --no-index
2.42.022 Aug 2023 06:25 minor feature: git pack-refs" learns "--include" and "--exclude" to tweak the ref, hierarchy to be packed using pattern matching. 'git worktree add' learned how to create a worktree based on an, orphaned branch with `--orphan`. "git pack-objects" learned to invoke a new hook program that, enumerates extra objects to be used as anchoring points to keep, otherwise unreachable objects in cruft packs. Add more "git var" for toolsmiths to learn various locations Git is, configured with either via the configuration or hard-coded defaults. 'git notes append' was taught '--separator' to specify string to insert, between paragraphs. The "git for-each-ref" family of commands learned placeholders, related to GPG signature verification. "git diff --no-index" learned to read from named pipes as if they, were regular files, to allow "git diff
2.41.002 Jun 2023 03:25 minor feature: Allow information carried on the WWW-Authenticate header to be, passed to the credential helpers. A new "fetch.hideRefs" option can be used to exclude specified refs, from "rev-list --objects --stdin --not --all" traversal for, checking object connectivity, most useful when there are many, unrelated histories in a single repository. "git push" has been taught to allow deletion of refs with one-level, names to help repairing a repository who acquired such a ref by, mistake. In general, we don't encourage use of such a ref, and, creation or update to such a ref is rejected as before. Allow "git bisect reset" to check out the original branch when the, branch is already checked out in a different worktree linked to the, same repository. A few subcommands have been taught to stop users from working on a, branch that is being used in another worktree linked to the same, repository. "git format-patch" learned to write a log-message only output file, for empty commits. "git format-patch" honors the src/dst preset to nonstandard, values with configuration variables like "diff.nopre", causing, receiving end of the patch that expects the standard -p1 format to, break. "format-patch" has been taught to ignore end-user configuration, and always use the standard pre. This is a backward compatibility breaking change. Lift the limitation that colored prompts can only be used with, PROMPT_COMMAND mode. "git blame --contents=.. --. " used to be forbidden, but now it finds the origins of lines starting at. contents, through the history that leads to.. "git pack-redundant" gave a warning when run, as the command has, outlived its usefulness long ago and is nominated for future, removal. Now we escalate to give an error. "git clone" from an empty repository learned to propagate the, choice of the hash algorithm from the source repository to the, newly created repository over any one of the v0/v1/v2 protocol. "git mergetool" and "git difftool" learns a new configuration, gui
2.40.014 Mar 2023 03:17 minor feature: merge-tree" learns a new `--merge-base` option. "git jump" (in contrib/) learned to present the "quicklist" to, its standard output (instead of letting it consumed by the editor, it invokes), and learned to also drive emacs/emacsclient. "git var UNKNOWN_VARIABLE" and "git var VARIABLE" with the variable, given an empty value used to behave identically. Now the latter, just gives an empty output, while the former still gives an error, message. Introduce a case insensitive mode to the Bash completion helpers. The advice message given by "git status" when it takes long time to, enumerate untracked paths has been updated. Just like "git var GIT_EDITOR" abstracts the complex logic to, choose which editor gets used behind it, "git var" now give support, to GIT_SEQUENCE_EDITOR. "git format-patch" learned to honor format.mboxrd even when sending, patches to the standard output stream, 'cat-file' gains mailmap support for its '--batch-check' and '-s', options. Conditionally skip the pre-applypatch and applypatch-msg hooks when, applying patches with 'git am'. Introduce an optional configuration to allow the trailing hash that, protects the index file from bit flipping. "git check-attr" learned to take an optional tree-ish to read the.gitattributes file from. "scalar" learned to give progress bar. "grep -P" learned to use Unicode Character Property to grok, character classes when processing b and w etc. "git rebase" often ignored incompatible options instead of, complaining, which has been corrected. "scalar" warns but continues when its periodic maintenance, feature cannot be enabled. The bundle-URI subsystem adds support for creation-token heuristics, to help incremental fetches. Userdiff regexp update for Java language. "git fetch --jobs=0" used to hit a (), which has been corrected, to use the available CPUs. An invalid label or ref in the "rebase -i" todo file used to, trigger an runtime error. SUch an error is now diagnosed while the, todo file is pa
2.39.016 Dec 2022 06:25 minor feature: git grep" learned to expand the sparse-index more lazily and on, demand in a sparse checkout. By default, use of fsmonitor on a repository on networked, filesystem is disabled. Add knobs to make it workable on macOS. After checking out a "branch" that is a symbolic-ref that points at, another branch, "git symbolic-ref HEAD" reports the underlying, branch, not the symbolic-ref the user gave checkout as argument. The command learned the "--no-recurse" option to stop after, dereferencing a symbolic-ref only once. "git branch --edit-description @ -1 " is now a way to edit branch, description of the branch you were on before switching to the, current branch. "git merge-tree --stdin" is a new way to request a series of merges, and report the merge results. "git shortlog" learned to group by the "format" string. A new "--include-whitespace" option is added to "git patch-id", and, existing in the internal patch-id logic that did not match, what "git patch-id" produces have been corrected. Enable gc.cruftpacks by default for those who opt into, feature.experimental setting. "git repack" learns to send cruft objects out of the way into, packfiles outside the repository. 'scalar reconfigure -a' is taught to automatically remove, scalar.repo entires which no longer exist. Redact headers from cURL's h2h3 module in GIT_CURL_VERBOSE and, others. 'git maintenance register' is taught to write configuration to an, arbitrary path, and 'git for-each-repo' is taught to expand tilde, characters in paths. When creating new notes, the template used to get a stray empty, newline, which has been removed. "git receive-pack" used to use all the local refs as the boundary for, checking connectivity of the data "git push" sent, but now it uses, only the refs that it advertised to the pusher. In a repository with, the.hideRefs configuration, this reduces the resources needed to, perform the check. With '--recurse-submodules=on-demand', all submodules are, recursively pushed. With a
2.38.212 Dec 2022 08:05 minor feature: Update CodingGuidelines to clarify what features to use and avoid, in C99. The codepath that reads from the index v4 had unaligned memory, accesses, which has been corrected. "git remote rename" failed to rename a remote without fetch, refspec, which has been corrected. "git clone" did not like to see the "--bare" and the "--origin", options used together without a good reason. messages incorrectly marked for translation. "git fsck" failed to release contents of tree objects already used, from the memory, which has been. "git rebase -i" can mistakenly attempt to apply a up to a commit, itself, which has been corrected. In read-only repositories, "git merge-tree" tried to come up with a, merge result tree object, which it failed (which is not wrong) and, led to a segfault (which is bad), which has been corrected. Force C locale while running tests around httpd to make sure we can, find expected error messages in the log. a logic in "mailinfo -b" that miscomputed the length of a, substring, which lead to an out-of-bounds access. The codepath to sign learned to report errors when it fails to read, from "ssh-keygen". "GIT_EDITOR=: git branch --edit-description" resulted in failure, which has been corrected. Documentation on various Boolean GIT_ environment variables have, been clarified. "git multi-pack-index repack/expire" used to repack unreachable, cruft into a new pack, which have been corrected. The code to clean temporary object directories (used for, quarantine) tried to remove them inside its signal handler, which, was a no-no. "git branch --edit-description" on an unborh branch misleadingly, said that no such branch exists, which has been corrected. GitHub CI settings have been adjusted to recent reality, merging, and cherry-picking necessary topics that have been prepared for Git, 2.39. `git rebase --update-refs` would delete references when all `update-ref`, commands in the sequencer were removed, which has been corrected.
2.38.004 Oct 2022 03:25 minor feature: git remote show -n frotz" now pays attention to negative, pathspec. "git push" sometimes performs poorly when reachability bitmaps are, used, even in a repository where other operations are helped by, bitmaps. The push.useBitmaps configuration variable is introduced, to allow disabling use of reachability bitmaps only for "git push". "git grep -m " is a way to limit the hits shown per file. "git merge-tree" learned a new mode where it takes two commits and, computes a tree that would result in the merge commit, if the, histories leading to these two commits were to be merged. "git mv A B" in a sparsely populated working tree can be asked to, move a path between directories that are "in cone" (i.e. expected, to be materialized in the working tree) and "out of cone", (i.e. expected to be hidden). The handling of such cases has been, improved. Earlier, HTTP transport clients learned to tell the server side, what locale they are in by sending Accept-Language HTTP header, but, this was done only for some requests but not others. Introduce a safe.barerepository configuration variable that, allows users to forbid discovery of bare repositories. Various messages that come from the pack-bitmap codepaths have been, tweaked. "git rebase -i" learns to update branches whose tip appear in the, rebased range with "--update-refs" option. "git ls-files" learns the "--format" option to tweak its output. "git cat-file" learned an option to use the mailmap when showing, commit and tag objects. When "git merge" finds that it cannot perform a merge, it should, restore the working tree to the state before the command was, initiated, but in some corner cases it didn't. Operating modes like "--batch" of "git cat-file" command learned to, take NUL-terminated input, instead of one-item-per-line. "git rm" has become more aware of the sparse-index feature. "git rev-list --disk-usage" learned to take an optional value, "human" to show the reported value in human-readable format,
2.37.331 Aug 2022 16:25 minor feature: The build procedure for Windows that uses CMake has been updated to, pick up the shell interpreter from local installation location. Conditionally allow building Python interpreter on Windows, to lstat() emulation on Windows. Older gcc with -Wall complains about the universal zero initializer, "struct s = 0 ;" idiom, which makes developers' lives, inconvenient (as -Werror is enabled by DEVELOPER=YesPlease). The, build procedure has been tweaked to help these compilers. Plug memory leaks in the failure code path in the "merge-ort" merge, strategy backend. Avoid repeatedly running getconf to ask libc version in the test, suite, and instead just as it once per script. Platform-specific code that determines if a directory is OK to use, as a repository has been taught to report more details, especially, on Windows. "vimdiff3" regression has been corrected. "git fsck" reads mode from tree objects but canonicalizes the mode, before passing it to the logic to check object sanity, which has, hid broken tree objects from the checking logic. This has been, corrected, but to help exiting projects with broken tree objects, that they cannot retroactively, the severity of anomalies this, code detects has been demoted to "info" for now. to sparse index compatibility work for "reset" and "checkout", commands. Documentation for "git add --renormalize" has been improved.
2.37.212 Aug 2022 06:45 minor feature: git shortlog -n" relied on the underlying qsort() to be stable, which shouldn't have.. Variable quoting in the vimdiff driver of "git mergetool". An earlier attempt to plug leaks placed a clean-up label to jump to, at a bogus place, which as been corrected. a long-standing corner case around directory renames in, the merge-ort strategy. Recent update to vimdiff layout code has been made more robust, against different end-user vim settings. In a non-bare repository, the behavior of Git when the, core.worktree configuration variable points at a directory that has, a repository as its subdirectory, regressed in Git 2.27 days. References to commands-to-be-typed-literally in "git rebase", documentation mark-up have been corrected. Give _() markings to fatal/warning/usage: labels that are shown in, front of these messages. "git mktree --missing" lazily fetched objects that are missing from, the local object store, which was totally unnecessary for the purpose, of creating the tree object(s) from its input. for tests when the source directory has unusual characters in, its path, e.g. whitespaces, double-quotes, etc. Adjust technical/bitmap-format to be formatted by AsciiDoc, and, add some missing information to the documentation. Certain diff options are currently ignored when combined-diff is, shown; mark them as incompatible with the feature. "git clone" from a repository with some ref whose HEAD is unborn, did not set the HEAD in the resulting repository correctly, which, has been corrected. mkstemp() emulation on Windows has been improved. Add missing documentation for "include" and "includeIf" features in, "git config" file format, which incidentally teaches the command, line completion to include them in its offerings. Avoid "white/black-list" in documentation and code comments. Workaround for a compiler warning against use of die() in, osx-keychain (in contrib/). Workaround for a false positive compiler warning. The resolve-undo information in the
2.37.113 Jul 2022 09:45 minor feature: Rewrite of "git add -i" in C that appeared in Git 2.25 didn't, correctly record a removed file to the index, which is an old, regression but has become widely known because the C version has, become the default in the latest release. for CVS-2022-29187.
2.37.028 Jun 2022 03:18 minor feature: vimdiff 123 " mergetool drivers have been reimplemented with a, more generic layout mechanism. "git -v" and "git -h" are now understood as "git --version" and, "git --help". The temporary files fed to external diff command are now generated, inside a new temporary directory under the same basename. "git log --since=X" will stop traversal upon seeing a commit that, is older than X, but there may be commits behind it that is younger, than X when the commit was created with a faulty clock. A new, option is added to keep digging without stopping, and instead, filter out commits with timestamp older than X. "git -c branch.autosetupmerge=simple branch A B" will set the B, as A's upstream only when A and B shares the same name, and "git, -c push.default=simple" on branch A would push to update the, branch A at the remote B came from. Also more places use the, sole remote, if exists, before defaulting to 'origin'. A new doc has been added that lists tips for tools to work with, Git's codebase. "git remote -v" now shows the list-objects-filter used during, fetching from the remote, if available. With the new http.curloptResolve configuration, the CURLOPT_RESOLVE, mechanism that allows cURL based applications to use pre-resolved, IP addresses for the requests is exposed to the scripts. "git add -i" was rewritten in C some time ago and has been in, testing; the reimplementation is now exposed to general public by, default. Deprecate non-cone mode of the sparse-checkout feature. Introduce a filesystem-dependent mechanism to optimize the way the, bits for many loose object files are ensured to hit the disk, platter. The "do not remove the directory the user started Git in" logic, when Git cannot tell where that directory is, is disabled. Earlier, we refused to run in such a case. A mechanism to pack unreachable objects into a "cruft pack", instead of ejecting them into loose form to be reclaimed later, has, been introduced. Update the doctype written in git
2.36.107 May 2022 13:45 minor feature: git submodule update" without pathspec should silently skip an, uninitialized submodule, but it started to become noisy by mistake. "diff-tree --stdin" has been broken for about a year, but 2.36, release broke it even worse by breaking running the command with., which in turn broke "gitk" and got noticed. This has, been corrected by aligning its behaviour to that of "log". Regression for 2.36 where "git name-rev" started to sometimes, reference strings after they are freed. "git show..... --. " lost the pathspec, when showing the second and subsequent commits, which has been, corrected. "git fast-export --. " lost the pathspec when showing the, second and subsequent commits, which has been corrected. "git format-patch. --. " lost the pathspec when, showing the second and subsequent commits, which has been, corrected. Get rid of a bogus and over-eager coccinelle rule. Correct choices of C compilers used in various CI jobs.
2.36.021 Apr 2022 04:25 minor feature: git name-rev --stdin" has been deprecated and a warning, when used; use "git name-rev --annotate-stdin" instead. "git clone --filter=... --recurse-submodules" only makes the, top-level a partial clone, while submodules are fully cloned. This, behaviour is changed to pass the same filter down to the submodules. With the for CVE-2022-24765 that are common with versions of, Git 2.30.4, 2.31.3, 2.32.2, 2.33.3, 2.34.3, and 2.35.3, Git has, been taught not to recognise repositories owned by other users, in, order to avoid getting affected by their config files and hooks. You can list the path to the safe/trusted repositories that may be, owned by others on a multi-valued configuration variable, `safe.directory` to override this behaviour, or use '*' to declare, that you trust anything. Since Git 2.31, our source assumed that the compiler you use to, build Git supports variadic macros, with an easy-to-use escape, hatch to allow compilation without variadic macros with an request, to report that you had to use the escape hatch to the list. Because we haven't heard from anybody who actually needed to use, the escape hatch, it has been removed, making support of variadic, macros a hard requirement. Assorted updates to "git cat-file", especially "-h". The command line completion (in contrib/) learns to complete, arguments to give to "git sparse-checkout" command. "git log --remerge-diff" shows the difference from mechanical merge, result and the result that is actually recorded in a merge commit. "git log" and friends learned an option --exclude-first-parent-only, to propagate UNINTERESTING bit down only along the first-parent, chain, just like --first-parent option shows commits that lack the, UNINTERESTING bit only along the first-parent chain. The command line completion script (in contrib/) learned to, complete all Git subcommands, including the ones that are normally, hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used. "git branch" learned the "--recurse-submo
2.35.025 Jan 2022 12:45 minor feature: _" is now treated as any other URL-valid characters in an URL when, matching the per-URL configuration variable names. The color palette used by "git grep" has been updated to match that, of GNU grep. You may need to define NO_UNCOMPRESS2 Makefile macro if you build, with zlib older than 1.2.9. If your compiler cannot grok C99, the build will fail. See the, instruction at the beginning of git-compat-util.h if this happens, to you. "git status --porcelain=v2" now show the number of stash entries, with --show-stash like the normal output does. "git stash" learned the "--staged" option to stash away what has, been added to the index (and nothing else). "git var GIT_DEFAULT_BRANCH" is a way to see what name is used for, the newly created branch if "git init" is run. Various operating modes of "git reset" have been made to work, better with the sparse index. "git submodule deinit" for a submodule whose.git metadata, directory is embedded in its working tree refused to work, until, the submodule gets converted to use the "absorbed" form where the, metadata directory is stored in superproject, and a gitfile at the, top-level of the working tree of the submodule points at it. The, command is taught to convert such submodules to the absorbed form, as needed. The completion script (in contrib/) learns that the "--date", option of commands from the "git log" family takes "human" and, "auto" as valid values. "Zealous diff3" style of merge conflict presentation has been added. The "git log --format= (describe)" placeholder has been extended to, allow passing selected command-line options to the underlying "git, describe" command. "default" and "reset" have been added to our color palette. The cryptographic signing using ssh keys can specify literal keys, for keytypes whose name do not begin with the "ssh-" preby, using the "key::" premechanism (e.g. "key::ecdsa-sha2-nistp256"). "git fetch" without the "--update-head-ok" option ought to protect, a checked out branch
2.34.125 Nov 2021 03:17 minor feature: git grep" looking in a blob that has non-UTF8 payload was, completely broken when linked with certain versions of PCREv2, library in the latest release. "git pull" with any strategy when the other side is behind us, should succeed as it is a no-op, but doesn't. An earlier change in 2.34.0 caused JGit application (that abused, GIT_EDITOR mechanism when invoking "git config") to get stuck with, a SIGTTOU signal; it has been reverted. An earlier change that broke.gitignore matching has been reverted. SubmittingPatches document gained a syntactically incorrect mark-up, which has been corrected.
2.34.016 Nov 2021 03:17 minor feature: The "--preserve-merges" option of "git rebase" has been removed. Pathname expansion (like " username/") learned a way to specify a, location relative to Git installation (e.g. its sharedir which is, (pre)/share), with " (pre)". The `ort` strategy is used instead of `recursive` as the default, merge strategy. The userdiff pattern for "java" language has been updated. "git rebase" by default skips changes that are equivalent to, commits that are already in the history the branch is rebased onto; give messages when this happens to let the users be aware of, skipped commits, and also teach them how to tell "rebase" to keep, duplicated changes. The advice message that "git cherry-pick" gives when it asks, conflicted replay of a commit to be resolved by the end user has, been updated. After "git clone --recurse-submodules", all submodules are cloned, but they are not by default recursed into by other commands. With, submodule.stickyRecursiveClone configuration set, submodule.recurse, configuration is set to true in a repository created by "clone", with "--recurse-submodules" option. The logic for auto-correction of misspelt subcommands learned to go, interactive when the help.autocorrect configuration variable is set, to 'prompt'. "git maintenance" scheduler learned to use systemd timers as a, possible backend. "git diff --submodule=diff" showed failure from run_command() when, trying to run diff inside a submodule, when the user manually, removes the submodule directory. "git bundle unbundle" learned to show progress display. In cone mode, the sparse-index code path learned to remove ignored, files (like build artifacts) outside the sparse cone, allowing the, entire directory outside the sparse cone to be removed, which is, especially useful when the sparse patterns change. Taking advantage of the CGI interface, http-backend has been, updated to enable protocol v2 automatically when the other side, asks for it. The credential-cache helper has been adjusted
2.33.113 Oct 2021 18:05 minor feature: The unicode character width table (used for output alignment) has, been updated. Input validation of "git pack-objects --stdin-packs" has been, corrected. for common ancestor negotiation recently introduced in "git, push" codepath. "git pull" had various corner cases that were not well thought out, around its --rebase backend, e.g. "git pull --ff-only" did not stop, but went ahead and rebased when the history on other side is not a, descendant of our history. The series tries to them up. "git apply" miscounted the bytes and failed to read to the end of, binary hunks. "git range-diff" code clean-up. "git commit --up" now works with "--edit" again, after it was, broken in v2.32. Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the, new version has a blocker for that architecture. Checking out all the paths from HEAD during the last conflicted, step in "git rebase" and continuing would cause the step to be, skipped (which is expected), but leaves MERGE_MSG file behind in, GIT_DIR and confuses the next "git commit", which has been, corrected. Various in "git rebase -r" have been. mmap() imitation used to call xmalloc() that dies upon malloc(), failure, which has been corrected to just return an error to the, caller to be handled. "git diff --relative" segfaulted and/or produced incorrect result, when there are unmerged paths. The delayed checkout code path in "git checkout" etc. were chatty, even when --quiet and/or --no-progress options were given. "git branch -D. " used to refuse to remove a broken branch, ref that points at a missing commit, which has been corrected. Build update for Apple clang. The parser for the "--nl" option of "git column" has been, corrected. "git upload-pack" which runs on the other side of "git fetch", forgot to take the ref namespaces into account when handling, want-ref requests. The sparse-index support can corrupt the index structure by storing, a stale and/or uninitialized data, which has been corrected. gy
2.33.017 Aug 2021 03:17 minor feature: git send-email" learned the "--sendmail-cmd" command line option, and the "sendemail.sendmailCmd" configuration variable, which is a, more sensible approach than the current way of repurposing the, "smtp-server" that is meant to name the server to instead name the, command to talk to the server. The userdiff pattern for C# learned the token "record". "git rev-list" learns to omit the "commit " header, lines from the output with the `--no-commit-header` option. "git worktree add --lock" learned to record why the worktree is, locked with a custom message. The code to handle the "--format" option in "for-each-ref" and, friends made too many string comparisons on (atom)s used in the, format string, which has been corrected by converting them into, enum when the format string is parsed. Use the hashfile API in the codepath that writes the index file to, reduce code duplication. Repeated rename detections in a sequence of mergy operations have, been optimized out for the 'ort' merge strategy. Preliminary clean-up of tests before the main reftable changes, hits the codebase. The backend for "diff -G/-S" has been updated to use pcre2 engine, when available. Use ".DELETE_ON_ERROR" pseudo target to simplify our Makefile. Code cleanup around struct_type_init() functions. "git send-email" optimization. GitHub Actions / CI update. (merge 0dc787a9f2 js/ci-windows-update later to maint). Object accesses in repositories with many alternate object store, have been optimized. "git log" has been optimized not to waste cycles to load ref, decoration data that may not be needed. Many "printf"-like helper functions we have have been annotated, with __attribute__() to catch placeholder/parameter mismatches. Tests that cover protocol bits have been updated and helpers, used there have been consolidated. The CI gained a new job to run "make sparse" check. "git status" codepath learned to work with sparsely populated index, without hydrating it fully. A guideline for gen
2.32.007 Jun 2021 03:16 minor feature: gitattributes", ".gitignore", and ".mailmap" files that are, symbolic links are ignored. "git apply --3way" used to first attempt a straight application, and only fell back to the 3-way merge algorithm when the stright, application failed. Starting with this version, the command will, first try the 3-way merge algorithm and only when it fails (either, resulting with conflict or the base versions of blobs are missing), falls back to the usual patch application. It does not make sense to make ".gitattributes", ".gitignore" and, ".mailmap" symlinks, as they are supposed to be usable from the, object store (think: bare repositories where HEAD:mailmap etc. are, used). When these files are symbolic links, we used to read the, contents of the files pointed by them by mistake, which has been, corrected. "git stash show" learned to optionally show untracked part of the, stash. "git log --format='...'" learned " (describe)" placeholder. "git repack" so far has been only capable of repacking everything, under the sun into a single pack (or split by size). A cleverer, strategy to reduce the cost of repacking a repository has been, introduced. The http codepath learned to let the credential layer to cache the, password used to unlock a certificate that has successfully been, used. "git commit --up=. ", which was to tweak the changes made, to the contents while keeping the original log message intact, learned "--up=(amend reword): ", that can be used to, tweak both the message and the contents, and only the message, respectively. "git send-email" learned to honor the core.hooksPath configuration. "git format-patch -v. " learned to allow a reroll count that is, not an integer. "git commit" learned "--trailer. =. " option; together, with the interpret-trailers command, this will make it easier to, support custom trailers. "git clone --reject-shallow" option fails the clone as soon as we, notice that we are cloning from a shallow repository. A configuration variable ha
2.31.127 Mar 2021 11:45 minor feature: The fsmonitor interface read from its input without making sure, there is something to read from. This is new in 2.31, timeframe. The data structure used by fsmonitor interface was not properly, duplicated during an in-core merge, leading to use-after-free etc. "git bisect" reimplemented more in C during 2.30 timeframe did not, take an annotated tag as a good/bad endpoint well. This regression, has been corrected. macros that can silently inject unintended null-statements. CALLOC_ARRAY() macro replaces many uses of xcalloc(). Update insn in Makefile comments to run fuzz-all target. a corner case in "git mv" on case insensitive systems, which was introduced in 2.29 timeframe.
2.31.016 Mar 2021 07:05 minor feature: The "pack-redundant" command, which has been left stale with almost, unusable performance, now warns loudly when it gets used, as, we no longer want to recommend its use (instead just "repack -d", instead). The development community has adopted Contributor Covenant v2.0 to, update from v1.4 that we have been using. The support for deprecated PCRE1 library has been dropped. for CVE-2021-21300 in Git 2.30.2 (and earlier) is included. The "--format= (trailers)" mechanism gets enhanced to make it, easier to design output for machine consumption. When a user does not tell "git pull" to use rebase or merge, the, command gives a loud message telling a user to choose between, rebase or merge but creates a merge anyway, forcing users who would, want to rebase to redo the operation. an early part of this, problem by tightening the condition to give the message---there is, no reason to stop or force the user to choose between rebase or, merge if the history fast-forwards. The configuration variable 'core.abbrev' can be set to 'no' to, force no abbreviation regardless of the hash algorithm. "git rev-parse" can be explicitly told to give output as absolute, or relative path with the `--path-format=(absolute relative)` option. Bash completion (in contrib/) update to make it easier for, end-users to add completion for their custom "git" subcommands. "git maintenance" learned to drive scheduled maintenance on, platforms whose native scheduling methods are not 'cron'. After expiring a reflog and making a single commit, the reflog for, the branch would record a single entry that knows both @ 0 and, @ 1 , but we failed to answer "what commit were we on?", i.e. @ 1 , "git bundle" learns "--stdin" option to read its refs from the, standard input. Also, it now does not lose refs whey they point, at the same object. "git log" learned a new "--diff-merges=. " option. "git ls-files" can and does show multiple entries when the index is, unmerged, which is a source for confusion
2.30.109 Feb 2021 10:45 minor feature: git fetch --recurse-submodules" failed to update a submodule, when it has an uninitialized (hence of no interest to the user), sub-submodule, which has been corrected. Command line error of "git rebase" are diagnosed earlier. "git stash" did not work well in a sparsely checked out working, tree. Some tests expect that "ls -l" output has either '-' or 'x' for, group executable bit, but setgid bit can be inherited from parent, directory and make these fields 'S' or 's' instead, causing test, failures. "git for-each-repo --config=.. " should not run. for, any repository when the configuration variable. is not defined, even once. "git mergetool --tool-help" was broken in 2.29 and failed to list, all the available tools. for procedure to building CI test environment for mac. Newline characters in the host and path part of git:// URL are, now forbidden. When more than one commit with the same patch ID appears on one, side, "git log --cherry-pick A...B" did not exclude them all when a, commit with the same patch ID appears on the other side. Now it, does. Documentation for "git fsck" lost stale bits that has become, incorrect. Doc for packfile URI feature has been clarified. The implementation of "git branch --sort" wrt the detached HEAD, display has always been hacky, which has been cleaned up. Our setting of GitHub CI test jobs were a bit too eager to give up, once there is even one failure found. Tweak the knob to allow, other jobs keep running even when we see a failure, so that we can, find more failures in a single run.
2.30.029 Dec 2020 20:25 minor feature: Userdiff for PHP update. Userdiff for Rust update. Userdiff for CSS update. The command line completion script (in contrib/) learned that "git, stash show" takes the options "git diff" takes. "git worktree list" now shows if each worktree is locked. This, possibly may open us to show other kinds of states in the future. "git maintenance", an extended big brother of "git gc", continues, to evolve. "git push --force-with-lease =. " can easily be misused to lose, commits unless the user takes good care of their own "git fetch". A new option "--force-if-includes" attempts to ensure that what is, being force-pushed was created after examining the commit at the, tip of the remote ref that is about to be force-replaced. "git clone" learned clone.defaultremotename configuration variable, to customize what nickname to use to call the remote the repository, was cloned from. "git checkout" learned to use checkout.guess configuration variable, and enable/disable its "-- no- guess" option accordingly. "git resurrect" script (in contrib/) learned that the object names, may be longer than 40-hex depending on the hash function in use. "git diff A...B" learned "git diff --merge-base A B", which is a, longer short-hand to say the same thing. A sample 'push-to-checkout' hook, that performs the same as, what the built-in default action does, has been added. "git diff" family of commands learned the "-I. " option to, ignore hunks whose changed lines all match the given pattern. The userdiff pattern learned to identify the function definition in, POSIX shells and bash. "git checkout-index" did not consistently signal an error with its, exit status, but now it does. A commit and tag object may have CR at the end of each and, every line (you can create such an object with hash-object or, using --cleanup=verbatim to decline the default clean-up, action), but it would make it impossible to have a blank line, to separate the title from the body of the message. We are now, more
2.29.231 Oct 2020 07:05 minor feature: In 2.29, "--committer-date-is-author-date" option of "rebase" and, "am" subcommands lost the e-mail address by mistake, which has been, corrected.
2.29.020 Oct 2020 06:25 minor feature: git help log" has been enhanced by sharing more material from the, documentation for the underlying "git rev-list" command. "git for-each-ref --format=" learned (contents:size). "git merge" learned to selectively omit " into. " at the end, of the title of default merge message with merge.suppressDest, configuration. The component to respond to "git fetch" request is made more, configurable to selectively allow or reject object filtering, specification used for partial cloning. Stop when "sendmail.*" configuration variables are defined, which, could be a mistaken attempt to define "sendemail.*" variables. The existing backends for "git mergetool" based on variants of vim, have been refactored and then support for "nvim" has been added. "git bisect" learns the "--first-parent" option to find the first, breakage along the first-parent chain. "git log --first-parent -p" showed patches only for single-parent, commits on the first-parent chain; the "--first-parent" option has, been made to imply "-m". Use "--no-diff-merges" to restore the, previous behaviour to omit patches for merge commits. The commit labels used to explain each side of conflicted hunks, placed by the sequencer machinery have been made more readable by, humans. The "--batch-size" option of "git multi-pack-index repack" command, is now used to specify that very small packfiles are collected into, one until the total size roughly exceeds it. The recent addition of SHA-256 support is marked as experimental in, the documentation. "git fetch" learned --no-write-fetch-head option to avoid writing, the FETCH_HEAD file. Command line completion (in contrib/) usually omits redundant, deprecated and/or dangerous options from its output; it learned to, optionally include all of them. The output from the "diff" family of the commands had abbreviated, object names of blobs involved in the patch, but its length was not, affected by the --abbrev option. Now it is. "git worktree" gained a "repair" subcomm
2.28.028 Jul 2020 20:25 minor feature: fetch.writeCommitGraph" is deemed to be still a bit too risky and, is no longer part of the "feature.experimental" set. The commands in the "diff" family learned to honor "diff.relative", configuration variable. The check in "git fsck" to ensure that the tree objects are sorted, still had corner cases it missed unsorted entries. The interface to redact sensitive information in the trace output, has been simplified. The command line completion (in contrib/) learned to complete, options that the "git switch" command takes. "git diff" used to take arguments in random and nonsense range, notation, e.g. "git diff A..B C", "git diff A..B C...D", etc, which has been cleaned up. "git diff-files" has been taught to say paths that are marked as, intent-to-add are new files, not modified from an empty blob. "git status" learned to report the status of sparse checkout. "git difftool" has trouble dealing with paths added to the index, with the intent-to-add bit. "git fast-export --anonymize" learned to take customized mapping to, allow its users to tweak its output more usable for deging. The command line completion support (in contrib/) used to be, prepared to work with "set -u" but recent changes got a bit more, sloppy. This has been corrected. "git gui" now allows opening work trees from the start-up dialog. Code optimization for a common case. (merge 8777616e4d an/merge-single-strategy-optim later to maint). We've adopted a convention that any on-stack structure can be, initialized to have zero values in all fields with "= 0 ", even when the first field happens to be a pointer, but sparse, complained that a null pointer should be spelled NULL for a long, time. Start using -Wno-universal-initializer option to squelch, it (the latest sparse has it on by default). "git log -L..." now takes advantage of the "which paths are touched, by this commit?" info stored in the commit-graph system. As FreeBSD is not the only platform whose regexp library reports, a REG_I
2.27.002 Jun 2020 11:25 minor feature: When "git describe C" finds that commit C is pointed by a signed or, annotated tag, which records T as its tagname in the object, the, command gives T as its answer. Even if the user renames or moves, such a tag from its natural location in the "refs/tags/" hierarchy, "git describe C" would still give T as the answer, but in such a, case "git show T 0" would no longer work as expected. There may be, nothing at "refs/tags/T" or even worse there may be a different tag, instead. Starting from this version, "git describe" will always use the, "long" version, as if the "--long" option were given, when giving, its output based on such a misplaced tag to work around the problem. "git pull" a warning message until the pull.rebase, configuration variable is explicitly given, which some existing, users may find annoying---those who prefer not to rebase need to, set the variable to false to squelch the warning. The transport protocol version 2, which was promoted to the default, in Git 2.26 release, turned out to have some remaining rough edges, so it has been demoted from the default. A handful of options to configure SSL when talking to proxies have, been added. Smudge/clean conversion filters are now given more information, (e.g. the object of the tree-ish in which the blob being converted, appears, in addition to its path, which has already been given). When "git describe C" finds an annotated tag with tagname A to be, the best name to explain commit C, and the tag is stored in a, "wrong" place in the refs/tags hierarchy, e.g. refs/tags/B, the, command gave a warning message but used A (not B) to describe C. If C is exactly at the tag, the describe output would be "A", but, "git rev-parse A 0" would not be equal as "git rev-parse C 0". The, behavior of the command has been changed to use the "long" form, i.e. A-0-gOBJECTNAME, which is correctly interpreted by rev-parse. "git pull" learned to warn when no pull.rebase configuration, exists, and neither -- no- rebase no
2.26.024 Mar 2020 20:25 minor feature: git rebase" uses a different backend that is based on the 'merge', machinery by default. There are a few known differences in the, behaviour from the traditional machinery based on patch+apply. If your workflow is negatively affected by this change, please, report it to git@vger.kernel.org so that we can take a look into, it. After doing so, you can set the 'rebase.backend' configuration, variable to 'apply', in order to use the old default behaviour in, the meantime. Sample credential helper for using.netrc has been updated to work, out of the box. gpg.minTrustLevel configuration variable has been introduced to, tell various signature verification codepaths the required minimum, trust level. The command line completion (in contrib/) learned to complete, subcommands and arguments to "git worktree". Disambiguation logic to tell revisions and pathspec apart has been, tweaked so that backslash-escaped glob special characters do not, count in the "wildcards are pathspec" rule. One effect of specifying where the GIT_DIR is (either with the, environment variable, or with the "git --git-dir=. cmd", option) is to disable the repository discovery. This has been, placed a bit more stress in the documentation, as new users often, get confused. Two help messages given when "git add" notices the user gave it, nothing to add have been updated to use advise() API. A new version of fsmonitor-watchman hook has been introduced, to, avoid races. "git config" learned to show in which "scope", in addition to in, which file, each config setting comes from. The basic 7 colors learned the brighter counterparts, (e.g. "brightred"). "git sparse-checkout" learned a new "add" subcommand. A configuration element used for credential subsystem can now use, wildcard pattern to specify for which set of URLs the entry, applies. "git clone --recurse-submodules --single-branch" now uses the same, single-branch option when cloning the submodules. "git rm" and "git stash" learns the new "-
2.25.220 Mar 2020 12:05 minor feature: Minor to "git add -i" that has recently been rewritten in C. An earlier update to show the location of working tree in the error, message did not consider the possibility that a git command may be, run in a bare repository, which has been corrected. The "--recurse-submodules" option of various subcommands did not, work well when run in an alternate worktree, which has been, corrected. Running "git rm" on a submodule failed unnecessarily when.gitmodules is only cache-dirty, which has been corrected. "git rebase -i" identifies existing commits in its todo file with, their abbreviated object name, which could become ambigous as it, goes to create new commits, and has a mechanism to avoid ambiguity, in the main part of its execution. A few other cases however were, not covered by the protection against ambiguity, which has been, corrected. The index-pack code now diagnoses a bad input packstream that, records the same object twice when it is used as delta base; the, code used to declare a software when encountering such an, input, but it is an input error. The code to automatically shrink the fan-out in the notes tree had, an off-by-one, which has been killed. "git check-ignore" did not work when the given path is explicitly, marked as not ignored with a negative entry in the.gitignore file. The merge-recursive machinery failed to refresh the cache entry for, a merge result in a couple of places, resulting in an unnecessary, merge failure, which has been. for a revealed by a recent change to make the protocol v2, the default. "git merge signed-tag" while lacking the public key started to say, "No signature", which was utterly wrong. This regression has been, reverted. MinGW's poll() emulation has been improved. "git show" and others gave an object name in raw format in its, error output, which has been corrected to give it in hex. Both "git ls-remote -h" and "git grep -h" give short usage help, like any other Git subcommand, but it is not unreasonable to ex
2.25.118 Feb 2020 20:45 minor feature: git commit" gives output similar to "git status" when there is, nothing to commit, but without honoring the advise.statusHints, configuration variable, which has been corrected. has_object_file() said "no" given an object registered to the, system via pretend_object_file(), making it inconsistent with, read_object_file(), causing lazy fetch to attempt fetching an, empty tree from promisor remotes. The code that tries to skip over the entries for the paths in a, single directory using the cache-tree was not careful enough, against corrupt index file. Complete an update to tutorial that encourages "git switch" over, "git checkout" that was done only half-way. Reduce unnecessary round-trip when running "ls-remote" over the, stateless RPC mechanism. "git restore --staged" did not correctly update the cache-tree, structure, resulting in bogus trees to be written afterwards, which, has been corrected. The code recently added to move to the entry beyond the ones in the, same directory in the index in the sparse-cone mode did not count, the number of entries to skip over incorrectly, which has been, corrected. Work around test breakages caused by custom regex engine used in, libasan, when address sanitizer is used with more recent versions, of gcc and clang. "git fetch --refmap=" option has got a better documentation. Corner case in "git clean" that stems from a (necessarily for, performance reasons) awkward calling convention in the directory, enumeration API has been corrected. "git grep --no-index" should not get affected by the contents of, the.gitmodules file but when "--recurse-submodules" is given or, the "submodule.recurse" variable is set, it did. Now these, settings are ignored in the "--no-index" mode. Technical details of the bundle format has been documented. Unhelpful warning messages during documentation build have been, squelched.
2.25.014 Jan 2020 22:45 minor feature: A tutorial on object enumeration has been added. The branch description ("git branch --edit-description") has been, used to fill the body of the cover letters by the format-patch, command; this has been enhanced so that the subject can also be, filled. "git rebase --preserve-merges" has been marked as deprecated; this, release stops advertising it in the "git rebase -h" output. The code to generate multi-pack index learned to show (or not to, show) progress indicators. "git apply --3way" learned to honor merge.conflictStyle, configuration variable, like merges would. The custom format for "git log --format=. " learned the l/L, placeholder that is similar to e/E that fills in the e-mail, address, but only the local part on the left side of '@'. Documentation pages for "git shortlog" now list commit limiting, options explicitly. The patterns to detect function boundary for Elixir language has, been added. The completion script (in contrib/) learned that the "--onto", option of "git rebase" can take its argument as the value of the, option. The userdiff machinery has been taught that "async def" is another, way to begin a "function" in Python. "git range-diff" learned to take the "--notes=. " and the, "--no-notes" options to control the commit notes included in the, log message that gets compared. "git rev-parse --show-toplevel" run outside of any working tree did, not error out, which has been corrected. A few commands learned to take the pathspec from the standard input, or a named file, instead of taking it as the command line, arguments, with the "--pathspec-from-file" option. "git submodule" learned a subcommand "set-url". "git log" family learned "--pretty=reference" that gives the name, of a commit in the format that is often used to refer to it in log, messages. The interaction between "git clone --recurse-submodules" and, alternate object store was ill-designed. The documentation and, code have been taught to make more clear recommendations when
2.24.005 Nov 2019 21:05 minor feature: filter-branch" is showing its age and alternatives are available. From this release, we started to discourage its use and hint, people about filter-repo. We now have an active interim maintainer for the Git-Gui part of, the system. Praise and thank Pratyush Yadav for volunteering. The command line parser learned "--end-of-options" notation; the, standard convention for scripters to have hardcoded set of options, first on the command line, and force the command to treat end-user, input as non-options, has been to use "--" as the delimiter, but, that would not work for commands that use "--" as a delimiter, between revs and pathspec. A mechanism to affect the default setting for a (related) group of, configuration variables is introduced. "git fetch" learned "--set-upstream" option to help those who first, clone from their private fork they intend to push to, add the true, upstream via "git remote add" and then "git fetch" from it. Device-tree files learned their own userdiff patterns. (merge 3c81760bc6 sb/userdiff-dts later to maint). "git rebase --rebase-merges" learned to drive different merge, strategies and pass strategy specific options to them. A new "pre-merge-commit" hook has been introduced. Command line completion updates for "git -c var.name=val" have been, added. The lazy clone machinery has been taught that there can be more, than one promisor remote and consult them in order when downloading, missing objects on demand. The list-objects-filter API (used to create a sparse/lazy clone), learned to take a combined filter specification. The documentation and tests for "git format-patch" have been, cleaned up. On Windows, the root level of UNC share is now allowed to be used, just like any other directory. The command line completion support (in contrib/) learned about the, "--skip" option of "git revert" and "git cherry-pick". "git rebase --keep-base. " tries to find the original base, of the topic being rebased and rebase on top of that same b
2.23.017 Aug 2019 11:45 minor feature: The "--base" option of "format-patch" computed the patch-ids for, prerequisite patches in an unstable way, which has been updated to, compute in a way that is compatible with "git patch-id --stable". The "git log" command by default behaves as if the --mailmap option, was given. The "git fast-export/import" pair has been taught to handle commits, with log messages in encoding other than UTF-8 better. In recent versions of Git, per-worktree refs are exposed in, refs/worktrees/. / hierarchy, which means that worktree names, must be a valid refname component. The code now sanitizes the names, given to worktrees, to make sure these refs are well-formed. "git merge" learned "--quit" option that cleans up the in-progress, merge while leaving the working tree and the index still in a mess. "git format-patch" learns a configuration to set the default for, its --notes=. option. The code to show args with potential typo that cannot be, interpreted as a commit-ish has been improved. "git clone --recurse-submodules" learned to set up the submodules, to ignore commit object names recorded in the superproject gitlink, and instead use the commits that happen to be at the tip of the, remote-tracking branches from the get-go, by passing the new, "--remote-submodules" option. The pattern "git diff/grep" use to extract funcname and words, boundary for Matlab has been extend to cover Octave, which is more, or less equivalent. "git help git" was hard to discover (well, at least for some, people). The pattern "git diff/grep" use to extract funcname and words, boundary for Rust has been added. "git status" can be told a non-standard default value for the, "-- no- ahead-behind" option with a new configuration variable, status.aheadBehind. "git fetch" and "git pull" reports when a fetch results in, non-fast-forward updates to let the user notice unusual situation. The commands learned "--no-show-forced-updates" option to disable, this safety feature. Two new commands "git swit
2.22.113 Aug 2019 19:05 minor feature: A relative pathname given to "git init --template=.. ", ought to be relative to the directory "git init" gets invoked in, but it instead was made relative to the repository, which has been, corrected. "git worktree add" used to fail when another worktree connected to, the same repository was corrupt, which has been corrected. The ownership rule for the file descriptor to fast-import remote, backend was mixed up, leading to unrelated file descriptor getting,, which has been. "git update-server-info" used to leave stale packfiles in its, output, which has been corrected. The server side support for "git fetch" used to show incorrect, value for the HEAD symbolic ref when the namespace feature is in, use, which has been corrected. "git am -i --resolved" segfaulted after trying to see a commit as, if it were a tree, which has been corrected. "git bundle verify" needs to see if prerequisite objects exist in, the receiving repository, but the command did not check if we are, in a repository upfront, which has been corrected. "git merge --squash" is designed to update the working tree and the, index without creating the commit, and this cannot be countermanded, by adding the "--commit" option; the command now refuses to work, when both options are given. The data collected by fsmonitor was not properly written back to, the on-disk index file, breaking t7519 tests occasionally, which, has been corrected. Update to Unicode 12.1 width table. The command line to invoke a "git cat-file" command from inside, "git p4" was not properly quoted to protect a caret and running a, broken command on Windows, which has been corrected. "git request-pull" learned to warn when the ref we ask them to pull, from in the local repository and in the published repository are, different. When creating a partial clone, the object filtering criteria is, recorded for the origin of the clone, but this incorrectly used a, hardcoded name "origin" to name that remote; it has been corrected, to
2.22.008 Jun 2019 14:25 minor feature: The filter specification "--filter=sparse:path=. " used to, create a lazy/partial clone has been removed. Using a blob that is, part of the project as sparse specification is still supported with, the "--filter=sparse:oid=. " option. "git checkout --no-overlay" can be used to trigger a new mode of, checking out paths out of the tree-ish, that allows paths that, match the pathspec that are in the current index and working tree, and are not in the tree-ish. The (trailers) formatter in "git log --format=..." now allows to, optionally pick trailers selectively by keyword, show only values, etc. Four new configuration variables author,committer . name,email , have been introduced to override user. name,email in more specific, cases. Command-line completion (in contrib/) learned to tab-complete the, "git submodule absorbgitdirs" subcommand. "git branch" learned a new subcommand "--show-current". Output from "diff --cc" did not show the original paths when the, merge involved renames. A new option adds the paths in the, original trees to the output. The command line completion (in contrib/) has been taught to, complete more subcommand parameters. The final report from "git bisect" used to show the suspected, culprit using a raw "diff-tree", with which there is no output for, a merge commit. This has been updated to use a more modern and, human readable output that still is concise enough. "git rebase --rebase-merges" replaces its old "--preserve-merges", option; the latter is now marked as deprecated. Error message given while cloning with --recurse-submodules has, been updated. The completion helper code now pays attention to repository-local, configuration (when available), which allows --list-cmds to honour, a repository specific setting of completion.commands, for example. "git mergetool" learned to offer Sublime Merge (smerge) as one of, its backends. A new hook "post-index-change" is called when the on-disk index, file changes, which can help e.g. a v
2.21.026 Feb 2019 03:16 minor feature: Historically, the "-m" (mainline) option can only be used for "git, cherry-pick" and "git revert" when working with a merge commit. This version of Git no longer warns or errors out when working with, a single-parent commit, as long as the argument to the "-m" option, is 1 (i.e. it has only one parent, and the request is to pick or, revert relative to that first parent). Scripts that relied on the, behaviour may get broken with this change. The "http.version" configuration variable can be used with recent, enough versions of cURL library to force the version of HTTP used, to talk when fetching and pushing. Small and features for fast-export and fast-import, mostly on, the fast-export side has been made. "git push there src: dst" rejects when dst is not a fully, qualified refname and it is not clear what the end user meant. The, codepath has been taught to give a clearer error message, and also, guess where the push should go by taking the type of the pushed, object into account (e.g. a tag object would want to go under, refs/tags/). "git checkout path..." learned to report the number of, paths that have been checked out of the index or the tree-ish, which gives it the same degree of noisy-ness as the case in which, the command checks out a branch. "git checkout -m. " to, undo conflict resolution gives a similar message. "git quiltimport" learned "--keep-non-patch" option. "git worktree remove" and "git worktree move" refused to work when, there is a submodule involved. This has been loosened to ignore, uninitialized submodules. "git cherry-pick -m1" was forbidden when picking a non-merge, commit, even though there _is_ parent number 1 for such a commit. This was done to avoid mistakes back when "cherry-pick" was about, picking a single commit, but is no longer useful with "cherry-pick", that can pick a range of commits. Now the "-m num" option is, allowed when picking any commit, as long as num names an existing, parent of the commit. Update "git mul
2.20.116 Dec 2018 03:15 minor feature: A few newly added tests were not portable and caused minority, platforms to report false breakages, which have been. Portability for a recent update to parse-options API. "git help -a" did not work well when an overly long alias is, defined, which has been corrected. A recent update accidentally squelched an error message when the, run_command API failed to run a missing command, which has been, corrected.
2.20.010 Dec 2018 03:15 minor feature: git branch -l. " used to be a way to ask a reflog to be, created while creating a new branch, but that is no longer the, case. It is a short-hand for "git branch --list. " now. "git push" into refs/tags/ hierarchy is rejected without getting, forced, but "git fetch" (misguidedly) used the "fast forwarding", rule used for the refs/heads/ hierarchy; this has been corrected, which means some fetches of tags that did not fail with older, version of Git will fail without "--force" with this version. "git help -a" now gives verbose output (same as "git help -av"). Those who want the old output may say "git help --no-verbose -a". "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n", reported only the alias expansion of "cpn" in earlier versions of, Git. It now runs "git cherry-pick --help" to show the manual page, of the command, while sending the alias expansion to the standard, error stream. "git send-email" learned to grab address-looking string on any, trailer whose name ends with "-by". This is a backward-incompatible, change. Adding "--suppress-cc=misc-by" on the command line, or, setting sendemail.suppresscc configuration variable to "misc-by", can be used to disable this behaviour. Running "git clone" against a project that contain two files with, pathnames that differ only in cases on a case insensitive, filesystem would result in one of the files lost because the, underlying filesystem is incapable of holding both at the same, time. An attempt is made to detect such a case and warn. "git checkout -b newbranch HEAD " should not have to do as much as, checking out a commit different from HEAD. An attempt is made to, optimize this special case. "git rev-list --stdin
2.19.222 Nov 2018 03:45 minor feature: git interpret-trailers" and its underlying machinery had a gy, code that attempted to ignore patch text after commit log message, which triggered in various codepaths that will always get the log, message alone and never get such an input. "git rebase -i" did not clear the state files correctly when a run, of "squash/up" is aborted and then the user manually amended the, commit instead, which has been corrected. When fsmonitor is in use, after operation on submodules updates.gitmodules, we lost track of the fact that we did so and relied on, stale fsmonitor data. for a long-standing that leaves the index file corrupt when, it shrinks during a partial commit. Further for O_APPEND emulation on Windows, A corner case in "git rerere" code. "git add ':(attr:foo)'" is not supported and is supposed to be, rejected while the command line arguments are parsed, but we fail, to reject such a command line upfront. "git rebase" etc. in Git 2.19 fails to abort when given an empty, commit log message as result of editing, which has been corrected. The code to backfill objects in lazily cloned repository did not, work correctly, which has been corrected. Update error messages given by "git remote" and make them consistent. "git update-ref" learned to make both "--no-deref" and "--stdin", work at the same time. Recently added "range-diff" had a corner-case to cause it, segfault, which has been corrected. The recently introduced commit-graph auxiliary data is incompatible, with mechanisms such as replace grafts that "breaks" immutable, nature of the object reference relationship. Disable optimizations, based on its use (and updating existing commit-graph) when these, incompatible features are in use in the repository. The mailmap file update. The code in "git status" sometimes hit an assertion failure. This, was caused by a structure that was reused without cleaning the data, used for the first run, which has been corrected. A corner-case. A partial clone that is co
2.19.011 Sep 2018 19:05 minor feature: git diff" compares the index and the working tree. For paths, added with intent-to-add bit, the command shows the full contents, of them as added, but the paths themselves were not marked as new, files. They are now shown as new by default. "git apply" learned the "--intent-to-add" option so that an, otherwise working-tree-only application of a patch will add new, paths to the index marked with the "intent-to-add" bit. "git grep" learned the "--column" option that gives not just the, line number but the column number of the hit. The "-l" option in "git branch -l" is an unfortunate short-hand for, "--create-reflog", but many users, both old and new, somehow expect, it to be something else, perhaps "--list". This step warns when "-l", is used as a short-hand for "--create-reflog" and warns about the, future repurposing of the it when it is used. The userdiff pattern for.php has been updated. The content-transfer-encoding of the message "git send-email" sends, out by default was 8bit, which can cause trouble when there is an, overlong line to bust RFC 5322/2822 limit. A new option 'auto' to, automatically switch to quoted-printable when there is such a line, in the payload has been introduced and is made the default. "git checkout" and "git worktree add" learned to honor, checkout.defaultRemote when auto-vivifying a local branch out of a, remote tracking branch in a repository with multiple remotes that, have tracking branches that share the same names. (merge 8d7b558bae ab/checkout-default-remote later to maint). "git grep" learned the "--only-matching" option. "git rebase --rebase-merges" mode now handles octopus merges as, well. Add a server-side knob to skip commits in exponential/fibbonacci, stride in an attempt to cover wider swath of history with a smaller, number of iterations, potentially accepting a larger packfile, transfer, instead of going back one commit a time during common, ancestor discovery during the "git fetch" transaction. (merge 42cc7485a2
2.18.024 Jun 2018 11:45 minor feature: Rename detection logic that is used in "merge" and "cherry-pick" has, learned to guess when all of x/a, x/b and x/c have moved to z/a, z/b and z/c, it is likely that x/d added in the meantime would also, want to move to z/d by taking the hint that the entire directory, 'x' moved to 'z'. A causing dirty files involved in a rename, to be overwritten during merge has also been as part of this, work. Incidentally, this also avoids updating a file in the, working tree after a (non-trivial) merge whose result matches what, our side originally had. "git filter-branch" learned to use a different exit code to allow, the callers to tell the case where there was no new commits to, rewrite from other error cases. When built with more recent cURL, GIT_SSL_VERSION can now specify, "tlsv1.3" as its value. "git gui" learned that " /.ssh/id_ecdsa.pub" and, " /.ssh/id_ed25519.pub" are also possible SSH key files. (merge 2e2f0288ef bb/git-gui-ssh-key-files later to maint). "git gui" performs commit upon CTRL/CMD+ENTER but the, CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the, same key binding. It now does. (merge 28a1d94a06 bp/git-gui-bind-kp-enter later to maint). "git gui" has been taught to work with old versions of tk (like, 8.5.7) that do not support "ttk::style theme use" as a way to query, the current theme. (merge 4891961105 cb/git-gui-ttk-style later to maint). "git rebase" has learned to honor "--signoff" option when using, backends other than "am" (but not "--preserve-merges"). "git branch --list" during an interrupted "rebase -i" now lets, users distinguish the case where a detached HEAD is being rebased, and a normal branch is being rebased. "git mergetools" learned talking to guiffy. The scripts in contrib/emacs/ have outlived their usefulness and, have been replaced with a stub that errors out and tells the user, there are replacements. The new "working-tree-encoding" attribute can ask Git to convert the, contents to the specified encoding whe
2.17.131 May 2018 03:15 minor feature: This release contains the same made in the v2.13.7 version of, Git, covering CVE-2018-11233 and 11235, and forward-ported to, v2.14.4, v2.15.2 and v2.16.4 releases. See release notes to, v2.13.7 for details. In addition to the above, this release has support on the, server side to reject pushes to repositories that attempt to create, such problematic.gitmodules file etc. as tracked contents, to help, hosting sites protect their customers by preventing malicious, contents from spreading.
2.17.004 Apr 2018 07:25 minor feature: diff" family of commands learned "--find-object= " option, to limit the findings to changes that involve the named object. "git format-patch" learned to give 72-cols to diffstat, which is, consistent with other line length limits the subcommand uses for, its output meant for e-mails. The log from "git daemon" can be redirected with a new option; one, relevant use case is to send the log to standard error (instead of, syslog) when running it from inetd. "git rebase" learned to take "--allow-empty-message" option. "git am" has learned the "--quit" option, in addition to the, existing "--abort" option; having the pair mirrors a few other, commands like "rebase" and "cherry-pick". "git worktree add" learned to run the post-checkout hook, just like, "git clone" runs it upon the initial checkout. "git tag" learned an explicit "--edit" option that allows the, message given via "-m" and "-F" to be further edited. "git fetch --prune-tags" may be used as a handy short-hand for, getting rid of stale tags that are locally held. The new "--show-current-patch" option gives an end-user facing way, to get the diff being applied when "git rebase" (and "git am"), stops with a conflict. "git add -p" used to offer "/" (look for a matching hunk) as a, choice, even there was only one hunk, which has been corrected. Also the single-key help is now given only for keys that are, enabled (e.g. help for '/' won't be shown when there is only one, hunk). Since Git 1.7.9, "git merge" defaulted to --no-ff (i.e. even when, the side branch being merged is a descendant of the current commit, create a merge commit instead of fast-forwarding) when merging a, tag object. This was appropriate default for integrators who pull, signed tags from their downstream contributors, but caused an, unnecessary merges when used by downstream contributors who, habitually "catch up" their topic branches with tagged releases, from the upstream. Update "git merge" to default to --no-ff only, when merging a ta
2.16.324 Mar 2018 22:05 minor feature: git status" after moving a path in the working tree (hence making, it appear "removed") and then adding with the -N option (hence, making that appear "added") detected it as a rename, but did not, report the old and new pathnames correctly. "git commit --up" did not allow "-m. " option to be used, at the same time; allow it to annotate resulting commit with more, text. When resetting the working tree files recursively, the working tree, of submodules are now also reset to match. for a commented-out code to adjust it to a rather old API change, around object ID. When there are too many changed paths, "git diff" showed a warning, message but in the middle of a line. The http tracing code, often used to deconnection, learned to redact potentially sensitive information from its output, so that it can be more safely sharable. Crash for a corner case where an error codepath tried to unlock, what it did not acquire lock on. The split-index mode had a few corner case. Assorted to "git daemon". Completion of "git merge -s. " (in contrib/) did not work, well in non-C locale. Workaround for segfault with more recent versions of SVN. Recently introduced leaks in fsck have been plugged. Travis CI integration now builds the executable in 'script' phase, to follow the established practice, rather than during, 'before_script' phase. This allows the CI categorize the failures, better ('failed' is project's fault, 'errored' is build, environment's).
2.16.218 Feb 2018 19:45 minor feature: An old regression in "git describe --all annotated_tag 0" has been. "git svn dcommit" did not take into account the fact that a, svn+ssh:// URL with a username@ (typically used for pushing) refers, to the same SVN repository without the username@ and failed when, svn.pushmergeinfo option is set. "git merge -Xours/-Xtheirs" learned to use our/their version when, resolving a conflicting updates to a symbolic link. "git clone there here" is allowed even when here directory exists, as long as it is an empty directory, but the command incorrectly, removed it upon a failure of the operation. "git stash --. " incorrectly blew away untracked files in, the directory that matched the pathspec, which has been corrected. "git add -p" was taught to ignore local changes to submodules as, they do not interfere with the partial addition of regular changes, anyway.
2.16.124 Jan 2018 16:45 minor feature: git clone" segfaulted when cloning a project that happens to, track two paths that differ only in case on a case insensitive, filesystem.
2.16.019 Jan 2018 09:25 minor feature: Use of an empty string as a pathspec element that is used for, 'everything matches' is now an error. An empty string as a pathspec element that means "everything", i.e. 'git add ""', is now illegal. We started this by first, deprecating and warning a pathspec that has such an element in, 2.11 (Nov 2016). A hook script that is set unexecutable is simply ignored. Git, notifies when such a file is ignored, unless the message is, squelched via advice.ignoredHook configuration. "git pull" has been taught to accept "-- no- signoff" option and, pass it down to "git merge". The "--push-option=. " option to "git push" now defaults to a, list of strings configured via push.pushOption variable. "gitweb" checks if a directory is searchable with Perl's "-x", operator, which can be enhanced by using "filetest 'access'", pragma, which now we do. "git stash save" has been deprecated in favour of "git stash push". The set of paths output from "git status --ignored" was tied, ly with its "--untracked=. " option, but now it can be, controlled more flexibly. Most notably, a directory that is, ignored because it is listed to be ignored in the ignore/exclude, mechanism can be handled differently from a directory that ends up, to be ignored only because all files in it are ignored. The remote-helper for talking to MediaWiki has been updated to, truncate an overlong pagename so that ".mw" sufcan still be, added. The remote-helper for talking to MediaWiki has been updated to, work with mediawiki namespaces. The "--format=..." option "git for-each-ref" takes learned to show, the name of the 'remote' repository and the ref at the remote side, that is affected for 'upstream' and 'push' via " (push:remotename)", and friends. Doc and message updates to teach users "bisect view" is a synonym, for "bisect visualize". "git bisect run" that did not specify any command to run used to go, ahead and treated all commits to be tested as 'good'. This has, been corrected by making the command e
2.15.101 Dec 2017 12:45 minor feature: TravisCI build updates. "auto" as a value for the columnar output configuration ought to, judge "is the output consumed by humans?" with the same criteria as, "auto" for coloured output configuration, i.e. either the standard, output stream is going to tty, or a pager is in use. We forgot the, latter, which has been. The experimental "color moved lines differently in diff output", feature was gy around "ignore whitespace changes" edges, which, has been corrected. Instead of using custom line comparison and hashing functions to, implement "moved lines" coloring in the diff output, use the pair, of these functions from lower-layer xdiff/ code. Some codepaths did not check for errors when asking what branch the, HEAD points at, which have been. "git commit", after making a commit, did not check for errors when, asking on what branch it made the commit, which has been corrected. "git status --ignored -u" did not stop at a working tree of a, separate project that is embedded in an ignored directory and, listed files in that other project, instead of just showing the, directory itself as ignored. A broken access to object databases in recent update to "git grep, --recurse-submodules" has been. A recent regression in "git rebase -i" that broke execution of git, commands from subdirectories via "exec" instruction has been. "git check-ref-format --branch @ -1 " bit a "()" when run, outside a repository for obvious reasons; clarify the documentation, and make sure we do not even try to expand the at-mark magic in, such a case, but still call the validation logic for branch names. Command line completion (in contrib/) update. Description of blame. showroot,blankboundary,showemail,date , configuration variables have been added to "git config --help". After an error from lstat(), diff_populate_filespec() function, sometimes still went ahead and used invalid data in struct stat, which has been. UNC paths are also relevant in Cygwin builds and they are now, tested jus
2.15.001 Nov 2017 07:25 minor feature: Use of an empty string as a pathspec element that is used for, 'everything matches' is still warned and Git asks users to use a, more explicit '.' for that instead. The hope is that existing, users will not mind this change, and eventually the warning can be, turned into a hard error, upgrading the deprecation into removal of, this (mis)feature. That is now scheduled to happen in Git v2.16, the next major release after this one. Git now avoids blindly falling back to ".git" when the setup, sequence said we are _not_ in Git repository. A corner case that, happens to work right now may be broken by a call to (). We've tried hard to locate such cases and them, but there, might still be cases that need to be addressed--reports are, greatly appreciated. "branch --set-upstream" that has been deprecated in Git 1.8 has, finally been retired. An example that is now obsolete has been removed from a sample hook, and an old example in it that added a sign-off manually has been, improved to use the interpret-trailers command. The advice message given when "git rebase" stops for conflicting, changes has been improved. The "rerere-train" script (in contrib/) learned the "--overwrite", option to allow overwriting existing recorded resolutions. "git contacts" (in contrib/) now lists the address on the, "Reported-by:" trailer to its output, in addition to those on, S-o-b: and other trailers, to make it easier to notify (and thank), the original reporter. "git rebase", especially when it is run by mistake and ends up, trying to replay many changes, spent long time in silence. The, command has been taught to show progress report when it spends, long time preparing these many changes to replay (which would give, the user a chance to abort with C). "git merge" learned a "--signoff" option to add the Signed-off-by:, trailer with the committer's name. "git diff" learned to optionally paint new lines that are the same, as deleted lines elsewhere differently from genuinely new line
2.14.324 Oct 2017 22:25 minor feature: A helper function to read a single whole line into strbuf, mistakenly triggered OOM error at EOF under certain conditions, which has been. In addition to "cc: # cruft", "cc: a@dd.re.ss # cruft", was taught to "git send-email" as a valid way to tell it that it, needs to also send a carbon copy to in the trailer, section. regression to "gitk --bisect" by a recent update. Unlike "git commit-tree file", "git commit-tree -F file" did not, pass the contents of the file verbatim and instead completed an, incomplete line at the end, if exists. The latter has been updated, to match the behaviour of the former. "git archive", especially when used with pathspec, stored an empty, directory in its output, even though Git itself never does so. This has been. API error-proofing which happens to also squelch warnings from GCC. "git gc" tries to avoid running two instances at the same time by, reading and writing pid/host from and to a lock file; it used to, use an incorrect fscanf() format when reading, which has been, corrected. The test linter has been taught that we do not like "echo -e". Code cmp.std.c nitpick. "git describe --match" learned to take multiple patterns in v2.13, series, but the feature ignored the patterns after the first one, and did not work at all. This has been. "git cat-file --textconv" started segfaulting recently, which, has been corrected. The built-in pattern to detect the "function header" for HTML did, not match.... elements without any attributes, which has, been. "git mailinfo" was loose in decoding quoted printable and produced, garbage when the two letters after the equal sign are not, hexadecimal. This has been. The documentation for '-X. ' for merges was misleadingly, written to suggest that "-s theirs" exists, which is not the case. Spell the name of our system as "Git" in the output from, request-pull script. for a handful memory access identified by valgrind. Backports a moral equivalent of 2015 to the poll emulation fro
2.14.228 Sep 2017 22:25 minor feature: Because recent Git for Windows do come with a real msgfmt, the, build procedure for git-gui has been updated to use it instead of a, hand-rolled substitute. " C(color name)" in the pretty print format always produced ANSI, color escape codes, which was an early design mistake. They now, honor the configuration (e.g. "color.ui = never") and also tty-ness, of the output medium. The http. sslkey,sslCert configuration variables are to be, interpreted as a pathname that honors " username /" pre, but, weren't, which has been. Numerous in walking of reflogs via "log -g" and friends have, been. "git commit" when seeing an totally empty message said "you did not, edit the message", which is clearly wrong. The message has been, corrected. When a directory is not readable, "gitweb" fails to build the, project list. Work this around by skipping such a directory. A recently added test for the "credential-cache" helper revealed, that EOF detection done around the time the connection to the cache, daemon is torn down were flaky. This was by reacting to, ECONNRESET and behaving as if we got an EOF. Some versions of GnuPG fail to kill gpg-agent it auto-spawned, and such a left-over agent can interfere with a test. Work it, around by attempting to kill one before starting a new test. "git log --tag=no-such-tag" showed log starting from HEAD, which, has been ---it now shows nothing. The "tag.pager" configuration variable was useless for those who, actually create tag objects, as it interfered with the use of an, editor. A new mechanism has been introduced for commands to enable, pager depending on what operation is being carried out to this, and then "git tag -l" is made to run pager by default. "git push --recurse-submodules there HEAD: target" was not, propagated down to the submodules, but now it is. Commands like "git rebase" accepted the --rerere-autoupdate option, from the command line, but did not always use it. This has been. "git clone --recurse-submodules --qui
2.14.007 Aug 2017 00:25 minor feature: Use of an empty string as a pathspec element that is used for, 'everything matches' is still warned and Git asks users to use a, more explicit '.' for that instead. The hope is that existing, users will not mind this change, and eventually the warning can be, turned into a hard error, upgrading the deprecation into removal of, this (mis)feature. That is not scheduled to happen in the upcoming, release (yet). Git now avoids blindly falling back to ".git" when the setup, sequence said we are _not_ in Git repository. A corner case that, happens to work right now may be broken by a call to die(""). We've tried hard to locate such cases and them, but there, might still be cases that need to be addressed--reports are, greatly appreciated. The experiment to improve the hunk-boundary selection of textual, diff output has finished, and the "indent heuristics" has now, become the default. Git can now be built with PCRE v2 instead of v1 of the PCRE, library. Replace USE_LIBPCRE=YesPlease with USE_LIBPCRE2=YesPlease, in existing build scripts to build against the new version. As the, upstream PCRE maintainer has abandoned v1 maintenance for all but, the most critical, use of v2 is recommended. The colors in which "git status --short --branch" showed the names, of the current branch and its remote-tracking branch are now, configurable. "git clone" learned the "--no-tags" option not to fetch all tags, initially, and also set up the tagopt not to follow any tags in, subsequent fetches. "git archive --format=zip" learned to use zip64 extension when, necessary to go beyond the 4GB limit. "git reset" learned "--recurse-submodules" option. "git diff --submodule=diff" now recurses into nested submodules. "git repack" learned to accept the --threads=. option and pass it, to pack-objects. "git send-email" learned to run sendemail-validate hook to inspect, and reject a message before sending it out. There is no good reason why "git fetch there sha1" should fail, when the sh
2.13.402 Aug 2017 11:25 minor feature: Update the character width tables. A recent update broke an alias that contained an uppercase letter, which has been. On Cygwin, similar to Windows, "git push //server/share/repository", ought to mean a repository on a network share that can be accessed, locally, but this did not work correctly due to stripping the double, slashes at the beginning. The progress meter did not give a useful output when we haven't had, 0.5 seconds to measure the throughput during the interval. Instead, show the overall throughput rate at the end, which is a much more, useful number. We run an early part of "git gc" that deals with refs before, daemonising (and not under lock) even when running a background, auto-gc, which caused multiple gc processes attempting to run the, early part at the same time. This is now prevented by running the, early part also under the GC lock.
2.13.313 Jul 2017 11:05 minor feature: The "collision detecting" SHA-1 implementation shipped with 2.13.2, was still broken on some platforms. Update to the upstream code, again to take their. The 'diff-highlight' program (in contrib/) has been restructured, for easier reuse by an external project 'diff-so-fancy'. "git mergetool" learned to work around a wrapper MacOS X adds, around underlying meld. An example in documentation that does not work in multi worktree, configuration has been corrected. The pretty-format specifiers like ' h', ' t', etc. had an, optimization that no longer works correctly. In preparation/hope, of getting it correctly implemented, first discard the optimization, that is broken. The code to pick up and execute command alias definition from the, configuration used to switch to the top of the working tree and, then come back when the expanded alias was executed, which was, unnecessarilyl complex. Attempt to simplify the logic by using the, early-config mechanism that does not chdir around. "git add -p" were updated in 2.12 timeframe to cope with custom, core.commentchar but the implementation was gy and a, metacharacter like and did not work. a recent regression to "git rebase -i" and add tests that would, have caught it and others. An unaligned 32-bit access in pack-bitmap code ahs been corrected. Tighten error checks for invalid "git apply" input. The split index code did not honor core.sharedrepository setting, correctly. The Makefile rule in contrib/subtree for building documentation, learned to honour USE_ASCIIDOCTOR just like the main documentation, set does. A few tests that tried to verify the contents of push certificates, did not use 'git rev-parse' to formulate the line to look for in, the certificate correctly. After "git branch --move" of the currently checked out branch, the, code to walk the reflog of HEAD via "log -g" and friends, incorrectly stopped at the reflog entry that records the renaming, of the branch. The rewrite of "git branch --list" usi
2.13.226 Jun 2017 08:25 minor feature: The "collision detecting" SHA-1 implementation shipped with 2.13.1, was still broken on some platforms. Update to the upstream code, again to take their. "git checkout --recurse-submodules" did not quite work with a, submodule that itself has submodules. Introduce the () macro to improve die(":."). The "run-command" API implementation has been made more robust, against dead-locking in a threaded environment. A recent update to t5545-push-options.sh started skipping all the, tests in the script when a web server testing is disabled or, unavailable, not just the ones that require a web server. Non HTTP, tests have been salvaged to always run in this script. "git clean -d" used to clean directories that has ignored files, even though the command should not lose ignored ones without "-x". "git status --ignored" did not list ignored and untracked files, without "-uall". These have been corrected. The timestamp of the index file is now taken after the file is,, to help Windows, on which a stale timestamp is reported by, fstat() on a file that is opened for writing and data was written, but not yet. "git pull --rebase --autostash" didn't auto-stash when the local history, fast-forwards to the upstream. "git describe --contains" penalized light-weight tags so much that, they were almost never considered. Instead, give them about the, same chance to be considered as an annotated tag that is the same, age as the underlying commit would. The result from "git diff" that compares two blobs, e.g. "git diff, commit1: path commit2: path", used to be shown with the full, object name as given on the command line, but it is more natural to, use the path in the output and use it to look up.gitattributes. A flaky test has been corrected. Help contributors that visit us at GitHub. "git stash push. " did not work from a subdirectory at all. for a topic in v2.13.
2.13.106 Jun 2017 14:45 minor feature: The Web interface to gmane news archive is long gone, even though, the articles are still accessible via NTTP. Replace the links with, ones to public-inbox.org. Because their message identification is, based on the actual message-id, it is likely that it will be easier, to migrate away from it if/when necessary. Update tests to pass under GETTEXT_POISON (a mechanism to ensure, that output strings that should not be translated are not, translated by mistake), and tell TravisCI to run them. Setting "log.decorate=false" in the configuration file did not take, effect in v2.13, which has been corrected. An earlier update to test 7400 needed to be skipped on CYGWIN. Git sometimes gives an advice in a rhetorical question that does, not require an answer, which can confuse new users and non native, speakers. Attempt to rephrase them. "git read-tree -m" (no tree-ish) gave a nonsense suggestion "use, --empty if you want to clear the index". With "-m", such a request, will still fail anyway, as you'd need to name at least one tree-ish, to be merged. The codepath in "git am" that is used when running "git rebase", leaked memory held for the log message of the commits being rebased. "pack-objects" can stream a slice of an existing packfile out when, the pack bitmap can tell that the reachable objects are all needed, in the output, without inspecting individual objects. This, strategy however would not work well when "--local" and other, options are in use, and need to be disabled. Clarify documentation for include.path and includeIf...path, configuration variables. Tag objects, which are not reachable from any ref, that point at, missing objects were mishandled by "git gc" and friends (they, should silently be ignored instead), A few http:// links that are redirected to https:// in the, documentation have been updated to https:// links. Make sure our tests would pass when the sources are checked out, with "platform native" line ending convention by default on, Windows
2.13.011 May 2017 01:25 minor feature: Use of an empty string as a pathspec element that is used for, 'everything matches' is still warned and Git asks users to use a, more explicit '.' for that instead. The hope is that existing, users will not mind this change, and eventually the warning can be, turned into a hard error, upgrading the deprecation into removal of, this (mis)feature. That is not scheduled to happen in the upcoming, release (yet). The historical argument order "git merge. HEAD....", has been deprecated for quite some time, and is now removed. The default location " /.git-credential-cache/socket" for the, socket used to communicate with the credential-cache daemon has, been moved to " /.cache/git/credential/socket". Git now avoids blindly falling back to ".git" when the setup, sequence said we are _not_ in Git repository. A corner case that, happens to work right now may be broken by a call to die(""). We've tried hard to locate such cases and them, but there, might still be cases that need to be addressed--reports are, greatly appreciated. "git describe" and "git name-rev" have been taught to take more, than one refname patterns to restrict the set of refs to base their, naming output on, and also learned to take negative patterns to, name refs not to be used for naming via their "--exclude" option. Deletion of a branch "foo/bar" could remove.git/refs/heads/foo, once there no longer is any other branch whose name begins with, "foo/", but we didn't do so so far. Now we do. When "git merge" detects a path that is renamed in one history, while the other history deleted (or modified) it, it now reports, both paths to help the user understand what is going on in the two, histories being merged. The. part in "http.... " configuration variable, can now be spelled with '*' that serves as wildcard. E.g. "http.https://*.example.com.proxy" can be used to specify the, proxy used for https://a.example.com, https://b.example.com, etc, i.e. any host in the example.com domain. "git tag" did not
2.12.225 Mar 2017 22:05 minor feature: git status --porcelain" is supposed to give a stable output, but a, few strings were left as translatable by mistake. "Dumb http" transport used to misparse a nonsense http-alternates, response, which has been. "git diff --quiet" relies on the size field in diff_filespec to be, correctly populated, but diff_populate_filespec() helper function, made an incorrect short-cut when asked only to populate the size, field for paths that need to go through convert_to_git() (e.g. CRLF, conversion). There is no need for Python only to give a few messages to the, standard error stream, but we somehow did. A leak in a codepath to read from a packed object in (rare) cases, has been plugged. "git upload-pack", which is a counter-part of "git fetch", did not, report a request for a ref that was not advertised as invalid. This is generally not a problem (because "git fetch" will stop, before making such a request), but is the right thing to do. A "gc.log" file left by a backgrounded "gc --auto" disables further, automatic gc; it has been taught to run at least once a day by ignoring a stale "gc.log" file that is too old. "git remote rm X", when a branch has remote X configured as the, value of its branch.*.remote, tried to remove branch.*.remote and, branch.*.merge and failed if either is unset. A caller of tempfile API that uses stdio interface to write to, files may ignore errors while writing, which is detected when, tempfile is (with a call to ferror()). By that time, the, original errno that may have told us what went wrong is likely to, be long gone and was overwritten by an irrelevant value. _tempfile() now resets errno to EIO to make errno at least, predictable. "git show-branch" expected there were only very short branch names, in the repository and used a -length buffer to hold them, without checking for overflow. The code that parses header fields in the commit object has been, updated for (micro)performance and code hygiene. A test that creates a confusing bra
2.12.121 Mar 2017 19:05 minor feature: Reduce authentication round-trip over HTTP when the server supports, just a single authentication method. This also improves the, behaviour when Git is misconfigured to enable http.emptyAuth, against a server that does not authenticate without a username, (i.e. not using Kerberos etc. which makes http.emptyAuth, pointless). Windows port wants to use OpenSSL's implementation of SHA-1, routines, so let them. Add 32-bit Linux variant to the set of platforms to be tested with, Travis CI. When a redirected http transport gets an error during the, redirected request, we ignored the error we got from the server, and ended up giving a not-so-useful error message. The patch subcommand of "git add -i" was meant to have paths, selection prompt just like other subcommand, unlike "git add -p", directly jumps to hunk selection. Recently, this was broken and, "add -i" lost the paths selection dialog, but it now has been. Git v2.12 was shipped with an embarrassing breakage where various, operations that verify paths given from the user stopped dying when, seeing an, and instead later triggering segfault. The code to parse "git log -L..." command line was gy when there, are many ranges specified with -L; overrun of the allocated buffer, has been. The command-line parsing of "git log -L" copied internal data, structures using incorrect size on ILP32 systems.
2.12.025 Feb 2017 23:05 minor feature: Use of an empty string that is used for 'everything matches' is, still warned and Git asks users to use a more explicit '.' for that, instead. The hope is that existing users will not mind this, change, and eventually the warning can be turned into a hard error, upgrading the deprecation into removal of this (mis)feature. That, is not scheduled to happen in the upcoming release (yet). The historical argument order "git merge. HEAD....", has been deprecated for quite some time, and will be removed in a, future release. An ancient script "git relink" has been removed. Various updates to "git p4". "git p4" didn't interact with the internal of.git directory, correctly in the modern "git-worktree"-enabled world. "git branch --list" and friends learned "--ignore-case" option to, optionally sort branches and tags case insensitively. In addition to (subject), (body), "log --pretty=format:.", learned a new placeholder (trailers). "git rebase" learned "--quit" option, which allows a user to, remove the metadata left by an earlier "git rebase" that was, manually aborted without using "git rebase --abort". "git clone --reference there --recurse-submodules super" has been, taught to guess repositories usable as references for submodules of, super that are embedded in there while making a clone of the, superproject borrow objects from there; extend the mechanism to, also allow submodules of these submodules to borrow repositories, embedded in these clones of the submodules embedded in the clone of, the superproject. Porcelain scripts written in Perl are getting internationalized. "git merge --continue" has been added as a synonym to "git commit", to conclude a merge that has stopped due to conflicts. Finer-grained control of what protocols are allowed for transports, during clone/fetch/push have been enabled via a new configuration, mechanism. "git shortlog" learned "--committer" option to group commits by, committer, instead of author. GitLFS integration wi
2.11.104 Feb 2017 05:05 minor feature: The default Travis-CI configuration specifies newer P4 and GitLFS. The character width table has been updated to match Unicode 9.0, Update the isatty() emulation for Windows by updating the previous, hack that depended on internals of (older) MSVC runtime. "git rev-parse --symbolic" failed with a more recent notation like, "HEAD -1" and "HEAD !". An empty directory in a working tree that can simply be nuked used, to interfere while merging or cherry-picking a change to create a, submodule directory there, which has been. The code in "git push" to compute if any commit being pushed in the, superproject binds a commit in a submodule that hasn't been pushed, out was overly inefficient, making it unusable even for a small, project that does not have any submodule but have a reasonable, number of refs. "git push --dry-run --recurse-submodule=on-demand" wasn't, "--dry-run" in the submodules. The output from "git worktree list" was made in readdir() order, and was unstable. mergetool...trustExitCode configuration variable did not apply, to built-in tools, but now it does. "git p4" LFS support was broken when LFS stores an empty blob. a corner case in merge-recursive regression that crept in, during 2.10 development cycle. Update the error messages from the dumb-http client when it fails, to obtain loose objects; we used to give sensible error message, only upon 404 but we now forbid unexpected redirects that needs to, be reported with something sensible. When diff.renames configuration is on (and with Git 2.9 and later, it is enabled by default, which made it worse), "git stash", misbehaved if a file is removed and another file with a very, similar content is added. "git diff --no-index" did not take "--no-abbrev" option. "git difftool --dir-diff" had a minor regression when started from, a subdirectory, which has been. "git commit --allow-empty --only" (no pathspec) with dirty index, ought to be an acceptable way to create a new commit that does not, change
2.11.030 Nov 2016 19:25 minor feature: An empty string used as a pathspec element has always meant, 'everything matches', but it is too easy to write a script that, finds a path to remove in path and run 'git rm " paht"' by, mistake (when the user meant to give " path"), which ends up, removing everything. This release starts warning about the, use of an empty string that is used for 'everything matches' and, asks users to use a more explicit '.' for that instead. The hope is that existing users will not mind this change, and, eventually the warning can be turned into a hard error, upgrading, the deprecation into removal of this (mis)feature. The historical argument order "git merge. HEAD....", has been deprecated for quite some time, and will be removed in the, next release (not this one). The default abbreviation length, which has historically been 7, now, scales as the repository grows, using the approximate number of, objects in the repository and a bit of math around the birthday, paradox. The logic suggests to use 12 hexdigits for the Linux, kernel, and 9 to 10 for Git itself. Comes with new version of git-gui, now at its 0.21.0 tag. "git format-patch --cover-letter HEAD " to format a single patch, with a separate cover letter now numbers the output as PATCH 0/1 , and PATCH 1/1 by default. An incoming "git push" that attempts to push too many bytes can now, be rejected by setting a new configuration variable at the receiving, end. "git nosuchcommand --help" said "No manual entry for gitnosuchcommand", which was not intuitive, given that "git nosuchcommand" said "git:, 'nosuchcommand' is not a git command". "git clone --recurse-submodules --reference path URL" is a way to, reduce network transfer cost by borrowing objects in an existing, path repository when cloning the superproject from URL; it, learned to also peek into path for presence of corresponding, repositories of submodules and borrow objects from there when able. The "git diff --submodule= short,log " mechanism has been
2.10.230 Oct 2016 23:45 minor feature: The code that parses the format parameter of for-each-ref command, has seen a micro-optimization. The "graph" API used in "git log --graph" miscounted the number of, output columns consumed so far when drawing a padding line, which, has been ; this did not affect any existing code as nobody, tried to write anything after the padding on such a line, though. Almost everybody uses DEFAULT_ABBREV to refer to the default, setting for the abbreviation, but "git blame" peeked into, underlying variable bypassing the macro for no good reason. Doc update to clarify what "log -3 --reverse" does. An author name, that spelled a backslash-quoted double quote in the, human readable part "My "double quoted " name", was not unquoted, correctly while applying a patch from a piece of e-mail. The original command line syntax for "git merge", which was "git, merge. HEAD....", has been deprecated for quite some, time, and "git gui" was the last in-tree user of the syntax. This, is finally, so that we can move forward with the deprecation. Codepaths that read from an on-disk loose object were too loose in, validating what they are reading is a proper object file and, sometimes read past the data they read from the disk, which has, been corrected. H/t to Gustavo Grieco for reporting. "git worktree", even though it used the default_abbrev setting that, ought to be affected by core.abbrev configuration variable, ignored, the variable setting. The command has been taught to read the, default set of configuration variables to correct this. A low-level function verify_packfile() was meant to show errors, that were detected without dying itself, but under some conditions, it didn't and died instead, which has been. When "git fetch" tries to find where the history of the repository, it runs in has diverged from what the other side has, it has a, mechanism to avoid digging too deep into irrelevant side branches. This however did not work well over the "smart-http" transport due, to a de
2.10.105 Oct 2016 06:25 minor feature: Clarify various ways to specify the "revision ranges" in the, documentation. "diff-highlight" script (in contrib/) learned to work better with, "git log -p --graph" output. The test framework left the number of tests and success/failure, count in the t/test-results directory, keyed by the name of the, test script plus the process ID. The latter however turned out not, to serve any useful purpose. The process ID part of the filename, has been removed. Having a submodule whose ".git" repository is somehow corrupt, caused a few commands that recurse into submodules loop forever. "git symbolic-ref -d HEAD" happily removes the symbolic ref, but, the resulting repository becomes an invalid one. Teach the command, to forbid removal of HEAD. A test spawned a short-lived background process, which sometimes, prevented the test directory from getting removed at the end of the, script on some platforms. Update a few tests that used to use GIT_CURL_VERBOSE to use the, newer GIT_TRACE_CURL. Update Japanese translation for "git-gui". "git fetch http::/site/path" did not die correctly and segfaulted, instead. "git commit-tree" stopped reading commit.gpgsign configuration, variable that was meant for Porcelain "git commit" in Git 2.9; we, forgot to update "git gui" to look at the configuration to match, this change. "git log --cherry-pick" used to include merge commits as candidates, to be matched up with other commits, resulting a lot of wasted time. The patch-id generation logic has been updated to ignore merges to, avoid the wastage. The http transport (with curl-multi option, which is the default, these days) failed to remove curl-easy handle from a curlm session, which led to unnecessary API failures. "git diff -W" output needs to extend the context backward to, include the header line of the current function and also forward to, include the body of the entire current function up to the header, line of the next one. This process may have to merge to adjacent, hunks,
2.10.005 Sep 2016 06:05 minor feature: git pull --rebase --verify-signature" learned to warn the user, that "--verify-signature" is a no-op when rebasing. An upstream project can make a recommendation to shallowly clone, some submodules in the.gitmodules file it ships. "git worktree add" learned that '-' can be used as a short-hand for, "@ -1 ", the previous branch. Update the funcname definition to support css files. The completion script (in contrib/) learned to complete "git, status" options. Messages that are generated by auto gc during "git push" on the, receiving end are now passed back to the sending end in such a way, that they are shown with "remote: " preto avoid confusing the, users. "git add -i/-p" learned to honor diff.compactionHeuristic, experimental knob, so that the user can work on the same hunk split, as "git diff" output. "upload-pack" allows a custom "git pack-objects" replacement when, responding to "fetch/clone" via the uploadpack.packObjectsHook. (merge b738396 jk/upload-pack-hook later to maint). Teach format-patch and mailsplit (hence "am") how a line that, happens to begin with "From " in the e-mail message is quoted with, " ", so that these lines can be restored to their original shape. (merge d9925d1 ew/mboxrd-format-am later to maint). "git repack" learned the "--keep-unreachable" option, which sends, loose unreachable objects to a pack instead of leaving them loose. This helps heuristics based on the number of loose objects, (e.g. "gc --auto"). (merge e26a8c4 jk/repack-keep-unreachable later to maint). "log --graph --format=" learned that " (N)" specifies the width, relative to the terminal's left edge, not relative to the area to, draw text that is to the right of the ancestry-graph section. It, also now accepts negative N that means the column limit is relative, to the right border. A careless invocation of "git send-email directory/" after editing, 0001-change.patch with an editor often ends up sending both, 0001-change.patch and its backup file, 0001-change.p
2.9.314 Aug 2016 02:05 minor feature: A helper function that takes the contents of a commit object and, finds its subject line did not ignore leading blank lines, as is, commonly done by other codepaths. Make it ignore leading blank, lines to match. Git does not know what the contents in the index should be for a, path added with "git add -N" yet, so "git grep --cached" should not, show hits (or show lack of hits, with -L) in such a path, but that, logic does not apply to "git grep", i.e. searching in the working, tree files. But we did so by mistake, which has been corrected. "git rebase -i --autostash" did not restore the auto-stashed change, when the operation was aborted. "git commit --amend --allow-empty-message -S" for a commit without, any message body could have misidentified where the header of the, commit object ends. More mark-up updates to typeset strings that are expected to, literally typed by the end user in -width font. For a long time, we carried an in-code comment that said our, colored output would work only when we use fprintf/fputs on, Windows, which no longer is the case for the past few years. "gc.autoPackLimit" when set to 1 should not trigger a repacking, when there is only one pack, but the code counted poorly and did, so. One part of "git am" had an oddball helper function that called, stuff from outside "his" as opposed to calling what we have "ours", which was not gender-neutral and also inconsistent with the rest of, the system where outside stuff is usuall called "theirs" in, contrast to "ours". The test framework learned a new helper test_match_signal to, check an exit code from getting killed by an expected signal. "git blame -M" missed a single line that was moved within the file. recently introduced codepaths that are involved in parallel, submodule operations, which gave up on reading too early, and, could have wasted CPU while attempting to write under a corner, case condition. "git grep -i" has been taught to fold case in non-ascii locales, correctly. A
2.9.217 Jul 2016 19:05 minor feature: A merged to v2.9.1 had a few tests that are not meant to be, run on platforms without 64-bit long, which caused unnecessary, test failures on them because we didn't detect the platform and, skip them. These tests are now skipped on platforms that they, are not applicable to.
2.9.113 Jul 2016 05:05 minor feature: When "git daemon" is run without -- init- timeout specified, a, connection from a client that silently goes offline can hang around, for a long time, wasting resources. The socket-level KEEPALIVE has, been enabled to allow the OS to notice such failed connections. The commands in `git log` family take C(auto) in a custom format, string. This unconditionally turned the color on, ignoring, --no-color or with --color=auto when the output is not connected to, a tty; this was corrected to make the format truly behave as, "auto". "git rev-list --count" whose walk-length is limited with "-n", option did not work well with the counting optimized to look at the, bitmap index. "git show -W" (extend hunks to cover the entire function, delimited, by lines that match the "funcname" pattern) used to show the entire, file when a change added an entire function at the end of the file, which has been. The documentation set has been updated so that literal commands, configuration variables and environment variables are consistently, typeset in -width font and bold in manpages. "git svn propset" subcommand that was added in 2.3 days is, documented now. The documentation tries to consistently spell "GPG"; when, referring to the specific program name, "gpg" is used. "git reflog" stopped upon seeing an entry that denotes a branch, creation event (aka "unborn"), which made it appear as if the, reflog was truncated. The git-prompt scriptlet (in contrib/) was not friendly with those, who uses "set -u", which has been. A codepath that used alloca(3) to place an unbounded amount of data, on the stack has been updated to avoid doing so. "git update-index --add --chmod=+x file" may be usable as an escape, hatch, but not a friendly thing to force for people who do need to, use it regularly. "git add --chmod=+x file" can be used instead. Build improvements for gnome-keyring (in contrib/), "git status" used to say "working directory" when it meant "working, tree". Comments about misb
2.9.014 Jun 2016 14:25 minor feature: Comes with git-multimail 1.3.1 (in contrib/). The end-user facing commands like "git diff" and "git log", now enable the rename detection by default. The credential.helper configuration variable is cumulative and, there is no good way to override it from the command line. As, a special case, giving an empty string as its value now serves, as the signal to clear the values specified in various files. A new "interactive.diffFilter" configuration can be used to, customize the diff shown in "git add -i" sessions. "git p4" now allows P4 author names to be mapped to Git author, names. "git rebase -x" can be used without passing "-i" option. "git -c credential.. =. submodule" can now be used to, propagate configuration variables related to credential helper, down to the submodules. "git tag" can create an annotated tag without explicitly given an, "-a" (or "-s") option (i.e. when a tag message is given). A new, configuration variable, tag.forceSignAnnotated, can be used to tell, the command to create signed tag in such a situation. "git merge" used to allow merging two branches that have no common, base by default, which led to a brand new history of an existing, project created and then get pulled by an unsuspecting maintainer, which allowed an unnecessary parallel history merged into the, existing project. The command has been taught not to allow this by, default, with an escape hatch "--allow-unrelated-histories" option, to be used in a rare event that merges histories of two projects, that started their lives independently. "git pull" has been taught to pass the "--allow-unrelated-histories", option to underlying "git merge". "git apply -v" learned to report paths in the patch that were, skipped via --include/--exclude mechanism or being outside the, current working directory. Shell completion (in contrib/) updates. The commit object name reported when "rebase -i" stops has been, shortened. "git worktree add" can be given "--no-checkout" option to only, c
2.8.408 Jun 2016 13:25 minor feature: Documentation for "git merge --verify-signatures" has been updated, to clarify that the signature of only the commit at the tip is, verified. Also the phrasing used for signature and key validity is, adjusted to align with that used by OpenPGP. On Windows.git and optionally any files whose name starts with a, dot are now marked as hidden, with a core.hideDotFiles knob to, customize this behaviour. Portability enhancement for "rebase -i" to help platforms whose, shell does not like "for i in. " (which is not POSIX-kosher). "git fsck" learned to catch NUL byte in a commit object as, potential error and warn. CI test was taught to build documentation pages. Many 'linkgit: ' references were broken, which are all with this. "git describe --contains" often made a hard-to-justify choice of, tag to give name to a given commit, because it tried to come up, with a name with smallest number of hops from a tag, causing an old, commit whose descendant that is recently tagged were not, described with respect to an old tag but with a newer tag. It did, not help that its computation of "hop" count was further tweaked to, penalize being on a side branch of a merge. The logic has been, updated to favor using the tag with the oldest tagger date, which, is a lot easier to explain to the end users: "We describe a commit, in terms of the (chronologically) oldest tag that contains the, commit.", Running tests with '-x' option to trace the individual command, executions is a useful way to detest scripts, but some tests, that capture the standard error stream and check what the command, said can be broken with the trace output mixed in. When running, our tests under "bash", however, we can redirect the trace output, to another file descriptor to keep the standard error of programs, being tested intact. "http.cookieFile" configuration variable clearly wants a pathname, but we forgot to treat it as such by e.g. applying tilde expansion. When de-initialising all submodules, "git submo
2.8.320 May 2016 22:06 minor feature: "git send-email" now uses a more readable timestamps when, formulating a message ID. The repository set-up sequence has been streamlined (the biggest, change is that there is no longer git_config_early()), so that we, do not attempt to look into refs/ when we know we do not have a, Git repository. When "git worktree" feature is in use, "git branch -d" allowed, deletion of a branch that is checked out in another worktree, When "git worktree" feature is in use, "git branch -m" renamed a, branch that is checked out in another worktree without adjusting, the HEAD symbolic ref for the worktree. "git format-patch --help" showed `-s` and `--no-patch` as if these, are valid options to the command. We already hide `--patch` option, from the documentation, because format-patch is about showing the, diff, and the documentation now hides these options as well. A change back in version 2.7 to "git branch" broke display of a, symbolic ref in a non-standard place in the refs/ hierarchy (we, expect symbolic refs to appear in refs/remotes/*/HEAD to point at, the primary branch the remote has, and as.git/HEAD to point at the, branch we locally checked out). A partial rewrite of "git submodule" in the 2.7 timeframe changed, the way the gitdir: pointer in the submodules point at the real, repository location to use absolute paths by accident. This has, been corrected. "git commit" misbehaved in a few minor ways when an empty message, is given via -m '', all of which has been corrected. Support for CRAM-MD5 authentication method in "git imap-send" did, not work well. The socks5:// proxy support added back in 2.6.4 days was not aware, that socks5h:// proxies behave differently. "git config" had a codepath that tried to pass a NULL to, printf(" s"), which nobody seems to have noticed.
2.8.201 May 2016 06:25 minor feature: The embedded args argv-array in the child process is used to build, the command line to run pack-objects instead of using a separate, array of strings. Bunch of tests on "git clone" has been renumbered for better, organization. The tests that involve running httpd leaked the system-wide, configuration in /etc/gitconfig to the tested environment. "index-pack --keep=. " was broken since v2.1.0 timeframe. "git config --get-urlmatch", unlike other variants of the "git, config --get" family, did not signal error with its exit status, when there was no matching configuration. The "--local-env-vars" and "--resolve-git-dir" options of "git, rev-parse" failed to work outside a repository when the command's, option parsing was rewritten in 1.8.5 era. Fetching of history by naming a commit object name directly didn't, work across remote-curl transport. A small memory leak in an error codepath has been plugged in xdiff, code. strbuf_getwholeline() did not NUL-terminate the buffer on certain, corner cases in its error codepath. The startup_info data, which records if we are working inside a, repository (among other things), are now uniformly available to Git, subcommand implementations, and Git avoids attempting to touch, references when we are not in a repository. "git mergetool" did not work well with conflicts that both sides, deleted. "git send-email" had trouble parsing alias file in mailrc format, when lines in it had trailing whitespaces on them. When "git merge --squash" stopped due to conflict, the concluding, "git commit" failed to read in the SQUASH_MSG that shows the log, messages from all the squashed commits. "git merge FETCH_HEAD" dereferenced NULL pointer when merging, nothing into an unborn history (which is arguably unusual usage, which perhaps was the reason why nobody noticed it). Build updates for MSVC. "git diff -M" used to work better when two originally identical, files A and B got renamed to X/A and X/B by pairing A to X/A and B, to X/B, b
2.8.106 Apr 2016 03:45 minor feature: make rpmbuild" target was broken as its input, git.spec.in, was, not updated to match a file it describes that has been renamed, recently. This has been.
2.8.029 Mar 2016 15:05 minor feature: It turns out "git clone" over rsync transport has been broken when, the source repository has packed references for a long time, and, nobody noticed nor complained about it. "push" learned that its "--delete" option can be shortened to, "-d", just like "branch --delete" and "branch -d" are the same, thing. "git blame" learned to produce the progress eye-candy when it takes, too much time before emitting the first line of the result. "git grep" can now be configured (or told from the command line), how many threads to use when searching in the working tree files. Some "git notes" operations, e.g. "git log --notes=. ", should, be able to read notes from any tree-ish that is shaped like a notes, tree, but the notes infrastructure required that the argument must, be a ref under refs/notes/. Loosen it to require a valid ref only, when the operation would update the notes (in which case we must, have a place to store the updated notes tree, iow, a ref). "git grep" by default does not fall back to its "--no-index", behavior outside a directory under Git's control (otherwise the, user may by mistake end up running a huge recursive search); with a, new configuration (set in HOME/.gitconfig--by definition this, cannot be set in the config file per project), this safety can be, disabled. "git pull --rebase" has been extended to allow invoking, "rebase -i". "git p4" learned to cope with the type of a file getting changed. "git format-patch" learned to notice format.outputDirectory, configuration variable. This allows "-o. " option to be, omitted on the command line if you always use the same directory in, your workflow. "interpret-trailers" has been taught to optionally update a file in, place, instead of always writing the result to the standard output. Many commands that read files that are expected to contain text, that is generated (or can be edited) by the end user to control, their behavior (e.g. "git grep -f. ") have been updated, to be more tolerant to lines
2.7.418 Mar 2016 17:25 minor feature: Patches were backported from the 'master' front to plug heap, corruption holes, to catch integer overflow in the computation of, pathname lengths, and to get rid of the name_path API. Both of, these would have resulted in writing over an under-allocated buffer, when formulating pathnames while tree traversal.
2.7.311 Mar 2016 14:25 minor feature: Traditionally, the tests that try commands that work on the, contents in the working tree were named with "worktree" in their, filenames, but with the recent addition of "git worktree", subcommand, whose tests are also named similarly, it has become, harder to tell them apart. The traditional tests have been renamed, to use "work-tree" instead in an attempt to differentiate them. Many codepaths forget to check return value from git_config_set(); the function is made to die() to make sure we do not proceed when, setting a configuration variable failed. Handling of errors while writing into our internal asynchronous, process has been made more robust, which reduces flakiness in our, tests. "git show 'HEAD:Foo BAR Baz'" did not interpret the argument as a, rev, i.e. the object named by the the pathname with wildcard, characters in a tree object. "git rev-parse --git-common-dir" used in the worktree feature, misbehaved when run from a subdirectory. The "v(iew)" subcommand of the interactive "git am -i" command was, broken in 2.6.0 timeframe when the command was rewritten in C. "git merge-tree" used to mishandle "both sides added" conflict with, its own "create a fake ancestor file that has the common parts of, what both sides have added and do a 3-way merge" logic; this has, been updated to use the usual "3-way merge with an empty blob as, the fake common ancestor file" approach used in the rest of the, system. The memory ownership rule of fill_textconv() API, which was a bit, tricky, has been documented a bit better. The documentation did not clearly state that the 'simple' mode is, now the default for "git push" when push.default configuration is, not set. Recent versions of GNU grep are pickier when their input contains, arbitrary binary data, which some of our tests uses. Rewrite the, tests to sidestep the problem. A helper function "git submodule" uses since v2.7.0 to list the, modules that match the pathspec argument given to its subcommands, (e.g. "subm
2.7.224 Feb 2016 00:25 minor feature: The low-level merge machinery has been taught to use CRLF line, termination when inserting conflict markers to merged contents that, are themselves CRLF line-terminated. "git worktree" had a broken code that attempted to auto-, possible inconsistency that results from end-users moving a, worktree to different places without telling Git (the original, repository needs to maintain backpointers to its worktrees, but, "mv" run by end-users who are not familiar with that fact will, obviously not adjust them), which actually made things worse, when triggered. "git push --force-with-lease" has been taught to report if the push, needed to force (or fast-forwarded). The emulated "yes" command used in our test scripts has been, tweaked not to spend too much time generating unnecessary output, that is not used, to help those who test on Windows where it would, not stop until it fills the pipe buffer due to lack of SIGPIPE. The vimdiff backend for "git mergetool" has been tweaked to arrange, and number buffers in the order that would match the expectation of, majority of people who read left to right, then top down and assign, buffers 1 2 3 4 "mentally" to local base remote merge windows based, on that order. The documentation for "git clean" has been corrected; it mentioned, that.git/modules/ are removed by giving two "-f", which has never, been the case. Paths that have been told the index about with "add -N" are not, quite yet in the index, but a few commands behaved as if they, already are in a harmful way.
2.7.005 Jan 2016 22:25 minor feature: The appearance of "gitk", particularly on high DPI monitors, have, been improved. "gitk" also comes with an undated translation for, Swedish and Japanese. "git remote" learned "get-url" subcommand to show the URL for a, given remote name used for fetching and pushing. There was no way to defeat a configured rebase.autostash variable, from the command line, as "git rebase --no-autostash" was missing. "git log --date=local" used to only show the normal (default), format in the local timezone. The command learned to take 'local', as an instruction to use the local timezone with other formats, The refs used during a "git bisect" session is now per-worktree so, that independent bisect sessions can be done in different worktrees, created with "git worktree add". Users who are too busy to type three extra keystrokes to ask for, "git stash show -p" can now set stash.showPatch configuration, variable to true to always see the actual patch, not just the list, of paths affected with feel for the extent of damage via diffstat. "quiltimport" allows to specify the series file by honoring the, QUILT_SERIES environment and also --series command line option. The use of 'good/bad' in "git bisect" made it confusing to use when, hunting for a state change that is not a regression (e.g. ). The command learned 'old/new' and then allows the end user to, say e.g. "bisect start --term-old=fast --term-new=slow" to find a, performance regression. "git interpret-trailers" can now run outside of a Git repository. "git p4" learned to reencode the pathname it uses to communicate, with the p4 depot with a new option. Give progress meter to "git filter-branch". Allow a later "!/abc/def" to override an earlier "/abc" that, appears in the same.gitignore file to make it easier to express, "everything in /abc directory is ignored, except for...". Teach "git p4" to send large blobs outside the repository by, talking to Git LFS. Prepare for Git on-disk repository representation to undergo,
2.6.409 Dec 2015 07:25 minor feature: The "configure" script did not test for -lpthread correctly, which, upset some linkers. Add support for talking http/https over socks proxy. Portability for Windows, which may rewrite SHELL variable using, non-POSIX paths. We now consistently allow all hooks to ignore their standard input, rather than having git complain of SIGPIPE. shell quoting in contrib script. Test portability for a topic in v2.6.1. Allow tilde-expansion in some http config variables. Give a useful special case "diff/show --word-diff-regex=." as an, example in the documentation. for a corner case in filter-branch. Make git-p4 work on a detached head. Documentation clarification for "check-ignore" without "--verbose". Just like the working tree is cleaned up when the user cancelled, submission in P4Submit.applyCommit(), clean up the mess if "p4, submit" fails. Having a leftover.idx file without corresponding.pack file in, the repository hurts performance; "git gc" learned to prune them. The code to prepare the working tree side of temporary directory, for the "dir-diff" feature forgot that symbolic links need not be, copied (or symlinked) to the temporary area, as the code already, special cases and overwrites them. Besides, it was wrong to try, computing the object name of the target of symbolic link, which may, not even exist or may be a directory. There was no way to defeat a configured rebase.autostash variable, from the command line, as "git rebase --no-autostash" was missing. Allow "git interpret-trailers" to run outside of a Git repository. Produce correct "dirty" marker for shell prompts, even when we, are on an orphan or an unborn branch. Some corner cases have been in string-matching done in "git, status". Apple's common crypto implementation of SHA1_Update() does not take, more than 4GB at a time, and we now have a compile-time workaround, for it.
2.6.307 Nov 2015 01:45 minor feature: The error message from "git blame --contents --reverse" incorrectly, talked about "--contents --children". "git merge-file" tried to signal how many conflicts it found, which, obviously would not work well when there are too many of them. The name-hash subsystem that is used to cope with case insensitive, filesystems keeps track of directories and their on-filesystem, cases for all the paths in the index by holding a pointer to a, randomly chosen cache entry that is inside the directory (for its, ce- ce_name component). This pointer was not updated even when the, cache entry was removed from the index, leading to use after free. This was by recording the path for each directory instead of, borrowing cache entries and restructuring the API somewhat. When the "git am" command was reimplemented in C, "git am -3" had a, small regression where it is aborted in its error handling codepath, when underlying merge-recursive failed in some ways. The synopsis text and the usage string of subcommands that read, list of things from the standard input are often shown as if they, only take input from a file on a filesystem, which was misleading. A couple of commands still showed " options " in their usage string, to note where options should come on their command line, but we, spell that " . " in most places these days. The submodule code has been taught to work better with separate, work trees created via "git worktree add". When "git gc --auto" is backgrounded, its diagnosis message is, lost. It now is saved to a file in GIT_DIR and is shown next time, the "gc --auto" is run. Work around "git p4" failing when the P4 depot records the contents, in UTF-16 without UTF-16 BOM. Recent update to "rebase -i" that tries to sanity check the edited, insn sheet before it uses it has become too picky on Windows where, CRLF left by the editor is turned into a trailing CR on the line, read via the "read" built-in command. "git clone --dissociate" runs a big "git repack" process at
2.6.218 Oct 2015 06:45 minor feature: There were some classes of errors that "git fsck" diagnosed to its, standard error that did not cause it to exit with non-zero status. A test script for the HTTP service had a timing dependent, which was. Performance-measurement tests did not work without an installed Git. On a case insensitive filesystems, setting GIT_WORK_TREE variable, using a random cases that does not agree with what the filesystem, thinks confused Git that it wasn't inside the working tree. When "git am" was rewritten as a built-in, it stopped paying, attention to user.signingkey, which was. After "git checkout --detach", "git status" reported a fairly, useless "HEAD detached at HEAD", instead of saying at which exact, commit. "git rebase -i" had a minor regression recently, which stopped, considering a line that begins with an indented '#' in its insn, sheet not a comment, which is now. Description of the "log.follow" configuration variable in "git log", documentation is now also copied to "git config" documentation. Allocation related functions and stdio are unsafe things to call, inside a signal handler, and indeed killing the pager can cause, glibc to deadlock waiting on allocation mutex as our signal handler, tries to free() some data structures in wait_for_pager(). Reduce, these unsafe calls. The way how --ref/--notes to specify the notes tree reference are, DWIMmed was not clearly documented. Customization to change the behaviour with "make -w" and "make -s", in our Makefile was broken when they were used together. The Makefile always runs the library archiver with hardcoded "crs", options, which was inconvenient for exotic platforms on which, people want to use programs with totally different set of command, line options. The ssh transport, just like any other transport over the network, did not clear GIT_ environment variables, but it is possible to, use SendEnv and AcceptEnv to leak them to the remote invocation of, Git, which is not a good idea at all. Explicitly clear t
2.6.106 Oct 2015 16:45 minor feature: Xdiff code we use to generate diffs is not prepared to handle, extremely large files. It uses "int" in many places, which can, overflow if we have a very large number of lines or even bytes in, our input files, for example. Cap the input size to soemwhere, around 1GB for now. Some protocols (like git-remote-ext) can execute arbitrary code, found in the URL. The URLs that submodules use may come from, arbitrary sources (e.g..gitmodules files in a remote, repository), and can hurt those who blindly enable recursive, fetch. Restrict the allowed protocols to well known and safe, ones.
2.6.030 Sep 2015 09:45 minor feature: An asterisk as a substring (as opposed to the entirety) of a path, component for both side of a refspec, e.g. "refs/heads/o*:refs/remotes/heads/i*", is now allowed. New userdiff pattern definition for fountain screenwriting markup, format has been added. "git log" and friends learned a new "--date=format:." option to, format timestamps using system's strftime(3). "git fast-import" learned to respond to the get-mark command via, its cat-blob-fd interface. "git rebase -i" learned "drop commit-object-name subject" command, as another way to skip replaying of a commit. A new configuration variable can enable "--follow" automatically, when "git log" is run with one pathspec argument. "git status" learned to show a more detailed information regarding, the "rebase -i" session in progress. "git cat-file" learned "--batch-all-objects" option to enumerate all, available objects in the repository more quickly than "rev-list, --all --objects" (the output includes unreachable objects, though). "git fsck" learned to ignore errors on a set of known-to-be-bad, objects, and also allows the warning levels of various kinds of, non-critical breakages to be tweaked. "git rebase -i"'s list of todo is made configurable. "git send-email" now performs alias-expansion on names that are, given via --cccmd, etc. An environment variable GIT_REPLACE_REF_BASE tells Git to look into, refs hierarchy other than refs/replace/ for the object replacement, data. Allow untracked cache (experimental) to be used when sparse, checkout (experimental) is also in use. "git pull --rebase" has been taught to pay attention to, rebase.autostash configuration. The command-line completion script (in contrib/) has been updated. A negative !ref entry in multi-value transfer.hideRefs, configuration can be used to say "don't hide this one". After "git am" without "-3" stops, running "git am -3" pays attention, to "-3" only for the patch that caused the original invocation, to stop. When linked worktree
2.5.319 Sep 2015 08:45 minor feature: The experimental untracked-cache feature were gy when paths with, a few levels of subdirectories are involved. Recent versions of scripted "git am" has a performance regression, in "git am --skip" codepath, which no longer exists in the, built-in version on the 'master' front. the regression in, the last scripted version that appear in 2.5.x maintenance track, and older.
2.5.212 Sep 2015 06:05 minor feature: git init empty git -C empty log" said "bad default revision 'HEAD'", which was found to be a bit confusing to new users. The "interpret-trailers" helper mistook a multi-paragraph title of, a commit log message with a colon in it as the end of the trailer, block. When re-priming the cache-tree opportunistically while committing, the in-core index as-is, we mistakenly invalidated the in-core, index too aggressively, causing the experimental split-index code, to unnecessarily rewrite the on-disk index file(s). "git archive" did not use zip64 extension when creating an archive, with more than 64k entries, which nobody should need, right ;-)?, The code in "multiple-worktree" support that attempted to recover, from an inconsistent state updated an incorrect file. "git rev-list" does not take "--notes" option, but did not complain, when one is given. Because the configuration system does not allow "alias.0foo" and, "pager.0foo" as the configuration key, the user cannot use '0foo', as a custom command name anyway, but "git 0foo" tried to look these, keys up and emitted useless warnings before saying '0foo is not a, git command'. These warning messages have been squelched. We recently rewrote one of the build scripts in Perl, which made it, necessary to have Perl to build Git. Reduced Perl dependency by, rewriting it again using sed. t1509 test that requires a dedicated VM environment had some, bitrot, which has been corrected. strbuf_read() used to have one extra iteration (and an unnecessary, strbuf_grow() of 8kB), which was eliminated. The codepath to produce error messages had a hard-coded limit to, the size of the message, primarily to avoid memory allocation while, calling die(). When trying to see that an object does not exist, a state errno, leaked from our "first try to open a packfile with O_NOATIME and, then if it fails retry without it" logic on a system that refuses, O_NOATIME. This confused us and caused us to die, saying that the, packfile is unre
2.5.129 Aug 2015 11:25 minor feature: Running an aliased command from a subdirectory when the.git thing, in the working tree is a gitfile pointing elsewhere did not work. Often a fast-import stream builds a new commit on top of the, previous commit it built, and it often unconditionally emits a, "from" command to specify the first parent, which can be omitted in, such a case. This caused fast-import to forget the tree of the, previous commit and then re-read it from scratch, which was, inefficient. Optimize for this common case. The "rev-parse --parseopt" mode parsed the option specification, and the argument hint in a strange way to allow '=' and other, special characters in the option name while forbidding them from, the argument hint. This made it impossible to define an option, like "--pair. =. " with "pair=key=value" specification, which instead would have defined a "--pair=key. " option. A "rebase" replays changes of the local branch on top of something, else, as such they are placed in stage #3 and referred to as, "theirs", while the changes in the new base, typically a foreign, work, are placed in stage #2 and referred to as "ours". Clarify, the "checkout --ours/--theirs". An experimental "untracked cache" feature used uname(2) in a, slightly unportable way. "sparse checkout" misbehaved for a path that is excluded from the, checkout when switching between branches that differ at the path. The low-level "git send-pack" did not honor 'user.signingkey', configuration variable when sending a signed-push. An attempt to delete a ref by pushing into a repository whose HEAD, symbolic reference points at an unborn branch that cannot be, created due to ref D/F conflict (e.g. refs/heads/a/b exists, HEAD, points at refs/heads/a) failed. "git subtree" (in contrib/) depended on "git log" output to be, stable, which was a no-no. Apply a workaround to force a, particular date format. "git clone URL" in recent releases of Git contains a regression in, the code that invents a new repository name incorre
2.5.028 Jul 2015 18:45 major feature: The bash completion script (in contrib/) learned a few options that, "git revert" takes. Whitespace breakages in deleted and context lines can also be, painted in the output of "git diff" and friends with the new, --ws-error-highlight option. List of commands shown by "git help" are grouped along the workflow, elements to help early learners. "git p4" now detects the filetype (e.g. binary) correctly even when, the files are opened exclusively. git p4 attempts to better handle branches in Perforce. "git p4" learned "--changes-block-size. " to read the changes in, chunks from Perforce, instead of making one call to "p4 changes", that may trigger "too many rows scanned" error from Perforce. More workaround for Perforce's row number limit in "git p4". Unlike " EDITOR" and " GIT_EDITOR" that can hold the path to the, command and initial options (e.g. "/path/to/emacs -nw"), 'git p4', did not let the shell interpolate the contents of the environment, variable that name the editor " P4EDITOR" (and " EDITOR", too). This release makes it in line with the rest of Git, as well as with, Perforce. A new short-hand. @ push denotes the remote-tracking branch, that tracks the branch at the remote the. would be pushed, to. "git show-branch --topics HEAD" (with no other arguments) did not, do anything interesting. Instead, contrast the given revision, against all the local branches by default. A replacement for contrib/workdir/git-new-workdir that does not, rely on symbolic links and make sharing of objects and refs safer, by making the borrowee and borrowers aware of each other. Consider this as still an experimental feature; its UI is still, likely to change. Tweak the sample "store" backend of the credential helper to honor, XDG configuration file locations when specified. A heuristic we use to catch mistyped paths on the command line, "git... " is to make sure that all the non-rev, parameters in the later part of the command line are names of the, files in the workin
2.4.617 Jul 2015 00:05 minor feature: git fetch --depth=. " and "git clone --depth=. " issued, a shallow transfer request even to an upload-pack that does not, support the capability. "git fsck" used to ignore missing or invalid objects recorded in reflog. The tcsh completion writes a bash scriptlet but that would have, failed for users with noclobber set. Recent Mac OS X updates breaks the logic to detect that the machine, is on the AC power in the sample pre-auto-gc script. "git format-patch --ignore-if-upstream A..B" did not like to be fed, tags as boundary commits.
2.4.526 Jun 2015 14:45 minor feature: The setup code used to die when core.bare and core.worktree are set, inconsistently, even for commands that do not need working tree. There was a dead code that used to handle "git pull --tags" and, show special-cased error message, which was made irrelevant when, the semantics of the option changed back in Git 1.9 days. "color.diff.plain" was a misnomer; give it 'color.diff.context' as, a more logical synonym. The configuration reader/writer uses mmap(2) interface to access, the files; when we find a directory, it barfed with "Out of memory?". Recent "git prune" traverses young unreachable objects to safekeep, old objects in the reachability chain from them, which sometimes, showed unnecessary error messages that are alarming. "git rebase -i" fired post-rewrite hook when it shouldn't (namely, when it was told to stop sequencing with 'exec' insn).
2.4.417 Jun 2015 16:05 minor feature: l10n updates for German. An earlier leakfix to bitmap testing code was incomplete. "git clean pathspec..." tried to lstat(2) and complain even for, paths outside the given pathspec. Communication between the HTTP server and http_backend process can, lead to a dead-lock when relaying a large ref negotiation request. Diagnose the situation better, and mitigate it by reading such a, request first into core (to a reasonable limit). The clean/smudge interface did not work well when filtering an, empty contents (failed and then passed the empty input through). It can be argued that a filter that produces anything but empty for, an empty input is nonsense, but if the user wants to do strange, things, then why not?, Make "git stash something --help" error out, so that users can, safely say "git stash drop --help". Clarify that "log --raw" and "log --format=raw" are unrelated, concepts. Catch a programmer mistake to feed a pointer not an array to, ARRAY_SIZE() macro, by using a couple of GCC extensions.
2.4.306 Jun 2015 23:05 minor feature: Error messages from "git branch" called remote-tracking branches as, "remote branches". "git rerere forget" in a repository without rerere enabled gave a, cryptic error message; it should be a silent no-op instead. "git pull --log" and "git pull --no-log" worked as expected, but, "git pull --log=20" did not. The pull.ff configuration was supposed to override the merge.ff, configuration, but it didn't. The code to read pack-bitmap wanted to allocate a few hundred, pointers to a structure, but by mistake allocated and leaked memory, enough to hold that many actual structures. Correct the allocation, size and also have it on stack, as it is small enough. Various documentation mark-up fixes to make the output more, consistent in general and also make AsciiDoctor (an alternative, formatter) happier. "git bundle verify" did not diagnose extra parameters on the, command line. Multi-ref transaction support we merged a few releases ago, unnecessarily kept many file descriptors open, risking to fail with, resource exhaustion. The ref API did not handle cases where 'refs/heads/xyzzy/frotz' is, removed at the same time as 'refs/heads/xyzzy' is added (or vice, versa) very well. The "log --decorate" enhancement in Git 2.4 that shows the commit, at the tip of the current branch e.g. "HEAD - master", did not, work with --decorate=full. There was a commented-out (instead of being marked to expect, failure) test that documented a breakage that was fixed since the, test was written; turn it into a proper test. core.excludesfile (defaulting to XDG_HOME/git/ignore) is supposed, to be overridden by repository-specific.git/info/exclude file, but, the order was swapped from the beginning. This belatedly fixes it. The connection initiation code for "ssh" transport tried to absorb, differences between the stock "ssh" and Putty-supplied "plink" and, its derivatives, but the logic to tell that we are using "plink", variants were too loose and falsely triggered when "plink" appear
2.4.115 May 2015 06:05 minor bugfix: The usual "git diff" when seeing a file turning into a directory, showed a patchset to remove the file and create all files in the, directory, but "git diff --no-index" simply refused to work. Also, when asked to compare a file and a directory, imitate POSIX "diff", and compare the file with the file with the same name in the, directory, instead of refusing to run. * The default HOME/.gitconfig file created upon "git config --global", that edits it had incorrectly spelled user.name and user.email, entries in it. * "git commit --date=now" or anything that relies on approxidate lost, the daylight-saving-time offset. * "git cat-file bl blob" failed to barf even though there is no, object type that is "bl". * Teach the codepaths that read .gitignore and .gitattributes files, that these files encoded in UTF-8 may have UTF-8 BOM marker at the, beginning; this makes it in line with what we do for configuration, files already. * Access to objects in repositories that borrow from another one on a, slow NFS server unnecessarily got more expensive due to recent code, becoming more cautious in a naive way not to lose objects to pruning. * We avoid setting core.worktree when the repository location is the, ".git" directory directly at the top level of the working tree, but, the code misdetected the case in which the working tree is at the, root level of the filesystem (which arguably is a silly thing to, do, but still valid).
2.4.003 May 2015 01:25 major feature: The output from "git log --decorate" (and, more generally, the " d", format specifier used in the "--format=. " parameter to the, "git log" family of commands) has changed. It used to list "HEAD", just like other branches; e.g, git log --decorate -1 master, commit bdb0f6788fa5e3cacc4315e9ff318a27b2676ff4 (HEAD, master), . This release changes the output slightly when HEAD refers to a, branch whose name is also shown in the output. The above is now, shown as:, git log --decorate -1 master, commit bdb0f6788fa5e3cacc4315e9ff318a27b2676ff4 (HEAD - master), . * The phrasing "git branch" uses to describe a detached HEAD has been, updated to agree with the phrasing used by "git status":, - When HEAD is at the same commit as when it was originally, detached, they now both show "detached at ". - When HEAD has moved since it was originally detached, they now, both show "detached from ". Previously, "git branch" always used "from". * Our default I/O size (8 MiB) for large files was too large for some, platforms with smaller SSIZE_MAX, leading to read(2)/write(2), failures. * We did not check the curl library version before using the, CURLOPT_PROXYAUTH feature, which did not exist in older versions of, the library. * We now detect number of CPUs on older BSD-derived systems. * Portability fixes and workarounds for shell scripts have been added, to help BSD-derived systems. * The command usage info strings given by "git cmd -h" and in, documentation have been tweaked for consistency. * The "sync" subcommand of "git p4" now allows users to exclude, subdirectories like its "clone" subcommand does. * "git log --invert-grep --grep=WIP" will show only commits that do, not have the string "WIP" in their messages. * "git push" has been taught an "--atomic" option that makes a push, that updates more than one ref an "all-or-none" affair. * Extending the "push to deploy" feature that was added in 2.3, the, behaviour of "git push" when updating the branch that is checked, out can now
2.3.728 Apr 2015 09:05 minor feature: An earlier update to the parser that disects a URL broke an, address, followed by a colon, followed by an empty string (instead, of the port number), e.g. ssh://example.com:/path/to/repo. * The completion script (in contrib/) contaminated global namespace, and clobbered on a shell variable x. * The "git push --signed" protocol extension did not limit what the, "nonce" that is a server-chosen string can contain or how long it, can be, which was unnecessarily lax. Limit both the length and the, alphabet to a reasonably small space that can still have enough, entropy.
2.3.622 Apr 2015 16:25 minor feature: diff-highlight" (in contrib/) used to show byte-by-byte, differences, which meant that multi-byte characters can be chopped, in the middle. It learned to pay attention to character boundaries, (assuming the UTF-8 payload).
2.3.501 Apr 2015 12:45 minor feature: The prompt script (in contrib/) did not show the untracked sign, when working in a subdirectory without any untracked files. * Even though "git grep --quiet" is run merely to ask for the exit, status, we spawned the pager regardless. Stop doing that. * Recommend format-patch and send-email for those who want to submit, patches to this project. * An failure early in the "git clone" that started creating the, working tree and repository could have resulted in some directories, and files left without getting cleaned up. * "git fetch" that fetches a commit using the allow-tip-sha1-in-want, extension could have failed to fetch all the requested refs. * The split-index mode introduced at v2.3.0-rc0 41 was broken in the, codepath to protect us against a broken reimplementation of Git, that writes an invalid index with duplicated index entries, etc. * "git prune" used to largely ignore broken refs when deciding which, objects are still being used, which could spread an existing small, damage and make it a larger one. * "git tag -h" used to show the "--column" and "--sort" options, that are about listing in a wrong section. * The transfer.hiderefs support did not quite work for smart-http, transport. * The code that reads from the ctags file in the completion script, (in contrib/) did not spell param/pattern/string substitution, correctly, which happened to work with bash but not with zsh. * The explanation on "rebase --preserve-merges", "pull --rebase=preserve", and "push --force-with-lease" in the documentation was unclear.
2.3.424 Mar 2015 13:05 minor bugfix: The 'color.status.unmerged' configuration was not described. "git log --decorate" did not reset colors correctly around the, branch names. "git -C '' subcmd" refused to work in the current directory, unlike, "cd ''" which silently behaves as a no-op. "git imap-send" learned to optionally talk with an IMAP server via, libcURL; because there is no other option when Git is built with, NO_OPENSSL option, use that codepath by default under such, configuration. A workaround for certain build of GPG that triggered false breakage, in a test has been added. "git rebase -i" recently started to include the number of, commits in the insn sheet to be processed, but on a platform, that prepends leading whitespaces to "wc -l" output, the numbers, are shown with extra whitespaces that aren't necessary. We did not parse username followed by literal IPv6 address in SSH, transport URLs, e.g. ssh://user@ 2001:db8::1 :22/repo.git, correctly.
2.3.208 Mar 2015 03:40 minor feature: update-index --refresh" used to leak when an entry cannot be, refreshed for whatever reason. * "git fast-import" used to crash when it could not close and, conclude the resulting packfile cleanly. * "git blame" died, trying to free an uninitialized piece of memory. * "git merge-file" did not work correctly in a subdirectory. * "git submodule add" failed to squash "path/to/././submodule" to, "path/to/submodule". * In v2.2.0, we broke "git prune" that runs in a repository that, borrows from an alternate object store. * Certain older vintages of cURL give irregular output from, "curl-config --vernum", which confused our build system. * An earlier workaround to squelch unhelpful deprecation warnings, from the complier on Mac OSX unnecessarily set minimum required, version of the OS, which the user might want to raise (or lower), for other reasons. * Longstanding configuration variable naming rules has been added to, the documentation. * The credential helper for Windows (in contrib/) used to mishandle, a user name with an at-sign in it. * Older GnuPG implementations may not correctly import the keyring, material we prepare for the tests to use. * Clarify in the documentation that "remote..pushURL" and, "remote..URL" are there to name the same repository accessed, via different transports, not two separate repositories. * The pack bitmap support did not build with older versions of GCC. * Reading configuration from a blob object, when it ends with a lone, CR, use to confuse the configuration parser. * We didn't format an integer that wouldn't fit in "int" but in, "uintmax_t" correctly. * "git push --signed" gave an incorrectly worded error message when, the other side did not support the capability. * "git fetch" over a remote-helper that cannot respond to "list", command could not fetch from a symbolic reference e.g. HEAD. * The insn sheet "git rebase -i" creates did not fully honor, core.abbrev settings. * The tests that wanted to see that file becomes unreadable after
2.3.126 Feb 2015 08:25 minor feature: The interactive "show a list and let the user choose from it", interface "add -i" used showed and prompted to the user even when, the candidate list was empty, against which the only "choice" the, user could have made was to choose nothing. * "git apply --whitespace=fix" used to under-allocate the memory, when the fix resulted in a longer text than the original patch. * "git log --help" used to show rev-list options that are irrelevant, to the "log" command. * The error message from "git commit", when a non-existing author, name was given as value to the "--author=" parameter, has been, reworded to avoid misunderstanding. * A broken pack .idx file in the receiving repository prevented the, dumb http transport from fetching a good copy of it from the other, side. * The documentation incorrectly said that C(opy) and R(ename) are the, only ones that can be followed by the score number in the output in, the --raw format. * Fix a misspelled conditional that is always true. * Code to read branch name from various files in .git/ directory, would have misbehaved if the code to write them left an empty file. * The "git push" documentation made the "--repo=" option, easily misunderstood. * After attempting and failing a password-less authentication, (e.g. kerberos), libcURL refuses to fall back to password based, Basic authentication without a bit of help/encouragement. * Setting diff.submodule to 'log' made "git format-patch" produce, broken patches. * "git rerere" (invoked internally from many mergy operations) did, not correctly signal errors when told to update the working tree, files and failed to do so for whatever reason. * "git blame HEAD -- missing" failed to correctly say "HEAD" when it, tried to say "No such path 'missing' in HEAD".
2.3.006 Feb 2015 06:25 minor feature: Recent gcc toolchain on Cygwin started throwing compilation warning, which has been squelched. * A few updates to build on platforms that lack tv_nsec, clock_gettime, CLOCK_MONOTONIC and HMAC_CTX_cleanup (e.g. older, RHEL) have been added. * It was cumbersome to use "GIT_SSH" mechanism when the user wanted, to pass an extra set of arguments to the underlying ssh. A new, environment variable GIT_SSH_COMMAND can be used for this. * A request to store an empty note via "git notes" meant to remove, note from the object but with --allow-empty we will store a, (surprise!) note that is empty. * "git interpret-trailers" learned to properly handle the, "Conflicts:" block at the end. * "git am" learned "--message-id" option to copy the message ID of, the incoming e-mail to the log message of resulting commit. * "git clone --reference=" learned the "--dissociate", option to go with it; it borrows objects from the reference object, store while cloning only to reduce network traffic and then, dissociates the resulting clone from the reference by performing, local copies of borrowed objects. * "git send-email" learned "--transfer-encoding" option to force a, non-fault Content-Transfer-Encoding header (e.g. base64). * "git send-email" normally identifies itself via X-Mailer: header in, the message it sends out. A new command line flag --no-xmailer, allows the user to squelch the header. * "git push" into a repository with a working tree normally refuses, to modify the branch that is checked out. The command learned to, optionally do an equivalent of "git reset --hard" only when there, is no change to the working tree and the index instead, which would, be useful to "deploy" by pushing into a repository. * "git new-workdir" (in contrib/) can be used to populate an empty, and existing directory now. * Credential helpers are asked in turn until one of them give, positive response, which is cumbersome to turn off when you need to, run Git in an automated setting. The credential helper
2.2.215 Jan 2015 00:05 minor feature: git checkout treeish path", when path in the index and the, working tree already matched what is in treeish at the path, still overwrote the path unnecessarily. * "git config --get-color" did not parse its command line arguments, carefully. * open() emulated on Windows platforms did not give EISDIR upon, an attempt to open a directory for writing. * A few code paths used abs() when they should have used labs() on, long integers. * "gitweb" used to depend on a behaviour recent CGI.pm deprecated. * "git init" (hence "git clone") initialized the per-repository, configuration file .git/config with x-bit by mistake. * Git 2.0 was supposed to make the "simple" mode for the default of, "git push", but it didn't. * "Everyday" document had a broken link. * The build procedure did not bother fixing perl and python scripts, when NO_PERL and NO_PYTHON build-time configuration changed. * The code that reads the reflog from the newer to the older entries, did not handle an entry that crosses a boundary of block it uses to, read them correctly. * "git apply" was described in the documentation to take --ignore-date, option, which it does not. * Traditionally we tried to avoid interpreting date strings given by, the user as future dates, e.g. GIT_COMMITTER_DATE=2014-12-10 when, used early November 2014 was taken as "October 12, 2014" because it, is likely that a date in the future, December 10, is a mistake. This heuristics has been loosened to allow people to express future, dates (most notably, --until= may want to be far in the, future) and we no longer tiebreak by future-ness of the date when, (1) ISO-like format is used, and, (2) the string can make sense interpreted as both y-m-d and y-d-m. Git may still have to use the heuristics to tiebreak between dd/mm/yy, and mm/dd/yy, though. * The code to abbreviate an object name to its short unique prefix, has been optimized when no abbreviation was requested. * "git add --ignore-errors ..." did not ignore an error to, give a fi
2.2.119 Dec 2014 17:05 minor feature: We used to allow committing a path ".Git/config" with Git that is, running on a case sensitive filesystem, but an attempt to check out, such a path with Git that runs on a case insensitive filesystem, would have clobbered ".git/config", which is definitely not what, the user would have expected. Git now prevents you from tracking, a path with ".Git" (in any case combination) as a path component. * On Windows, certain path components that are different from ".git", are mapped to ".git", e.g. "git 1/config" is treated as if it were, ".git/config". HFS+ has a similar issue, where certain unicode, codepoints are ignored, e.g. ".g u200cit/config" is treated as if, it were ".git/config". Pathnames with these potential issues are, rejected on the affected systems. Git on systems that are not, affected by this issue (e.g. Linux) can also be configured to, reject them to ensure cross platform interoperability of the hosted, projects. * "git fsck" notices a tree object that records such a path that can, be confused with ".git", and with receive.fsckObjects configuration, set to true, an attempt to "git push" such a tree object will be, rejected. Such a path may not be a problem on a well behaving, filesystem but in order to protect those on HFS+ and on case, insensitive filesystems, this check is enabled on all platforms.
2.2.028 Nov 2014 09:45 minor feature: Building on older MacOS X systems automatically sets, the necessary NO_APPLE_COMMON_CRYPTO build-time option. * Building with NO_PTHREADS has been resurrected. * Compilation options have been updated a bit to better support the, z/OS port. * "git archive" learned to filter what gets archived with a pathspec. * "git config --edit --global" starts from a skeletal per-user, configuration file contents, instead of a total blank, when the, user does not already have any global config. This immediately, reduces the need to later ask "Have you forgotten to set, core.user?", and we can add more to the template as we gain, more experience. * "git stash list -p" used to be almost always a no-op because each, stash entry is represented as a merge commit. It learned to show, the difference between the base commit version and the working tree, version, which is in line with what "git stash show" gives. * Sometimes users want to report a bug they experience on their, repository, but they are not at liberty to share the contents of, the repository. "fast-export" was taught an "--anonymize" option, to replace blob contents, names of people, paths and log, messages with bland and simple strings to help them. * "git difftool" learned an option to stop feeding paths to the, diff backend when it exits with a non-zero status. * "git grep" learned to paint (or not paint) partial matches on, context lines when showing "grep -C" output in color. * "log --date=iso" uses a slight variant of the ISO 8601 format that is, more human readable. A new "--date=iso-strict" option gives, datetime output that conforms more strictly. * The logic "git prune" uses is more resilient against various corner, cases. * A broken reimplementation of Git could write an invalid index that, records both stage #0 and higher-stage entries for the same path. We now notice and reject such an index, as there is no sensible, fallback (we do not know if the broken tool wanted to resolve and, forgot to remove the higher-s
2.1.303 Nov 2014 02:05 minor bugfix: Some MUAs mangled a line in a message that begins with "From " to " From " when writing to a mailbox file and feeding such an input to "git am" used to lose such a line. "git daemon" (with NO_IPV6 build configuration) used to incorrectly use the hostname even when gethostbyname() reported that the given hostname is not found. Newer versions of 'meld' breaks the auto-detection we use to see if they are new enough to support the `--output` option. "git pack-objects" forgot to disable the codepath to generate object recheability bitmap when it needs to split the resulting pack. "gitweb" used deprecated CGI::startfrom, which was removed from CGI.pm as of 4.04; use CGI::start_from instead. "git log" documentation had an example section marked up not quite correctly, which passed AsciiDoc but failed with AsciiDoctor.