“git diff” learned “–function-context” option to show the whole
function as context that was affected by a change.

“git difftool” can be told to skip launching the tool for a path by
answering n to its prompt.

“git fetch” learned to honor transfer.fsckobjects configuration to
validate the objects that were received from the other end, just like
“git receive-pack” (the receiving end of “git push”) does.

“git fetch” makes sure that the set of objects it received from the
other end actually completes the history before updating the refs.
“git receive-pack” (the receiving end of “git push”) learned to do the
same.

“git fetch” learned that fetching/cloning from a regular file on the
filesystem is not necessarily a request to unpack a bundle file; the
file could be “.git” with “gitdir: <path>” in it.

“git for-each-ref” learned “%(contents:subject)”, “%(contents:body)”
and “%(contents:signature)”. The last one is useful for signed tags.

“git grep” used to incorrectly pay attention to .gitignore files
scattered in the directory it was working in even when “–no-index”
option was used. It no longer does this. The “–exclude-standard”
option needs to be given to explicitly activate the ignore
mechanism.

“git grep” learned “–untracked” option, where given patterns are
searched in untracked (but not ignored) files as well as tracked
files in the working tree, so that matches in new but not yet
added files do not get missed.

The recursive merge backend no longer looks for meaningless
existing merges in submodules unless in the outermost merge.

“git submodule clone” does not leak an error message to the UI
level unnecessarily anymore.

“git submodule update” learned to honor “none” as the value for
submodule.<name>.update to specify that the named submodule should
not be checked out by default.

When populating a new submodule directory with “git submodule init”,
the $GIT_DIR metainformation directory for submodules is created inside
$GIT_DIR/modules/<name>/ directory of the superproject and referenced
via the gitfile mechanism. This is to make it possible to switch
between commits in the superproject that has and does not have the
submodule in the tree without re-cloning.

“gitweb” can be told to give custom string at the end of the HTML
HEAD element.

“gitweb” now has its own manual pages.

Also contains other documentation updates and minor code cleanups.

Fixes since v1.7.7

Unless otherwise noted, all fixes in the 1.7.7.X maintenance track are
included in this release.

HTTP transport did not use pushurl correctly, and also did not tell
what host it is trying to authenticate with when asking for
credentials.
(merge deba493 jk/http-auth later to maint).

“git blame” was aborted if started from an uncommitted content and
the path had the textconv filter in effect.
(merge 8518088 ss/blame-textconv-fake-working-tree later to maint).

Adding many refs to the local repository in one go (e.g. “git fetch”
that fetches many tags) and looking up a ref by name in a repository
with too many refs were unnecessarily slow.
(merge 17d68a54d jp/get-ref-dir-unsorted later to maint).

Report from “git commit” on untracked files was confused under
core.ignorecase option.
(merge 395c7356 jk/name-hash-dirent later to maint).

“git merge” did not understand “:/<pattern>” as a way to name a commit.

" "git push" on the receiving end used to call post-receive and post-update
hooks for attempted removal of non-existing refs.
(merge 160b81ed ph/push-to-delete-nothing later to maint).

Help text for “git remote set-url” and “git remote set-branches”
were misspelled.
(merge c49904e fc/remote-seturl-usage-fix later to maint).
(merge 656cdf0 jc/remote-setbranches-usage-fix later to maint).