| 1 | Git 2.23 Release Notes |
| 2 | ====================== |
| 3 | |
| 4 | Updates since v2.22 |
| 5 | ------------------- |
| 6 | |
| 7 | Backward compatibility note |
| 8 | |
| 9 | * The "--base" option of "format-patch" computed the patch-ids for |
| 10 | prerequisite patches in an unstable way, which has been updated to |
| 11 | compute in a way that is compatible with "git patch-id --stable". |
| 12 | |
| 13 | * The "git log" command by default behaves as if the --mailmap option |
| 14 | was given. |
| 15 | |
| 16 | |
| 17 | UI, Workflows & Features |
| 18 | |
| 19 | * The "git fast-export/import" pair has been taught to handle commits |
| 20 | with log messages in encoding other than UTF-8 better. |
| 21 | |
| 22 | * In recent versions of Git, per-worktree refs are exposed in |
| 23 | refs/worktrees/<wtname>/ hierarchy, which means that worktree names |
| 24 | must be a valid refname component. The code now sanitizes the names |
| 25 | given to worktrees, to make sure these refs are well-formed. |
| 26 | |
| 27 | * "git merge" learned "--quit" option that cleans up the in-progress |
| 28 | merge while leaving the working tree and the index still in a mess. |
| 29 | |
| 30 | * "git format-patch" learns a configuration to set the default for |
| 31 | its --notes=<ref> option. |
| 32 | |
| 33 | * The code to show args with potential typo that cannot be |
| 34 | interpreted as a commit-ish has been improved. |
| 35 | |
| 36 | * "git clone --recurse-submodules" learned to set up the submodules |
| 37 | to ignore commit object names recorded in the superproject gitlink |
| 38 | and instead use the commits that happen to be at the tip of the |
| 39 | remote-tracking branches from the get-go, by passing the new |
| 40 | "--remote-submodules" option. |
| 41 | |
| 42 | * The pattern "git diff/grep" use to extract funcname and words |
| 43 | boundary for Matlab has been extend to cover Octave, which is more |
| 44 | or less equivalent. |
| 45 | |
| 46 | * "git help git" was hard to discover (well, at least for some |
| 47 | people). |
| 48 | |
| 49 | * The pattern "git diff/grep" use to extract funcname and words |
| 50 | boundary for Rust has been added. |
| 51 | |
| 52 | * "git status" can be told a non-standard default value for the |
| 53 | "--[no-]ahead-behind" option with a new configuration variable |
| 54 | status.aheadBehind. |
| 55 | |
| 56 | * "git fetch" and "git pull" reports when a fetch results in |
| 57 | non-fast-forward updates to let the user notice unusual situation. |
| 58 | The commands learned "--no-show-forced-updates" option to disable |
| 59 | this safety feature. |
| 60 | |
| 61 | * Two new commands "git switch" and "git restore" are introduced to |
| 62 | split "checking out a branch to work on advancing its history" and |
| 63 | "checking out paths out of the index and/or a tree-ish to work on |
| 64 | advancing the current history" out of the single "git checkout" |
| 65 | command. |
| 66 | |
| 67 | * "git branch --list" learned to always output the detached HEAD as |
| 68 | the first item (when the HEAD is detached, of course), regardless |
| 69 | of the locale. |
| 70 | |
| 71 | * The conditional inclusion mechanism learned to base the choice on |
| 72 | the branch the HEAD currently is on. |
| 73 | |
| 74 | * "git rev-list --objects" learned the "--no-object-names" option to |
| 75 | squelch the path to the object that is used as a grouping hint for |
| 76 | pack-objects. |
| 77 | |
| 78 | * A new tag.gpgSign configuration variable turns "git tag -a" into |
| 79 | "git tag -s". |
| 80 | |
| 81 | * "git multi-pack-index" learned expire and repack subcommands. |
| 82 | |
| 83 | * "git blame" learned to "ignore" commits in the history, whose |
| 84 | effects (as well as their presence) get ignored. |
| 85 | |
| 86 | * "git cherry-pick/revert" learned a new "--skip" action. |
| 87 | |
| 88 | * The tips of refs from the alternate object store can be used as |
| 89 | starting point for reachability computation now. |
| 90 | |
| 91 | * Extra blank lines in "git status" output have been reduced. |
| 92 | |
| 93 | * The commits in a repository can be described by multiple |
| 94 | commit-graph files now, which allows the commit-graph files to be |
| 95 | updated incrementally. |
| 96 | |
| 97 | * "git range-diff" output has been tweaked for easier identification |
| 98 | of which part of what file the patch shown is about. |
| 99 | |
| 100 | |
| 101 | Performance, Internal Implementation, Development Support etc. |
| 102 | |
| 103 | * Update supporting parts of "git rebase" to remove code that should |
| 104 | no longer be used. |
| 105 | |
| 106 | * Developer support to emulate unsatisfied prerequisites in tests to |
| 107 | ensure that the remainder of the tests still succeeds when tests |
| 108 | with prerequisites are skipped. |
| 109 | |
| 110 | * "git update-server-info" learned not to rewrite the file with the |
| 111 | same contents. |
| 112 | |
| 113 | * The way of specifying the path to find dynamic libraries at runtime |
| 114 | has been simplified. The old default to pass -R/path/to/dir has been |
| 115 | replaced with the new default to pass -Wl,-rpath,/path/to/dir, |
| 116 | which is the more recent GCC uses. Those who need to build with an |
| 117 | old GCC can still use "CC_LD_DYNPATH=-R" |
| 118 | |
| 119 | * Prepare use of reachability index in topological walker that works |
| 120 | on a range (A..B). |
| 121 | |
| 122 | * A new tutorial targeting specifically aspiring git-core |
| 123 | developers has been added. |
| 124 | |
| 125 | * Auto-detect how to tell HP-UX aCC where to use dynamically linked |
| 126 | libraries from at runtime. |
| 127 | |
| 128 | * "git mergetool" and its tests now spawn fewer subprocesses. |
| 129 | |
| 130 | * Dev support update to help tracing out tests. |
| 131 | |
| 132 | * Support to build with MSVC has been updated. |
| 133 | |
| 134 | * "git fetch" that grabs from a group of remotes learned to run the |
| 135 | auto-gc only once at the very end. |
| 136 | |
| 137 | * A handful of Windows build patches have been upstreamed. |
| 138 | |
| 139 | * The code to read state files used by the sequencer machinery for |
| 140 | "git status" has been made more robust against a corrupt or stale |
| 141 | state files. |
| 142 | |
| 143 | * "git for-each-ref" with multiple patterns have been optimized. |
| 144 | |
| 145 | * The tree-walk API learned to pass an in-core repository |
| 146 | instance throughout more codepaths. |
| 147 | |
| 148 | * When one step in multi step cherry-pick or revert is reset or |
| 149 | committed, the command line prompt script failed to notice the |
| 150 | current status, which has been improved. |
| 151 | |
| 152 | * Many GIT_TEST_* environment variables control various aspects of |
| 153 | how our tests are run, but a few followed "non-empty is true, empty |
| 154 | or unset is false" while others followed the usual "there are a few |
| 155 | ways to spell true, like yes, on, etc., and also ways to spell |
| 156 | false, like no, off, etc." convention. |
| 157 | |
| 158 | * Adjust the dir-iterator API and apply it to the local clone |
| 159 | optimization codepath. |
| 160 | |
| 161 | * We have been trying out a few language features outside c89; the |
| 162 | coding guidelines document did not talk about them and instead had |
| 163 | a blanket ban against them. |
| 164 | |
| 165 | * A test helper has been introduced to optimize preparation of test |
| 166 | repositories with many simple commits, and a handful of test |
| 167 | scripts have been updated to use it. |
| 168 | |
| 169 | |
| 170 | Fixes since v2.22 |
| 171 | ----------------- |
| 172 | |
| 173 | * A relative pathname given to "git init --template=<path> <repo>" |
| 174 | ought to be relative to the directory "git init" gets invoked in, |
| 175 | but it instead was made relative to the repository, which has been |
| 176 | corrected. |
| 177 | |
| 178 | * "git worktree add" used to fail when another worktree connected to |
| 179 | the same repository was corrupt, which has been corrected. |
| 180 | |
| 181 | * The ownership rule for the file descriptor to fast-import remote |
| 182 | backend was mixed up, leading to an unrelated file descriptor getting |
| 183 | closed, which has been fixed. |
| 184 | |
| 185 | * A "merge -c" instruction during "git rebase --rebase-merges" should |
| 186 | give the user a chance to edit the log message, even when there is |
| 187 | otherwise no need to create a new merge and replace the existing |
| 188 | one (i.e. fast-forward instead), but did not. Which has been |
| 189 | corrected. |
| 190 | |
| 191 | * Code cleanup and futureproof. |
| 192 | |
| 193 | * More parameter validation. |
| 194 | |
| 195 | * "git update-server-info" used to leave stale packfiles in its |
| 196 | output, which has been corrected. |
| 197 | |
| 198 | * The server side support for "git fetch" used to show incorrect |
| 199 | value for the HEAD symbolic ref when the namespace feature is in |
| 200 | use, which has been corrected. |
| 201 | |
| 202 | * "git am -i --resolved" segfaulted after trying to see a commit as |
| 203 | if it were a tree, which has been corrected. |
| 204 | |
| 205 | * "git bundle verify" needs to see if prerequisite objects exist in |
| 206 | the receiving repository, but the command did not check if we are |
| 207 | in a repository upfront, which has been corrected. |
| 208 | |
| 209 | * "git merge --squash" is designed to update the working tree and the |
| 210 | index without creating the commit, and this cannot be countermanded |
| 211 | by adding the "--commit" option; the command now refuses to work |
| 212 | when both options are given. |
| 213 | |
| 214 | * The data collected by fsmonitor was not properly written back to |
| 215 | the on-disk index file, breaking t7519 tests occasionally, which |
| 216 | has been corrected. |
| 217 | |
| 218 | * Update to Unicode 12.1 width table. |
| 219 | |
| 220 | * The command line to invoke a "git cat-file" command from inside |
| 221 | "git p4" was not properly quoted to protect a caret and running a |
| 222 | broken command on Windows, which has been corrected. |
| 223 | |
| 224 | * "git request-pull" learned to warn when the ref we ask them to pull |
| 225 | from in the local repository and in the published repository are |
| 226 | different. |
| 227 | |
| 228 | * When creating a partial clone, the object filtering criteria is |
| 229 | recorded for the origin of the clone, but this incorrectly used a |
| 230 | hardcoded name "origin" to name that remote; it has been corrected |
| 231 | to honor the "--origin <name>" option. |
| 232 | |
| 233 | * "git fetch" into a lazy clone forgot to fetch base objects that are |
| 234 | necessary to complete delta in a thin packfile, which has been |
| 235 | corrected. |
| 236 | |
| 237 | * The filter_data used in the list-objects-filter (which manages a |
| 238 | lazily sparse clone repository) did not use the dynamic array API |
| 239 | correctly---'nr' is supposed to point at one past the last element |
| 240 | of the array in use. This has been corrected. |
| 241 | |
| 242 | * The description about slashes in gitignore patterns (used to |
| 243 | indicate things like "anchored to this level only" and "only |
| 244 | matches directories") has been revamped. |
| 245 | |
| 246 | * The URL decoding code has been updated to avoid going past the end |
| 247 | of the string while parsing %-<hex>-<hex> sequence. |
| 248 | |
| 249 | * The list of for-each like macros used by clang-format has been |
| 250 | updated. |
| 251 | |
| 252 | * "git branch --list" learned to show branches that are checked out |
| 253 | in other worktrees connected to the same repository prefixed with |
| 254 | '+', similar to the way the currently checked out branch is shown |
| 255 | with '*' in front. |
| 256 | (merge 6e9381469e nb/branch-show-other-worktrees-head later to maint). |
| 257 | |
| 258 | * Code restructuring during 2.20 period broke fetching tags via |
| 259 | "import" based transports. |
| 260 | |
| 261 | * The commit-graph file is now part of the "files that the runtime |
| 262 | may keep open file descriptors on, all of which would need to be |
| 263 | closed when done with the object store", and the file descriptor to |
| 264 | an existing commit-graph file now is closed before "gc" finalizes a |
| 265 | new instance to replace it. |
| 266 | |
| 267 | * "git checkout -p" needs to selectively apply a patch in reverse, |
| 268 | which did not work well. |
| 269 | |
| 270 | * Code clean-up to avoid signed integer wraparounds during binary search. |
| 271 | |
| 272 | * "git interpret-trailers" always treated '#' as the comment |
| 273 | character, regardless of core.commentChar setting, which has been |
| 274 | corrected. |
| 275 | |
| 276 | * "git stash show 23" used to work, but no more after getting |
| 277 | rewritten in C; this regression has been corrected. |
| 278 | |
| 279 | * "git rebase --abort" used to leave refs/rewritten/ when concluding |
| 280 | "git rebase -r", which has been corrected. |
| 281 | |
| 282 | * An incorrect list of options was cached after command line |
| 283 | completion failed (e.g. trying to complete a command that requires |
| 284 | a repository outside one), which has been corrected. |
| 285 | |
| 286 | * The code to parse scaled numbers out of configuration files has |
| 287 | been made more robust and also easier to follow. |
| 288 | |
| 289 | * The codepath to compute delta islands used to spew progress output |
| 290 | without giving the callers any way to squelch it, which has been |
| 291 | fixed. |
| 292 | |
| 293 | * Protocol capabilities that go over wire should never be translated, |
| 294 | but it was incorrectly marked for translation, which has been |
| 295 | corrected. The output of protocol capabilities for debugging has |
| 296 | been tweaked a bit. |
| 297 | |
| 298 | * Use "Erase in Line" CSI sequence that is already used in the editor |
| 299 | support to clear cruft in the progress output. |
| 300 | |
| 301 | * "git submodule foreach" did not protect command line options passed |
| 302 | to the command to be run in each submodule correctly, when the |
| 303 | "--recursive" option was in use. |
| 304 | |
| 305 | * The configuration variable rebase.rescheduleFailedExec should be |
| 306 | effective only while running an interactive rebase and should not |
| 307 | affect anything when running a non-interactive one, which was not |
| 308 | the case. This has been corrected. |
| 309 | |
| 310 | * The "git clone" documentation refers to command line options in its |
| 311 | description in the short form; they have been replaced with long |
| 312 | forms to make them more recognisable. |
| 313 | |
| 314 | * Generation of pack bitmaps are now disabled when .keep files exist, |
| 315 | as these are mutually exclusive features. |
| 316 | (merge 7328482253 ew/repack-with-bitmaps-by-default later to maint). |
| 317 | |
| 318 | * "git rm" to resolve a conflicted path leaked an internal message |
| 319 | "needs merge" before actually removing the path, which was |
| 320 | confusing. This has been corrected. |
| 321 | |
| 322 | * "git stash --keep-index" did not work correctly on paths that have |
| 323 | been removed, which has been fixed. |
| 324 | (merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint). |
| 325 | |
| 326 | * Window 7 update ;-) |
| 327 | |
| 328 | * A codepath that reads from GPG for signed object verification read |
| 329 | past the end of allocated buffer, which has been fixed. |
| 330 | |
| 331 | * "git clean" silently skipped a path when it cannot lstat() it; now |
| 332 | it gives a warning. |
| 333 | |
| 334 | * "git push --atomic" that goes over the transport-helper (namely, |
| 335 | the smart http transport) failed to prevent refs to be pushed when |
| 336 | it can locally tell that one of the ref update will fail without |
| 337 | having to consult the other end, which has been corrected. |
| 338 | |
| 339 | * The internal diff machinery can be made to read out of bounds while |
| 340 | looking for --function-context line in a corner case, which has been |
| 341 | corrected. |
| 342 | (merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint). |
| 343 | |
| 344 | * Other code cleanup, docfix, build fix, etc. |
| 345 | (merge fbec05c210 cc/test-oidmap later to maint). |
| 346 | (merge 7a06fb038c jk/no-system-includes-in-dot-c later to maint). |
| 347 | (merge 81ed2b405c cb/xdiff-no-system-includes-in-dot-c later to maint). |
| 348 | (merge d61e6ce1dd sg/fsck-config-in-doc later to maint). |