| Git 2.18 Release Notes | 
 | ====================== | 
 |  | 
 | Updates since v2.17 | 
 | ------------------- | 
 |  | 
 | UI, Workflows & Features | 
 |  | 
 |  * Rename detection logic in "diff" family that is used in "merge" 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 bug causing dirty files involved in a rename | 
 |    to be overwritten during merge has also been fixed as part of this | 
 |    work. | 
 |  | 
 |  * "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. | 
 |  | 
 |  | 
 | Performance, Internal Implementation, Development Support etc. | 
 |  | 
 |  * A "git fetch" from a repository with insane number of refs into a | 
 |    repository that is already up-to-date still wasted too many cycles | 
 |    making many lstat(2) calls to see if these objects at the tips | 
 |    exist as loose objects locally.  These lstat(2) calls are optimized | 
 |    away by enumerating all loose objects beforehand. | 
 |    It is unknown if the new strategy negatively affects existing use | 
 |    cases, fetching into a repository with many loose objects from a | 
 |    repository with small number of refs. | 
 |  | 
 |  * Git can be built to use either v1 or v2 of the PCRE library, and so | 
 |    far, the build-time configuration USE_LIBPCRE=YesPlease instructed | 
 |    the build procedure to use v1, but now it means v2.  USE_LIBPCRE1 | 
 |    and USE_LIBPCRE2 can be used to explicitly choose which version to | 
 |    use, as before. | 
 |  | 
 |  * The build procedure learned to optionally use symbolic links | 
 |    (instead of hardlinks and copies) to install "git-foo" for built-in | 
 |    commands, whose binaries are all identical. | 
 |  | 
 |  * Conversion from uchar[20] to struct object_id continues. | 
 |  | 
 |  * The way "git worktree prune" worked internally has been simplified, | 
 |    by assuming how "git worktree move" moves an existing worktree to a | 
 |    different place. | 
 |  | 
 |  * Code clean-up for the "repository" abstraction. | 
 |    (merge 00a3da2a13 nd/remove-ignore-env-field later to maint). | 
 |  | 
 |  * Code to find the length to uniquely abbreviate object names based | 
 |    on packfile content, which is a relatively recent addtion, has been | 
 |    optimized to use the same fan-out table. | 
 |  | 
 |  * The mechanism to use parse-options API to automate the command line | 
 |    completion continues to get extended and polished. | 
 |  | 
 |  * Copies of old scripted Porcelain commands in contrib/examples/ have | 
 |    been removed. | 
 |  | 
 |  * Some tests that rely on the exact hardcoded values of object names | 
 |    have been updated in preparation for hash function migration. | 
 |  | 
 |  * Perf-test update. | 
 |  | 
 |  * Test helper update. | 
 |  | 
 |  * The effort continues to refactor the internal global data structure | 
 |    to make it possible to open multiple repositories, work with and | 
 |    then close them, | 
 |  | 
 |  * Small test-helper programs have been consolidated into a single | 
 |    binary. | 
 |  | 
 |  * API clean-up around ref-filter code. | 
 |  | 
 |  * Shell completion (in contrib) that gives list of paths have been | 
 |    optimized somewhat. | 
 |  | 
 |  * The index file is updated to record the fsmonitor section after a | 
 |    full scan was made, to avoid wasting the effort that has already | 
 |    spent. | 
 |  | 
 |  * Performance measuring framework in t/perf learned to help bisecting | 
 |    performance regressions. | 
 |  | 
 |  * Some multi-word source filenames are being renamed to separate | 
 |    words with dashes instead of underscores. | 
 |  | 
 |  * An reusable "memory pool" implementation has been extracted from | 
 |    fast-import.c, which in turn has become the first user of the | 
 |    mem-pool API. | 
 |  | 
 | Also contains various documentation updates and code clean-ups. | 
 |  | 
 |  | 
 | Fixes since v2.17 | 
 | ----------------- | 
 |  | 
 |  * "git shortlog cruft" aborted with a BUG message when run outside a | 
 |    Git repository.  The command has been taught to complain about | 
 |    extra and unwanted arguments on its command line instead in such a | 
 |    case. | 
 |    (merge 4aa0161e83 ma/shortlog-revparse later to maint). | 
 |  | 
 |  * "git stash push -u -- <pathspec>" gave an unnecessary and confusing | 
 |    error message when there was no tracked files that match the | 
 |    <pathspec>, which has been fixed. | 
 |    (merge 353278687e tg/stash-untracked-with-pathspec-fix later to maint). | 
 |  | 
 |  * "git tag --contains no-such-commit" gave a full list of options | 
 |    after giving an error message. | 
 |    (merge 3bb0923f06 ps/contains-id-error-message later to maint). | 
 |  | 
 |  * "diff-highlight" filter (in contrib/) learned to undertand "git log | 
 |    --graph" output better. | 
 |    (merge 4551fbba14 jk/diff-highlight-graph-fix later to maint). | 
 |  | 
 |  * when refs that do not point at committish are given, "git | 
 |    filter-branch" gave a misleading error messages.  This has been | 
 |    corrected. | 
 |    (merge f78ab355e7 yk/filter-branch-non-committish-refs later to maint). | 
 |  | 
 |  * "git submodule status" misbehaved on a submodule that has been | 
 |    removed from the working tree. | 
 |    (merge 74b6bda32f rs/status-with-removed-submodule later to maint). | 
 |  | 
 |  * When credential helper exits very quickly without reading its | 
 |    input, it used to cause Git to die with SIGPIPE, which has been | 
 |    fixed. | 
 |    (merge a0d51e8d0e eb/cred-helper-ignore-sigpipe later to maint). | 
 |  | 
 |  * "git rebase --keep-empty" still removed an empty commit if the | 
 |    other side contained an empty commit (due to the "does an | 
 |    equivalent patch exist already?" check), which has been corrected. | 
 |    (merge 3d946165e1 pw/rebase-keep-empty-fixes later to maint). | 
 |  | 
 |  * Some codepaths, including the refs API, get and keep relative | 
 |    paths, that go out of sync when the process does chdir(2).  The | 
 |    chdir-notify API is introduced to let these codepaths adjust these | 
 |    cached paths to the new current directory. | 
 |    (merge fb9c2d2703 jk/relative-directory-fix later to maint). | 
 |  | 
 |  * "cd sub/dir && git commit ../path" ought to record the changes to | 
 |    the file "sub/path", but this regressed long time ago. | 
 |    (merge 86238e07ef bw/commit-partial-from-subdirectory-fix later to maint). | 
 |  | 
 |  * Recent introduction of "--log-destination" option to "git daemon" | 
 |    did not work well when the daemon was run under "--inetd" mode. | 
 |    (merge e67d906d73 lw/daemon-log-destination later to maint). | 
 |  | 
 |  * Small fix to the autoconf build procedure. | 
 |    (merge 249482daf0 es/fread-reads-dir-autoconf-fix later to maint). | 
 |  | 
 |  * Fix an unexploitable (because the oversized contents are not under | 
 |    attacker's control) buffer overflow. | 
 |    (merge d8579accfa bp/fsmonitor-bufsize-fix later to maint). | 
 |  | 
 |  * Other minor doc, test and build updates and code cleanups. | 
 |    (merge 248f66ed8e nd/trace-with-env later to maint). | 
 |    (merge 14ced5562c ys/bisect-object-id-missing-conversion-fix later to maint). | 
 |    (merge 5988eb631a ab/doc-hash-brokenness later to maint). | 
 |    (merge a4d4e32a70 pk/test-avoid-pipe-hiding-exit-status later to maint). | 
 |    (merge 05e293c1ac jk/flockfile-stdio later to maint). | 
 |    (merge e9184b0789 jk/t5561-missing-curl later to maint). | 
 |    (merge b1801b85a3 nd/worktree-move later to maint). | 
 |    (merge bbd374dd20 ak/bisect-doc-typofix later to maint). | 
 |    (merge 4855f06fb3 mn/send-email-credential-doc later to maint). | 
 |    (merge 8523b1e355 en/doc-typoes later to maint). | 
 |    (merge 43b44ccfe7 js/t5404-path-fix later to maint). | 
 |    (merge decf711fc1 ps/test-chmtime-get later to maint). | 
 |    (merge 22d11a6e8e es/worktree-docs later to maint). | 
 |    (merge 92a5dbbc22 tg/use-git-contacts later to maint). |