Merge branch 'sb/config-exit-status-list'
[gitweb.git] / Documentation / RelNotes / 2.9.0.txt
index 6facf57af89c6f9f327d572e821a65691792358c..0d983a597546feebc0ddaaa641caee8a2c31349e 100644 (file)
@@ -8,6 +8,14 @@ The end-user facing Porcelain level commands in the "git diff" and
 "git log" by default enables the rename detection; you can still use
 "diff.renames" configuration variable to disable this.
 
+Merging two branches that have no common ancestor with "git merge" is
+by default forbidden now to prevent creating such an unusual merge by
+mistake.
+
+The output formats of "git log" that indents the commit log message by
+4 spaces now expands HT in the log message by default.  You can use
+the "--no-expand-tabs" option to disable this.
+
 
 Updates since v2.8
 ------------------
@@ -25,23 +33,133 @@ UI, Workflows & Features
  * A new "interactive.diffFilter" configuration can be used to
    customize the diff shown in "git add -i" session.
 
+ * "git p4" now allows P4 author names to be mapped to Git author
+   names.
+
+ * "git rebase -x" can be used without passing "-i" option.
+
+ * "git -c credential.<var>=<value> submodule" can now be used to
+   propagate configuration variables related to credential helper
+   down to the submodules.
+
+ * "git tag" can create an annotated tag without explicitly given an
+   "-a" (or "-s") option (i.e. when a tag message is given).  A new
+   configuration variable, tag.forceSignAnnotated, can be used to tell
+   the command to create signed tag in such a situation.
+
+ * "git merge" used to allow merging two branches that have no common
+   base by default, which led to a brand new history of an existing
+   project created and then get pulled by an unsuspecting maintainer,
+   which allowed an unnecessary parallel history merged into the
+   existing project.  The command has been taught not to allow this by
+   default, with an escape hatch "--allow-unrelated-histories" option
+   to be used in a rare event that merges histories of two projects
+   that started their lives independently.
+
+ * "git pull" has been taught to pass --allow-unrelated-histories
+   option to underlying "git merge".
+
+ * "git apply -v" learned to report paths in the patch that were
+   skipped via --include/--exclude mechanism or being outside the
+   current working directory.
+
+ * Shell completion (in contrib/) updates.
+
+ * The commit object name reported when "rebase -i" stops has been
+   shortened.
+
+ * "git worktree add" can be given "--no-checkout" option to only
+   create an empty worktree without checking out the files.
+
+ * "git mergetools" learned to drive ExamDiff.
+
+ * "git pull --rebase" learned "--[no-]autostash" option, so that
+   the rebase.autostash configuration variable set to true can be
+   overridden from the command line.
+
+ * When "git log" shows the log message indented by 4-spaces, the
+   remainder of a line after a HT does not align in the way the author
+   originally intended.  The command now expands tabs by default in
+   such a case, and allows the users to override it with a new option,
+   "--no-expand-tabs".
+
+ * "git send-email" now uses a more readable timestamps when
+   formulating a message ID.
+
+ * "git rerere" can encounter two or more files with the same conflict
+   signature that have to be resolved in different ways, but there was
+   no way to record these separate resolutions.
+   (merge 890fca8 jc/rerere-multi later to maint).
+
+ * "git p4" learned to record P4 jobs in Git commit that imports from
+   the history in Perforce.
+
+ * "git describe --contains" often made a hard-to-justify choice of
+   tag to give name to a given commit, because it tried to come up
+   with a name with smallest number of hops from a tag, causing an old
+   commit whose close descendant that is recently tagged were not
+   described with respect to an old tag but with a newer tag.  It did
+   not help that its computation of "hop" count was further tweaked to
+   penalize being on a side branch of a merge.  The logic has been
+   updated to favor using the tag with the oldest tagger date, which
+   is a lot easier to explain to the end users: "We describe a commit
+   in terms of the (chronologically) oldest tag that contains the
+   commit."
+   (merge 7550424 js/name-rev-use-oldest-ref later to maint).
+
 
 Performance, Internal Implementation, Development Support etc.
 
  * The embedded args argv-array in the child process is used to build
    the command line to run pack-objects instead of using a separate
    array of strings.
-   (merge 65a3629 mp/upload-pack-use-embedded-args later to maint).
 
  * A test for tags has been restructured so that more parts of it can
    easily be run on a platform without a working GnuPG.
-   (merge 618310a es/test-gpg-tags later to maint).
 
  * The startup_info data, which records if we are working inside a
    repository (among other things), are now uniformly available to Git
    subcommand implementations, and Git avoids attempting to touch
    references when we are not in a repository.
