| 1 | Git v2.37 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | UI, Workflows & Features |
| 5 | |
| 6 | * "vimdiff[123]" mergetool drivers have been reimplemented with a |
| 7 | more generic layout mechanism. |
| 8 | |
| 9 | * "git -v" and "git -h" are now understood as "git --version" and |
| 10 | "git --help". |
| 11 | |
| 12 | * The temporary files fed to external diff command are now generated |
| 13 | inside a new temporary directory under the same basename. |
| 14 | |
| 15 | * "git log --since=X" will stop traversal upon seeing a commit that |
| 16 | is older than X, but there may be commits behind it that is younger |
| 17 | than X when the commit was created with a faulty clock. A new |
| 18 | option is added to keep digging without stopping, and instead |
| 19 | filter out commits with timestamp older than X. |
| 20 | |
| 21 | * "git -c branch.autosetupmerge=simple branch $A $B" will set the $B |
| 22 | as $A's upstream only when $A and $B shares the same name, and "git |
| 23 | -c push.default=simple" on branch $A would push to update the |
| 24 | branch $A at the remote $B came from. Also more places use the |
| 25 | sole remote, if exists, before defaulting to 'origin'. |
| 26 | |
| 27 | * A new doc has been added that lists tips for tools to work with |
| 28 | Git's codebase. |
| 29 | |
| 30 | * "git remote -v" now shows the list-objects-filter used during |
| 31 | fetching from the remote, if available. |
| 32 | |
| 33 | * With the new http.curloptResolve configuration, the CURLOPT_RESOLVE |
| 34 | mechanism that allows cURL based applications to use pre-resolved |
| 35 | IP addresses for the requests is exposed to the scripts. |
| 36 | |
| 37 | * "git add -i" was rewritten in C some time ago and has been in |
| 38 | testing; the reimplementation is now exposed to general public by |
| 39 | default. |
| 40 | |
| 41 | * Deprecate non-cone mode of the sparse-checkout feature. |
| 42 | |
| 43 | * Introduce a filesystem-dependent mechanism to optimize the way the |
| 44 | bits for many loose object files are ensured to hit the disk |
| 45 | platter. |
| 46 | |
| 47 | * The "do not remove the directory the user started Git in" logic, |
| 48 | when Git cannot tell where that directory is, is disabled. Earlier |
| 49 | we refused to run in such a case. |
| 50 | |
| 51 | * A mechanism to pack unreachable objects into a "cruft pack", |
| 52 | instead of ejecting them into loose form to be reclaimed later, has |
| 53 | been introduced. |
| 54 | |
| 55 | * Update the doctype written in gitweb output to xhtml5. |
| 56 | |
| 57 | * The "transfer.credentialsInURL" configuration variable controls what |
| 58 | happens when a URL with embedded login credential is used on either |
| 59 | "fetch" or "push". Credentials are currently only detected in |
| 60 | `remote.<name>.url` config, not `remote.<name>.pushurl`. |
| 61 | |
| 62 | * "git revert" learns "--reference" option to use more human-readable |
| 63 | reference to the commit it reverts in the message template it |
| 64 | prepares for the user. |
| 65 | |
| 66 | * Various error messages that talk about the removal of |
| 67 | "--preserve-merges" in "rebase" have been strengthened, and "rebase |
| 68 | --abort" learned to get out of a state that was left by an earlier |
| 69 | use of the option. |
| 70 | |
| 71 | |
| 72 | Performance, Internal Implementation, Development Support etc. |
| 73 | |
| 74 | * The performance of the "untracked cache" feature has been improved |
| 75 | when "--untracked-files=<mode>" and "status.showUntrackedFiles" |
| 76 | are combined. |
| 77 | |
| 78 | * "git stash" works better with sparse index entries. |
| 79 | |
| 80 | * "git show :<path>" learned to work better with the sparse-index |
| 81 | feature. |
| 82 | |
| 83 | * Introduce and apply coccinelle rule to discourage an explicit |
| 84 | comparison between a pointer and NULL, and applies the clean-up to |
| 85 | the maintenance track. |
| 86 | |
| 87 | * Preliminary code refactoring around transport and bundle code. |
| 88 | |
| 89 | * "sparse-checkout" learns to work better with the sparse-index |
| 90 | feature. |
| 91 | |
| 92 | * A workflow change for translators are being proposed. git.pot is |
| 93 | no longer version controlled and it is local responsibility of |
| 94 | translators to generate it. |
| 95 | |
| 96 | * Plug the memory leaks from the trickiest API of all, the revision |
| 97 | walker. |
| 98 | |
| 99 | * Rename .env_array member to .env in the child_process structure. |
| 100 | |
| 101 | * The fsmonitor--daemon handles even more corner cases when |
| 102 | watching filesystem events. |
| 103 | |
| 104 | * A new bug() and BUG_if_bug() API is introduced to make it easier to |
| 105 | uniformly log "detect multiple bugs and abort in the end" pattern. |
| 106 | |
| 107 | |
| 108 | Fixes since v2.36 |
| 109 | ----------------- |
| 110 | |
| 111 | * "git submodule update" without pathspec should silently skip an |
| 112 | uninitialized submodule, but it started to become noisy by mistake. |
| 113 | (merge 4f1ccef87c gc/submodule-update-part2 later to maint). |
| 114 | |
| 115 | * "diff-tree --stdin" has been broken for about a year, but 2.36 |
| 116 | release broke it even worse by breaking running the command with |
| 117 | <pathspec>, which in turn broke "gitk" and got noticed. This has |
| 118 | been corrected by aligning its behaviour to that of "log". |
| 119 | (merge f8781bfda3 jc/diff-tree-stdin-fix later to maint). |
| 120 | |
| 121 | * Regression fix for 2.36 where "git name-rev" started to sometimes |
| 122 | reference strings after they are freed. |
| 123 | (merge 45a14f578e rs/name-rev-fix-free-after-use later to maint). |
| 124 | |
| 125 | * "git show <commit1> <commit2>... -- <pathspec>" lost the pathspec |
| 126 | when showing the second and subsequent commits, which has been |
| 127 | corrected. |
| 128 | (merge 5cdb38458e jc/show-pathspec-fix later to maint). |
| 129 | |
| 130 | * "git fast-export -- <pathspec>" lost the pathspec when showing the |
| 131 | second and subsequent commits, which has been corrected. |
| 132 | (merge d1c25272f5 rs/fast-export-pathspec-fix later to maint). |
| 133 | |
| 134 | * "git format-patch <args> -- <pathspec>" lost the pathspec when |
| 135 | showing the second and subsequent commits, which has been |
| 136 | corrected. |
| 137 | (merge 91f8f7e46f rs/format-patch-pathspec-fix later to maint). |
| 138 | |
| 139 | * "git clone --origin X" leaked piece of memory that held value read |
| 140 | from the clone.defaultRemoteName configuration variable, which has |
| 141 | been plugged. |
| 142 | (merge 6dfadc8981 jc/clone-remote-name-leak-fix later to maint). |
| 143 | |
| 144 | * Get rid of a bogus and over-eager coccinelle rule. |
| 145 | (merge 08bdd3a185 jc/cocci-xstrdup-or-null-fix later to maint). |
| 146 | |
| 147 | * The path taken by "git multi-pack-index" command from the end user |
| 148 | was compared with path internally prepared by the tool without first |
| 149 | normalizing, which lead to duplicated paths not being noticed, |
| 150 | which has been corrected. |
| 151 | (merge 11f9e8de3d ds/midx-normalize-pathname-before-comparison later to maint). |
| 152 | |
| 153 | * Correct choices of C compilers used in various CI jobs. |
| 154 | (merge 3506cae04f ab/cc-package-fixes later to maint). |
| 155 | |
| 156 | * Various cleanups to "git p4". |
| 157 | (merge 4ff0108d9e jh/p4-various-fixups later to maint). |
| 158 | |
| 159 | * The progress meter of "git blame" was showing incorrect numbers |
| 160 | when processing only parts of the file. |
| 161 | (merge e5f5d7d42e ea/progress-partial-blame later to maint). |
| 162 | |
| 163 | * "git rebase --keep-base <upstream> <branch-to-rebase>" computed the |
| 164 | commit to rebase onto incorrectly, which has been corrected. |
| 165 | (merge 9e5ebe9668 ah/rebase-keep-base-fix later to maint). |
| 166 | |
| 167 | * Fix a leak of FILE * in an error codepath. |
| 168 | (merge c0befa0c03 kt/commit-graph-plug-fp-leak-on-error later to maint). |
| 169 | |
| 170 | * Avoid problems from interaction between malloc_check and address |
| 171 | sanitizer. |
| 172 | (merge 067109a5e7 pw/test-malloc-with-sanitize-address later to maint). |
| 173 | |
| 174 | * The commit summary shown after making a commit is matched to what |
| 175 | is given in "git status" not to use the break-rewrite heuristics. |
| 176 | (merge 84792322ed rs/commit-summary-wo-break-rewrite later to maint). |
| 177 | |
| 178 | * Update a few end-user facing messages around EOL conversion. |
| 179 | (merge c970d30c2c ah/convert-warning-message later to maint). |
| 180 | |
| 181 | * Trace2 documentation updates. |
| 182 | (merge a6c80c313c js/trace2-doc-fixes later to maint). |
| 183 | |
| 184 | * Build procedure fixup. |
| 185 | (merge 1fbfd96f50 mg/detect-compiler-in-c-locale later to maint). |
| 186 | |
| 187 | * "git pull" without "--recurse-submodules=<arg>" made |
| 188 | submodule.recurse take precedence over fetch.recurseSubmodules by |
| 189 | mistake, which has been corrected. |
| 190 | (merge 5819417365 gc/pull-recurse-submodules later to maint). |
| 191 | |
| 192 | * "git bisect" was too silent before it is ready to start computing |
| 193 | the actual bisection, which has been corrected. |
| 194 | (merge f11046e6de cd/bisect-messages-from-pre-flight-states later to maint). |
| 195 | |
| 196 | * macOS CI jobs have been occasionally flaky due to tentative version |
| 197 | skew between perforce and the homebrew packager. Instead of |
| 198 | failing the whole CI job, just let it skip the p4 tests when this |
| 199 | happens. |
| 200 | (merge f15e00b463 cb/ci-make-p4-optional later to maint). |
| 201 | |
| 202 | * A bit of test framework fixes with a few fixes to issues found by |
| 203 | valgrind. |
| 204 | (merge 7c898554d7 ab/valgrind-fixes later to maint). |
| 205 | |
| 206 | * "git archive --add-file=<path>" picked up the raw permission bits |
| 207 | from the path and propagated to zip output in some cases, without |
| 208 | normalization, which has been corrected (tar output did not have |
| 209 | this issue). |
| 210 | (merge 6a61661967 jc/archive-add-file-normalize-mode later to maint). |
| 211 | |
| 212 | * "make coverage-report" without first running "make coverage" did |
| 213 | not produce any meaningful result, which has been corrected. |
| 214 | (merge 96ddfecc5b ep/coverage-report-wants-test-to-have-run later to maint). |
| 215 | |
| 216 | * The "--current" option of "git show-branch" should have been made |
| 217 | incompatible with the "--reflog" mode, but this was not enforced, |
| 218 | which has been corrected. |
| 219 | (merge 41c64ae0e7 jc/show-branch-g-current later to maint). |
| 220 | |
| 221 | * "git fetch" unnecessarily failed when an unexpected optional |
| 222 | section appeared in the output, which has been corrected. |
| 223 | (merge 7709acf7be jt/fetch-peek-optional-section later to maint). |
| 224 | |
| 225 | * The way "git fetch" without "--update-head-ok" ensures that HEAD in |
| 226 | no worktree points at any ref being updated was too wasteful, which |
| 227 | has been optimized a bit. |
| 228 | (merge f7400da800 os/fetch-check-not-current-branch later to maint). |
| 229 | |
| 230 | * "git fetch --recurse-submodules" from multiple remotes (either from |
| 231 | a remote group, or "--all") used to make one extra "git fetch" in |
| 232 | the submodules, which has been corrected. |
| 233 | (merge 0353c68818 jc/avoid-redundant-submodule-fetch later to maint). |
| 234 | |
| 235 | * With a recent update to refuse access to repositories of other |
| 236 | people by default, "sudo make install" and "sudo git describe" |
| 237 | stopped working, which has been corrected. |
| 238 | (merge 6b11e3d52e cb/path-owner-check-with-sudo-plus later to maint). |
| 239 | |
| 240 | * The tests that ensured merges stop when interfering local changes |
| 241 | are present did not make sure that local changes are preserved; now |
| 242 | they do. |
| 243 | (merge 4b317450ce jc/t6424-failing-merge-preserve-local-changes later to maint). |
| 244 | |
| 245 | * Some real problems noticed by gcc 12 have been fixed, while false |
| 246 | positives have been worked around. |
| 247 | |
| 248 | * Update the version of FreeBSD image used in Cirrus CI. |
| 249 | (merge c58bebd4c6 pb/use-freebsd-12.3-in-cirrus-ci later to maint). |
| 250 | |
| 251 | * The multi-pack-index code did not protect the packfile it is going |
| 252 | to depend on from getting removed while in use, which has been |
| 253 | corrected. |
| 254 | (merge 4090511e40 tb/midx-race-in-pack-objects later to maint). |
| 255 | |
| 256 | * Teach "git repack --geometric" work better with "--keep-pack" and |
| 257 | avoid corrupting the repository when packsize limit is used. |
| 258 | (merge 66731ff921 tb/geom-repack-with-keep-and-max later to maint). |
| 259 | |
| 260 | * The documentation on the interaction between "--add-file" and |
| 261 | "--prefix" options of "git archive" has been improved. |
| 262 | (merge a75910602a rs/document-archive-prefix later to maint). |
| 263 | |
| 264 | * A git subcommand like "git add -p" spawns a separate git process |
| 265 | while relaying its command line arguments. A pathspec with only |
| 266 | negative elements was mistakenly passed with an empty string, which |
| 267 | has been corrected. |
| 268 | (merge b02fdbc80a jc/all-negative-pathspec later to maint). |
| 269 | |
| 270 | * With a more targeted workaround in http.c in another topic, we may |
| 271 | be able to lift this blanket "GCC12 dangling-pointer warning is |
| 272 | broken and unsalvageable" workaround. |
| 273 | (merge 419141e495 cb/buggy-gcc-12-workaround later to maint). |
| 274 | |
| 275 | * A misconfigured 'branch..remote' led to a bug in configuration |
| 276 | parsing. |
| 277 | (merge f1dfbd9ee0 gc/zero-length-branch-config-fix later to maint). |
| 278 | |
| 279 | * "git -c diff.submodule=log range-diff" did not show anything for |
| 280 | submodules that changed in the ranges being compared, and |
| 281 | "git -c diff.submodule=diff range-diff" did not work correctly. |
| 282 | Fix this by including the "--submodule=short" output |
| 283 | unconditionally to be compared. |
| 284 | |
| 285 | * In Git 2.36 we revamped the way how hooks are invoked. One change |
| 286 | that is end-user visible is that the output of a hook is no longer |
| 287 | directly connected to the standard output of "git" that spawns the |
| 288 | hook, which was noticed post release. This is getting corrected. |
| 289 | (merge a082345372 ab/hooks-regression-fix later to maint). |
| 290 | |
| 291 | * Updating the graft information invalidates the list of parents of |
| 292 | in-core commit objects that used to be in the graft file. |
| 293 | |
| 294 | * "git show-ref --heads" (and "--tags") still iterated over all the |
| 295 | refs only to discard refs outside the specified area, which has |
| 296 | been corrected. |
| 297 | (merge c0c9d35e27 tb/show-ref-optim later to maint). |
| 298 | |
| 299 | * Remove redundant copying (with index v3 and older) or possible |
| 300 | over-reading beyond end of mmapped memory (with index v4) has been |
| 301 | corrected. |
| 302 | (merge 6d858341d2 zh/read-cache-copy-name-entry-fix later to maint). |
| 303 | |
| 304 | * Sample watchman interface hook sometimes failed to produce |
| 305 | correctly formatted JSON message, which has been corrected. |
| 306 | (merge 134047b500 sn/fsmonitor-missing-clock later to maint). |
| 307 | |
| 308 | * Use-after-free (with another forget-to-free) fix. |
| 309 | (merge 323822c72b ab/remote-free-fix later to maint). |
| 310 | |
| 311 | * Remove a coccinelle rule that is no longer relevant. |
| 312 | (merge b1299de4a1 jc/cocci-cleanup later to maint). |
| 313 | |
| 314 | * Other code cleanup, docfix, build fix, etc. |
| 315 | (merge e6b2582da3 cm/reftable-0-length-memset later to maint). |
| 316 | (merge 0b75e5bf22 ab/misc-cleanup later to maint). |
| 317 | (merge 52e1ab8a76 ea/rebase-code-simplify later to maint). |
| 318 | (merge 756d15923b sg/safe-directory-tests-and-docs later to maint). |
| 319 | (merge d097a23bfa ds/do-not-call-bug-on-bad-refs later to maint). |
| 320 | (merge c36c27e75c rs/t7812-pcre2-ws-bug-test later to maint). |
| 321 | (merge 1da312742d gf/unused-includes later to maint). |
| 322 | (merge 465b30a92d pb/submodule-recurse-mode-enum later to maint). |
| 323 | (merge 82b28c4ed8 km/t3501-use-test-helpers later to maint). |
| 324 | (merge 72315e431b sa/t1011-use-helpers later to maint). |
| 325 | (merge 95b3002201 cg/vscode-with-gdb later to maint). |
| 326 | (merge fbe5f6b804 tk/p4-utf8-bom later to maint). |
| 327 | (merge 17f273ffba tk/p4-with-explicity-sync later to maint). |
| 328 | (merge 944db25c60 kf/p4-multiple-remotes later to maint). |
| 329 | (merge b014cee8de jc/update-ozlabs-url later to maint). |
| 330 | (merge 4ec5008062 pb/ggg-in-mfc-doc later to maint). |
| 331 | (merge af845a604d tb/receive-pack-code-cleanup later to maint). |
| 332 | (merge 2acf4cf001 js/ci-gcc-12-fixes later to maint). |
| 333 | (merge 05e280c0a6 jc/http-clear-finished-pointer later to maint). |
| 334 | (merge 8c49d704ef fh/transport-push-leakfix later to maint). |
| 335 | (merge 1d232d38bd tl/ls-tree-oid-only later to maint). |
| 336 | (merge db7961e6a6 gc/document-config-worktree-scope later to maint). |
| 337 | (merge ce18a30bb7 fs/ssh-default-key-command-doc later to maint). |