Git v1.8.2.1

The latest maintenance release Git v1.8.2.1 is now available at
the usual places.

The release tarballs are found at:

and their SHA-1 checksums are:

ad9f833e509ba31c83efe336fd3599e89a39394b  git-
bf4abd0e020d24ee47c64760e9fe4372c596d354  git-htmldocs-
6c40ace4682188d0c01b1091b37276151bc77a74  git-manpages-

Also the following public repositories all have a copy of the v1.8.2.1
tag and the maint branch that the tag points at:

url =
url = git://
url =
url = git://
url = git://
url =

Git v1.8.2.1 Release Notes

Fixes since v1.8.2

  • An earlier change to the attribute system introduced at v1.8.1.2 by
    mistake stopped a pattern “dir” (without trailing slash) from
    matching a directory “dir” (it only wanted to allow pattern “dir/”
    to also match).

  • Verification of signed tags were not done correctly when not in C
    or en/US locale.

  • git commit -m “$msg” used to add an extra newline even when
    $msg already ended with one.

  • The “–match=<pattern>” option of “git describe”, when used with
    “–all” to allow refs that are not annotated tags to be used as a
    base of description, did not restrict the output from the command
    to those that match the given pattern.

  • An aliased command spawned from a bare repository that does not say
    it is bare with “core.bare = yes” is treated as non-bare by mistake.

  • When “format-patch” quoted a non-ascii strings on the header files,
    it incorrectly applied rfc2047 and chopped a single character in
    the middle of it.

  • “git archive” reports a failure when asked to create an archive out
    of an empty tree. It would be more intuitive to give an empty
    archive back in such a case.

  • “git tag -f <tag>” always said “Updated tag <tag>” even when
    creating a new tag (i.e. not overwriting nor updating).

  • “git cmd — :(top” was not diagnosed as an invalid syntax, and
    instead the parser kept reading beyond the end of the string.

  • Annotated tags outside refs/tags/ hierarchy were not advertised
    correctly to the ls-remote and fetch with recent version of Git.

  • The code to keep track of what directory names are known to Git on
    platforms with case insensitive filesystems can get confused upon a
    hash collision between these pathnames and looped forever.

  • The logic used by “git diff -M –stat” to shorten the names of
    files before and after a rename did not work correctly when the
    common prefix and suffix between the two filenames overlapped.

  • “git submodule update”, when recursed into sub-submodules, did not
    acccumulate the prefix paths.

  • “git am $maildir/” applied messages in an unexpected order; sort
    filenames read from the maildir/ in a way that is more likely to
    sort messages in the order the writing MUA meant to, by sorting
    numeric segment in numeric order and non-numeric segment in
    alphabetical order.

  • When export-subst is used, “zip” output recorded incorrect
    size of the file.

  • Some platforms and users spell UTF-8 differently; retry with the
    most official “UTF-8” when the system does not understand the
    user-supplied encoding name that are the common alternative
    spellings of UTF-8.

  • “git branch” did not bother to check nonsense command line
    parameters and issue errors in many cases.

  • “git update-index -h” did not do the usual “-h(elp)” thing.

  • perl/ slurped everything in core only to write it
    out to a file descriptor, which was not a very smart thing to do.

  • The SSL peer verification done by “git imap-send” did not ask for
    Server Name Indication (RFC 4366), failing to connect SSL/TLS
    sites that serve multiple hostnames on a single IP.

  • “git index-pack” had a buffer-overflow while preparing an
    informational message when the translated version of it was too

  • Clarify in the documentation “what” gets pushed to “where” when the
    command line to “git push” does not say these explicitly.

  • In “git reflog expire”, REACHABLE bit was not cleared from the
    correct objects.

  • The “–color=<when>” argument to the commands in the diff family
    was described poorly.

  • The arguments given to pre-rebase hook were not documented.

  • The v4 index format was not documented.

  • The “–match=<pattern>” argument “git describe” takes uses glob
    pattern but it wasn’t obvious from the documentation.

  • Some sources failed to compile on systems that lack NI_MAXHOST in
    their system header (e.g. z/OS).

  • Add an example use of “–env-filter” in “filter-branch”

  • “git bundle verify” did not say “records a complete history” for a
    bundle that does not have any prerequisites.

  • In the v1.8.0 era, we changed symbols that do not have to be global
    to file scope static, but a few functions in graph.c were used by
    CGit from sideways bypassing the entry points of the API the
    in-tree users use.

  • “git merge-tree” had a typo in the logic to detect d/f conflicts,
    which caused it to segfault in some cases.

Changes since v1.8.2 are as follows:

Andrew Wong (2):
      setup.c: stop prefix_pathspec() from looping past the end of string
      setup.c: check that the pathspec magic ends with ")"

Antoine Pelisse (3):
      update-index: allow "-h" to also display options
      diff: Fix rename pretty-print when suffix and prefix overlap
      tests: make sure rename pretty print works

Brandon Casey (4):
      t/t7502: compare entire commit message with what was expected
      t7502: demonstrate breakage with a commit message with trailing newlines
      git-commit: only append a newline to -m mesg if necessary
      Documentation/git-commit.txt: rework the --cleanup section

Christian Helmuth (1):
      git-commit doc: describe use of multiple `-m` options

Dan Bornstein (1):
      Correct the docs about GIT_SSH.

David Aguilar (20):
      git-sh-setup: use a lowercase "usage:" string
      git-svn: use a lowercase "usage:" string
      git-relink: use a lowercase "usage:" string
      git-merge-one-file: use a lowercase "usage:" string
      git-archimport: use a lowercase "usage:" string
      git-cvsexportcommit: use a lowercase "usage:" string
      git-cvsimport: use a lowercase "usage:" string
      git-cvsimport: use a lowercase "usage:" string
      contrib/credential: use a lowercase "usage:" string
      contrib/fast-import: use a lowercase "usage:" string
      contrib/fast-import/ fix broken error message
      contrib/fast-import/ use spaces instead of tabs
      contrib/examples: use a lowercase "usage:" string
      contrib/hooks/setgitperms.perl: use a lowercase "usage:" string
      templates/hooks--update.sample: use a lowercase "usage:" string
      Documentation/user-manual.txt: use a lowercase "usage:" string
      git-svn: use a lowercase "usage:" string
      tests: use a lowercase "usage:" string
      contrib/examples/git-remote.perl: use a lowercase "usage:" string
      contrib/mw-to-git/t/ use a lowercase "usage:" string

David Michael (1):
      git-compat-util.h: Provide missing netdb.h definitions

Greg Price (2):
      Fix ".git/refs" stragglers
      describe: Document --match pattern format

Jeff King (23):
      utf8: accept alternate spellings of UTF-8
      mailsplit: sort maildir filenames more cleverly
      cache.h: drop LOCAL_REPO_ENV_SIZE
      environment: add GIT_PREFIX to local_repo_env
      setup: suppress implicit "." work-tree for bare repos
      test-lib: factor out $GIT_UNZIP setup
      archive: handle commits with an empty tree
      upload-pack: drop lookup-before-parse optimization
      upload-pack: make sure "want" objects are parsed
      upload-pack: load non-tip "want" objects from disk
      avoid segfaults on parse_object failure
      use parse_object_or_die instead of die("bad object")
      pack-refs: write peeled entry for non-tags
      index-pack: always zero-initialize object_entry list
      fast-import: use pointer-to-pointer to keep list tail
      drop some obsolete "x = x" compiler warning hacks
      transport: drop "int cmp = cmp" hack
      run-command: always set failed_errno in start_command
      fast-import: clarify "inline" logic in file_change_m
      wt-status: fix possible use of uninitialized variable
      dir.c::match_pathname(): adjust patternlen when shifting pattern
      dir.c::match_pathname(): pay attention to the length of string parameters
      t: check that a pattern without trailing slash matches a directory

Johannes Sixt (1):
      t2003: work around path mangling issue on Windows

John Keeping (4):
      Revert "graph.c: mark private file-scope symbols as static"
      t2003: modernize style
      entry: fix filter lookup
      merge-tree: fix typo in merge-tree.c::unresolved

Joshua Clayton (1): fix cat_blob crashes on large files

Junio C Hamano (21):
      imap-send: support Server Name Indication (RFC4366)
      diff-options: unconfuse description of --color
      describe: --match=<pattern> must limit the refs even when used with --all
      reflog: fix typo in "reflog expire" clean-up codepath
      Documentation/git-push: clarify the description of defaults
      git status: document trade-offs in choosing parameters to the -u option
      CodingGuidelines: our documents are in AsciiDoc
      Documentation: merging a tag is a special case
      transport.c: help gcc 4.6.3 users by squelching compiler warning
      Start preparing for
      attr.c::path_matches(): the basename is part of the pathname
      More corrections for
      More fixes for
      attr.c::path_matches(): special case paths that end with a slash
      dir.c::match_basename(): pay attention to the length of string parameters
      Update draft release notes to
      Start preparing for
      Update draft release notes to
      mailmap: update Pasky's address

Kacper Kornet (3):
      rev-parse: clarify documentation of $name@{upstream} syntax
      t1507: Test that branchname@{upstream} is interpreted as branch
      Fix revision walk for commits with the same dates

Karsten Blees (1):
      name-hash.c: fix endless loop with core.ignorecase=true

Kirill Smelkov (1):
      format-patch: RFC 2047 says multi-octet character may not be split

Lukas Fleischer (2):
      bundle: Fix "verify" output if history is complete
      bundle: Add colons to list headings in "verify"

Matthias Krüger (1):
      git help config: s/insn/instruction/

Matthieu Moy (1):
      git-remote-mediawiki: new wiki URL in documentation

Max Nanasy (1):
      diff.c: diff.renamelimit => diff.renameLimit in message

Michael Haggerty (1):
      pack-refs: add fully-peeled trait

Michael J Gruber (5):
      gpg-interface: check good signature in a reliable way
      log-tree: rely upon the check in the gpg_interface
      gpg_interface: allow to request status return
      pretty: parse the gpg status lines rather than the output
      pretty: make %GK output the signing key for signed commits

Mihai Capotă (1):
      git-pull doc: fix grammo ("conflicts" is plural)

Nguyễn Thái Ngọc Duy (7):
      index-format.txt: mention of v4 is missing in some places
      read-cache.c: use INDEX_FORMAT_{LB,UB} in verify_hdr()
      branch: segfault fixes and validation
      update-index: list supported idx versions and their features
      status: advise to consider use of -u when read_directory takes too long
      index-pack: fix buffer overflow caused by translations
      index-pack: protect deepest_delta in multithread code

Phil Hord (1):
      tag: --force does not have to warn when creating tags

Ramkumar Ramachandra (1):
      t4018,7810,7811: remove test_config() redefinition

Ramsay Allan Jones (2):
      fast-import: Fix an gcc -Wuninitialized warning
      cat-file: Fix an gcc -Wuninitialized warning

René Scharfe (4):
      archive-zip: fix compressed size for stored export-subst files
      Makefile: keep LIB_H entries together and sorted
      sha1_name: pass object name length to diagnose_invalid_sha1_path()
      submodule summary: support --summary-limit=<n>

Tadeusz Andrzej Kadłubowski (2):
      git-filter-branch.txt: clarify ident variables usage
      Documentation: filter-branch env-filter example

Thomas Rast (3):
      diff: prevent pprint_rename from underrunning input
      index-pack: guard nr_resolved_deltas reads by lock
      git-tag(1): we tag HEAD by default

Torsten Bögershausen (1):
      remote-helpers/ do not use "grep '\s'"

W. Trevor King (2):
      Documentation/githooks: Explain pre-rebase parameters
      user-manual: Standardize backtick quoting

William Entriken (1):
      submodule update: when using recursion, show full path

Junio C Hamano wrote on 07 Apr 2013