Sunday, June 26, 2011

Git 1.7.6

* Updates the way content tags are handled in gitweb. Also adds
a UI to choose common timezone for displaying the dates.

* Similar to branch names, tagnames that begin with "-" are now
disallowed.

* Clean-up of the C part of i18n (but not l10n---please wait)
continues.

* The scripting part of the codebase is getting prepared for i18n/l10n.

* Pushing and pulling from a repository with large number of refs that
point to identical commits are optimized by not listing the same commit
during the common ancestor negotiation exchange with the other side.

* Adding a file larger than core.bigfilethreshold (defaults to 1/2 Gig)
using "git add" will send the contents straight to a packfile without
having to hold it and its compressed representation both at the same
time in memory.

* Processes spawned by "[alias] <name> = !process" in the configuration
can inspect GIT_PREFIX environment variable to learn where in the
working tree the original command was invoked.

* A magic pathspec ":/" tells a command that limits its operation to
the current directory when ran from a subdirectory to work on the
entire working tree. In general, ":/path/to/file" would be relative
to the root of the working tree hierarchy.

After "git reset --hard; edit Makefile; cd t/", "git add -u" would
be a no-op, but "git add -u :/" would add the updated contents of
the Makefile at the top level. If you want to name a path in the
current subdirectory whose unusual name begins with ":/", you can
name it by "./:/that/path" or by "\:/that/path".

* "git blame" learned "--abbrev[=<n>]" option to control the minimum
number of hexdigits shown for commit object names.

* "git blame" learned "--line-porcelain" that is less efficient but is
easier to parse.

* Aborting "git commit --interactive" discards updates to the index
made during the interactive session.

* "git commit" learned a "--patch" option to directly jump to the
per-hunk selection UI of the interactive mode.

* "git diff" and its family of commands learned --dirstat=0 to show
directories that contribute less than 0.1% of changes.

* "git diff" and its family of commands learned --dirstat=lines mode to
assess damage to the directory based on number of lines in the patch
output, not based on the similarity numbers.

* "git format-patch" learned "--quiet" option to suppress the output of
the names of generated files.

* "git format-patch" quotes people's names when it has RFC822 special
characters in it, e.g. "Junio C. Hamano" <jch@example.com>. Earlier
it was up to the user to do this when using its output.

* "git submodule update" learned "--force" option to get rid of local
changes in submodules and replace them with the up-to-date version.

* "git status" and friends ignore .gitmodules file while the file is
still in a conflicted state during a merge, to avoid using information
that is not final and possibly corrupt with conflict markers.

Also contains various documentation updates and minor miscellaneous
changes.

Fixes since v1.7.5
------------------

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

* "git config" used to choke with an insanely long line.
(merge ef/maint-strbuf-init later)

* "git diff --quiet" did not work well with --diff-filter.
(merge jk/diff-not-so-quick later)