| Git 2.9 Release Notes |
| ===================== |
| |
| Backward compatibility note |
| --------------------------- |
| |
| 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. |
| |
| "git commit-tree" plumbing command required the user to always sign |
| its result when the user sets the commit.gpgsign configuration |
| variable, which was an ancient mistake, which this release corrects. |
| A script that drives commit-tree, if it relies on this mistake, now |
| needs to read commit.gpgsign and pass the -S option as necessary. |
| |
| |
| Updates since v2.8 |
| ------------------ |
| |
| UI, Workflows & Features |
| |
| * Comes with git-multimail 1.3.1 (in contrib/). |
| |
| * The end-user facing Porcelain level commands like "diff" and "log" |
| now enables the rename detection by default. |
| |
| * The credential.helper configuration variable is cumulative and |
| there is no good way to override it from the command line. As |
| a special case, giving an empty string as its value now serves |
| as the signal to clear the values specified in various files. |
| |
| * 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). |
| |
| * "git clone" learned "--shallow-submodules" option. |
| |
| * HTTP transport clients learned to throw extra HTTP headers at the |
| server, specified via http.extraHeader configuration variable. |
| |
| * Patch output from "git diff" and friends has been tweaked to be |
| more readable by using a blank line as a strong hint that the |
| contents before and after it belong to a logically separate unit. |
| |
| * A new configuration variable core.hooksPath allows customizing |
| where the hook directory is. |
| |
| * An earlier addition of "sanitize_submodule_env" with 14111fc4 (git: |
| submodule honor -c credential.* from command line, 2016-02-29) |
| turned out to be a convoluted no-op; implement what it wanted to do |
| correctly, and stop filtering settings given via "git -c var=val". |
| |
| |
| 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. |
| |
| * A test for tags has been restructured so that more parts of it can |
| easily be run on a platform without a working GnuPG. |
| |
| * 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. |
| |
| * 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. |
| |
| * 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. |
| |
| * The test scripts for "git p4" (but not "git p4" implementation |
| itself) has been updated so that they would work even on a system |
| where the installed version of Python is python 3. |
| (merge 1fb3fb4 ld/p4-test-py3 later to maint). |
| |
| * As nobody maintains our in-tree git.spec.in and distros use their |
| own spec file, we stopped pretending that we support "make rpm". |
| |
| * Move from unsigned char[20] to struct object_id continues. |
| |
| * Update of "git submodule" to move pieces of logic to C continues. |
| |
| * The code for warning_errno/die_errno has been refactored and a new |
| error_errno() reporting helper is introduced. |
| (merge 1da045f nd/error-errno later to maint). |
| |
| * Running tests with '-x' option to trace the individual command |
| executions is a useful way to debug test scripts, but some tests |
| that capture the standard error stream and check what the command |
| said can be broken with the trace output mixed in. When running |
| our tests under "bash", however, we can redirect the trace output |
| to another file descriptor to keep the standard error of programs |
| being tested intact. |
| (merge d88785e jk/test-send-sh-x-trace-elsewhere later to maint). |
| |
| |
| Also contains various documentation updates and code clean-ups. |
| |
| |
| Fixes since v2.8 |
| ---------------- |
| |
| Unless otherwise noted, all the fixes since v2.8 in the maintenance |
| track are contained in this release (see the maintenance releases' |
| 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. |
| |
| * 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. |
| |
| * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work. |
| |
| * Fetching of history by naming a commit object name directly didn't |
| work across remote-curl transport. |
| |
| * A small memory leak in an error codepath has been plugged in xdiff |
| code. |
| |
| * strbuf_getwholeline() did not NUL-terminate the buffer on certain |
| corner cases in its error codepath. |
| |
| * "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 f924b52a 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). |
| |
| * "git rebase -m" could be asked to rebase an entire branch starting |
| from the root, but failed by assuming that there always is a parent |
| commit to the first commit on the branch. |
| (merge 79f4344 bw/rebase-merge-entire-branch later to maint). |
| |
| * Fix a broken "p4 lfs" test. |
| (merge 9e220fe ls/p4-lfs-test-fix-2.7.0 later to maint). |
| |
| * Recent update to Git LFS broke "git p4" by changing the output from |
| its "lfs pointer" subcommand. |
| (merge 82f2567 ls/p4-lfs later to maint). |
| |
| * "git fetch" test t5510 was flaky while running a (forced) automagic |
| garbage collection. |
| (merge bb05510 js/close-packs-before-gc later to maint). |
| |
| * Documentation updates to help contributors setting up Travis CI |
| test for their patches. |
| (merge 0e5d028 ls/travis-submitting-patches later to maint). |
| |
| * Some multi-byte encoding can have a backslash byte as a later part |
| of one letter, which would confuse "highlight" filter used in |
| gitweb. |
| (merge 029f372 sk/gitweb-highlight-encoding later to maint). |
| |
| * "git commit-tree" plumbing command required the user to always sign |
| its result when the user sets the commit.gpgsign configuration |
| variable, which was an ancient mistake. Rework "git rebase" that |
| relied on this mistake so that it reads commit.gpgsign and pass (or |
| not pass) the -S option to "git commit-tree" to keep the end-user |
| expectation the same, while teaching "git commit-tree" to ignore |
| the configuration variable. This will stop requiring the users to |
| sign commit objects used internally as an implementation detail of |
| "git stash". |
| (merge 6694856 jc/commit-tree-ignore-commit-gpgsign later to maint). |
| |
| * "http.cookieFile" configuration variable clearly wants a pathname, |
| but we forgot to treat it as such by e.g. applying tilde expansion. |
| (merge e5a39ad bn/http-cookiefile-config later to maint). |
| |
| * Consolidate description of tilde-expansion that is done to |
| configuration variables that take pathname to a single place. |
| (merge dca83ab jc/config-pathname-type later to maint). |
| |
| * Correct faulty recommendation to use "git submodule deinit ." when |
| de-initialising all submodules, which would result in a strange |
| error message in a pathological corner case. |
| (merge f6a5279 sb/submodule-deinit-all later to maint). |
| |
| * Many 'linkgit:<git documentation page>' references were broken, |
| which are all fixed with this. |
| (merge 1cca17d jc/linkgit-fix later to maint). |
| |
| * "git rerere" can get confused by conflict markers deliberately left |
| by the inner merge step, because they are indistinguishable from |
| the real conflict markers left by the outermost merge which are |
| what the end user and "rerere" need to look at. This was fixed by |
| making the conflict markers left by the inner merges a bit longer. |
| (merge 0f9fd5c jc/ll-merge-internal later to maint). |
| |
| * CI test was taught to build documentation pages. |
| (merge b98712b ls/travis-build-doc later to maint). |
| |
| * "git fsck" learned to catch NUL byte in a commit object as |
| potential error and warn. |
| (merge 6d2d780 jc/fsck-nul-in-commit later to maint). |
| |
| * Portability enhancement for "rebase -i" to help platforms whose |
| shell does not like "for i in <empty>" (which is not POSIX-kosher). |
| (merge 8e98b35 jk/rebase-interative-eval-fix later to maint). |
| |
| * On Windows, .git and optionally any files whose name starts with a |
| dot are now marked as hidden, with a core.hideDotFiles knob to |
| customize this behaviour. |
| (merge ebf31e7 js/windows-dotgit later to maint). |
| |
| * Documentation for "git merge --verify-signatures" has been updated |
| to clarify that the signature of only the commit at the tip is |
| verified. Also the phrasing used for signature and key validity is |
| adjusted to align with that used by OpenPGP. |
| (merge 05a5869 kf/gpg-sig-verification-doc later to maint). |
| |
| * Other minor clean-ups and documentation updates |
| (merge 8b5a3e9 kn/for-each-tag-branch later to maint). |
| (merge 99dab16 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). |
| (merge 376eb60 sb/config-exit-status-list later to maint). |
| (merge 9cea46c ew/doc-split-pack-disables-bitmap later to maint). |
| (merge fa72245 ew/normal-to-e later to maint). |
| (merge 2e39a24 rn/glossary-typofix later to maint). |
| (merge cadfbef sb/clean-test-fix later to maint). |
| (merge 832c0e5 lp/typofixes later to maint). |
| (merge f5ee54a sb/z-is-gnutar-ism later to maint). |
| (merge 2e3926b va/i18n-misc-updates later to maint). |
| (merge f212dcc bn/config-doc-tt-varnames later to maint). |
| (merge f54bea4 nd/remote-plural-ours-plus-theirs later to maint). |
| (merge 2bb0518 ak/t4151-ls-files-could-be-empty later to maint). |
| (merge 4df4313 jc/test-seq later to maint). |
| (merge a75a308 tb/t5601-sed-fix later to maint). |
| (merge 6c1fbe1 va/i18n-remote-comment-to-align later to maint). |
| (merge dee2303 va/mailinfo-doc-typofix later to maint). |