4 This one ended up to be a release with lots of small corrections and
 
   5 improvements without big uncomfortably exciting features.  The recent
 
   6 security fix that went to 2.2.1 and older maintenance tracks is also
 
   7 contained in this update.
 
  15  * Recent gcc toolchain on Cygwin started throwing compilation warning,
 
  16    which has been squelched.
 
  18  * A few updates to build on platforms that lack tv_nsec,
 
  19    clock_gettime, CLOCK_MONOTONIC and HMAC_CTX_cleanup (e.g. older
 
  20    RHEL) have been added.
 
  23 UI, Workflows & Features
 
  25  * It was cumbersome to use "GIT_SSH" mechanism when the user wanted
 
  26    to pass an extra set of arguments to the underlying ssh.  A new
 
  27    environment variable GIT_SSH_COMMAND can be used for this.
 
  29  * A request to store an empty note via "git notes" meant to remove
 
  30    note from the object but with --allow-empty we will store a
 
  31    (surprise!)  note that is empty.
 
  33  * "git interpret-trailers" learned to properly handle the
 
  34    "Conflicts:" block at the end.
 
  36  * "git am" learned "--message-id" option to copy the message ID of
 
  37    the incoming e-mail to the log message of resulting commit.
 
  39  * "git clone --reference=<over there>" learned the "--dissociate"
 
  40    option to go with it; it borrows objects from the reference object
 
  41    store while cloning only to reduce network traffic and then
 
  42    dissociates the resulting clone from the reference by performing
 
  43    local copies of borrowed objects.
 
  45  * "git send-email" learned "--transfer-encoding" option to force a
 
  46    non-fault Content-Transfer-Encoding header (e.g. base64).
 
  48  * "git send-email" normally identifies itself via X-Mailer: header in
 
  49    the message it sends out.  A new command line flag --no-xmailer
 
  50    allows the user to squelch the header.
 
  52  * "git push" into a repository with a working tree normally refuses
 
  53    to modify the branch that is checked out.  The command learned to
 
  54    optionally do an equivalent of "git reset --hard" only when there
 
  55    is no change to the working tree and the index instead, which would
 
  56    be useful to "deploy" by pushing into a repository.
 
  58  * "git new-workdir" (in contrib/) can be used to populate an empty
 
  59    and existing directory now.
 
  61  * Credential helpers are asked in turn until one of them give
 
  62    positive response, which is cumbersome to turn off when you need to
 
  63    run Git in an automated setting.  The credential helper interface
 
  64    learned to allow a helper to say "stop, don't ask other helpers."
 
  65    Also GIT_TERMINAL_PROMPT environment can be set to false to disable
 
  66    our built-in prompt mechanism for passwords.
 
  68  * "git branch -d" (delete) and "git branch -m" (move) learned to
 
  69    honor "-f" (force) flag; unlike many other subcommands, the way to
 
  70    force these have been with separate "-D/-M" options, which was
 
  73  * "diff-highlight" filter (in contrib/) allows its color output to be
 
  74    customized via configuration variables.
 
  76  * "git imap-send" learned to take "-v" (verbose) and "-q" (quiet)
 
  79  * "git remote add $name $URL" is now allowed when "url.$URL.insteadOf"
 
  82  * "git imap-send" now can be built to use cURL library to talk to
 
  83    IMAP servers (if the library is recent enough, of course).
 
  84    This allows you to use authenticate method other than CRAM-MD5,
 
  87  * "git imap-send" now allows GIT_CURL_VERBOSE environment variable to
 
  88    control the verbosity when talking via the cURL library.
 
  90  * The prompt script (in contrib/) learned to optionally hide prompt
 
  91    when in an ignored directory by setting GIT_PS1_HIDE_IF_PWD_IGNORED
 
  95 Performance, Internal Implementation, Development Support etc.
 
  97  * Earlier we made "rev-list --object-edge" more aggressively list the
 
  98    objects at the edge commits, in order to reduce number of objects 
 
  99    fetched into a shallow repository, but the change affected cases
 
 100    other than "fetching into a shallow repository" and made it
 
 101    unusably slow (e.g. fetching into a normal repository should not
 
 102    have to suffer the overhead from extra processing).  Limit it to a
 
 103    more specific case by introducing --objects-edge-aggressive, a new
 
 106  * Squelched useless compiler warnings on Mac OS X regarding the
 
 109  * The procedure to generate unicode table has been simplified.
 
 111  * Some filesystems assign filemodes in a strange way, fooling then
 
 112    automatic "filemode trustability" check done during a new
 
 113    repository creation.  The initialization codepath has been hardened
 
 116  * The codepath in "git remote update --prune" to drop many refs has
 
 119  * The API into get_merge_bases*() family of functions was easy to
 
 120    misuse, which has been corrected to make it harder to do so.
 
 122  * Long overdue departure from the assumption that S_IFMT is shared by
 
 123    everybody made in 2005, which was necessary to port to z/OS.
 
 125  * "git push" and "git fetch" did not communicate an overlong refname
 
 126    correctly.  Now it uses 64kB sideband to accommodate longer ones.
 
 128  * Recent GPG changes the keyring format and drops support for RFC1991
 
 129    formatted signatures, breaking our existing tests.
 
 131  * "git-prompt" (in contrib/) used a variable from the global scope,
 
 132    possibly contaminating end-user's namespace.
 
 135 Also contains various documentation updates and code clean-ups.
 
 141 Unless otherwise noted, all the fixes since v2.2 in the maintenance
 
 142 track are contained in this release (see the maintenance releases'
 
 145  * "git http-push" over WebDAV (aka dumb http-push) was broken in
 
 146    v2.2.2 when parsing a symbolic ref, resulting in a bogus request
 
 147    that gets rejected by recent versions of cURL library.
 
 148    (merge f6786c8 jk/http-push-symref-fix later to maint).
 
 150  * The logic in "git bisect bad HEAD" etc. to avoid forcing the test
 
 151    of the common ancestor of bad and good commits was broken.
 
 152    (merge 07913d5 cc/bisect-rev-parsing later to maint).
 
 154  * "git checkout-index --temp=$target $path" did not work correctly
 
 155    for paths outside the current subdirectory in the project.
 
 156    (merge 74c4de5 es/checkout-index-temp later to maint).
 
 158  * The report from "git checkout" on a branch that builds on another
 
 159    local branch by setting its branch.*.merge to branch name (not a
 
 160    full refname) incorrectly said that the upstream is gone.
 
 161    (merge 05e7368 jc/checkout-local-track-report later to maint).
 
 163  * With The git-prompt support (in contrib/), using the exit status of
 
 164    the last command in the prompt, e.g.  PS1='$(__git_ps1) $? ', did
 
 165    not work well, because the helper function stomped on the exit
 
 167    (merge 6babe76 tf/prompt-preserve-exit-status later to maint).
 
 169  * Recent update to "git commit" broke amending an existing commit
 
 170    with bogus author/committer lines without a valid e-mail address.
 
 171    (merge c83a509 jk/commit-date-approxidate later to maint).
 
 173  * The lockfile API used to get confused which file to clean up when
 
 174    the process moved the $cwd after creating a lockfile.
 
 175    (merge fa137f6 nd/lockfile-absolute later to maint).
 
 177  * Traditionally we tried to avoid interpreting date strings given by
 
 178    the user as future dates, e.g. GIT_COMMITTER_DATE=2014-12-10 when
 
 179    used early November 2014 was taken as "October 12, 2014" because it
 
 180    is likely that a date in the future, December 10, is a mistake.
 
 181    This heuristics has been loosened to allow people to express future
 
 182    dates (most notably, --until=<date> may want to be far in the
 
 183    future) and we no longer tiebreak by future-ness of the date when
 
 185     (1) ISO-like format is used, and
 
 186     (2) the string can make sense interpreted as both y-m-d and y-d-m.
 
 188    Git may still have to use the heuristics to tiebreak between dd/mm/yy
 
 189    and mm/dd/yy, though.
 
 190    (merge d372395 jk/approxidate-avoid-y-d-m-over-future-dates later to maint).
 
 192  * Git did not correctly read an overlong refname from a packed refs
 
 194    (merge ea41783 jk/read-packed-refs-without-path-max later to maint).
 
 196  * "git apply" was described in the documentation to take --ignore-date
 
 197    option, which it does not.
 
 198    (merge 0cef4e7 rw/apply-does-not-take-ignore-date later to maint).
 
 200  * "git add -i" did not notice when the interactive command input
 
 201    stream went away and kept asking the same question.
 
 202    (merge a8bec7a jk/add-i-read-error later to maint).
 
 204  * "git send-email" did not handle RFC 2047 encoded headers quite
 
 206    (merge ab47e2a rd/send-email-2047-fix later to maint).
 
 208  * New tag object format validation added in 2.2 showed garbage after
 
 209    a tagname it reported in its error message.
 
 210    (merge a1e920a js/fsck-tag-validation later to maint).
 
 212  * The code that reads the reflog from the newer to the older entries
 
 213    did not handle an entry that crosses a boundary of block it uses to
 
 215    (merge 69216bf jk/for-each-reflog-ent-reverse later to maint).
 
 217  * "git diff -B -M" after making a new copy B out of an existing file
 
 218    A and then editing A extensively ought to report that B was created
 
 219    by copying A and A was modified, which is what "git diff -C"
 
 220    reports, but it instead said A was renamed to B and A was edited
 
 221    heavily in place.  This was not just incoherent but also failed to
 
 222    apply with "git apply".  The report has been corrected to match what
 
 223    "git diff -C" produces for this case.
 
 224    (merge 6936b58 jc/diff-b-m later to maint).
 
 226  * In files we pre-populate for the user to edit with commented hints,
 
 227    a line of hint that is indented with a tab used to show as '#' (or
 
 228    any comment char), ' ' (space), and then the hint text that began
 
 229    with the tab, which some editors flag as an indentation error (tab
 
 230    following space).  We now omit the space after the comment char in
 
 232    (merge d55aeb7 jc/strbuf-add-lines-avoid-sp-ht-sequence later to maint).
 
 234  * "git ls-tree" does not support path selection based on negative
 
 235    pathspecs, but did not error out when negative pathspecs are given.
 
 236    (merge f1f6224 nd/ls-tree-pathspec later to maint).
 
 238  * The function sometimes returned a non-freeable memory and some
 
 239    other times returned a piece of memory that must be freed, leading
 
 241    (merge 59362e5 jc/exec-cmd-system-path-leak-fix later to maint).
 
 243  * The code to abbreviate an object name to its short unique prefix
 
 244    has been optimized when no abbreviation was requested.
 
 245    (merge 61e704e mh/find-uniq-abbrev later to maint).
 
 247  * "git add --ignore-errors ..." did not ignore an error to
 
 248    give a file that did not exist.
 
 249    (merge 1d31e5a mg/add-ignore-errors later to maint).
 
 251  * "git checkout $treeish $path", when $path in the index and the
 
 252    working tree already matched what is in $treeish at the $path,
 
 253    still overwrote the $path unnecessarily.
 
 254    (merge c5326bd jk/checkout-from-tree later to maint).
 
 256  * "git config --get-color" did not parse its command line arguments
 
 258    (merge cb35722 jk/colors-fix later to maint).
 
 260  * open() emulated on Windows platforms did not give EISDIR upon
 
 261    an attempt to open a directory for writing.
 
 262    (merge ba6fad0 js/windows-open-eisdir-error later to maint).
 
 264  * A few code paths used abs() when they should have used labs() on
 
 266    (merge 83915ba rs/maint-config-use-labs later to maint).
 
 267    (merge 31a8aa1 rs/receive-pack-use-labs later to maint).
 
 269  * "gitweb" used to depend on a behaviour recent CGI.pm deprecated.
 
 270    (merge 13dbf46 jk/gitweb-with-newer-cgi-multi-param later to maint).
 
 272  * "git init" (hence "git clone") initialized the per-repository
 
 273    configuration file .git/config with x-bit by mistake.
 
 274    (merge 1f32ecf mh/config-flip-xbit-back-after-checking later to maint).
 
 276  * Recent update in Git 2.2 started creating objects/info/packs and
 
 277    info/refs files with permission bits tighter than user's umask.
 
 278    (merge d91175b jk/prune-packed-server-info later to maint).
 
 280  * Git 2.0 was supposed to make the "simple" mode for the default of
 
 281    "git push", but it didn't.
 
 282    (merge 00a6fa0 jk/push-simple later to maint).
 
 284  * "Everyday" document had a broken link.
 
 285    (merge 366c8d4 po/everyday-doc later to maint).
 
 288    (merge 880ef58 jk/no-perl-tests later to maint).
 
 290  * The build procedure did not bother fixing perl and python scripts
 
 291    when NO_PERL and NO_PYTHON build-time configuration changed.
 
 292    (merge ca2051d jk/rebuild-perl-scripts-with-no-perl-seting-change later to maint).
 
 294  * The usage string of "git log" command was marked incorrectly for
 
 296    (merge e66dc0c km/log-usage-string-i18n later to maint).
 
 298  * "git for-each-ref" mishandled --format="%(upstream:track)" when a
 
 299    branch is marked to have forked from a non-existing branch.
 
 300    (merge b6160d9 rc/for-each-ref-tracking later to maint).