-   (merge 11e6b3f jk/startup-info later to maint).
+
+ * The command line argument parser for "receive-pack" has been
+   rewritten to use parse-options.
+
+ * A major part of "git submodule update" has been ported to C to take
+   advantage of the recently added framework to run download tasks in
+   parallel.
+
+ * Rename bunch of tests on "git clone" for better organization.
+
+ * The tests that involve running httpd leaked the system-wide
+   configuration in /etc/gitconfig to the tested environment.
+
+ * Build updates for MSVC.
+
+ * The repository set-up sequence has been streamlined (the biggest
+   change is that there is no longer git_config_early()), so that we
+   do not attempt to look into refs/* when we know we do not have a
+   Git repository.
+
+ * Code restructuring around the "refs" area to prepare for pluggable
+   refs backends.
+
+ * Sources to many test helper binaries (and the generated helpers)
+   have been moved to t/helper/ subdirectory to reduce clutter at the
+   top level of the tree.
+
+   Note that this can break your tests if you check out revisions
+   across the merge boundary of this topic, e0b58519 (Merge branch
+   'nd/test-helpers', 2016-04-29), as bin-wrappers/test-* are not
+   rebuilt to point the underlying executables.  For now, "make
+   distclean" is your friend.
+
+ * Unify internal logic between "git tag -v" and "git verify-tag"
+   commands by making one directly call into the other.
+   (merge bef234b st/verify-tag later to maint).
+
+ * "merge-recursive" strategy incorrectly checked if a path that is
+   involved in its internal merge exists in the working tree.
 
 
 Also contains various documentation updates and code clean-ups.
@@ -57,28 +175,152 @@ notes for details).
  * "git config --get-urlmatch", unlike other variants of the "git
    config --get" family, did not signal error with its exit status
    when there was no matching configuration.
-   (merge 24990b2 jk/config-get-urlmatch later to maint).
 
  * The "--local-env-vars" and "--resolve-git-dir" options of "git
    rev-parse" failed to work outside a repository when the command's
    option parsing was rewritten in 1.8.5 era.
-   (merge fc7d47f jk/rev-parse-local-env-vars later to maint).
 
  * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.
-   (merge 0e94242 jc/maint-index-pack-keep later to maint).
 
  * Fetching of history by naming a commit object name directly didn't
    work across remote-curl transport.
-   (merge 754ecb1 gf/fetch-pack-direct-object-fetch later to maint).
 
  * A small memory leak in an error codepath has been plugged in xdiff
    code.
-   (merge 87f1625 rj/xdiff-prepare-plug-leak-on-error-codepath later to maint).
 
  * strbuf_getwholeline() did not NUL-terminate the buffer on certain
    corner cases in its error codepath.
-   (merge b709043 jk/getwholeline-getdelim-empty later to maint).
+
+ * "git mergetool" did not work well with conflicts that both sides
+   deleted.
+
+ * "git send-email" had trouble parsing alias file in mailrc format
+   when lines in it had trailing whitespaces on them.
+
+ * When "git merge --squash" stopped due to conflict, the concluding
+   "git commit" failed to read in the SQUASH_MSG that shows the log
+   messages from all the squashed commits.
+
+ * "git merge FETCH_HEAD" dereferenced NULL pointer when merging
+   nothing into an unborn history (which is arguably unusual usage,
+   which perhaps was the reason why nobody noticed it).
+
+ * When "git worktree" feature is in use, "git branch -d" allowed
+   deletion of a branch that is checked out in another worktree,
+   which was wrong.
+
+ * When "git worktree" feature is in use, "git branch -m" renamed a
+   branch that is checked out in another worktree without adjusting
+   the HEAD symbolic ref for the worktree.
+
+ * "git diff -M" used to work better when two originally identical
+   files A and B got renamed to X/A and X/B by pairing A to X/A and B
+   to X/B, but this was broken in the 2.0 timeframe.
+
+ * "git send-pack --all <there>" was broken when its command line
+   option parsing was written in the 2.6 timeframe.
+
+ * "git format-patch --help" showed `-s` and `--no-patch` as if these
+   are valid options to the command.  We already hide `--patch` option
+   from the documentation, because format-patch is about showing the
+   diff, and the documentation now hides these options as well.
+
+ * When running "git blame $path" with unnormalized data in the index
+   for the path, the data in the working tree was blamed, even though
+   "git add" would not have changed what is already in the index, due
+   to "safe crlf" that disables the line-end conversion.  It has been
+   corrected.
+
+ * A change back in version 2.7 to "git branch" broke display of a
+   symbolic ref in a non-standard place in the refs/ hierarchy (we
+   expect symbolic refs to appear in refs/remotes/*/HEAD to point at
+   the primary branch the remote has, and as .git/HEAD to point at the
+   branch we locally checked out).
+
+ * A partial rewrite of "git submodule" in the 2.7 timeframe changed
+   the way the gitdir: pointer in the submodules point at the real
+   repository location to use absolute paths by accident.  This has
+   been corrected.
+
+ * "git commit" misbehaved in a few minor ways when an empty message
+   is given via -m '', all of which has been corrected.
+
+ * Support for CRAM-MD5 authentication method in "git imap-send" did
+   not work well.
+
+ * Upcoming OpenSSL 1.1.0 will break compilation b updating a few APIs
+   we use in imap-send, which has been adjusted for the change.
+   (merge 1245c74 ky/imap-send-openssl-1.1.0 later to maint).
+
+ * The socks5:// proxy support added back in 2.6.4 days was not aware
+   that socks5h:// proxies behave differently.
+
+ * "git config" had a codepath that tried to pass a NULL to
+   printf("%s"), which nobody seems to have noticed.
+
+ * On Cygwin, object creation uses the "create a temporary and then
+   rename it to the final name" pattern, not "create a temporary,
+   hardlink it to the final name and then unlink the temporary"
+   pattern.
+
+   This is necessary to use Git on Windows shared directories, and is
+   already enabled for the MinGW and plain Windows builds.  It also
+   has been used in Cygwin packaged versions of Git for quite a while.
+   See http://thread.gmane.org/gmane.comp.version-control.git/291853
+
+ * "merge-octopus" strategy did not ensure that the index is clean
+   when merge begins.
+
+ * When "git merge" notices that the merge can be resolved purely at
+   the tree level (without having to merge blobs) and the resulting
+   tree happens to already exist in the object store, it forgot to
+   update the index, which lead to an inconsistent state for later
+   operations.
+
+ * "git submodule" reports the paths of submodules the command
+   recurses into, but this was incorrect when the command was not run
+   from the root level of the superproject.
+   (merge 2ab5660 sb/submodule-path-misc-bugs later to maint).
+
+ * The "user.useConfigOnly" configuration variable makes it an error
+   if users do not explicitly set user.name and user.email.  However,
+   its check was not done early enough and allowed another error to
+   trigger, reporting that the default value we guessed from the
+   system setting was unusable.  This was a suboptimal end-user
+   experience as we want the users to set user.name/user.email without
+   relying on the auto-detection at all.
+   (merge d3c06c1 da/user-useconfigonly later to maint).
+
+ * "git mv old new" did not adjust the path for a submodule that lives
+   as a subdirectory inside old/ directory correctly.
+   (merge a127331 sb/mv-submodule-fix later to maint).
+
+ * "git replace -e" did not honour "core.editor" configuration.
+   (merge 36b1437 js/replace-edit-use-editor-configuration later to maint).
+
+ * "git push" from a corrupt repository that attempts to push a large
+   number of refs deadlocked; the thread to relay rejection notices
+   for these ref updates blocked on writing them to the main thread,
+   after the main thread at the receiving end notices that the push
+   failed and decides not to read these notices and return a failure.
+   (merge c4b2751 jk/push-client-deadlock-fix later to maint).
+
+ * mmap emulation on Windows has been optimized and work better without
+   consuming paging store when not needed.
+   (merge d5425d1 js/win32-mmap later to maint).
+
+ * A question by "git send-email" to ask the identity of the sender
+   has been updated.
+   (merge 0d6b21e jd/send-email-to-whom later to maint).
+
+ * UI consistency improvements for "git mergetool".
+   (merge cce076e nf/mergetool-prompt later to maint).
 
  * Other minor clean-ups and documentation updates
-   (merge aed7480 mm/lockfile-error-message later to maint).
-   (merge bfee614 jc/index-pack later to maint).
+   (merge 8b5a3e9 kn/for-each-tag-branch later to maint).
+   (merge 9c60d9f sb/misc-cleanups later to maint).
+   (merge 7a6a44c cc/apply later to maint).
+   (merge 6594883 nd/remove-unused later to maint).
+   (merge 0ff7410 sg/test-lib-simplify-expr-away later to maint).
+   (merge 060e776 jk/fix-attribute-macro-in-2.5 later to maint).
+   (merge d16df0c rt/string-list-lookup-cleanup later to maint).