Git fork
at reftables-rust 334 lines 14 kB view raw
1Git v2.44 Release Notes 2======================= 3 4Backward Compatibility Notes 5 6 * "git checkout -B <branch>" used to allow switching to a branch that 7 is in use on another worktree, but this was by mistake. The users 8 need to use "--ignore-other-worktrees" option. 9 10 11UI, Workflows & Features 12 13 * "git add" and "git stash" learned to support the ":(attr:...)" 14 magic pathspec. 15 16 * "git rebase --autosquash" is now enabled for non-interactive rebase, 17 but it is still incompatible with the apply backend. 18 19 * Introduce "git replay", a tool meant on the server side without 20 working tree to recreate a history. 21 22 * "git merge-file" learned to take the "--diff-algorithm" option to 23 use algorithm different from the default "myers" diff. 24 25 * Command line completion (in contrib/) learned to complete path 26 arguments to the "add/set" subcommands of "git sparse-checkout" 27 better. 28 29 * "git checkout -B <branch> [<start-point>]" allowed a branch that is 30 in use in another worktree to be updated and checked out, which 31 might be a bit unexpected. The rule has been tightened, which is a 32 breaking change. "--ignore-other-worktrees" option is required to 33 unbreak you, if you are used to the current behaviour that "-B" 34 overrides the safety. 35 36 * The builtin_objectmode attribute is populated for each path 37 without adding anything in .gitattributes files, which would be 38 useful in magic pathspec, e.g., ":(attr:builtin_objectmode=100755)" 39 to limit to executables. 40 41 * "git fetch" learned to pay attention to "fetch.all" configuration 42 variable, which pretends as if "--all" was passed from the command 43 line when no remote parameter was given. 44 45 * In addition to (rather cryptic) Security Identifiers, show username 46 and domain in the error message when we barf on mismatch between 47 the Git directory and the current user on Windows. 48 49 * The error message given when "git branch -d branch" fails due to 50 commits unique to the branch has been split into an error and a new 51 conditional advice message. 52 53 * When given an existing but unreadable file as a configuration file, 54 gitweb behaved as if the file did not exist at all, but now it 55 errors out. This is a change that may break backward compatibility. 56 57 * When $HOME/.gitconfig is missing but XDG config file is available, we 58 should write into the latter, not former. "git gc" and "git 59 maintenance" wrote into a wrong "global config" file, which have 60 been corrected. 61 62 * Define "special ref" as a very narrow set that consists of 63 FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to 64 be classified as such are actually just pseudorefs. 65 66 * All conditional "advice" messages show how to turn them off, which 67 becomes repetitive. Setting advice.* configuration explicitly on 68 now omits the instruction part. 69 70 * The "disable repository discovery of a bare repository" check, 71 triggered by setting safe.bareRepository configuration variable to 72 'explicit', has been loosened to exclude the ".git/" directory inside 73 a non-bare repository from the check. So you can do "cd .git && 74 git cmd" to run a Git command that works on a bare repository without 75 explicitly specifying $GIT_DIR now. 76 77 * The completion script (in contrib/) learned more options that can 78 be used with "git log". 79 80 * The labels on conflict markers for the common ancestor, our version, 81 and the other version are available to custom 3-way merge driver 82 via %S, %X, and %Y placeholders. 83 84 * The write codepath for the reftable data learned to honor 85 core.fsync configuration. 86 87 * The "--fsck-objects" option of "git index-pack" now can take the 88 optional parameter to tweak severity of different fsck errors. 89 90 * The wincred credential backend has been taught to support oauth 91 refresh token the same way as credential-cache and 92 credential-libsecret backends. 93 94 * Command line completion support (in contrib/) has been 95 updated for "git bisect". 96 97 * "git branch" and friends learned to use the formatted text as 98 sorting key, not the underlying timestamp value, when the --sort 99 option is used with author or committer timestamp with a format 100 specifier (e.g., "--sort=creatordate:format:%H:%M:%S"). 101 102 * The command line completion script (in contrib/) learned to 103 complete configuration variable names better. 104 105 106Performance, Internal Implementation, Development Support etc. 107 108 * Process to add some form of low-level unit tests has started. 109 110 * Add support for GitLab CI. 111 112 * "git for-each-ref --no-sort" still sorted the refs alphabetically 113 which paid non-trivial cost. It has been redefined to show output 114 in an unspecified order, to allow certain optimizations to take 115 advantage of. 116 117 * Simplify API implementation to delete references by eliminating 118 duplication. 119 120 * Subject approxidate() and show_date() machinery to OSS-Fuzz. 121 122 * A new helper to let us pretend that we called lstat() when we know 123 our cache_entry is up-to-date via fsmonitor. 124 125 * The optimization based on fsmonitor in the "diff --cached" 126 codepath is resurrected with the "fake-lstat" introduced earlier. 127 128 * Test balloon to use C99 "bool" type from <stdbool.h> has been 129 added. 130 131 * "git clone" has been prepared to allow cloning a repository with 132 non-default hash function into a repository that uses the reftable 133 backend. 134 135 * Streaming spans of packfile data used to be done only from a 136 single, primary, pack in a repository with multiple packfiles. It 137 has been extended to allow reuse from other packfiles, too. 138 139 * Comment updates to help developers not to attempt to modify 140 messages from plumbing commands that must stay constant. 141 142 It might make sense to reassess the plumbing needs every few years, 143 but that should be done as a separate effort. 144 145 * Move test-ctype helper to the unit-test framework. 146 147 * Instead of manually creating refs/ hierarchy on disk upon a 148 creation of a secondary worktree, which is only usable via the 149 files backend, use the refs API to populate it. 150 151 * CI for GitLab learned to drive macOS jobs. 152 153 * A few tests to "git commit -o <pathspec>" and "git commit -i 154 <pathspec>" has been added. 155 156 * Tests on ref API are moved around to prepare for reftable. 157 158 * The Makefile often had to say "-L$(path) -R$(path)" that repeats 159 the path to the same library directory for link time and runtime. 160 A Makefile template is used to reduce such repetition. 161 162 * The priority queue test has been migrated to the unit testing 163 framework. 164 165 * Setting `feature.experimental` opts the user into multi-pack reuse 166 experiment 167 168 * Squelch node.js 16 deprecation warnings from GitHub Actions CI 169 by updating actions/github-script and actions/checkout that use 170 node.js 20. 171 172 * The mechanism to report the filename in the source code, used by 173 the unit-test machinery, assumed that the compiler expanded __FILE__ 174 to the path to the source given to the $(CC), but some compilers 175 give full path, breaking the output. This has been corrected. 176 177 178Fixes since v2.43 179----------------- 180 181 * The way CI testing used "prove" could lead to running the test 182 suite twice needlessly, which has been corrected. 183 184 * Update ref-related tests. 185 186 * "git format-patch --encode-email-headers" ignored the option when 187 preparing the cover letter, which has been corrected. 188 189 * Newer versions of Getopt::Long started giving warnings against our 190 (ab)use of it in "git send-email". Bump the minimum version 191 requirement for Perl to 5.8.1 (from September 2002) to allow 192 simplifying our implementation. 193 194 * Earlier we stopped relying on commit-graph that (still) records 195 information about commits that are lost from the object store, 196 which has negative performance implications. The default has been 197 flipped to disable this pessimization. 198 199 * Stale URLs have been updated to their current counterparts (or 200 archive.org) and HTTP links are replaced with working HTTPS links. 201 202 * trace2 streams used to record the URLs that potentially embed 203 authentication material, which has been corrected. 204 205 * The sample pre-commit hook that tries to catch introduction of new 206 paths that use potentially non-portable characters did not notice 207 an existing path getting renamed to such a problematic path, when 208 rename detection was enabled. 209 210 * The command line parser for the "log" family of commands was too 211 loose when parsing certain numbers, e.g., silently ignoring the 212 extra 'q' in "git log -n 1q" without complaining, which has been 213 tightened up. 214 215 * "git $cmd --end-of-options --rev -- --path" for some $cmd failed 216 to interpret "--rev" as a rev, and "--path" as a path. This was 217 fixed for many programs like "reset" and "checkout". 218 219 * "git bisect reset" has been taught to clean up state files and refs 220 even when BISECT_START file is gone. 221 222 * Some codepaths did not correctly parse configuration variables 223 specified with valueless "true", which has been corrected. 224 225 * Code clean-up for sanity checking of command line options for "git 226 show-ref". 227 228 * The code to parse the From e-mail header has been updated to avoid 229 recursion. 230 231 * "git fetch --atomic" issued an unnecessary empty error message, 232 which has been corrected. 233 234 * Command line completion script (in contrib/) learned to work better 235 with the reftable backend. 236 237 * "git status" is taught to show both the branch being bisected and 238 being rebased when both are in effect at the same time. 239 240 * "git archive --list extra garbage" silently ignored excess command 241 line parameters, which has been corrected. 242 243 * "git sparse-checkout set" added default patterns even when the 244 patterns are being fed from the standard input, which has been 245 corrected. 246 247 * "git sparse-checkout (add|set) --[no-]cone --end-of-options" did 248 not handle "--end-of-options" correctly after a recent update. 249 250 * Unlike other environment variables that took the usual 251 true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1, 252 which has been corrected. 253 254 * Clearing in-core repository (happens during e.g., "git fetch 255 --recurse-submodules" with commit graph enabled) made in-core 256 commit object in an inconsistent state by discarding the necessary 257 data from commit-graph too early, which has been corrected. 258 259 * Update to a new feature recently added, "git show-ref --exists". 260 261 * oss-fuzz tests are built and run in CI. 262 (merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint). 263 264 * Rename detection logic ignored the final line of a file if it is an 265 incomplete line. 266 267 * GitHub CI update. 268 (merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint). 269 270 * "git diff --no-rename A B" did not disable rename detection but did 271 not trigger an error from the command line parser. 272 273 * "git archive --remote=<remote>" learned to talk over the smart 274 http (aka stateless) transport. 275 (merge 176cd68634 jx/remote-archive-over-smart-http later to maint). 276 277 * Fetching via protocol v0 over Smart HTTP transport sometimes failed 278 to correctly auto-follow tags. 279 (merge fba732c462 jk/fetch-auto-tag-following-fix later to maint). 280 281 * The documentation for the --exclude-per-directory option marked it 282 as deprecated, which confused readers into thinking there may be a 283 plan to remove it in the future, which was not our intention. 284 (merge 0009542cab jc/ls-files-doc-update later to maint). 285 286 * "git diff --no-index file1 file2" segfaulted while invoking the 287 external diff driver, which has been corrected. 288 289 * Rewrite //-comments to /* comments */ in files whose comments 290 prevalently use the latter. 291 292 * Cirrus CI jobs started breaking because we specified version of 293 FreeBSD that is no longer available, which has been corrected. 294 (merge 81fffb66d3 cb/use-freebsd-13-2-at-cirrus-ci later to maint). 295 296 * A caller called index_file_exists() that takes a string expressed 297 as <ptr, length> with a wrong length, which has been corrected. 298 (merge 156e28b36d jh/sparse-index-expand-to-path-fix later to maint). 299 300 * A failed "git tag -s" did not necessarily result in an error 301 depending on the crypto backend, which has been corrected. 302 303 * "git stash" sometimes was silent even when it failed due to 304 unwritable index file, which has been corrected. 305 306 * "git show-ref --verify" did not show things like "CHERRY_PICK_HEAD", 307 which has been corrected. 308 309 * Recent conversion to allow more than 0/1 in GIT_FLUSH broke the 310 mechanism by flipping what yes/no means by mistake, which has been 311 corrected. 312 313 * The sequencer machinery does not use the ref API and instead 314 records names of certain objects it needs for its correct operation 315 in temporary files, which makes these objects susceptible to loss 316 by garbage collection. These temporary files have been added as 317 starting points for reachability analysis to fix this. 318 (merge bc7f5db896 pw/gc-during-rebase later to maint). 319 320 * "git cherry-pick" invoked during "git rebase -i" session lost 321 the authorship information, which has been corrected. 322 (merge e4301f73ff vn/rebase-with-cherry-pick-authorship later to maint). 323 324 * The code paths that call repo_read_object_file() have been 325 tightened to react to errors. 326 (merge 568459bf5e js/check-null-from-read-object-file later to maint). 327 328 * Other code cleanup, docfix, build fix, etc. 329 (merge 5aea3955bc rj/clarify-branch-doc-m later to maint). 330 (merge 9cce3be2df bk/bisect-doc-fix later to maint). 331 (merge 8430b438f6 vd/fsck-submodule-url-test later to maint). 332 (merge 3cb4384683 jc/t0091-with-unknown-git later to maint). 333 (merge 020456cb74 rs/receive-pack-remove-find-header later to maint). 334 (merge bc47139f4f la/trailer-cleanups later to maint).