Git v2.36.2 Release Notes
=========================

This release merges up the fixes that appear in v2.30.5, v2.31.4,
v2.32.3, v2.33.4, v2.34.4 and v2.35.4 to address the security
issue CVE-2022-29187; see the release notes for these versions
for details.

Apart from that, this maintenance release is primarily to merge down
updates to the build and CI procedures from the 'master' front, in
order to ensure that we can cut healthy maintenance releases in the
future.  It also contains a handful of small and trivially-correct
bugfixes.

Fixes since v2.36.1
-------------------

 * Fixes real problems noticed by gcc 12 and works around false
   positives.

 * Update URL to the gitk repository.

 * The "--current" option of "git show-branch" should have been made
   incompatible with the "--reflog" mode, but this was not enforced,
   which has been corrected.

 * "git archive --add-file=<path>" picked up the raw permission bits
   from the path and propagated to zip output in some cases, without
   normalization, which has been corrected (tar output did not have
   this issue).

 * A bit of test framework fixes with a few fixes to issues found by
   valgrind.

 * macOS CI jobs have been occasionally flaky due to tentative version
   skew between perforce and the homebrew packager.  Instead of
   failing the whole CI job, just let it skip the p4 tests when this
   happens.

 * The commit summary shown after making a commit is matched to what
   is given in "git status" not to use the break-rewrite heuristics.

 * Avoid problems from interaction between malloc_check and address
   sanitizer.

 * "git rebase --keep-base <upstream> <branch-to-rebase>" computed the
   commit to rebase onto incorrectly, which has been corrected.

 * The path taken by "git multi-pack-index" command from the end user
   was compared with path internally prepared by the tool withut first
   normalizing, which lead to duplicated paths not being noticed,
   which has been corrected.

 * "git clone --origin X" leaked piece of memory that held value read
   from the clone.defaultRemoteName configuration variable, which has
   been plugged.
