Git 2.14 Release Notes
======================
-Backward compatibility notes.
+Backward compatibility notes and other notable changes.
* Use of an empty string as a pathspec element that is used for
'everything matches' is still warned and Git asks users to use a
diff output has finished, and the "indent heuristics" has now
become the default.
+ * Git can now be built with PCRE v2 instead of v1 of the PCRE
+ library. Replace USE_LIBPCRE=YesPlease with USE_LIBPCRE2=YesPlease
+ in existing build scripts to build against the new version. As the
+ upstream PCRE maintainer has abandoned v1 maintenance for all but
+ the most critical bug fixes, use of v2 is recommended.
+
Updates since v2.13
-------------------
when the $sha1 names an object at the tip of an advertised ref,
even when the other side hasn't enabled allowTipSHA1InWant.
- * The recently introduced "[includeIf "gitdir:$dir"] path=..."
- mechanism has further been taught to take symlinks into account.
- The directory "$dir" specified in "gitdir:$dir" may be a symlink to
- a real location, not something that $(getcwd) may return. In such
- a case, a realpath of "$dir" is compared with the real path of the
- current repository to determine if the contents from the named path
- should be included.
+ * The "[includeIf "gitdir:$dir"] path=..." mechanism introduced in
+ 2.13.0 would canonicalize the path of the gitdir being matched,
+ and did not match e.g. "gitdir:~/work/*" against a repo in
+ "~/work/main" if "~/work" was a symlink to "/mnt/storage/work".
+ Now we match both the resolved canonical path and what "pwd" would
+ show. The include will happen if either one matches.
- * Make the "indent" heuristics the default in "diff" and diff.indentHeuristics
- configuration variable an escape hatch for those who do no want it.
+ * The "indent" heuristics is now the default in "diff". The
+ diff.indentHeuristic configuration variable can be set to "false"
+ for those who do not want it.
* Many commands learned to pay attention to submodule.recurse
configuration.
would appear as a not-quite-initialized submodule to others. We
learned to give warnings when this happens.
- * "git status" learned to optionally give how many stash entries the
- user has in its output.
+ * "git status" learned to optionally give how many stash entries there
+ are in its output.
* "git status" has long shown essentially the same message as "git
commit"; the message it gives while preparing for the root commit,
(rather than the commit the user is preparing for, which is more in
line with the focus of "git commit").
- * "git send-email" learned to overcome some SMTP server limitation
- that does not allow many pieces of e-mails to be sent over a single
- session.
+ * "git send-email" now has --batch-size and --relogin-delay options
+ which can be used to overcome limitations on SMTP servers that
+ restrict on how many of e-mails can be sent in a single session.
+
+ * An old message shown in the commit log template was removed, as it
+ has outlived its usefulness.
+
+ * "git pull --rebase --recurse-submodules" learns to rebase the
+ branch in the submodules to an updated base.
+ * "git log" learned -P as a synonym for --perl-regexp, "git grep"
+ already had such a synonym.
+
+ * "git log" didn't understand --regexp-ignore-case when combined with
+ --perl-regexp. This has been fixed.
Performance, Internal Implementation, Development Support etc.
* The 'diff-highlight' program (in contrib/) has been restructured
for easier reuse by an external project 'diff-so-fancy'.
- (merge 0c977dbc81 jk/diff-highlight-module later to maint).
* A common pattern to free a piece of memory and assign NULL to the
pointer that used to point at it has been replaced with a new
object database?" query that is used to derive the length of prefix
an object name is uniquely abbreviated to.
+ * The hashmap API has been updated so that data to customize the
+ behaviour of the comparison function can be specified at the time a
+ hashmap is initialized.
+
+ * The "collision detecting" SHA-1 implementation shipped with 2.13 is
+ now integrated into git.git as a submodule (the first submodule to
+ ship with git.git). Clone git.git with --recurse-submodules to get
+ it. For now a non-submodule copy of the same code is also shipped
+ as part of the tree.
+
+ * A recent update made it easier to use "-fsanitize=" option while
+ compiling but supported only one sanitize option. Allow more than
+ one to be combined, joined with a comma, like "make SANITIZE=foo,bar".
+
+ * Use "p4 -G" to make "p4 changes" output more Python-friendly
+ to parse.
+
+ * We started using "%" PRItime, imitating "%" PRIuMAX and friends, as
+ a way to format the internal timestamp value, but this does not
+ play well with gettext(1) i18n framework, and causes "make pot"
+ that is run by the l10n coordinator to create a broken po/git.pot
+ file. This is a possible workaround for that problem.
+
+ * It turns out that Cygwin also needs the fopen() wrapper that
+ returns failure when a directory is opened for reading.
Also contains various documentation updates and code clean-ups.
* "git mergetool" learned to work around a wrapper MacOS X adds
around underlying meld.
- (merge 0af85f84bd da/mergetools-meld-output-opt-on-macos later to maint).
* An example in documentation that does not work in multi worktree
configuration has been corrected.
- (merge 773a88914f ah/doc-gitattributes-empty-index later to maint).
* The pretty-format specifiers like '%h', '%t', etc. had an
optimization that no longer works correctly. In preparation/hope
of getting it correctly implemented, first discard the optimization
that is broken.
- (merge fe9e2aefd4 rs/pretty-add-again later to maint).
* The code to pick up and execute command alias definition from the
configuration used to switch to the top of the working tree and
then come back when the expanded alias was executed, which was
unnecessarilyl complex. Attempt to simplify the logic by using the
early-config mechanism that does not chdir around.
- (merge a9bcf6586d js/alias-early-config later to maint).
* Fix configuration codepath to pay proper attention to commondir
that is used in multi-worktree situation, and isolate config API
* "git add -p" were updated in 2.12 timeframe to cope with custom
core.commentchar but the implementation was buggy and a
metacharacter like $ and * did not work.
- (merge d85d7ecb80 jk/add-p-commentchar-fix later to maint).
* A recent regression in "git rebase -i" has been fixed and tests
that would have caught it and others have been added.
- (merge adf16c08cb pw/rebase-i-regression-fix-tests later to maint).
- * An unaligned 32-bit access in pack-bitmap code ahs been corrected.
- (merge da41c942b3 jc/pack-bitmap-unaligned later to maint).
+ * An unaligned 32-bit access in pack-bitmap code has been corrected.
* Tighten error checks for invalid "git apply" input.
- (merge d70e9c5c8c rs/apply-validate-input later to maint).
- * The split index code did not honor core.sharedrepository setting
+ * The split index code did not honor core.sharedRepository setting
correctly.
- (merge 3ee83f48e5 cc/shared-index-permfix later to maint).
* The Makefile rule in contrib/subtree for building documentation
learned to honour USE_ASCIIDOCTOR just like the main documentation
set does.
- (merge fdc1ad97c1 aw/contrib-subtree-doc-asciidoctor later to maint).
-
- * Update the sha1dc again to fix portability glitches.
- (merge 9936c1b52a ab/sha1dc-maint later to maint).
* Code clean-up to fix possible buffer over-reading.
- (merge 8bc172e5f2 rs/apply-avoid-over-reading later to maint).
* A few tests that tried to verify the contents of push certificates
did not use 'git rev-parse' to formulate the line to look for in
the certificate correctly.
- (merge 8722947e5c js/t5534-rev-parse-gives-multi-line-output-fix later to maint).
+
+ * Update the character width tables.
+
+ * After "git branch --move" of the currently checked out branch, the
+ code to walk the reflog of HEAD via "log -g" and friends
+ incorrectly stopped at the reflog entry that records the renaming
+ of the branch.
+
+ * The rewrite of "git branch --list" using for-each-ref's internals
+ that happened in v2.13 regressed its handling of color.branch.local;
+ this has been fixed.
+
+ * The build procedure has been improved to allow building and testing
+ Git with address sanitizer more easily.
+ (merge 425ca6710b jk/build-with-asan later to maint).
+
+ * On Cygwin, similar to Windows, "git push //server/share/repository"
+ ought to mean a repository on a network share that can be accessed
+ locally, but this did not work correctly due to stripping the double
+ slashes at the beginning.
+
+ * The progress meter did not give a useful output when we haven't had
+ 0.5 seconds to measure the throughput during the interval. Instead
+ show the overall throughput rate at the end, which is a much more
+ useful number.
+
+ * Code clean-up, that makes us in sync with Debian by one patch.
+
+ * We run an early part of "git gc" that deals with refs before
+ daemonising (and not under lock) even when running a background
+ auto-gc, which caused multiple gc processes attempting to run the
+ early part at the same time. This is now prevented by running the
+ early part also under the GC lock.
+
+ * A recent update broke an alias that contained an uppercase letter.
* Other minor doc, test and build updates and code cleanups.
- (merge 68241cb9dd sb/t4005-modernize later to maint).
- (merge 4fced24712 ks/t7508-indent-fix later to maint).
- (merge 968b1fe263 mb/reword-autocomplete-message later to maint).
- (merge 8592c95cdf ah/doc-pretty-color-auto-prefix later to maint).
- (merge 73fc2aadc7 js/fsck-name-object later to maint).
- (merge dc4b4a61ba jc/utf8-fprintf later to maint).
- (merge c2d4b4cd06 sb/merge-recursive-code-cleanup later to maint).
+ (merge 5053313562 rs/urlmatch-cleanup later to maint).
+ (merge 42c78a216e rs/use-div-round-up later to maint).
+ (merge 5e8d2729ae rs/wt-status-cleanup later to maint).
+ (merge bc9b7e207f as/diff-options-grammofix later to maint).
+ (merge ac05222b31 ah/patch-id-doc later to maint).