| Git 2.14 Release Notes |
| ====================== |
| |
| Backward compatibility notes. |
| |
| * 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 |
| more explicit '.' for that instead. The hope is that existing |
| users will not mind this change, and eventually the warning can be |
| turned into a hard error, upgrading the deprecation into removal of |
| this (mis)feature. That is not scheduled to happen in the upcoming |
| release (yet). |
| |
| * Git now avoids blindly falling back to ".git" when the setup |
| sequence said we are _not_ in Git repository. A corner case that |
| happens to work right now may be broken by a call to die("BUG"). |
| We've tried hard to locate such cases and fixed them, but there |
| might still be cases that need to be addressed--bug reports are |
| greatly appreciated. |
| |
| * The experiment to improve the hunk-boundary selection of textual |
| diff output has finished, and the "indent heuristics" has now |
| become the default. |
| |
| |
| Updates since v2.13 |
| ------------------- |
| |
| UI, Workflows & Features |
| |
| * The colors in which "git status --short --branch" showed the names |
| of the current branch and its remote-tracking branch are now |
| configurable. |
| |
| * "git clone" learned the "--no-tags" option not to fetch all tags |
| initially, and also set up the tagopt not to follow any tags in |
| subsequent fetches. |
| |
| * "git archive --format=zip" learned to use zip64 extension when |
| necessary to go beyond the 4GB limit. |
| |
| * "git reset" learned "--recurse-submodules" option. |
| |
| * "git diff --submodule=diff" now recurses into nested submodules. |
| |
| * "git repack" learned to accept the --threads=<n> option and pass it |
| to pack-objects. |
| |
| * "git send-email" learned to run sendemail-validate hook to inspect |
| and reject a message before sending it out. |
| |
| * There is no good reason why "git fetch $there $sha1" should fail |
| 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=..." |
| mechansim 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. |
| |
| * Make the "indent" heuristics the default in "diff" and diff.indentHeuristics |
| configuration variable an escape hatch for those who do no want it. |
| |
| * Many commands learned to pay attention to submodule.recurse |
| configuration. |
| |
| * The convention for a command line is to follow "git cmdname |
| --options" with revisions followed by an optional "--" |
| disambiguator and then finally pathspecs. When "--" is not there, |
| we make sure early ones are all interpretable as revs (and do not |
| look like paths) and later ones are the other way around. A |
| pathspec with "magic" (e.g. ":/p/a/t/h" that matches p/a/t/h from |
| the top-level of the working tree, no matter what subdirectory you |
| are working from) are conservatively judged as "not a path", which |
| required disambiguation more often. The command line parser |
| learned to say "it's a pathspec" a bit more often when the syntax |
| looks like so. |
| |
| * Update "perl-compatible regular expression" support to enable JIT |
| and also allow linking with the newer PCRE v2 library. |
| |
| * "filter-branch" learned a pseudo filter "--setup" that can be used |
| to define a common function/variable that can be used by other |
| filters. |
| |
| * Using "git add d/i/r" when d/i/r is the top of the working tree of |
| a separate repository would create a gitlink in the index, which |
| would appear as a not-quite-initialized submodule to others. We |
| learned to give warnings when this happens. |
| |
| |
| Performance, Internal Implementation, Development Support etc. |
| |
| * The default packed-git limit value has been raised on larger |
| platforms to save "git fetch" from a (recoverable) failure while |
| "gc" is running in parallel. |
| |
| * Code to update the cache-tree has been tightened so that we won't |
| accidentally write out any 0{40} entry in the tree object. |
| |
| * Attempt to allow us notice "fishy" situation where we fail to |
| remove the temporary directory used during the test. |
| |
| * Travis CI gained a task to format the documentation with both |
| AsciiDoc and AsciiDoctor. |
| |
| * Some platforms have ulong that is smaller than time_t, and our |
| historical use of ulong for timestamp would mean they cannot |
| represent some timestamp that the platform allows. Invent a |
| separate and dedicated timestamp_t (so that we can distingiuish |
| timestamps and a vanilla ulongs, which along is already a good |
| move), and then declare uintmax_t is the type to be used as the |
| timestamp_t. |
| |
| * We can trigger Windows auto-build tester (credits: Dscho & |
| Microsoft) from our existing Travis CI tester now. |
| |
| * Conversion from uchar[20] to struct object_id continues. |
| |
| * Simplify parse_pathspec() codepath and stop it from looking at the |
| default in-core index. |
| |
| * Add perf-test for wildmatch. |
| |
| * Code from "conversion using external process" codepath has been |
| extracted to a separate sub-process.[ch] module. |
| |
| * When "git checkout", "git merge", etc. manipulates the in-core |
| index, various pieces of information in the index extensions are |
| discarded from the original state, as it is usually not the case |
| that they are kept up-to-date and in-sync with the operation on the |
| main index. The untracked cache extension is copied across these |
| operations now, which would speed up "git status" (as long as the |
| cache is properly invalidated). |
| |
| * The internal implementation of "git grep" has seen some clean-up. |
| |
| * Update the C style recommendation for notes for translators, as |
| recent versions of gettext tools can work with our style of |
| multi-line comments. |
| |
| * The implementation of "ref" API around the "packed refs" have been |
| cleaned up, in preparation for further changes. |
| |
| * The internal logic used in "git blame" has been libified to make it |
| easier to use by cgit. |
| |
| * Our code often opens a path to an optional file, to work on its |
| contents when we can successfully open it. We can ignore a failure |
| to open if such an optional file does not exist, but we do want to |
| report a failure in opening for other reasons (e.g. we got an I/O |
| error, or the file is there, but we lack the permission to open). |
| |
| The exact errors we need to ignore are ENOENT (obviously) and |
| ENOTDIR (less obvious). Instead of repeating comparison of errno |
| with these two constants, introduce a helper function to do so. |
| |
| * We often try to open a file for reading whose existence is |
| optional, and silently ignore errors from open/fopen; report such |
| errors if they are not due to missing files. |
| |
| * When an existing repository is used for t/perf testing, we first |
| create bit-for-bit copy of it, which may grab a transient state of |
| the repository and freeze it into the repository used for testing, |
| which then may cause Git operations to fail. Single out "the index |
| being locked" case and forcibly drop the lock from the copy. |
| |
| * Three instances of the same helper function have been consolidated |
| to one. |
| |
| * "fast-import" uses a default pack chain depth that is consistent |
| with other parts of the system. |
| |
| * A new test to show the interaction between the pattern [^a-z] |
| (which matches '/') and a slash in a path has been added. The |
| pattern should not match the slash with "pathmatch", but should |
| with "wildmatch". |
| |
| * 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 |
| FREE_AND_NULL() macro. |
| |
| |
| Also contains various documentation updates and code clean-ups. |
| |
| |
| Fixes since v2.13 |
| ----------------- |
| |
| Unless otherwise noted, all the fixes since v2.13 in the maintenance |
| track are contained in this release (see the maintenance releases' |
| notes for details). |
| |
| * "git gc" did not interact well with "git worktree"-managed |
| per-worktree refs. |
| |
| * "git cherry-pick" and other uses of the sequencer machinery |
| mishandled a trailer block whose last line is an incomplete line. |
| This has been fixed so that an additional sign-off etc. are added |
| after completing the existing incomplete line. |
| |
| * The codepath in "git am" that is used when running "git rebase" |
| leaked memory held for the log message of the commits being rebased. |
| |
| * "git clone --config var=val" is a way to populate the |
| per-repository configuration file of the new repository, but it did |
| not work well when val is an empty string. This has been fixed. |
| |
| * Setting "log.decorate=false" in the configuration file did not take |
| effect in v2.13, which has been corrected. |
| |
| * A few codepaths in "checkout" and "am" working on an unborn branch |
| tried to access an uninitialized piece of memory. |
| |
| * The Web interface to gmane news archive is long gone, even though |
| the articles are still accessible via NTTP. Replace the links with |
| ones to public-inbox.org. Because their message identification is |
| based on the actual message-id, it is likely that it will be easier |
| to migrate away from it if/when necessary. |
| |
| * The receive-pack program now makes sure that the push certificate |
| records the same set of push options used for pushing. |
| |
| * Tests have been updated to pass under GETTEXT_POISON (a mechanism |
| to ensure that output strings that should not be translated are |
| not translated by mistake), and TravisCI is told to run them. |
| |
| * "git checkout --recurse-submodules" did not quite work with a |
| submodule that itself has submodules. |
| |
| * "pack-objects" can stream a slice of an existing packfile out when |
| the pack bitmap can tell that the reachable objects are all needed |
| in the output, without inspecting individual objects. This |
| strategy however would not work well when "--local" and other |
| options are in use, and need to be disabled. |
| |
| * Fix memory leaks pointed out by Coverity (and people). |
| |
| * "git read-tree -m" (no tree-ish) gave a nonsense suggestion "use |
| --empty if you want to clear the index". With "-m", such a request |
| will still fail anyway, as you'd need to name at least one tree-ish |
| to be merged. |
| |
| * Make sure our tests would pass when the sources are checked out |
| with "platform native" line ending convention by default on |
| Windows. Some "text" files out tests use and the test scripts |
| themselves that are meant to be run with /bin/sh, ought to be |
| checked out with eol=LF even on Windows. |
| |
| * Introduce the BUG() macro to improve die("BUG: ..."). |
| |
| * Clarify documentation for include.path and includeIf.<condition>.path |
| configuration variables. |
| |
| * Git sometimes gives an advice in a rhetorical question that does |
| not require an answer, which can confuse new users and non native |
| speakers. Attempt to rephrase them. |
| |
| * A few http:// links that are redirected to https:// in the |
| documentation have been updated to https:// links. |
| |
| * "git for-each-ref --format=..." with %(HEAD) in the format used to |
| resolve the HEAD symref as many times as it had processed refs, |
| which was wasteful, and "git branch" shared the same problem. |
| |
| * Regression fix to topic recently merged to 'master'. |
| |
| * The shell completion script (in contrib/) learned "git stash" has |
| a new "push" subcommand. |
| |
| * "git interpret-trailers", when used as GIT_EDITOR for "git commit |
| -v", looked for and appended to a trailer block at the very end, |
| i.e. at the end of the "diff" output. The command has been |
| corrected to pay attention to the cut-mark line "commit -v" adds to |
| the buffer---the real trailer block should appear just before it. |
| |
| * A test allowed both "git push" and "git receive-pack" on the other |
| end write their traces into the same file. This is OK on platforms |
| that allows atomically appending to a file opened with O_APPEND, |
| but on other platforms led to a mangled output, causing |
| intermittent test failures. This has been fixed by disabling |
| traces from "receive-pack" in the test. |
| |
| * Tag objects, which are not reachable from any ref, that point at |
| missing objects were mishandled by "git gc" and friends (they |
| should silently be ignored instead) |
| |
| * "git describe --contains" penalized light-weight tags so much that |
| they were almost never considered. Instead, give them about the |
| same chance to be considered as an annotated tag that is the same |
| age as the underlying commit would. |
| |
| * The "run-command" API implementation has been made more robust |
| against dead-locking in a threaded environment. |
| |
| * A recent update to t5545-push-options.sh started skipping all the |
| tests in the script when a web server testing is disabled or |
| unavailable, not just the ones that require a web server. Non HTTP |
| tests have been salvaged to always run in this script. |
| |
| * "git send-email" now uses Net::SMTP::SSL, which is obsolete, only |
| when needed. Recent versions of Net::SMTP can do TLS natively. |
| |
| * "foo\bar\baz" in "git fetch foo\bar\baz", even though there is no |
| slashes in it, cannot be a nickname for a remote on Windows, as |
| that is likely to be a pathname on a local filesystem. |
| |
| * "git clean -d" used to clean directories that has ignored files, |
| even though the command should not lose ignored ones without "-x". |
| "git status --ignored" did not list ignored and untracked files |
| without "-uall". These have been corrected. |
| |
| * The result from "git diff" that compares two blobs, e.g. "git diff |
| $commit1:$path $commit2:$path", used to be shown with the full |
| object name as given on the command line, but it is more natural to |
| use the $path in the output and use it to look up .gitattributes. |
| |
| * The "collision detecting" SHA-1 implementation shipped with 2.13 |
| was quite broken on some big-endian platforms and/or platforms that |
| do not like unaligned fetches. Update to the upstream code which |
| has already fixed these issues. |
| |
| * "git am -h" triggered a BUG(). |
| |
| * The interaction of "url.*.insteadOf" and custom URL scheme's |
| whitelisting is now documented better. |
| |
| * The timestamp of the index file is now taken after the file is |
| closed, to help Windows, on which a stale timestamp is reported by |
| fstat() on a file that is opened for writing and data was written |
| but not yet closed. |
| |
| * "git pull --rebase --autostash" didn't auto-stash when the local history |
| fast-forwards to the upstream. |
| |
| * A flaky test has been corrected. |
| |
| * "git $cmd -h" for builtin commands calls the implementation of the |
| command (i.e. cmd_$cmd() function) without doing any repository |
| set-up, and the commands that expect RUN_SETUP is done by the Git |
| potty needs to be prepared to show the help text without barfing. |
| (merge d691551192 jk/consistent-h later to maint). |
| |
| * Help contributors that visit us at GitHub. |
| |
| * "git stash push <pathspec>" did not work from a subdirectory at all. |
| Bugfix for a topic in v2.13 |
| |
| * As there is no portable way to pass timezone information to |
| strftime, some output format from "git log" and friends are |
| impossible to produce. Teach our own strbuf_addftime to replace %z |
| and %Z with caller-supplied values to help working around this. |
| (merge 6eced3ec5e rs/strbuf-addftime-zZ later to maint). |
| |
| * "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 |
| into its own header file. |
| (merge dc8441fdb4 bw/config-h later to maint). |
| |
| * Other minor doc, test and build updates and code cleanups. |
| (merge 68241cb9dd sb/t4005-modernize later to maint). |