| Git v2.1 Release Notes |
| ====================== |
| |
| Backward compatibility notes |
| ---------------------------- |
| |
| * The default value we give to the environment variable LESS has been |
| changed from "FRSX" to "FRX", losing "S" (chop long lines instead |
| of wrapping). Existing users who prefer not to see line-wrapped |
| output may want to set |
| |
| $ git config core.pager "less -S" |
| |
| to restore the traditional behaviour. It is expected that people |
| find output from the most subcommands easier to read with the new |
| default, except for "blame" which tends to produce really long |
| lines. To override the new default only for "git blame", you can |
| do this: |
| |
| $ git config pager.blame "less -S" |
| |
| * A few disused directories in contrib/ have been retired. |
| |
| |
| Updates since v2.0 |
| ------------------ |
| |
| UI, Workflows & Features |
| |
| * Since the very beginning of Git, we gave the LESS environment a |
| default value "FRSX" when we spawn "less" as the pager. "S" (chop |
| long lines instead of wrapping) has been removed from this default |
| set of options, because it is more or less a personal taste thing, |
| as opposed to others that have good justifications (i.e. "R" is |
| very much justified because many kinds of output we produce are |
| colored and "FX" is justified because output we produce is often |
| shorter than a page). |
| |
| * The logic and data used to compute the display width needed for |
| UTF-8 strings have been updated to match Unicode 7.0 better. |
| |
| * HTTP-based transports learned to propagate the error messages from |
| the webserver better to the client coming over the HTTP transport. |
| |
| * The completion script for bash (in contrib/) has been updated to |
| handle aliases that define complex sequence of commands better. |
| |
| * The "core.preloadindex" configuration variable is by default |
| enabled, allowing modern platforms to take advantage of the |
| multiple cores they have. |
| |
| * "git commit --date=<date>" option learned to read from more |
| timestamp formats, including "--date=now". |
| |
| * The `core.commentChar` configuration variable is used to specify a |
| custom comment character other than the default "#" to be used in |
| the commit log editor. This can be set to `auto` to attempt to |
| choose a different character that does not conflict with what |
| already starts a line in the message being edited for cases like |
| "git commit --amend". |
| |
| * "git format-patch" learned --signature-file=<file> to take the mail |
| signature from. |
| |
| * "git grep" learned grep.fullname configuration variable to force |
| "--full-name" to be default. This may cause regressions on |
| scripted users that do not expect this new behaviour. |
| |
| * "git imap-send" learned to ask the credential helper for auth |
| material. |
| |
| * "git log" and friends now understand the value "auto" set to the |
| "log.decorate" configuration variable to enable the "--decorate" |
| option automatically when the output is sent to tty. |
| |
| * "git merge" without argument, even when there is an upstream |
| defined for the current branch, refused to run until |
| merge.defaultToUpstream is set to true. Flip the default of that |
| configuration variable to true. |
| |
| * "git mergetool" learned to drive the vimdiff3 backend. |
| |
| * mergetool.prompt used to default to 'true', always asking "do you |
| really want to run the tool on this path?". Among the two |
| purposes this prompt serves, ignore the use case to confirm that |
| the user wants to view particular path with the named tool, and |
| redefine the meaning of the prompt only to confirm the choice of |
| the tool made by the autodetection (for those who configured the |
| tool explicitly, the prompt shown for the latter purpose is |
| simply annoying). |
| |
| Strictly speaking, this is a backward incompatible change and the |
| users need to explicitly set the variable to 'true' if they want |
| to resurrect the now-ignored use case. |
| |
| * "git replace" learned the "--edit" subcommand. |
| |
| * "git send-email" learned "--to-cover" and "--cc-cover" options, to |
| tell it to copy To: and Cc: headers found in the first input file |
| when emitting later input files. |
| |
| * "git svn" learned to cope with malformed timestamps with only one |
| digit in the hour part, e.g. 2014-01-07T5:01:02.048176Z, emitted |
| by some broken subversion server implementations. |
| |
| * "git tag" when editing the tag message shows the name of the tag |
| being edited as a comment in the editor. |
| |
| |
| Performance, Internal Implementation, etc. |
| |
| * Build procedure for 'subtree' (in contrib/) has been cleaned up. |
| |
| * The `core.deltabasecachelimit` used to default to 16 MiB , but this |
| proved to be too small, and has been bumped to 96 MiB. |
| |
| * "git blame" has been optimized greatly by reorganising the data |
| structure that is used to keep track of the work to be done. |
| |
| * "git diff" that compares 3-or-more trees (e.g. parents and the |
| result of a merge) have been optimized. |
| |
| * The API to update/delete references are being converted to handle |
| updates to multiple references in a transactional way. As an |
| example, "update-ref --stdin [-z]" has been updated to use this |
| API. |
| |
| * Parts of the test scripts can be skipped by using a range notation, |
| e.g. "sh t1234-test.sh --run='1-4 6 8-'" to omit test piece 5 and 7 |
| and run everything else. |
| |
| |
| Also contains various documentation updates and code clean-ups. |
| |
| |
| Fixes since v2.0 |
| ---------------- |
| |
| Unless otherwise noted, all the fixes since v2.0 in the maintenance |
| track are contained in this release (see the maintenance releases' |
| notes for details). |
| |
| * We used to unconditionally disable the pager in the pager process |
| we spawn to feed out output, but that prevented people who want to |
| run "less" within "less" from doing so. |
| (merge c0459ca je/pager-do-not-recurse later to maint). |
| |
| * Tools that read diagnostic output in our standard error stream do |
| not want to see terminal control sequence (e.g. erase-to-eol). |
| Detect them by checking if the standard error stream is connected |
| to a tty. |
| (merge 38de156 mn/sideband-no-ansi later to maint). |
| |
| * Mishandling of patterns in .gitignore that has trailing SPs quoted |
| with backslashes (e.g. ones that end with "\ ") have been |
| corrected. |
| (merge 97c1364be6b pb/trim-trailing-spaces later to maint). |
| |
| * Reworded the error message given upon a failure to open an existing |
| loose object file due to e.g. permission issues; it was reported as |
| the object being corrupt, but that is not quite true. |
| (merge d6c8a05 jk/report-fail-to-read-objects-better later to maint). |
| |
| * "git log -2master" is a common typo that shows two commits starting |
| from whichever random branch that is not 'master' that happens to |
| be checked out currently. |
| (merge e3fa568 jc/revision-dash-count-parsing later to maint). |
| |
| * The "%<(10,trunc)%s" pretty format specifier in the log family of |
| commands is used to truncate the string to a given length (e.g. 10 |
| in the example) with padding to column-align the output, but did |
| not take into account that number of bytes and number of display |
| columns are different. |
| (merge 7d50987 as/pretty-truncate later to maint). |
| |
| * The "mailmap.file" configuration option did not support the tilde |
| expansion (i.e. ~user/path and ~/path). |
| (merge 9352fd5 ow/config-mailmap-pathname later to maint). |
| |
| * The completion scripts (in contrib/) did not know about quite a few |
| options that are common between "git merge" and "git pull", and a |
| couple of options unique to "git merge". |
| (merge 8fee872 jk/complete-merge-pull later to maint). |
| |
| * "--ignore-space-change" option of "git apply" ignored the spaces |
| at the beginning of line too aggressively, which is inconsistent |
| with the option of the same name "diff" and "git diff" have. |
| (merge 14d3bb4 jc/apply-ignore-whitespace later to maint). |
| |
| * "git blame" miscounted number of columns needed to show localized |
| timestamps, resulting in jaggy left-side-edge of the source code |
| lines in its output. |
| (merge dd75553 jx/blame-align-relative-time later to maint). |
| |
| * "git blame" assigned the blame to the copy in the working-tree if |
| the repository is set to core.autocrlf=input and the file used CRLF |
| line endings. |
| (merge 4d4813a bc/blame-crlf-test later to maint). |
| |
| * "git commit --allow-empty-messag -C $commit" did not work when the |
| commit did not have any log message. |
| (merge 076cbd6 jk/commit-C-pick-empty later to maint). |
| |
| * "git diff --find-copies-harder" sometimes pretended as if the mode |
| bits have changed for paths that are marked with assume-unchanged |
| bit. |
| (merge 5304810 jk/diff-files-assume-unchanged later to maint). |
| |
| * "git format-patch" did not enforce the rule that the "--follow" |
| option from the log/diff family of commands must be used with |
| exactly one pathspec. |
| (merge dd63f16 jk/diff-follow-must-take-one-pathspec later to maint). |
| |
| * "git gc --auto" was recently changed to run in the background to |
| give control back early to the end-user sitting in front of the |
| terminal, but it forgot that housekeeping involving reflogs should |
| be done without other processes competing for accesses to the refs. |
| (merge 62aad18 nd/daemonize-gc later to maint). |
| |
| * "git grep -O" to show the lines that hit in the pager did not work |
| well with case insensitive search. We now spawn "less" with its |
| "-I" option when it is used as the pager (which is the default). |
| (merge f7febbe sk/spawn-less-case-insensitively-from-grep-O-i later to maint). |
| |
| * We used to disable threaded "git index-pack" on platforms without |
| thread-safe pread(); use a different workaround for such |
| platforms to allow threaded "git index-pack". |
| (merge 3953949 nd/index-pack-one-fd-per-thread later to maint). |
| |
| * The error reporting from "git index-pack" has been improved to |
| distinguish missing objects from type errors. |
| (merge 77583e7 jk/index-pack-report-missing later to maint). |
| |
| * "git mailinfo" used to read beyond the end of header string while |
| parsing an incoming e-mail message to extract the patch. |
| (merge b1a013d rs/mailinfo-header-cmp later to maint). |
| |
| * On a case insensitive filesystem, merge-recursive incorrectly |
| deleted the file that is to be renamed to a name that is the same |
| except for case differences. |
| (merge baa37bf dt/merge-recursive-case-insensitive later to maint). |
| |
| * "git pack-objects" unnecessarily copied the previous contents when |
| extending the hashtable, even though it will populate the table |
| from scratch anyway. |
| (merge fb79947 rs/pack-objects-no-unnecessary-realloc later to maint). |
| |
| * Recent updates to "git repack" started to duplicate objects that |
| are in packfiles marked with .keep flag into the new packfile by |
| mistake. |
| (merge d078d85 jk/repack-pack-keep-objects later to maint). |
| |
| * "git rerere forget" did not work well when merge.conflictstyle |
| was set to a non-default value. |
| (merge de3d8bb fc/rerere-conflict-style later to maint). |
| |
| * "git remote rm" and "git remote prune" can involve removing many |
| refs at once, which is not a very efficient thing to do when very |
| many refs exist in the packed-refs file. |
| (merge e6bea66 jl/remote-rm-prune later to maint). |
| |
| * "git log --exclude=<glob> --all | git shortlog" worked as expected, |
| but "git shortlog --exclude=<glob> --all", which is supposed to be |
| identical to the above pipeline, was not accepted at the command |
| line argument parser level. |
| (merge eb07774 jc/shortlog-ref-exclude later to maint). |
| |
| * The autostash mode of "git rebase -i" did not restore the dirty |
| working tree state if the user aborted the interactive rebase by |
| emptying the insn sheet. |
| (merge ddb5432 rr/rebase-autostash-fix later to maint). |
| |
| * "git show -s" (i.e. show log message only) used to incorrectly emit |
| an extra blank line after a merge commit. |
| (merge ad2f725 mk/show-s-no-extra-blank-line-for-merges later to maint). |
| |
| * "git status", even though it is a read-only operation, tries to |
| update the index with refreshed lstat(2) info to optimize future |
| accesses to the working tree opportunistically, but this could |
| race with a "read-write" operation that modify the index while it |
| is running. Detect such a race and avoid overwriting the index. |
| (merge 426ddee ym/fix-opportunistic-index-update-race later to maint). |
| |
| * "git status" (and "git commit") behaved as if changes in a modified |
| submodule are not there if submodule.*.ignore configuration is set, |
| which was misleading. The configuration is only to unclutter diff |
| output during the course of development, and should not to hide |
| changes in the "status" output to cause the users forget to commit |
| them. |
| (merge c215d3d jl/status-added-submodule-is-never-ignored later to maint). |
| |
| * Documentation for "git submodule sync" forgot to say that the subcommand |
| can take the "--recursive" option. |
| (merge 9393ae7 mc/doc-submodule-sync-recurse later to maint). |
| |
| * "git update-index --cacheinfo" in 2.0 release crashed on a |
| malformed command line. |
| (merge c8e1ee4 jc/rev-parse-argh-dashed-multi-words later to maint). |
| |
| * The mode to run tests with HTTP server tests disabled was broken. |
| (merge afa53fe na/no-http-test-in-the-middle later to maint). |