1Git 2.17 Release Notes 2====================== 3 4Updates since v2.16 5------------------- 6 7UI, Workflows & Features 8 9 * "diff" family of commands learned "--find-object=<object-id>" option 10 to limit the findings to changes that involve the named object. 11 12 * "git format-patch" learned to give 72-cols to diffstat, which is 13 consistent with other line length limits the subcommand uses for 14 its output meant for e-mails. 15 16 * The log from "git daemon" can be redirected with a new option; one 17 relevant use case is to send the log to standard error (instead of 18 syslog) when running it from inetd. 19 20 * "git rebase" learned to take "--allow-empty-message" option. 21 22 * "git am" has learned the "--quit" option, in addition to the 23 existing "--abort" option; having the pair mirrors a few other 24 commands like "rebase" and "cherry-pick". 25 26 * "git worktree add" learned to run the post-checkout hook, just like 27 "git clone" runs it upon the initial checkout. 28 29 * "git tag" learned an explicit "--edit" option that allows the 30 message given via "-m" and "-F" to be further edited. 31 32 * "git fetch --prune-tags" may be used as a handy short-hand for 33 getting rid of stale tags that are locally held. 34 35 * The new "--show-current-patch" option gives an end-user facing way 36 to get the diff being applied when "git rebase" (and "git am") 37 stops with a conflict. 38 39 * "git add -p" used to offer "/" (look for a matching hunk) as a 40 choice, even there was only one hunk, which has been corrected. 41 Also the single-key help is now given only for keys that are 42 enabled (e.g. help for '/' won't be shown when there is only one 43 hunk). 44 45 * Since Git 1.7.9, "git merge" defaulted to --no-ff (i.e. even when 46 the side branch being merged is a descendant of the current commit, 47 create a merge commit instead of fast-forwarding) when merging a 48 tag object. This was appropriate default for integrators who pull 49 signed tags from their downstream contributors, but caused an 50 unnecessary merges when used by downstream contributors who 51 habitually "catch up" their topic branches with tagged releases 52 from the upstream. Update "git merge" to default to --no-ff only 53 when merging a tag object that does *not* sit at its usual place in 54 refs/tags/ hierarchy, and allow fast-forwarding otherwise, to 55 mitigate the problem. 56 57 * "git status" can spend a lot of cycles to compute the relation 58 between the current branch and its upstream, which can now be 59 disabled with "--no-ahead-behind" option. 60 61 * "git diff" and friends learned funcname patterns for Go language 62 source files. 63 64 * "git send-email" learned "--reply-to=<address>" option. 65 66 * Funcname pattern used for C# now recognizes "async" keyword. 67 68 69Performance, Internal Implementation, Development Support etc. 70 71 * More perf tests for threaded grep 72 73 * "perf" test output can be sent to codespeed server. 74 75 * The build procedure for perl/ part has been greatly simplified by 76 weaning ourselves off of MakeMaker. 77 78 * Perl 5.8 or greater has been required since Git 1.7.4 released in 79 2010, but we continued to assume some core modules may not exist and 80 used a conditional "eval { require <<module>> }"; we no longer do 81 this. Some platforms (Fedora/RedHat/CentOS, for example) ship Perl 82 without all core modules by default (e.g. Digest::MD5, File::Temp, 83 File::Spec, Net::Domain, Net::SMTP). Users on such platforms may 84 need to install these additional modules. 85 86 * As a convenience, we install copies of Perl modules we require which 87 are not part of the core Perl distribution (e.g. Error and 88 Mail::Address). Users and packagers whose operating system provides 89 these modules can set NO_PERL_CPAN_FALLBACKS to avoid installing the 90 bundled modules. 91 92 * In preparation for implementing narrow/partial clone, the machinery 93 for checking object connectivity used by gc and fsck has been 94 taught that a missing object is OK when it is referenced by a 95 packfile specially marked as coming from trusted repository that 96 promises to make them available on-demand and lazily. 97 98 * The machinery to clone & fetch, which in turn involves packing and 99 unpacking objects, has been told how to omit certain objects using 100 the filtering mechanism introduced by another topic. It now knows 101 to mark the resulting pack as a promisor pack to tolerate missing 102 objects, laying foundation for "narrow" clones. 103 104 * The first step to getting rid of mru API and using the 105 doubly-linked list API directly instead. 106 107 * Retire mru API as it does not give enough abstraction over 108 underlying list API to be worth it. 109 110 * Rewrite two more "git submodule" subcommands in C. 111 112 * The tracing machinery learned to report tweaking of environment 113 variables as well. 114 115 * Update Coccinelle rules to catch and optimize strbuf_addf(&buf, "%s", str) 116 117 * Prevent "clang-format" from breaking line after function return type. 118 119 * The sequencer infrastructure is shared across "git cherry-pick", 120 "git rebase -i", etc., and has always spawned "git commit" when it 121 needs to create a commit. It has been taught to do so internally, 122 when able, by reusing the codepath "git commit" itself uses, which 123 gives performance boost for a few tens of percents in some sample 124 scenarios. 125 126 * Push the submodule version of collision-detecting SHA-1 hash 127 implementation a bit harder on builders. 128 129 * Avoid mmapping small files while using packed refs (especially ones 130 with zero size, which would cause later munmap() to fail). 131 132 * Conversion from uchar[20] to struct object_id continues. 133 134 * More tests for wildmatch functions. 135 136 * The code to binary search starting from a fan-out table (which is 137 how the packfile is indexed with object names) has been refactored 138 into a reusable helper. 139 140 * We now avoid using identifiers that clash with C++ keywords. Even 141 though it is not a goal to compile Git with C++ compilers, changes 142 like this help use of code analysis tools that targets C++ on our 143 codebase. 144 145 * The executable is now built in 'script' phase in Travis CI integration, 146 to follow the established practice, rather than during 'before_script' 147 phase. This allows the CI categorize the failures better ('failed' 148 is project's fault, 'errored' is build environment's). 149 (merge 3c93b82920 sg/travis-build-during-script-phase later to maint). 150 151 * Writing out the index file when the only thing that changed in it 152 is the untracked cache information is often wasteful, and this has 153 been optimized out. 154 155 * Various pieces of Perl code we have have been cleaned up. 156 157 158Also contains various documentation updates and code clean-ups. 159 160 161Fixes since v2.16 162----------------- 163 164 * An old regression in "git describe --all $annotated_tag^0" has been 165 fixed. 166 167 * "git status" after moving a path in the working tree (hence making 168 it appear "removed") and then adding with the -N option (hence 169 making that appear "added") detected it as a rename, but did not 170 report the old and new pathnames correctly. 171 172 * "git svn dcommit" did not take into account the fact that a 173 svn+ssh:// URL with a username@ (typically used for pushing) refers 174 to the same SVN repository without the username@ and failed when 175 svn.pushmergeinfo option is set. 176 177 * API clean-up around revision traversal. 178 179 * "git merge -Xours/-Xtheirs" learned to use our/their version when 180 resolving a conflicting updates to a symbolic link. 181 182 * "git clone $there $here" is allowed even when here directory exists 183 as long as it is an empty directory, but the command incorrectly 184 removed it upon a failure of the operation. 185 186 * "git commit --fixup" did not allow "-m<message>" option to be used 187 at the same time; allow it to annotate resulting commit with more 188 text. 189 190 * When resetting the working tree files recursively, the working tree 191 of submodules are now also reset to match. 192 193 * "git stash -- <pathspec>" incorrectly blew away untracked files in 194 the directory that matched the pathspec, which has been corrected. 195 196 * Instead of maintaining home-grown email address parsing code, ship 197 a copy of reasonably recent Mail::Address to be used as a fallback 198 in 'git send-email' when the platform lacks it. 199 (merge d60be8acab mm/send-email-fallback-to-local-mail-address later to maint). 200 201 * "git add -p" was taught to ignore local changes to submodules as 202 they do not interfere with the partial addition of regular changes 203 anyway. 204 205 * Avoid showing a warning message in the middle of a line of "git 206 diff" output. 207 (merge 4e056c989f nd/diff-flush-before-warning later to maint). 208 209 * The http tracing code, often used to debug connection issues, 210 learned to redact potentially sensitive information from its output 211 so that it can be more safely sharable. 212 (merge 8ba18e6fa4 jt/http-redact-cookies later to maint). 213 214 * Crash fix for a corner case where an error codepath tried to unlock 215 what it did not acquire lock on. 216 (merge 81fcb698e0 mr/packed-ref-store-fix later to maint). 217 218 * The split-index mode had a few corner case bugs fixed. 219 (merge ae59a4e44f tg/split-index-fixes later to maint). 220 221 * Assorted fixes to "git daemon". 222 (merge ed15e58efe jk/daemon-fixes later to maint). 223 224 * Completion of "git merge -s<strategy>" (in contrib/) did not work 225 well in non-C locale. 226 (merge 7cc763aaa3 nd/list-merge-strategy later to maint). 227 228 * Workaround for segfault with more recent versions of SVN. 229 (merge 7f6f75e97a ew/svn-branch-segfault-fix later to maint). 230 231 * Plug recently introduced leaks in fsck. 232 (merge ba3a08ca0e jt/fsck-code-cleanup later to maint). 233 234 * "git pull --rebase" did not pass verbosity setting down when 235 recursing into a submodule. 236 (merge a56771a668 sb/pull-rebase-submodule later to maint). 237 238 * The way "git reset --hard" reports the commit the updated HEAD 239 points at is made consistent with the way how the commit title is 240 generated by the other parts of the system. This matters when the 241 title is spread across physically multiple lines. 242 (merge 1cf823fb68 tg/reset-hard-show-head-with-pretty later to maint). 243 244 * Test fixes. 245 (merge 63b1a175ee sg/test-i18ngrep later to maint). 246 247 * Some bugs around "untracked cache" feature have been fixed. This 248 will notice corrupt data in the untracked cache left by old and 249 buggy code and issue a warning---the index can be fixed by clearing 250 the untracked cache from it. 251 (merge 0cacebf099 nd/fix-untracked-cache-invalidation later to maint). 252 (merge 7bf0be7501 ab/untracked-cache-invalidation-docs later to maint). 253 254 * "git blame HEAD COPYING" in a bare repository failed to run, while 255 "git blame HEAD -- COPYING" run just fine. This has been corrected. 256 257 * "git add" files in the same directory, but spelling the directory 258 path in different cases on case insensitive filesystem, corrupted 259 the name hash data structure and led to unexpected results. This 260 has been corrected. 261 (merge c95525e90d bp/name-hash-dirname-fix later to maint). 262 263 * "git rebase -p" mangled log messages of a merge commit, which is 264 now fixed. 265 (merge ed5144d7eb js/fix-merge-arg-quoting-in-rebase-p later to maint). 266 267 * Some low level protocol codepath could crash when they get an 268 unexpected flush packet, which is now fixed. 269 (merge bb1356dc64 js/packet-read-line-check-null later to maint). 270 271 * "git check-ignore" with multiple paths got confused when one is a 272 file and the other is a directory, which has been fixed. 273 (merge d60771e930 rs/check-ignore-multi later to maint). 274 275 * "git describe $garbage" stopped giving any errors when the garbage 276 happens to be a string with 40 hexadecimal letters. 277 (merge a8e7a2bf0f sb/describe-blob later to maint). 278 279 * Code to unquote single-quoted string (used in the parser for 280 configuration files, etc.) did not diagnose bogus input correctly 281 and produced bogus results instead. 282 (merge ddbbf8eb25 jk/sq-dequote-on-bogus-input later to maint). 283 284 * Many places in "git apply" knew that "/dev/null" that signals 285 "there is no such file on this side of the diff" can be followed by 286 whitespace and garbage when parsing a patch, except for one, which 287 made an otherwise valid patch (e.g. ones from subversion) rejected. 288 (merge e454ad4bec tk/apply-dev-null-verify-name-fix later to maint). 289 290 * We no longer create any *.spec file, so "make clean" should not 291 remove it. 292 (merge 4321bdcabb tz/do-not-clean-spec-file later to maint). 293 294 * "git push" over http transport did not unquote the push-options 295 correctly. 296 (merge 90dce21eb0 jk/push-options-via-transport-fix later to maint). 297 298 * "git send-email" learned to complain when the batch-size option is 299 not defined when the relogin-delay option is, since these two are 300 mutually required. 301 (merge 9caa70697b xz/send-email-batch-size later to maint). 302 303 * Y2k20 fix ;-) for our perl scripts. 304 (merge a40e06ee33 bw/perl-timegm-timelocal-fix later to maint). 305 306 * Threaded "git grep" has been optimized to avoid allocation in code 307 section that is covered under a mutex. 308 (merge 38ef24dccf rv/grep-cleanup later to maint). 309 310 * "git subtree" script (in contrib/) scripted around "git log", whose 311 output got affected by end-user configuration like log.showsignature 312 (merge 8841b5222c sg/subtree-signed-commits later to maint). 313 314 * While finding unique object name abbreviation, the code may 315 accidentally have read beyond the end of the array of object names 316 in a pack. 317 (merge 21abed500c ds/find-unique-abbrev-optim later to maint). 318 319 * Micro optimization in revision traversal code. 320 (merge ebbed3ba04 ds/mark-parents-uninteresting-optim later to maint). 321 322 * "git commit" used to run "gc --auto" near the end, which was lost 323 when the command was reimplemented in C by mistake. 324 (merge 095c741edd ab/gc-auto-in-commit later to maint). 325 326 * Allow running a couple of tests with "sh -x". 327 (merge c20bf94abc sg/cvs-tests-with-x later to maint). 328 329 * Other minor doc, test and build updates and code cleanups. 330 (merge e2a5a028c7 bw/oidmap-autoinit later to maint). 331 (merge ec3b4b06f8 cl/t9001-cleanup later to maint). 332 (merge e1b3f3dd38 ks/submodule-doc-updates later to maint). 333 (merge fbac558a9b rs/describe-unique-abbrev later to maint). 334 (merge 8462ff43e4 tb/crlf-conv-flags later to maint). 335 (merge 7d68bb0766 rb/hashmap-h-compilation-fix later to maint). 336 (merge 3449847168 cc/sha1-file-name later to maint). 337 (merge ad622a256f ds/use-get-be64 later to maint). 338 (merge f919ffebed sg/cocci-move-array later to maint). 339 (merge 4e801463c7 jc/mailinfo-cleanup-fix later to maint). 340 (merge ef5b3a6c5e nd/shared-index-fix later to maint). 341 (merge 9f5258cbb8 tz/doc-show-defaults-to-head later to maint). 342 (merge b780e4407d jc/worktree-add-short-help later to maint). 343 (merge ae239fc8e5 rs/cocci-strbuf-addf-to-addstr later to maint). 344 (merge 2e22a85e5c nd/ignore-glob-doc-update later to maint). 345 (merge 3738031581 jk/gettext-poison later to maint). 346 (merge 54360a1956 rj/sparse-updates later to maint). 347 (merge 12e31a6b12 sg/doc-test-must-fail-args later to maint). 348 (merge 760f1ad101 bc/doc-interpret-trailers-grammofix later to maint). 349 (merge 4ccf461f56 bp/fsmonitor later to maint). 350 (merge a6119f82b1 jk/test-hashmap-updates later to maint). 351 (merge 5aea9fe6cc rd/typofix later to maint). 352 (merge e4e5da2796 sb/status-doc-fix later to maint). 353 (merge 7976e901c8 gs/test-unset-xdg-cache-home later to maint). 354 (merge d023df1ee6 tg/worktree-create-tracking later to maint). 355 (merge 4cbe92fd41 sm/mv-dry-run-update later to maint). 356 (merge 75e5e9c3f7 sb/color-h-cleanup later to maint). 357 (merge 2708ef4af6 sg/t6300-modernize later to maint). 358 (merge d88e92d4e0 bw/doc-submodule-recurse-config-with-clone later to maint). 359 (merge f74bbc8dd2 jk/cached-commit-buffer later to maint). 360 (merge 1316416903 ms/non-ascii-ticks later to maint). 361 (merge 878056005e rs/strbuf-read-file-or-whine later to maint). 362 (merge 79f0ba1547 jk/strbuf-read-file-close-error later to maint). 363 (merge edfb8ba068 ot/ref-filter-cleanup later to maint). 364 (merge 11395a3b4b jc/test-must-be-empty later to maint). 365 (merge 768b9d6db7 mk/doc-pretty-fill later to maint). 366 (merge 2caa7b8d27 ab/man-sec-list later to maint).